[Parley-svn] r1076 - / trunk/root/static/yui trunk/root/static/yui/animation trunk/root/static/yui/assets/skins/sam trunk/root/static/yui/autocomplete trunk/root/static/yui/autocomplete/assets trunk/root/static/yui/autocomplete/assets/skins/sam trunk/root/static/yui/base trunk/root/static/yui/button trunk/root/static/yui/button/assets trunk/root/static/yui/button/assets/skins/sam trunk/root/static/yui/calendar trunk/root/static/yui/calendar/assets trunk/root/static/yui/calendar/assets/skins/sam trunk/root/static/yui/carousel trunk/root/static/yui/carousel/assets trunk/root/static/yui/carousel/assets/skins/sam trunk/root/static/yui/charts trunk/root/static/yui/charts/assets trunk/root/static/yui/colorpicker trunk/root/static/yui/colorpicker/assets trunk/root/static/yui/colorpicker/assets/skins/sam trunk/root/static/yui/connection trunk/root/static/yui/container trunk/root/static/yui/container/assets trunk/root/static/yui/container/assets/skins/sam trunk/root/static/yui/cookie tru! nk/root/static/yui/datasource trunk/root/static/yui/datatable trunk/root/static/yui/datatable/assets trunk/root/static/yui/datatable/assets/skins/sam trunk/root/static/yui/dom trunk/root/static/yui/dragdrop trunk/root/static/yui/editor trunk/root/static/yui/editor/assets trunk/root/static/yui/editor/assets/skins/sam trunk/root/static/yui/element trunk/root/static/yui/event trunk/root/static/yui/fonts trunk/root/static/yui/get trunk/root/static/yui/grids trunk/root/static/yui/history trunk/root/static/yui/imagecropper trunk/root/static/yui/imagecropper/assets trunk/root/static/yui/imagecropper/assets/skins/sam trunk/root/static/yui/imageloader trunk/root/static/yui/json trunk/root/static/yui/layout trunk/root/static/yui/layout/assets trunk/root/static/yui/layout/assets/skins/sam trunk/root/static/yui/logger trunk/root/static/yui/logger/assets trunk/root/static/yui/logger/assets/skins/sam trunk/root/static/yui/menu trunk/root/static/yui/menu/assets trunk/root/static/yui/menu/! assets/skins/sam trunk/root/static/yui/paginator trunk/root/st! atic/yui

chiselwright at BerliOS chiselwright at mail.berlios.de
Sun Apr 26 17:13:01 CEST 2009


Author: chiselwright
Date: 2009-04-26 17:11:36 +0200 (Sun, 26 Apr 2009)
New Revision: 1076

Added:
   trunk/root/static/yui/assets/skins/sam/ajax-loader.gif
   trunk/root/static/yui/assets/skins/sam/bg-h.gif
   trunk/root/static/yui/assets/skins/sam/bg-v.gif
   trunk/root/static/yui/carousel/assets/skins/sam/ajax-loader.gif
   trunk/root/static/yui/carousel/carousel-debug.js
   trunk/root/static/yui/carousel/carousel-min.js
   trunk/root/static/yui/carousel/carousel.js
   trunk/root/static/yui/charts/charts-debug.js
   trunk/root/static/yui/charts/charts-min.js
   trunk/root/static/yui/charts/charts.js
   trunk/root/static/yui/element/element-debug.js
   trunk/root/static/yui/element/element-min.js
   trunk/root/static/yui/element/element.js
   trunk/root/static/yui/imagecropper/imagecropper-debug.js
   trunk/root/static/yui/imagecropper/imagecropper-min.js
   trunk/root/static/yui/imagecropper/imagecropper.js
   trunk/root/static/yui/profilerviewer/assets/profilerviewer-core.css
   trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer-skin.css
   trunk/root/static/yui/profilerviewer/profilerviewer-debug.js
   trunk/root/static/yui/profilerviewer/profilerviewer-min.js
   trunk/root/static/yui/profilerviewer/profilerviewer.js
   trunk/root/static/yui/selector/selector-debug.js
   trunk/root/static/yui/selector/selector-min.js
   trunk/root/static/yui/selector/selector.js
   trunk/root/static/yui/slider/assets/skins/sam/bg-h.gif
   trunk/root/static/yui/slider/assets/skins/sam/bg-v.gif
   trunk/root/static/yui/slider/assets/slider-skin.css
   trunk/root/static/yui/stylesheet/
   trunk/root/static/yui/stylesheet/stylesheet-debug.js
   trunk/root/static/yui/stylesheet/stylesheet-min.js
   trunk/root/static/yui/stylesheet/stylesheet.js
   trunk/root/static/yui/treeview/assets/check0.gif
   trunk/root/static/yui/treeview/assets/check1.gif
   trunk/root/static/yui/treeview/assets/check2.gif
   trunk/root/static/yui/treeview/assets/loading.gif
   trunk/root/static/yui/treeview/assets/treeview-skin.css
   trunk/root/static/yui/treeview/assets/treeview-sprite.gif
   trunk/root/static/yui/uploader/uploader-debug.js
   trunk/root/static/yui/uploader/uploader-min.js
   trunk/root/static/yui/uploader/uploader.js
Removed:
   trunk/root/static/yui/animation/README
   trunk/root/static/yui/autocomplete/README
   trunk/root/static/yui/base/README
   trunk/root/static/yui/button/README
   trunk/root/static/yui/calendar/README
   trunk/root/static/yui/carousel/README
   trunk/root/static/yui/carousel/carousel-beta-debug.js
   trunk/root/static/yui/carousel/carousel-beta-min.js
   trunk/root/static/yui/carousel/carousel-beta.js
   trunk/root/static/yui/charts/README
   trunk/root/static/yui/charts/charts-experimental-debug.js
   trunk/root/static/yui/charts/charts-experimental-min.js
   trunk/root/static/yui/charts/charts-experimental.js
   trunk/root/static/yui/colorpicker/README
   trunk/root/static/yui/connection/README
   trunk/root/static/yui/container/README
   trunk/root/static/yui/cookie/README
   trunk/root/static/yui/datasource/README
   trunk/root/static/yui/datatable/README
   trunk/root/static/yui/dom/README
   trunk/root/static/yui/dragdrop/README
   trunk/root/static/yui/editor/README
   trunk/root/static/yui/element/README
   trunk/root/static/yui/element/element-beta-debug.js
   trunk/root/static/yui/element/element-beta-min.js
   trunk/root/static/yui/element/element-beta.js
   trunk/root/static/yui/event/README
   trunk/root/static/yui/fonts/README
   trunk/root/static/yui/get/README
   trunk/root/static/yui/grids/README
   trunk/root/static/yui/history/README
   trunk/root/static/yui/imagecropper/README
   trunk/root/static/yui/imagecropper/imagecropper-beta-debug.js
   trunk/root/static/yui/imagecropper/imagecropper-beta-min.js
   trunk/root/static/yui/imagecropper/imagecropper-beta.js
   trunk/root/static/yui/imageloader/README
   trunk/root/static/yui/json/README
   trunk/root/static/yui/layout/README
   trunk/root/static/yui/logger/README
   trunk/root/static/yui/menu/README
   trunk/root/static/yui/paginator/README
   trunk/root/static/yui/profiler/README
   trunk/root/static/yui/profilerviewer/README
   trunk/root/static/yui/profilerviewer/profilerviewer-beta-debug.js
   trunk/root/static/yui/profilerviewer/profilerviewer-beta-min.js
   trunk/root/static/yui/profilerviewer/profilerviewer-beta.js
   trunk/root/static/yui/reset-fonts-grids/README
   trunk/root/static/yui/reset-fonts/README
   trunk/root/static/yui/reset/README
   trunk/root/static/yui/resize/README
   trunk/root/static/yui/selector/README
   trunk/root/static/yui/selector/selector-beta-debug.js
   trunk/root/static/yui/selector/selector-beta-min.js
   trunk/root/static/yui/selector/selector-beta.js
   trunk/root/static/yui/slider/README
   trunk/root/static/yui/tabview/README
   trunk/root/static/yui/treeview/README
   trunk/root/static/yui/treeview/assets/sprite-menu.gif
   trunk/root/static/yui/treeview/assets/sprite-orig.gif
   trunk/root/static/yui/treeview/assets/treeview-menu.css
   trunk/root/static/yui/treeview/assets/treeview.css
   trunk/root/static/yui/uploader/README
   trunk/root/static/yui/uploader/uploader-experimental-min.js
   trunk/root/static/yui/uploader/uploader-experimental.js
   trunk/root/static/yui/utilities/README
   trunk/root/static/yui/yahoo-dom-event/README
   trunk/root/static/yui/yahoo/README
   trunk/root/static/yui/yuiloader-dom-event/README
   trunk/root/static/yui/yuiloader/README
   trunk/root/static/yui/yuitest/README
Modified:
   /
   trunk/root/static/yui/animation/animation-debug.js
   trunk/root/static/yui/animation/animation-min.js
   trunk/root/static/yui/animation/animation.js
   trunk/root/static/yui/assets/skins/sam/autocomplete.css
   trunk/root/static/yui/assets/skins/sam/button.css
   trunk/root/static/yui/assets/skins/sam/calendar.css
   trunk/root/static/yui/assets/skins/sam/carousel.css
   trunk/root/static/yui/assets/skins/sam/colorpicker.css
   trunk/root/static/yui/assets/skins/sam/container.css
   trunk/root/static/yui/assets/skins/sam/datatable.css
   trunk/root/static/yui/assets/skins/sam/editor.css
   trunk/root/static/yui/assets/skins/sam/imagecropper.css
   trunk/root/static/yui/assets/skins/sam/layout.css
   trunk/root/static/yui/assets/skins/sam/logger.css
   trunk/root/static/yui/assets/skins/sam/menu.css
   trunk/root/static/yui/assets/skins/sam/paginator.css
   trunk/root/static/yui/assets/skins/sam/profilerviewer.css
   trunk/root/static/yui/assets/skins/sam/resize.css
   trunk/root/static/yui/assets/skins/sam/simpleeditor.css
   trunk/root/static/yui/assets/skins/sam/skin.css
   trunk/root/static/yui/assets/skins/sam/slider.css
   trunk/root/static/yui/assets/skins/sam/tabview.css
   trunk/root/static/yui/assets/skins/sam/treeview.css
   trunk/root/static/yui/assets/skins/sam/yuitest.css
   trunk/root/static/yui/autocomplete/assets/autocomplete-core.css
   trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete-skin.css
   trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete.css
   trunk/root/static/yui/autocomplete/autocomplete-debug.js
   trunk/root/static/yui/autocomplete/autocomplete-min.js
   trunk/root/static/yui/autocomplete/autocomplete.js
   trunk/root/static/yui/base/base-min.css
   trunk/root/static/yui/base/base.css
   trunk/root/static/yui/button/assets/button-core.css
   trunk/root/static/yui/button/assets/skins/sam/button-skin.css
   trunk/root/static/yui/button/assets/skins/sam/button.css
   trunk/root/static/yui/button/button-debug.js
   trunk/root/static/yui/button/button-min.js
   trunk/root/static/yui/button/button.js
   trunk/root/static/yui/calendar/assets/calendar-core.css
   trunk/root/static/yui/calendar/assets/calendar.css
   trunk/root/static/yui/calendar/assets/skins/sam/calendar-skin.css
   trunk/root/static/yui/calendar/assets/skins/sam/calendar.css
   trunk/root/static/yui/calendar/calendar-debug.js
   trunk/root/static/yui/calendar/calendar-min.js
   trunk/root/static/yui/calendar/calendar.js
   trunk/root/static/yui/carousel/assets/carousel-core.css
   trunk/root/static/yui/carousel/assets/skins/sam/carousel-skin.css
   trunk/root/static/yui/carousel/assets/skins/sam/carousel.css
   trunk/root/static/yui/charts/assets/charts.swf
   trunk/root/static/yui/colorpicker/assets/colorpicker-core.css
   trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker-skin.css
   trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker.css
   trunk/root/static/yui/colorpicker/colorpicker-debug.js
   trunk/root/static/yui/colorpicker/colorpicker-min.js
   trunk/root/static/yui/colorpicker/colorpicker.js
   trunk/root/static/yui/connection/connection-debug.js
   trunk/root/static/yui/connection/connection-min.js
   trunk/root/static/yui/connection/connection.js
   trunk/root/static/yui/container/assets/container-core.css
   trunk/root/static/yui/container/assets/container.css
   trunk/root/static/yui/container/assets/skins/sam/container-skin.css
   trunk/root/static/yui/container/assets/skins/sam/container.css
   trunk/root/static/yui/container/container-debug.js
   trunk/root/static/yui/container/container-min.js
   trunk/root/static/yui/container/container.js
   trunk/root/static/yui/container/container_core-debug.js
   trunk/root/static/yui/container/container_core-min.js
   trunk/root/static/yui/container/container_core.js
   trunk/root/static/yui/cookie/cookie-debug.js
   trunk/root/static/yui/cookie/cookie-min.js
   trunk/root/static/yui/cookie/cookie.js
   trunk/root/static/yui/datasource/datasource-debug.js
   trunk/root/static/yui/datasource/datasource-min.js
   trunk/root/static/yui/datasource/datasource.js
   trunk/root/static/yui/datatable/assets/datatable-core.css
   trunk/root/static/yui/datatable/assets/datatable.css
   trunk/root/static/yui/datatable/assets/skins/sam/datatable-skin.css
   trunk/root/static/yui/datatable/assets/skins/sam/datatable.css
   trunk/root/static/yui/datatable/datatable-debug.js
   trunk/root/static/yui/datatable/datatable-min.js
   trunk/root/static/yui/datatable/datatable.js
   trunk/root/static/yui/dom/dom-debug.js
   trunk/root/static/yui/dom/dom-min.js
   trunk/root/static/yui/dom/dom.js
   trunk/root/static/yui/dragdrop/dragdrop-debug.js
   trunk/root/static/yui/dragdrop/dragdrop-min.js
   trunk/root/static/yui/dragdrop/dragdrop.js
   trunk/root/static/yui/editor/assets/editor-core.css
   trunk/root/static/yui/editor/assets/simpleeditor-core.css
   trunk/root/static/yui/editor/assets/skins/sam/editor-skin.css
   trunk/root/static/yui/editor/assets/skins/sam/editor.css
   trunk/root/static/yui/editor/assets/skins/sam/simpleeditor-skin.css
   trunk/root/static/yui/editor/assets/skins/sam/simpleeditor.css
   trunk/root/static/yui/editor/editor-debug.js
   trunk/root/static/yui/editor/editor-min.js
   trunk/root/static/yui/editor/editor.js
   trunk/root/static/yui/editor/simpleeditor-debug.js
   trunk/root/static/yui/editor/simpleeditor-min.js
   trunk/root/static/yui/editor/simpleeditor.js
   trunk/root/static/yui/event/event-debug.js
   trunk/root/static/yui/event/event-min.js
   trunk/root/static/yui/event/event.js
   trunk/root/static/yui/fonts/fonts-min.css
   trunk/root/static/yui/fonts/fonts.css
   trunk/root/static/yui/get/get-debug.js
   trunk/root/static/yui/get/get-min.js
   trunk/root/static/yui/get/get.js
   trunk/root/static/yui/grids/grids-min.css
   trunk/root/static/yui/grids/grids.css
   trunk/root/static/yui/history/history-debug.js
   trunk/root/static/yui/history/history-min.js
   trunk/root/static/yui/history/history.js
   trunk/root/static/yui/imagecropper/assets/imagecropper-core.css
   trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper-skin.css
   trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper.css
   trunk/root/static/yui/imageloader/imageloader-debug.js
   trunk/root/static/yui/imageloader/imageloader-min.js
   trunk/root/static/yui/imageloader/imageloader.js
   trunk/root/static/yui/json/json-debug.js
   trunk/root/static/yui/json/json-min.js
   trunk/root/static/yui/json/json.js
   trunk/root/static/yui/layout/assets/layout-core.css
   trunk/root/static/yui/layout/assets/skins/sam/layout-skin.css
   trunk/root/static/yui/layout/assets/skins/sam/layout.css
   trunk/root/static/yui/layout/layout-debug.js
   trunk/root/static/yui/layout/layout-min.js
   trunk/root/static/yui/layout/layout.js
   trunk/root/static/yui/logger/assets/logger-core.css
   trunk/root/static/yui/logger/assets/logger.css
   trunk/root/static/yui/logger/assets/skins/sam/logger-skin.css
   trunk/root/static/yui/logger/assets/skins/sam/logger.css
   trunk/root/static/yui/logger/logger-debug.js
   trunk/root/static/yui/logger/logger-min.js
   trunk/root/static/yui/logger/logger.js
   trunk/root/static/yui/menu/assets/menu-core.css
   trunk/root/static/yui/menu/assets/menu.css
   trunk/root/static/yui/menu/assets/skins/sam/menu-skin.css
   trunk/root/static/yui/menu/assets/skins/sam/menu.css
   trunk/root/static/yui/menu/menu-debug.js
   trunk/root/static/yui/menu/menu-min.js
   trunk/root/static/yui/menu/menu.js
   trunk/root/static/yui/paginator/assets/paginator-core.css
   trunk/root/static/yui/paginator/assets/skins/sam/paginator-skin.css
   trunk/root/static/yui/paginator/assets/skins/sam/paginator.css
   trunk/root/static/yui/paginator/paginator-debug.js
   trunk/root/static/yui/paginator/paginator-min.js
   trunk/root/static/yui/paginator/paginator.js
   trunk/root/static/yui/profiler/profiler-debug.js
   trunk/root/static/yui/profiler/profiler-min.js
   trunk/root/static/yui/profiler/profiler.js
   trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer.css
   trunk/root/static/yui/reset-fonts-grids/reset-fonts-grids.css
   trunk/root/static/yui/reset-fonts/reset-fonts.css
   trunk/root/static/yui/reset/reset-min.css
   trunk/root/static/yui/reset/reset.css
   trunk/root/static/yui/resize/assets/resize-core.css
   trunk/root/static/yui/resize/assets/skins/sam/resize-skin.css
   trunk/root/static/yui/resize/assets/skins/sam/resize.css
   trunk/root/static/yui/resize/resize-debug.js
   trunk/root/static/yui/resize/resize-min.js
   trunk/root/static/yui/resize/resize.js
   trunk/root/static/yui/slider/assets/skins/sam/slider-skin.css
   trunk/root/static/yui/slider/assets/skins/sam/slider.css
   trunk/root/static/yui/slider/assets/slider-core.css
   trunk/root/static/yui/slider/slider-debug.js
   trunk/root/static/yui/slider/slider-min.js
   trunk/root/static/yui/slider/slider.js
   trunk/root/static/yui/tabview/assets/border_tabs.css
   trunk/root/static/yui/tabview/assets/skin-sam.css
   trunk/root/static/yui/tabview/assets/skins/sam/tabview-skin.css
   trunk/root/static/yui/tabview/assets/skins/sam/tabview.css
   trunk/root/static/yui/tabview/assets/tabview-core.css
   trunk/root/static/yui/tabview/assets/tabview.css
   trunk/root/static/yui/tabview/tabview-debug.js
   trunk/root/static/yui/tabview/tabview-min.js
   trunk/root/static/yui/tabview/tabview.js
   trunk/root/static/yui/treeview/assets/skins/sam/treeview-skin.css
   trunk/root/static/yui/treeview/assets/skins/sam/treeview.css
   trunk/root/static/yui/treeview/assets/treeview-core.css
   trunk/root/static/yui/treeview/treeview-debug.js
   trunk/root/static/yui/treeview/treeview-min.js
   trunk/root/static/yui/treeview/treeview.js
   trunk/root/static/yui/uploader/assets/uploader.swf
   trunk/root/static/yui/uploader/uploader-experimental-debug.js
   trunk/root/static/yui/utilities/utilities.js
   trunk/root/static/yui/yahoo-dom-event/yahoo-dom-event.js
   trunk/root/static/yui/yahoo/yahoo-debug.js
   trunk/root/static/yui/yahoo/yahoo-min.js
   trunk/root/static/yui/yahoo/yahoo.js
   trunk/root/static/yui/yuiloader-dom-event/yuiloader-dom-event.js
   trunk/root/static/yui/yuiloader/yuiloader-debug.js
   trunk/root/static/yui/yuiloader/yuiloader-min.js
   trunk/root/static/yui/yuiloader/yuiloader.js
   trunk/root/static/yui/yuitest/assets/skins/sam/yuitest-skin.css
   trunk/root/static/yui/yuitest/assets/skins/sam/yuitest.css
   trunk/root/static/yui/yuitest/assets/testlogger.css
   trunk/root/static/yui/yuitest/assets/yuitest-core.css
   trunk/root/static/yui/yuitest/yuitest-debug.js
   trunk/root/static/yui/yuitest/yuitest-min.js
   trunk/root/static/yui/yuitest/yuitest.js
   trunk/root/static/yui/yuitest/yuitest_core-debug.js
   trunk/root/static/yui/yuitest/yuitest_core-min.js
   trunk/root/static/yui/yuitest/yuitest_core.js
Log:
 r9380 at wiggin:  chisel | 2009-04-26 16:09:47 +0100
 + upgraded to YUI 2.7.0b



Property changes on: 
___________________________________________________________________
Name: svk:merge
   - 6a361f96-f029-0410-94f8-848cdd0f6ccf:/local/parley:9378
6fba2e3f-c318-0410-85fa-910d1bc53201:/local/parley:5151
c0683b51-46fc-0310-adae-a083e7ee0929:/local/berlios/parley:15762
f1659af6-751b-0410-a472-c93ec2bf8afc:/local/parley:1222
   + 6a361f96-f029-0410-94f8-848cdd0f6ccf:/local/parley:9380
6fba2e3f-c318-0410-85fa-910d1bc53201:/local/parley:5151
c0683b51-46fc-0310-adae-a083e7ee0929:/local/berlios/parley:15762
f1659af6-751b-0410-a472-c93ec2bf8afc:/local/parley:1222

Deleted: trunk/root/static/yui/animation/README
===================================================================
--- trunk/root/static/yui/animation/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/animation/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,71 +0,0 @@
-Animation Release Notes
-
-*** version 2.6.0 ***
-* ColorAnim updated to use getAncestorBy 
-
-*** version 2.5.2 ***
-* no change
-
-*** version 2.5.1 ***
-* no change
-
-*** version 2.5.0 ***
-* replace toString overrides with static NAME property
-
-*** version 2.4.0 ***
-* calling stop() on an non-animated Anim no longer fires onComplete
-
-*** version 2.3.1 ***
-* no change
-
-*** version 2.3.0 ***
-
-* duration of zero now executes 1 frame animation
-* added setEl() method to enable reuse
-* fixed stop() for multiple animations
-
-*** version 2.3.0 ***
-* duration of zero now executes 1 frame animation
-* added setEl() method to enable reuse
-* fixed stop() for multiple animations
-
-*** version 2.2.2 ***
-* no change
-
-*** version 2.2.1 ***
-* no change
-
-*** version 2.2.0 ***
-* Fixed AnimMgr.stop() when called without tween
-
-*** version 0.12.2 ***
-* raised AnimMgr.fps to 1000
-
-*** version 0.12.1 ***
-* minified version no longer strips line breaks
-
-*** version 0.12.0 ***
-* added boolean finish argument to Anim.stop()
-
-*** version 0.11.3 ***
-* no changes
-
-*** version 0.11.1 ***
-* changed "prototype" shorthand to "proto" (workaround firefox < 1.5 scoping
-bug)
-
-*** version 0.11.0 ***
-* ColorAnim subclass added
-* Motion and Scroll now inherit from ColorAnim
-* getDefaultUnit method added
-* defaultUnit and defaultUnits deprecated
-* getDefault and setDefault methods deprecated
-
-*** version 0.10.0 ***
-* Scroll now handles relative ("by") animation correctly
-* Now converts "auto" values of "from" to appropriate initial values
-
-*** version 0.9.0 ***
-* Initial release
-
-

Modified: trunk/root/static/yui/animation/animation-debug.js
===================================================================
--- trunk/root/static/yui/animation/animation-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/animation/animation-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
 
@@ -89,11 +89,16 @@
      * @param {String} unit The unit ('px', '%', etc.) of the value.
      */
     setAttribute: function(attr, val, unit) {
+        var el = this.getEl();
         if ( this.patterns.noNegatives.test(attr) ) {
             val = (val > 0) ? val : 0;
         }
 
-        Y.Dom.setStyle(this.getEl(), attr, val + unit);
+        if ('style' in el) {
+            Y.Dom.setStyle(el, attr, val + unit);
+        } else if (attr in el) {
+            el[attr] = val;
+        }
     },                        
     
     /**
@@ -114,11 +119,15 @@
         var pos = !!( a[3] ); // top or left
         var box = !!( a[2] ); // width or height
         
-        // use offsets for width/height and abs pos top/left
-        if ( box || (Y.Dom.getStyle(el, 'position') == 'absolute' && pos) ) {
-            val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
-        } else { // default to zero for other 'auto'
-            val = 0;
+        if ('style' in el) {
+            // use offsets for width/height and abs pos top/left
+            if ( box || (Y.Dom.getStyle(el, 'position') == 'absolute' && pos) ) {
+                val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
+            } else { // default to zero for other 'auto'
+                val = 0;
+            }
+        } else if (attr in el) {
+            val = el[attr];
         }
 
         return val;
@@ -1382,4 +1391,4 @@
 
     Y.Scroll = Scroll;
 })();
-YAHOO.register("animation", YAHOO.util.Anim, {version: "2.6.0", build: "1321"});
+YAHOO.register("animation", YAHOO.util.Anim, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/animation/animation-min.js
===================================================================
--- trunk/root/static/yui/animation/animation-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/animation/animation-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,E,D){if(this.patterns.noNegatives.test(C)){E=(E>0)?E:0;}B.Dom.setStyle(this.getEl(),C,E+D);},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}return G;},getDefaultUnit!
 :function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=fun!
 ction(){return D;};this.getStartTime=function(){return F;};thi!
 s.runtim
eAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N!
 .toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for!
 (var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=n!
 ull;A=0;
}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=!
 function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];}return null;};B.getAttribute=function(E){var G=this.getEl();
-if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.!
 runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
+(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom.setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0!
 ).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fp!
 s;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(!
 ){return
 E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].!
 unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C==!
 =null){C=setInterval(this.run,this.delay);}};this.stop=functio!
 n(H){if(
!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C!
 [B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
+}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;!
 ++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
 /*
 TERMS OF USE - EASING EQUATIONS
 Open source under the BSD License.
@@ -19,5 +19,5 @@
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
-YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,!
 B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.562!
 5*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,!
 C){if(B<
C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.!
 patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);}else{E.Dom.setXY(H,E.Dom.getXY(H));
-}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0!
 ]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,!
 B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.562!
 5*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,!
 C){if(B<
C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.!
 patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
+}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[th!
 is.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/animation/animation.js
===================================================================
--- trunk/root/static/yui/animation/animation.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/animation/animation.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
 
@@ -88,11 +88,16 @@
      * @param {String} unit The unit ('px', '%', etc.) of the value.
      */
     setAttribute: function(attr, val, unit) {
+        var el = this.getEl();
         if ( this.patterns.noNegatives.test(attr) ) {
             val = (val > 0) ? val : 0;
         }
 
-        Y.Dom.setStyle(this.getEl(), attr, val + unit);
+        if ('style' in el) {
+            Y.Dom.setStyle(el, attr, val + unit);
+        } else if (attr in el) {
+            el[attr] = val;
+        }
     },                        
     
     /**
@@ -113,11 +118,15 @@
         var pos = !!( a[3] ); // top or left
         var box = !!( a[2] ); // width or height
         
-        // use offsets for width/height and abs pos top/left
-        if ( box || (Y.Dom.getStyle(el, 'position') == 'absolute' && pos) ) {
-            val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
-        } else { // default to zero for other 'auto'
-            val = 0;
+        if ('style' in el) {
+            // use offsets for width/height and abs pos top/left
+            if ( box || (Y.Dom.getStyle(el, 'position') == 'absolute' && pos) ) {
+                val = el['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)];
+            } else { // default to zero for other 'auto'
+                val = 0;
+            }
+        } else if (attr in el) {
+            val = el[attr];
         }
 
         return val;
@@ -1378,4 +1387,4 @@
 
     Y.Scroll = Scroll;
 })();
-YAHOO.register("animation", YAHOO.util.Anim, {version: "2.6.0", build: "1321"});
+YAHOO.register("animation", YAHOO.util.Anim, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/assets/skins/sam/ajax-loader.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/assets/skins/sam/ajax-loader.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/root/static/yui/assets/skins/sam/autocomplete.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/autocomplete.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/autocomplete.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}
+.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}

Added: trunk/root/static/yui/assets/skins/sam/bg-h.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/assets/skins/sam/bg-h.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/root/static/yui/assets/skins/sam/bg-v.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/assets/skins/sam/bg-v.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/root/static/yui/assets/skins/sam/button.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/button.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/button.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;*position:relative;*left:-1px;_margin:0;_position:static;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-!
 right:20px;background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700!
 px;}.yui-skin-sam .yui-button-active .first-child{border-color!
 :#7D98B8
;}.yui-skin-sam .yui-button-active button,.yui-skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a{color:#A6A6A6;curso!
 r:default;}.yui-skin-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}
+.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;_margin:0;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-right:20px;background-position:right center;bac!
 kground-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700px;}.yui-skin-sam .yui-button-active .first-chi!
 ld{border-color:#7D98B8;}.yui-skin-sam .yui-button-active butt!
 on,.yui-
skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-menu-button-disab!
 led button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}

Modified: trunk/root/static/yui/assets/skins/sam/calendar.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/calendar.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/calendar.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0px;top:0px;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-in!
 dex:3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #cccccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px;}.yui-skin-sam .yui-calcont!
 ainer.withtitle{padding-top:0;}.yui-skin-sam .yui-calcontainer!
  .calclo
se{background:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-ca!
 lendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #cccccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#0066cc;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#cccccc;color:#a6a6a6;cursor:default;}.yui-skin-sam .yui-calendar td.calce!
 ll.selected{background-color:#fff;color:#000;}.yui-skin-sam .y!
 ui-calen
dar td.calcell.selected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#ccff99;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#99ccff;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#ffcccc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#ccff99;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mas!
 k{background-color:#000;opacity:0.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-!
 cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1p!
 x solid 
#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}
+.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-index:!
 3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #ccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px;}.yui-skin-sam .yui-calcontainer.w!
 ithtitle{padding-top:0;}.yui-skin-sam .yui-calcontainer .calcl!
 ose{back
ground:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-calendar !
 .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #ccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#06c;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#ccc;color:#a6a6a6;cursor:default;}.yui-skin-sam .yui-calendar td.calcell.selected{back!
 ground-color:#fff;color:#000;}.yui-skin-sam .yui-calendar td.c!
 alcell.s
elected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#cf9;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#9cf;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#fcc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#cf9;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opac!
 ity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold;}
+.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1px solid #000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}

Modified: trunk/root/static/yui/assets/skins/sam/carousel.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/carousel.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/carousel.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-carousel{visibility:hidden;overflow:hidden;position:relative;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{b!
 order:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0px -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button{background-position:0px -750px;}.yui-skin-sam span.yui-carousel-first-button-disabled{b!
 ackground-position:0 -1950px;}.yui-skin-sam .yui-carousel-vert!
 ical spa
n.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{float:left;height:19px;list-style:none;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;content:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{background:url(sprite.png) no-repeat 0 -650px;display:block;height:9px;margin:10px 0 0 5px;overflow:hidden;width:9px;}.yui-skin-sam .yui-carousel-nav ul li a em{left:-10000px;position:absolute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected a{background-position:0 -700px;}
+.yui-carousel{visibility:hidden;overflow:hidden;position:relative;text-align:left;zoom:1;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-carousel-min-width .yui-carousel-conte!
 nt{margin:0 auto;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{border:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input,.yui-skin-sam .yui-carousel-button button{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0 -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-ver!
 tical span.yui-carousel-first-button{background-position:0 -75!
 0px;}.yu
i-skin-sam span.yui-carousel-first-button-disabled{background-position:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;height:19px;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul{*margin-left:-170px;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{background:url(sprite.png) no-repeat 0 -650px;cursor:pointer;float:left;height:9px;list-style:none;margin:10px 0 0 5px;overflow:hidden;padding:0;width:9px;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;content:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{left:-10000px;position:abso!
 lute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected{background-position:0 -700px;}.yui-skin-sam .yui-carousel-item-loading{background:url(ajax-loader.gif) no-repeat 50% 50%;position:relative;text-indent:-150px;}

Modified: trunk/root/static/yui/assets/skins/sam/colorpicker.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/colorpicker.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/colorpicker.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0px none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0px none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yu!
 i-picker-mask{position:absolute;z-index:1;top:0px;left:0px;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0px !important;}.yui-picker-controls .bd{height:100px;border-width:0px !important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0}.yui-picker-controls li{padding:2px;list-style:none;margin:0}.yui-picker-controls input{font-size:0.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color!
 :#000;}
+.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yui-pi!
 cker-mask{position:absolute;z-index:1;top:0;left:0;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0!important;}.yui-picker-controls .bd{height:100px;border-width:0!important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.yui-picker-controls li{padding:2px;list-style:none;margin:0;}.yui-picker-controls input{font-size:.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}

Modified: trunk/root/static/yui/assets/skins/sam/container.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/container.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/container.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0 !important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none;}.yui-skin-sam .mask{background-color:#000;op!
 acity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yui-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%;}.yui-skin-sam .yui-panel-container.focused .yui-panel .hd{}.yui-skin-sam .container-close{position:abso!
 lute;top:5px;right:6px;width:25px;height:15px;background:url(s!
 prite.pn
g) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304369;}.yui-skin-sam .yui-dialog .ft span.default button{col!
 or:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0pt -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;!
 padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;b!
 order-wi
dth:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;*filter:alpha(opacity=12);}
+.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel{position:relative;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0!important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-!
 decoration:none;}.yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yui-panel .ft{border-top:solid !
 1px #808080;padding:5px 10px;font-size:77%;}.yui-skin-sam .con!
 tainer-c
lose{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .!
 first-child{border-color:#304369;}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1!
 250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:!
 0;z-inde
x:1;color:#000;padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;border-width:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12);}

Modified: trunk/root/static/yui/assets/skins/sam/datatable.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/datatable.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/datatable.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inher!
 it;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0pt;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red;}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;text-align:left;}.yui-skin-sam .yui-dt-list td{border-righ!
 t:none;}.yui-skin-sam .yui-dt-resizer{width:6px;}.yui-skin-sam!
  .yui-dt
-mask{background-color:#000;opacity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editab!
 le{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000;}.yui-skin-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.yui-dt-odd{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-odd td.yui!
 -dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-!
 color:#D
BEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-l!
 ist tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#!
 FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selec!
 ted,.yui
-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff}.yui-skin-sam .yui-dt-selected{border:1px solid #fff;background-color:#fff;}
+.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam thead .yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none!
 ;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red;}.yui-skin-sam .yui-dt!
  td{margin:0;padding:0;border:none;border-right:1px solid #CBC!
 BCB;text
-align:left;}.yui-skin-sam .yui-dt-list td{border-right:none;}.yui-skin-sam .yui-dt-resizer{width:6px;}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner!
 {background:url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editable{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF;}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000;}.yui-skin-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.yui-dt-odd{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.y!
 ui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-o!
 dd td.yu
i-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#DBEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.!
 yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446CD7;}
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff;}.yui-skin-sam .yui-dt-selected{border:1px solid #ff!
 f;background-color:#fff;}

Modified: trunk/root/static/yui/assets/skins/sam/editor.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/editor.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/editor.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 !
 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#!
 F2F2F2;}
.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;wid!
 th:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yu!
 i-toolbar-container .yui-menu-button .first-child{border-color!
 :#808080
;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-!
 skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.!
 gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuit!
 emlabel{
cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underli!
 ne span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.!
 yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-s!
 kin-sam 
.yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-b!
 ordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-!
 spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-spin
button a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;backg!
 round-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:blo!
 ck;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .!
 yui-edit
or-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui!
 -skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;hei!
 ght:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;o!
 verflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-cont!
 ainer{ba
ckground-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:!
 hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif)!
  no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yu!
 i-button
-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolba!
 r-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{backgroun!
 d-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-conta!
 iner .yu
i-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui!
 -toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-ski!
 n-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-su!
 bcont{pa
dding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*!
 margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-co!
 lor:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-po!
 sition:-20px -60px;background-color:transparent;}

Modified: trunk/root/static/yui/assets/skins/sam/imagecropper.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/imagecropper.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/imagecropper.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-crop{position:relative;}.yui-crop .yui-crop-mask{position:absolute;top:0;left:0;height:100%;width:100%;}.yui-crop .yui-resize{position:absolute;top:10px;left:10px;border:0;}.yui-crop .yui-crop-resize-mask{position:absolute;top:0;left:0;height:100%;width:100%;background-position:-10px -10px;overflow:hidden;}.yui-skin-sam .yui-crop .yui-crop-mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);}.yui-skin-sam .yui-crop .yui-resize{border:1px dashed #fff;}

Modified: trunk/root/static/yui/assets/skins/sam/layout.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/layout.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/layout.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-layout-loading{visibility:hidden;}body.yui-layout{overflow:hidden;position:relative;padding:0;margin:0;}.yui-layout-doc{position:relative;overflow:hidden;padding:0;margin:0;}.yui-layout-unit{height:50px;width:50px;padding:0;margin:0;float:none;z-index:0;}.yui-layout-unit-top{position:absolute;top:0;left:0;width:100%;}.yui-layout-unit-left{position:absolute;top:0;left:0;}.yui-layout-unit-right{position:absolute;top:0;right:0;}.yui-layout-unit-bottom{position:absolute;bottom:0;left:0;width:100%;}.yui-layout-unit-center{position:absolute;top:0;left:0;width:100%;}.yui-layout div.yui-layout-hd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout div.yui-layout-bd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout .yui-layout-noscroll div.yui-layout-bd{overflow:hidden;}.yui-layout .yui-layout-scroll div.yui-layout-bd{overflow:auto;}.yui-layout div.yui-layout-ft{position:absolute;bottom:0;left:0;width:100%;zoom:1;}.yui-layout .yui-layout-unit div.yui-layou!
 t-hd h2{text-align:left;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .close{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse-close{right:25px;}.yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#c0c0c0;display:none;}.yui-layout .yui-layout-clip .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0px;}.yui-layout .yui-layout-wrap{height:100%;width:100%;position:absolute;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy{border:none;font-size:0;margin:0;padding:0;}.yui-skin-sam .yui-layout .yui-resize-resizing .yui-resize-handle{visibility:hidden;}.yui-skin-sam .yui-layout .yui-resize-proxy div{position:absolute;border:1px solid #808080;background-color:#EDF5FF;}.yui-skin!
 -sam .yui-layout .yui-resize .yui-resize-handle-active{}.yui-s!
 kin-sam 
.yui-layout .yui-resize-proxy .yui-layout-handle-l{width:5px;height:100%;top:0;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-r{width:5px;top:0;right:0;height:100%;position:absolute;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-b{width:100%;bottom:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-t{width:100%;top:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-layout-unit-left div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -160px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-left .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -140px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-right div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -200px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-right .collapse{background:tran!
 sparent url(layout_sprite.png) no-repeat -20px -120px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-top div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -220px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-top .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -240px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-bottom div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -260px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-bottom .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -180px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd .close{background:transparent url(layout_sprite.png) no-repeat -20px -100px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-hd{background:url(sprite.png) repeat-x 0 -1400px;border:1!
 px solid #808080;}.yui-skin-sam .yui-layout{background-color:#!
 EDF5FF;}
.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd h2{font-weight:bold;color:#fff;padding:3px;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd{border:1px solid #808080;border-bottom:none;border-top:none;*border-bottom-width:0;*border-top-width:0;background-color:#f2f2f2;text-align:left;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-noft{border-bottom:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-nohd{border-top:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#EDF5FF;display:none;border:1px solid #808080;}.yui-skin-sam .yui-layout div.yui-layout-ft{border:1px solid #808080;border-top:none;*border-top-width:0;background-color:#f2f2f2;}.yui-skin-sam .yui-layout-unit .yui-resize-handle{background-color:transparent;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-han!
 dle-l{left:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-b{right:0;bottom:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-l .yui-layout-resize-knob{position:absolute;height:16px;width:6px;top:45%;left:0px;background:transparent url(layout_sprite.png) no-repeat 0 -5px;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-b .yui-layout-resize-knob{position:absolute;height:6px;width:16px;left:45%;background:transparent url(layout_sprite.png) no-repeat -20px 0;}

Modified: trunk/root/static/yui/assets/skins/sam/logger.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/logger.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/logger.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-log{padding:1em;width:31em;background-color:#AAA;color:#000;border:1px solid black;font-family:monospace;font-size:77%;text-align:left;z-index:9000;}.yui-skin-sam .yui-log-container{position:absolute;top:1em;right:1em;}.yui-skin-sam .yui-log input{margin:0;padding:0;font-family:arial;font-size:100%;font-weight:normal;}.yui-skin-sam .yui-log .yui-log-btns{position:relative;float:right;bottom:.25em;}.yui-skin-sam .yui-log .yui-log-hd{margin-top:1em;padding:.5em;background-color:#575757;}.yui-skin-sam .yui-log .yui-log-hd h4{margin:0;padding:0;font-size:108%;font-weight:bold;color:#FFF;}.yui-skin-sam .yui-log .yui-log-bd{width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto;}.yui-skin-sam .yui-log p{margin:1px;padding:.1em;}.yui-skin-sam .yui-log pre{margin:0;padding:0;}.yui-skin-sam .yui-log pre.yui-log-verbose{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-w!
 ord;}.yui-skin-sam .yui-log .yui-log-ft{margin-top:.5em;}.yui-skin-sam .yui-log .yui-log-ft .yui-log-categoryfilters{}.yui-skin-sam .yui-log .yui-log-ft .yui-log-sourcefilters{width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em;}.yui-skin-sam .yui-log .yui-log-filtergrp{margin-right:.5em;}.yui-skin-sam .yui-log .info{background-color:#A7CC25;}.yui-skin-sam .yui-log .warn{background-color:#F58516;}.yui-skin-sam .yui-log .error{background-color:#E32F0B;}.yui-skin-sam .yui-log .time{background-color:#A6C9D7;}.yui-skin-sam .yui-log .window{background-color:#F2E886;}

Modified: trunk/root/static/yui/assets/skins/sam/menu.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/menu.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/menu.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-selected{border-color:#7D98B8;}.yui-skin-sam .yuime!
 nubarnav .yuimenubaritemlabel-selected{border-left-width:1px;m!
 argin-le
ft:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808!
 080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yuimenuitem-checked{background-image:url(menuitem_ch!
 eckbox.png);background-position:left center;background-repeat:!
 no-repea
t;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}
+.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-overlay.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-se!
 lected{border-color:#7D98B8;}.yui-skin-sam .yuimenubarnav .yui!
 menubari
temlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuime!
 nu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui!
 menuitem-checked{background-image:url(menuitem_checkbox.png);b!
 ackgroun
d-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}

Modified: trunk/root/static/yui/assets/skins/sam/paginator.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/paginator.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/paginator.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-pg-container{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous,.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last,.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-pages,.yui-skin-sam .yui-pg-page{display:inline-block;font-family:arial,helvetica,clean,sans-serif;padding:3px 6px;zoom:1;}.yui-skin-sam .yui-pg-pages{padding:0;}.yui-skin-sam .yui-pg-current{padding:3px 0;}.yui-skin-sam a.yui-pg-first:link,.yui-skin-sam a.yui-pg-first:visited,.yui-skin-sam a.yui-pg-first:active,.yui-skin-sam a.yui-pg-first:hover,.yui-skin-sam a.yui-pg-previous:link,.yui-skin-sam a.yui-pg-previous:visited,.yui-skin-sam a.yui-pg-previous:active,.yui-skin-sam a.yui-pg-previous:hover,.yui-skin-sam a.yui-pg-next:link,.yui-skin-sam a.yui-pg-next:visited,.yui-skin-sam a.yui-pg-next:active,.yui-skin-sam a.yui-pg-next:hover,.yui-skin-sam a.yui-pg-last:link,.yui-skin-sam a.yui-pg-last:visited,.yui-skin-sam a.yui-pg-last:active!
 ,.yui-skin-sam a.yui-pg-last:hover,.yui-skin-sam a.yui-pg-page:link,.yui-skin-sam a.yui-pg-page:visited,.yui-skin-sam a.yui-pg-page:active,.yui-skin-sam a.yui-pg-page:hover{color:#06c;text-decoration:underline;outline:0;}.yui-skin-sam span.yui-pg-first,.yui-skin-sam span.yui-pg-previous,.yui-skin-sam span.yui-pg-next,.yui-skin-sam span.yui-pg-last{color:#a6a6a6;}.yui-skin-sam .yui-pg-page{background-color:#fff;border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;}.yui-skin-sam .yui-pg-current-page{background-color:transparent;border:none;font-weight:bold;padding:3px 6px;}.yui-skin-sam .yui-pg-page{margin-left:1px;margin-right:1px;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous{padding-left:0;}.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last{padding-right:0;}.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-rpp-options{margin-left:1em;margin-right:1em;}

Modified: trunk/root/static/yui/assets/skins/sam/profilerviewer.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/profilerviewer.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/profilerviewer.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-pv{background-color:#4a4a4a;font:arial;position:relative;width:99%;z-index:1000;margin-bottom:1em;overflow:hidden;}.yui-skin-sam .yui-pv .hd{background:url(header_background.png) repeat-x;min-height:30px;overflow:hidden;zoom:1;padding:2px 0;}.yui-skin-sam .yui-pv .hd h4{padding:8px 10px;margin:0;font:bold 14px arial;color:#fff;}.yui-skin-sam .yui-pv .hd a{background:#3f6bc3;font:bold 11px arial;color:#fff;padding:4px;margin:3px 10px 0 0;border:1px solid #3f567d;cursor:pointer;display:block;float:right;}.yui-skin-sam .yui-pv .hd span{display:none;}.yui-skin-sam .yui-pv .hd span.yui-pv-busy{height:18px;width:18px;background:url(wait.gif) no-repeat;overflow:hidden;display:block;float:right;margin:4px 10px 0 0;}.yui-skin-sam .yui-pv .hd:after,.yui-pv .bd:after,.yui-skin-sam .yui-pv-chartlegend dl:after{content:'.';visibility:hidden;clear:left;height:0;display:block;}.yui-skin-sam .yui-pv .bd{position:relative;zoom:1;overflow-x:auto;overflow-y:hidden;}.yui-ski!
 n-sam .yui-pv .yui-pv-table{padding:0 10px;margin:5px 0 10px 0;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td{color:#eeee5c;font:12px arial;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd{background:#929292;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even{background:#58637a;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc{background:#384970;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc{background:#6F6E6E;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th{background-image:none;background:#2E2D2D;}.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner{background:transparent url(asc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner{background:transparent url(desc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a{color:#fff;font:bold 1!
 2px arial;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.y!
 ui-dt-as
c,.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc{background:#333;}.yui-skin-sam .yui-pv-chartcontainer{padding:0 10px;}.yui-skin-sam .yui-pv-chart{height:250px;clear:right;margin:5px 0 0 0;color:#fff;}.yui-skin-sam .yui-pv-chartlegend div{float:right;margin:0 0 0 10px;_width:250px;}.yui-skin-sam .yui-pv-chartlegend dl{border:1px solid #999;padding:.2em 0 .2em .5em;zoom:1;margin:5px 0;}.yui-skin-sam .yui-pv-chartlegend dt{float:left;display:block;height:.7em;width:.7em;padding:0;}.yui-skin-sam .yui-pv-chartlegend dd{float:left;display:block;color:#fff;margin:0 1em 0 .5em;padding:0;font:11px arial;}.yui-skin-sam .yui-pv-minimized{height:35px;}.yui-skin-sam .yui-pv-minimized .bd{top:-3000px;}.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh{display:none;}

Modified: trunk/root/static/yui/assets/skins/sam/resize.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/resize.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/resize.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transparent url( layo!
 ut_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-knob !
 .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resiz!
 e-handle
-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{height:6p!
 x;width:6px;}
+.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;zoom:1;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transpa!
 rent url(layout_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-!
 knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-!
 resize-h
andle-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{heig!
 ht:6px;width:6px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r{right:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b{bottom:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br{right:-8px;bottom:-8px;}

Modified: trunk/root/static/yui/assets/skins/sam/simpleeditor.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/simpleeditor.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/simpleeditor.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 !
 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#!
 F2F2F2;}
.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;wid!
 th:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yu!
 i-toolbar-container .yui-menu-button .first-child{border-color!
 :#808080
;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-!
 skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.!
 gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuit!
 emlabel{
cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underli!
 ne span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.!
 yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-s!
 kin-sam 
.yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-b!
 ordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-!
 spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-spin
button a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;backg!
 round-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:blo!
 ck;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .!
 yui-edit
or-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui!
 -skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;hei!
 ght:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;o!
 verflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-cont!
 ainer{ba
ckground-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:!
 hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif)!
  no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yu!
 i-button
-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolba!
 r-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{backgroun!
 d-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-conta!
 iner .yu
i-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui!
 -toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-ski!
 n-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-su!
 bcont{pa
dding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*!
 margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-co!
 lor:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-po!
 sition:-20px -60px;background-color:transparent;}

Modified: trunk/root/static/yui/assets/skins/sam/skin.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,26 +1,35 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}
-.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;*position:relative;*left:-1px;_margin:0;_position:static;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-!
 right:20px;background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700!
 px;}.yui-skin-sam .yui-button-active .first-child{border-color!
 :#7D98B8
;}.yui-skin-sam .yui-button-active button,.yui-skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a{color:#A6A6A6;curso!
 r:default;}.yui-skin-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}
-.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0px;top:0px;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-in!
 dex:3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #cccccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px;}.yui-skin-sam .yui-calcont!
 ainer.withtitle{padding-top:0;}.yui-skin-sam .yui-calcontainer!
  .calclo
se{background:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-ca!
 lendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #cccccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#0066cc;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#cccccc;color:#a6a6a6;cursor:default;}.yui-skin-sam .yui-calendar td.calce!
 ll.selected{background-color:#fff;color:#000;}.yui-skin-sam .y!
 ui-calen
dar td.calcell.selected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#ccff99;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#99ccff;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#ffcccc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#ccff99;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mas!
 k{background-color:#000;opacity:0.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-!
 cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1p!
 x solid 
#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}
-.yui-carousel{visibility:hidden;overflow:hidden;position:relative;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{b!
 order:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0px -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button{background-position:0px -750px;}.yui-skin-sam span.yui-carousel-first-button-disabled{b!
 ackground-position:0 -1950px;}.yui-skin-sam .yui-carousel-vert!
 ical spa
n.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{float:left;height:19px;list-style:none;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;content:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{background:url(sprite.png) no-repeat 0 -650px;display:block;height:9px;margin:10px 0 0 5px;overflow:hidden;width:9px;}.yui-skin-sam .yui-carousel-nav ul li a em{left:-10000px;position:absolute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected a{background-position:0 -700px;}
-.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0px none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0px none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yu!
 i-picker-mask{position:absolute;z-index:1;top:0px;left:0px;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0px !important;}.yui-picker-controls .bd{height:100px;border-width:0px !important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0}.yui-picker-controls li{padding:2px;list-style:none;margin:0}.yui-picker-controls input{font-size:0.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color!
 :#000;}
-.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0 !important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none;}.yui-skin-sam .mask{background-color:#000;op!
 acity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yui-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%;}.yui-skin-sam .yui-panel-container.focused .yui-panel .hd{}.yui-skin-sam .container-close{position:abso!
 lute;top:5px;right:6px;width:25px;height:15px;background:url(s!
 prite.pn
g) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304369;}.yui-skin-sam .yui-dialog .ft span.default button{col!
 or:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0pt -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;!
 padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;b!
 order-wi
dth:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;*filter:alpha(opacity=12);}
-.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inher!
 it;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0pt;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red;}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;text-align:left;}.yui-skin-sam .yui-dt-list td{border-righ!
 t:none;}.yui-skin-sam .yui-dt-resizer{width:6px;}.yui-skin-sam!
  .yui-dt
-mask{background-color:#000;opacity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editab!
 le{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000;}.yui-skin-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.yui-dt-odd{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-odd td.yui!
 -dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-!
 color:#D
BEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-l!
 ist tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#!
 FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selec!
 ted,.yui
-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff}.yui-skin-sam .yui-dt-selected{border:1px solid #fff;background-color:#fff;}
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 !
 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#!
 F2F2F2;}
.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;wid!
 th:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yu!
 i-toolbar-container .yui-menu-button .first-child{border-color!
 :#808080
;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-!
 skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.!
 gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuit!
 emlabel{
cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underli!
 ne span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.!
 yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-s!
 kin-sam 
.yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-b!
 ordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-!
 spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-spin
button a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;backg!
 round-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:blo!
 ck;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .!
 yui-edit
or-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui!
 -skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;hei!
 ght:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
+.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}
+.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;_margin:0;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-right:20px;background-position:right center;bac!
 kground-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700px;}.yui-skin-sam .yui-button-active .first-chi!
 ld{border-color:#7D98B8;}.yui-skin-sam .yui-button-active butt!
 on,.yui-
skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-menu-button-disab!
 led button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}
+.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-index:!
 3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(sprite.png) repeat-x 0 0;border-bottom:1px solid #ccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px;}.yui-skin-sam .yui-calcontainer.w!
 ithtitle{padding-top:0;}.yui-skin-sam .yui-calcontainer .calcl!
 ose{back
ground:url(sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calweekdayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-calendar !
 .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #ccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#06c;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui-calendar td.calcell.oom{background-color:#ccc;color:#a6a6a6;cursor:default;}.yui-skin-sam .yui-calendar td.calcell.selected{back!
 ground-color:#fff;color:#000;}.yui-skin-sam .yui-calendar td.c!
 alcell.s
elected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#cf9;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#9cf;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#fcc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#cf9;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opac!
 ity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:bold;}
+.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1px solid #000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}
+.yui-carousel{visibility:hidden;overflow:hidden;position:relative;text-align:left;zoom:1;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-carousel-min-width .yui-carousel-conte!
 nt{margin:0 auto;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{border:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input,.yui-skin-sam .yui-carousel-button button{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0 -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-ver!
 tical span.yui-carousel-first-button{background-position:0 -75!
 0px;}.yu
i-skin-sam span.yui-carousel-first-button-disabled{background-position:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;height:19px;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul{*margin-left:-170px;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{background:url(sprite.png) no-repeat 0 -650px;cursor:pointer;float:left;height:9px;list-style:none;margin:10px 0 0 5px;overflow:hidden;padding:0;width:9px;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;content:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{left:-10000px;position:abso!
 lute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected{background-position:0 -700px;}.yui-skin-sam .yui-carousel-item-loading{background:url(ajax-loader.gif) no-repeat 50% 50%;position:relative;text-indent:-150px;}
+.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yui-pi!
 cker-mask{position:absolute;z-index:1;top:0;left:0;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0!important;}.yui-picker-controls .bd{height:100px;border-width:0!important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.yui-picker-controls li{padding:2px;list-style:none;margin:0;}.yui-picker-controls input{font-size:.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}
+.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel{position:relative;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0!important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-!
 decoration:none;}.yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yui-panel .ft{border-top:solid !
 1px #808080;padding:5px 10px;font-size:77%;}.yui-skin-sam .con!
 tainer-c
lose{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .!
 first-child{border-color:#304369;}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 -1!
 250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:!
 0;z-inde
x:1;color:#000;padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;border-width:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12);}
+.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam thead .yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none!
 ;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red;}.yui-skin-sam .yui-dt!
  td{margin:0;padding:0;border:none;border-right:1px solid #CBC!
 BCB;text
-align:left;}.yui-skin-sam .yui-dt-list td{border-right:none;}.yui-skin-sam .yui-dt-resizer{width:6px;}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner!
 {background:url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editable{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF;}.yui-dt-editor .yui-dt-button button:hover{background:url(sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(sprite.png) repeat-x 0 -1700px;color:#000;}.yui-skin-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.yui-dt-odd{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.y!
 ui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-o!
 dd td.yu
i-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#DBEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.!
 yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446CD7;}
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff;}.yui-skin-sam .yui-dt-selected{border:1px solid #ff!
 f;background-color:#fff;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;o!
 verflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-cont!
 ainer{ba
ckground-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:!
 hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif)!
  no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yu!
 i-button
-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolba!
 r-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{backgroun!
 d-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-conta!
 iner .yu
i-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui!
 -toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-ski!
 n-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-su!
 bcont{pa
dding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*!
 margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-co!
 lor:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-po!
 sition:-20px -60px;background-color:transparent;}
 .yui-crop{position:relative;}.yui-crop .yui-crop-mask{position:absolute;top:0;left:0;height:100%;width:100%;}.yui-crop .yui-resize{position:absolute;top:10px;left:10px;border:0;}.yui-crop .yui-crop-resize-mask{position:absolute;top:0;left:0;height:100%;width:100%;background-position:-10px -10px;overflow:hidden;}.yui-skin-sam .yui-crop .yui-crop-mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);}.yui-skin-sam .yui-crop .yui-resize{border:1px dashed #fff;}
 .yui-layout-loading{visibility:hidden;}body.yui-layout{overflow:hidden;position:relative;padding:0;margin:0;}.yui-layout-doc{position:relative;overflow:hidden;padding:0;margin:0;}.yui-layout-unit{height:50px;width:50px;padding:0;margin:0;float:none;z-index:0;}.yui-layout-unit-top{position:absolute;top:0;left:0;width:100%;}.yui-layout-unit-left{position:absolute;top:0;left:0;}.yui-layout-unit-right{position:absolute;top:0;right:0;}.yui-layout-unit-bottom{position:absolute;bottom:0;left:0;width:100%;}.yui-layout-unit-center{position:absolute;top:0;left:0;width:100%;}.yui-layout div.yui-layout-hd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout div.yui-layout-bd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout .yui-layout-noscroll div.yui-layout-bd{overflow:hidden;}.yui-layout .yui-layout-scroll div.yui-layout-bd{overflow:auto;}.yui-layout div.yui-layout-ft{position:absolute;bottom:0;left:0;width:100%;zoom:1;}.yui-layout .yui-layout-unit div.yui-layou!
 t-hd h2{text-align:left;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .close{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse-close{right:25px;}.yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#c0c0c0;display:none;}.yui-layout .yui-layout-clip .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0px;}.yui-layout .yui-layout-wrap{height:100%;width:100%;position:absolute;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy{border:none;font-size:0;margin:0;padding:0;}.yui-skin-sam .yui-layout .yui-resize-resizing .yui-resize-handle{visibility:hidden;}.yui-skin-sam .yui-layout .yui-resize-proxy div{position:absolute;border:1px solid #808080;background-color:#EDF5FF;}.yui-skin!
 -sam .yui-layout .yui-resize .yui-resize-handle-active{}.yui-s!
 kin-sam 
.yui-layout .yui-resize-proxy .yui-layout-handle-l{width:5px;height:100%;top:0;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-r{width:5px;top:0;right:0;height:100%;position:absolute;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-b{width:100%;bottom:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-t{width:100%;top:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-layout-unit-left div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -160px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-left .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -140px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-right div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -200px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-right .collapse{background:tran!
 sparent url(layout_sprite.png) no-repeat -20px -120px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-top div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -220px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-top .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -240px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-bottom div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -260px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-bottom .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -180px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd .close{background:transparent url(layout_sprite.png) no-repeat -20px -100px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-hd{background:url(sprite.png) repeat-x 0 -1400px;border:1!
 px solid #808080;}.yui-skin-sam .yui-layout{background-color:#!
 EDF5FF;}
.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd h2{font-weight:bold;color:#fff;padding:3px;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd{border:1px solid #808080;border-bottom:none;border-top:none;*border-bottom-width:0;*border-top-width:0;background-color:#f2f2f2;text-align:left;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-noft{border-bottom:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-nohd{border-top:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#EDF5FF;display:none;border:1px solid #808080;}.yui-skin-sam .yui-layout div.yui-layout-ft{border:1px solid #808080;border-top:none;*border-top-width:0;background-color:#f2f2f2;}.yui-skin-sam .yui-layout-unit .yui-resize-handle{background-color:transparent;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-han!
 dle-l{left:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-b{right:0;bottom:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-l .yui-layout-resize-knob{position:absolute;height:16px;width:6px;top:45%;left:0px;background:transparent url(layout_sprite.png) no-repeat 0 -5px;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-b .yui-layout-resize-knob{position:absolute;height:6px;width:16px;left:45%;background:transparent url(layout_sprite.png) no-repeat -20px 0;}
 .yui-skin-sam .yui-log{padding:1em;width:31em;background-color:#AAA;color:#000;border:1px solid black;font-family:monospace;font-size:77%;text-align:left;z-index:9000;}.yui-skin-sam .yui-log-container{position:absolute;top:1em;right:1em;}.yui-skin-sam .yui-log input{margin:0;padding:0;font-family:arial;font-size:100%;font-weight:normal;}.yui-skin-sam .yui-log .yui-log-btns{position:relative;float:right;bottom:.25em;}.yui-skin-sam .yui-log .yui-log-hd{margin-top:1em;padding:.5em;background-color:#575757;}.yui-skin-sam .yui-log .yui-log-hd h4{margin:0;padding:0;font-size:108%;font-weight:bold;color:#FFF;}.yui-skin-sam .yui-log .yui-log-bd{width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto;}.yui-skin-sam .yui-log p{margin:1px;padding:.1em;}.yui-skin-sam .yui-log pre{margin:0;padding:0;}.yui-skin-sam .yui-log pre.yui-log-verbose{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-w!
 ord;}.yui-skin-sam .yui-log .yui-log-ft{margin-top:.5em;}.yui-skin-sam .yui-log .yui-log-ft .yui-log-categoryfilters{}.yui-skin-sam .yui-log .yui-log-ft .yui-log-sourcefilters{width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em;}.yui-skin-sam .yui-log .yui-log-filtergrp{margin-right:.5em;}.yui-skin-sam .yui-log .info{background-color:#A7CC25;}.yui-skin-sam .yui-log .warn{background-color:#F58516;}.yui-skin-sam .yui-log .error{background-color:#E32F0B;}.yui-skin-sam .yui-log .time{background-color:#A6C9D7;}.yui-skin-sam .yui-log .window{background-color:#F2E886;}
-.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-selected{border-color:#7D98B8;}.yui-skin-sam .yuime!
 nubarnav .yuimenubaritemlabel-selected{border-left-width:1px;m!
 argin-le
ft:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808!
 080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yuimenuitem-checked{background-image:url(menuitem_ch!
 eckbox.png);background-position:left center;background-repeat:!
 no-repea
t;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}
+.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-overlay.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-se!
 lected{border-color:#7D98B8;}.yui-skin-sam .yuimenubarnav .yui!
 menubari
temlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-sam .yuime!
 nu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui!
 menuitem-checked{background-image:url(menuitem_checkbox.png);b!
 ackgroun
d-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}
 .yui-skin-sam .yui-pg-container{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous,.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last,.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-pages,.yui-skin-sam .yui-pg-page{display:inline-block;font-family:arial,helvetica,clean,sans-serif;padding:3px 6px;zoom:1;}.yui-skin-sam .yui-pg-pages{padding:0;}.yui-skin-sam .yui-pg-current{padding:3px 0;}.yui-skin-sam a.yui-pg-first:link,.yui-skin-sam a.yui-pg-first:visited,.yui-skin-sam a.yui-pg-first:active,.yui-skin-sam a.yui-pg-first:hover,.yui-skin-sam a.yui-pg-previous:link,.yui-skin-sam a.yui-pg-previous:visited,.yui-skin-sam a.yui-pg-previous:active,.yui-skin-sam a.yui-pg-previous:hover,.yui-skin-sam a.yui-pg-next:link,.yui-skin-sam a.yui-pg-next:visited,.yui-skin-sam a.yui-pg-next:active,.yui-skin-sam a.yui-pg-next:hover,.yui-skin-sam a.yui-pg-last:link,.yui-skin-sam a.yui-pg-last:visited,.yui-skin-sam a.yui-pg-last:active!
 ,.yui-skin-sam a.yui-pg-last:hover,.yui-skin-sam a.yui-pg-page:link,.yui-skin-sam a.yui-pg-page:visited,.yui-skin-sam a.yui-pg-page:active,.yui-skin-sam a.yui-pg-page:hover{color:#06c;text-decoration:underline;outline:0;}.yui-skin-sam span.yui-pg-first,.yui-skin-sam span.yui-pg-previous,.yui-skin-sam span.yui-pg-next,.yui-skin-sam span.yui-pg-last{color:#a6a6a6;}.yui-skin-sam .yui-pg-page{background-color:#fff;border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;}.yui-skin-sam .yui-pg-current-page{background-color:transparent;border:none;font-weight:bold;padding:3px 6px;}.yui-skin-sam .yui-pg-page{margin-left:1px;margin-right:1px;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous{padding-left:0;}.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last{padding-right:0;}.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-rpp-options{margin-left:1em;margin-right:1em;}
 .yui-skin-sam .yui-pv{background-color:#4a4a4a;font:arial;position:relative;width:99%;z-index:1000;margin-bottom:1em;overflow:hidden;}.yui-skin-sam .yui-pv .hd{background:url(header_background.png) repeat-x;min-height:30px;overflow:hidden;zoom:1;padding:2px 0;}.yui-skin-sam .yui-pv .hd h4{padding:8px 10px;margin:0;font:bold 14px arial;color:#fff;}.yui-skin-sam .yui-pv .hd a{background:#3f6bc3;font:bold 11px arial;color:#fff;padding:4px;margin:3px 10px 0 0;border:1px solid #3f567d;cursor:pointer;display:block;float:right;}.yui-skin-sam .yui-pv .hd span{display:none;}.yui-skin-sam .yui-pv .hd span.yui-pv-busy{height:18px;width:18px;background:url(wait.gif) no-repeat;overflow:hidden;display:block;float:right;margin:4px 10px 0 0;}.yui-skin-sam .yui-pv .hd:after,.yui-pv .bd:after,.yui-skin-sam .yui-pv-chartlegend dl:after{content:'.';visibility:hidden;clear:left;height:0;display:block;}.yui-skin-sam .yui-pv .bd{position:relative;zoom:1;overflow-x:auto;overflow-y:hidden;}.yui-ski!
 n-sam .yui-pv .yui-pv-table{padding:0 10px;margin:5px 0 10px 0;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td{color:#eeee5c;font:12px arial;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd{background:#929292;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even{background:#58637a;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc{background:#384970;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc{background:#6F6E6E;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th{background-image:none;background:#2E2D2D;}.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner{background:transparent url(asc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner{background:transparent url(desc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a{color:#fff;font:bold 1!
 2px arial;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.y!
 ui-dt-as
c,.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc{background:#333;}.yui-skin-sam .yui-pv-chartcontainer{padding:0 10px;}.yui-skin-sam .yui-pv-chart{height:250px;clear:right;margin:5px 0 0 0;color:#fff;}.yui-skin-sam .yui-pv-chartlegend div{float:right;margin:0 0 0 10px;_width:250px;}.yui-skin-sam .yui-pv-chartlegend dl{border:1px solid #999;padding:.2em 0 .2em .5em;zoom:1;margin:5px 0;}.yui-skin-sam .yui-pv-chartlegend dt{float:left;display:block;height:.7em;width:.7em;padding:0;}.yui-skin-sam .yui-pv-chartlegend dd{float:left;display:block;color:#fff;margin:0 1em 0 .5em;padding:0;font:11px arial;}.yui-skin-sam .yui-pv-minimized{height:35px;}.yui-skin-sam .yui-pv-minimized .bd{top:-3000px;}.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh{display:none;}
-.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transparent url( layo!
 ut_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-knob !
 .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resiz!
 e-handle
-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{height:6p!
 x;width:6px;}
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;overflow:hidden;margin:0 !
 .25em;}.yui-skin-sam .yui-toolbar-container{background-color:#!
 F2F2F2;}
.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;wid!
 th:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yu!
 i-toolbar-container .yui-menu-button .first-child{border-color!
 :#808080
;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-!
 skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.!
 gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuit!
 emlabel{
cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underli!
 ne span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.!
 yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-s!
 kin-sam 
.yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-b!
 ordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-!
 spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-spin
button a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;backg!
 round-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:blo!
 ck;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .!
 yui-edit
or-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui!
 -skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;hei!
 ght:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
-.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(../../bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(../../bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}
-.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 0.5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 0.5em;}.yui-navset .yui-content .yui-hidden{display:none;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content{zoom:1;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom!
 :1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto;}.yui-skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-na!
 vset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;Xp!
 osition:
relative;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 0.16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 0.16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:0.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a!
 :hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:0.35em 0.75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:0.25em 0.5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px;}.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-!
 nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 !
 0.16em;p
adding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px 0.16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 0.16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:0.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yu!
 i-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px 0.16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li a,.yui-skin-sam .yui-navset-bottom .yui-nav li a{}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px;}.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navse!
 t .yui-navset-bottom .yui-content{border:1px solid #808080;bor!
 der-bott
om-color:#243356;}
+.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;zoom:1;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transpa!
 rent url(layout_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-!
 knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-!
 resize-h
andle-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{heig!
 ht:6px;width:6px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r{right:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b{bottom:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br{right:-8px;bottom:-8px;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:33px;o!
 verflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar-cont!
 ainer{ba
ckground-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4px;right:2px;display:block;overflow:!
 hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif)!
  no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yu!
 i-button
-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolba!
 r-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{backgroun!
 d-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-conta!
 iner .yu
i-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui!
 -toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-ski!
 n-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-su!
 bcont{pa
dding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*!
 margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-co!
 lor:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-s!
 kin-sam 
.yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-po!
 sition:-20px -60px;background-color:transparent;}
+.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}
+.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 .5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 .5em;}.yui-navset .yui-content .yui-hidden{position:absolute;left:-999999px;visibility:hidden;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content,.yui-navset .yui-content div{zoom:1;}.yui-navset .yui-content:after{content:'';display:block;clear:both;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .y!
 ui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-nav!
 set-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:aut!
 o;}.yui-
skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 .16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 .16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:!
 hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:.35em .75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-w!
 idth:0 0 0 5px;}.yui-skin-sam .yui-navset-left .yui-nav li,.yu!
 i-skin-s
am .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 .16em;padding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px .16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 .16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.y!
 ui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px .16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px;}
+.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356;}
 .ygtvitem{}.ygtvitem table{margin-bottom:0;border:none;}.ygtvrow td{border:none;padding:0;}.ygtvrow td a{text-decoration:none;}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat;}.ygtvtmh,.ygtvtmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat;}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat;}.ygtvtph,.ygtvtphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat;}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0px no-repeat;}.ygtvlmh,.ygtvlmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat;}.ygtvlp{width:18px;height:22px;cursor:p!
 ointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat;}.ygtvlph,.ygtvlphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat;}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat;}.ygtvblankdepthcell{width:18px;height:22px;}.ygtvchildren{}* html .ygtvchildren{height:2%;}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;cursor:pointer;}.ygtvcontent{cursor:default;}.ygtvspacer{height:22px;width:12px;}.ygtvfocus{background-color:#c0e0e0;border:none;}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0;}.ygtvfocus a,.ygtvrow td a{outline-style:none;}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat;}.ygtvok:hover{b!
 ackground:url(treeview-sprite.gif) 0 -8844px no-repeat;}.ygtvc!
 ancel{wi
dth:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat;}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8866px no-repeat;}.ygtv-label-editor{background-color:#f2f2f2;border:1px solid silver;position:absolute;display:none;overflow:hidden;margin:auto;z-index:9000;}.ygtv-edit-TextNode{width:190px;}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:none;}.ygtv-edit-TextNode .ygtv-button-container{float:right;}.ygtv-edit-TextNode .ygtv-input input{width:140px;}.ygtv-edit-DateNode .ygtvcancel{border:none;}.ygtv-edit-DateNode .ygtvok{display:none;}.ygtv-edit-DateNode .ygtv-button-container{text-align:right;margin:auto;}
 

Modified: trunk/root/static/yui/assets/skins/sam/slider.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/slider.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/slider.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(../../bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(../../bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}
+.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}

Modified: trunk/root/static/yui/assets/skins/sam/tabview.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/tabview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/tabview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 0.5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 0.5em;}.yui-navset .yui-content .yui-hidden{display:none;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content{zoom:1;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom!
 :1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto;}.yui-skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-na!
 vset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;Xp!
 osition:
relative;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 0.16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 0.16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:0.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a!
 :hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:0.35em 0.75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:0.25em 0.5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px;}.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-!
 nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 !
 0.16em;p
adding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px 0.16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 0.16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:0.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yu!
 i-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px 0.16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li a,.yui-skin-sam .yui-navset-bottom .yui-nav li a{}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px;}.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navse!
 t .yui-navset-bottom .yui-content{border:1px solid #808080;bor!
 der-bott
om-color:#243356;}
+.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 .5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 .5em;}.yui-navset .yui-content .yui-hidden{position:absolute;left:-999999px;visibility:hidden;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content,.yui-navset .yui-content div{zoom:1;}.yui-navset .yui-content:after{content:'';display:block;clear:both;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .y!
 ui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-nav!
 set-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:aut!
 o;}.yui-
skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 .16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 .16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:!
 hover{background:#2647a0 url(sprite.png) repeat-x left -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:.35em .75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-w!
 idth:0 0 0 5px;}.yui-skin-sam .yui-navset-left .yui-nav li,.yu!
 i-skin-s
am .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 .16em;padding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px .16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 .16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.y!
 ui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px .16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;bottom:-1px;}
+.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356;}

Modified: trunk/root/static/yui/assets/skins/sam/treeview.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/treeview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/treeview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .ygtvitem{}.ygtvitem table{margin-bottom:0;border:none;}.ygtvrow td{border:none;padding:0;}.ygtvrow td a{text-decoration:none;}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat;}.ygtvtmh,.ygtvtmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat;}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat;}.ygtvtph,.ygtvtphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat;}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0px no-repeat;}.ygtvlmh,.ygtvlmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat;}.ygtvlp{width:18px;height:22px;cursor:p!
 ointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat;}.ygtvlph,.ygtvlphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat;}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat;}.ygtvblankdepthcell{width:18px;height:22px;}.ygtvchildren{}* html .ygtvchildren{height:2%;}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;cursor:pointer;}.ygtvcontent{cursor:default;}.ygtvspacer{height:22px;width:12px;}.ygtvfocus{background-color:#c0e0e0;border:none;}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0;}.ygtvfocus a,.ygtvrow td a{outline-style:none;}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat;}.ygtvok:hover{b!
 ackground:url(treeview-sprite.gif) 0 -8844px no-repeat;}.ygtvc!
 ancel{wi
dth:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat;}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8866px no-repeat;}.ygtv-label-editor{background-color:#f2f2f2;border:1px solid silver;position:absolute;display:none;overflow:hidden;margin:auto;z-index:9000;}.ygtv-edit-TextNode{width:190px;}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:none;}.ygtv-edit-TextNode .ygtv-button-container{float:right;}.ygtv-edit-TextNode .ygtv-input input{width:140px;}.ygtv-edit-DateNode .ygtvcancel{border:none;}.ygtv-edit-DateNode .ygtvok{display:none;}.ygtv-edit-DateNode .ygtv-button-container{text-align:right;margin:auto;}

Modified: trunk/root/static/yui/assets/skins/sam/yuitest.css
===================================================================
--- trunk/root/static/yui/assets/skins/sam/yuitest.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/assets/skins/sam/yuitest.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 

Deleted: trunk/root/static/yui/autocomplete/README
===================================================================
--- trunk/root/static/yui/autocomplete/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,212 +0,0 @@
-AutoComplete Release Notes
-
-*** version 2.6.0 ***
-
-* AutoComplete has a new required dependency on YAHOO.util.DataSource,
-and the class YAHOO.widget.DataSource has been deprecated. As a result,
-the following YAHOO.widget.DataSource properties have been ported to YAHOO.widget.AutoComplete:
-   - queryMatchCase
-   - queryMatchContains
-   - queryMatchSubset
-
-* The following YAHOO.widget.DS_XHR properties have been deprecated in favor of
-the new customizeable YAHOO.widget.AutoComplete method generateRequest:
-   - scriptQueryParam
-   - scriptQueryAppend
-
-* The YAHOO.widget.DS_XHR property responseStripAfter has been deprecated in favor
-of the new customizeable YAHOO.util.DataSource method doBeforeParseData.
-
-* Now always fires either dataReturnEvent or dataErrorEvent upon a DataSource
-response, whether container opens or not due to instance losing focus. 
-
-* Added textboxChangeEvent and containerPopulateEvent Custom Events.
-
-* As a convenience, the formatResult() method now receives a third parameter which
-is the query matching string for the result.
-
-* In order to eliminate certain race conditions with the typeAhead feature, added
-typeAheadDelay of default 0.5.
-
-* Added new method filterResults() for an easily customizeable local string-
-matching algorithm.
-
-* The dataRequestEvent now passes along the request as well as the query string.
- 
-* The style list-style:none has been set in the default CSS.
-
-
-*** version 2.5.2 ***
-
-* Empty responses of TYPE_FLAT no longer open empty container.
-
-* Mac FF no longer submits form on enter-to-select suggestion.
-
-
-
-*** version 2.5.1 ***
-
-* No changes.
-
-
-
-*** version 2.5.0 ***
-
-* Fixed bug where Mac users were not able to input "&" or "(" characters.
-
-
-
-*** version 2.4.0 ***
-
-* Support for YUI JSON Utility.
-
-* The allowBrowserAutocomplete property now supports cases when the user navigates
-away from page via mean other than a form submission.
-
-* Added support for integration with the Get Utility, for proxyless data
-retrieval from dynamically loaded script nodes.
-
-* Typing 'Enter' to select item no longer causes automatic form submission on
-Mac browsers.
-
-
-
-*** version 2.3.1 ***
-
-* AutoComplete no longer throw a JavaScript error due to an invalid or
-non-existent parent container. While a wrapper DIV element is still expected in
-order to enable skinning (see 2.3.0 release note), a lack of such will not
-cause an error.
-
-* When suggestion container is collapsed, Mac users no longer need to type
-Enter twice to submit input.
-
-
-
-*** version 2.3.0 ***
-
-* Applied new skinning model. Please note that in order to enable skinning,
-AutoComplete now expects a wrapper DIV element around the INPUT element and the
-container DIV element, in this fashion:
-
-<div id="myAutoComplete">
-    <input type="text" id="myInput">
-    <div id="myContainer"></div>
-</div>
-
-* The default queryDelay value has been changed to 0.2. In low-latency
-implementations (e.g., when queryDelay is set to 0 against a local
-JavaScript DataSource), typeAhead functionality may experience a race condition
-when retrieving the value of the textbox. To avoid this problem, implementers
-are advised not to set the queryDelay value too low.
-
-* Fixed runtime property value validation.
-
-* Implemented new method doBeforeSendQuery().
-
-* Implemented new method destroy().
-
-* Added support for latest JSON lib http://www.json.org/json.js.
-
-* Fixed forceSelection issues with matched selections and multiple selections.
-
-* No longer create var oAnim in global scope.
-
-* The properties alwaysShowContainer and useShadow should not be enabled together.
-
-* There is a known issue in Firefox where the native browser autocomplete
-attribute cannot be disabled programmatically on input boxes that are in use.
-
-
-
-
-
-**** version 2.2.2 ***
-
-* No changes.
-
-
-
-*** version 2.2.1 ***
-
-* Fixed form submission in Safari bug.
-* Fixed broken DS_JSArray support for minQueryLength=0.
-* Improved type checking with YAHOO.lang.
-
-
-
-*** version 2.2.0 ***
-
-* No changes.
-
-
-
-*** version 0.12.2 ***
-
-* No changes.
-
-
-
-*** version 0.12.1 ***
-
-* No longer trigger typeAhead feature when user is backspacing on input text.
-
-
-
-*** version 0.12.0 ***
-
-* The following constants must be defined as static class properties and are no longer
-available as instance properties:
-
-YAHOO.widget.DataSource.ERROR_DATANULL
-YAHOO.widget.DataSource.ERROR_DATAPARSE
-YAHOO.widget.DS_XHR.TYPE_JSON
-YAHOO.widget.DS_XHR.TYPE_XML
-YAHOO.widget.DS_XHR.TYPE_FLAT
-YAHOO.widget.DS_XHR.ERROR_DATAXHR
-
-* The property minQueryLength now supports zero and negative number values for
-DS_JSFunction and DS_XHR objects, to enable null or empty string queries and to disable
-AutoComplete functionality altogether, respectively.
-
-* Enabling the alwaysShowContainer feature will no longer send containerExpandEvent or
-containerCollapseEvent.
-
-
-
-**** version 0.11.3 ***
-
-* The iFrameSrc property has been deprecated. Implementers no longer need to
-specify an https URL to avoid IE security warnings when working with sites over
-SSL.
-
-
-
-*** version 0.11.0 ***
-
-* The method getListIds() has been deprecated for getListItems(), which returns
-an array of DOM references.
-
-* All classnames have been prefixed with "yui-ac-".
-
-* Container elements should no longer have CSS property "display" set to "none".
-
-* The useIFrame property can now be set after instantiation.
-
-* On some browsers, the unmatchedItemSelectEvent may not be fired properly when
-delimiter characters are defined.
-
-* On some browsers, defining delimiter characters while enabling forceSelection
-may result in unexpected behavior.
-
-
-
-*** version 0.10.0 ***
-
-* Initial release
-
-* In order to enable the useIFrame property, it should be set in the
-constructor.
-
-* On some browsers, defining delimiter characters while enabling forceSelection
-may result in unexpected behavior.

Modified: trunk/root/static/yui/autocomplete/assets/autocomplete-core.css
===================================================================
--- trunk/root/static/yui/autocomplete/assets/autocomplete-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/assets/autocomplete-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-/* This file intentionally left blank */
+/* This file intentionally left blank */

Modified: trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete-skin.css
===================================================================
--- trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,57 +1,57 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-/* styles for entire widget */
-.yui-skin-sam .yui-ac {
-    position:relative;font-family:arial;font-size:100%;
-}
-
-/* styles for input field */
-.yui-skin-sam .yui-ac-input {
-    position:absolute;width:100%;
-}
-
-/* styles for results container */
-.yui-skin-sam .yui-ac-container {
-    position:absolute;top:1.6em;width:100%;
-}
-
-/* styles for header/body/footer wrapper within container */
-.yui-skin-sam .yui-ac-content {
-    position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;
-}
-
-/* styles for container shadow */
-.yui-skin-sam .yui-ac-shadow {
-    position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity: 0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;
-}
-
-/* styles for container iframe */
-.yui-skin-sam .yui-ac iframe {
-    opacity:0;filter: alpha(opacity=0);
-    padding-right:.3em; padding-bottom:.3em; /* Bug 2026798: extend iframe to shim the shadow */
-}
-
-/* styles for results list */
-.yui-skin-sam .yui-ac-content ul{
-    margin:0;padding:0;width:100%;
-}
-
-/* styles for result item */
-.yui-skin-sam .yui-ac-content li {
-    margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;
-    zoom:1; /* For IE to trigger mouse events on LI */
-}
-
-/* styles for prehighlighted result item */
-.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight {
-    background:#B3D4FF;
-}
-
-/* styles for highlighted result item */
-.yui-skin-sam .yui-ac-content li.yui-ac-highlight {
-    background:#426FD9;color:#FFF;
-}
+/* styles for entire widget */
+.yui-skin-sam .yui-ac {
+    position:relative;font-family:arial;font-size:100%;
+}
+
+/* styles for input field */
+.yui-skin-sam .yui-ac-input {
+    position:absolute;width:100%;
+}
+
+/* styles for results container */
+.yui-skin-sam .yui-ac-container {
+    position:absolute;top:1.6em;width:100%;
+}
+
+/* styles for header/body/footer wrapper within container */
+.yui-skin-sam .yui-ac-content {
+    position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;
+}
+
+/* styles for container shadow */
+.yui-skin-sam .yui-ac-shadow {
+    position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity: 0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;
+}
+
+/* styles for container iframe */
+.yui-skin-sam .yui-ac iframe {
+    opacity:0;filter: alpha(opacity=0);
+    padding-right:.3em; padding-bottom:.3em; /* Bug 2026798: extend iframe to shim the shadow */
+}
+
+/* styles for results list */
+.yui-skin-sam .yui-ac-content ul{
+    margin:0;padding:0;width:100%;
+}
+
+/* styles for result item */
+.yui-skin-sam .yui-ac-content li {
+    margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;
+    zoom:1; /* For IE to trigger mouse events on LI */
+}
+
+/* styles for prehighlighted result item */
+.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight {
+    background:#B3D4FF;
+}
+
+/* styles for highlighted result item */
+.yui-skin-sam .yui-ac-content li.yui-ac-highlight {
+    background:#426FD9;color:#FFF;
+}

Modified: trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete.css
===================================================================
--- trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/assets/skins/sam/autocomplete.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:0.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}
+.yui-skin-sam .yui-ac{position:relative;font-family:arial;font-size:100%;}.yui-skin-sam .yui-ac-input{position:absolute;width:100%;}.yui-skin-sam .yui-ac-container{position:absolute;top:1.6em;width:100%;}.yui-skin-sam .yui-ac-content{position:absolute;width:100%;border:1px solid #808080;background:#fff;overflow:hidden;z-index:9050;}.yui-skin-sam .yui-ac-shadow{position:absolute;margin:.3em;width:100%;background:#000;-moz-opacity:.10;opacity:.10;filter:alpha(opacity=10);z-index:9049;}.yui-skin-sam .yui-ac iframe{opacity:0;filter:alpha(opacity=0);padding-right:.3em;padding-bottom:.3em;}.yui-skin-sam .yui-ac-content ul{margin:0;padding:0;width:100%;}.yui-skin-sam .yui-ac-content li{margin:0;padding:2px 5px;cursor:default;white-space:nowrap;list-style:none;zoom:1;}.yui-skin-sam .yui-ac-content li.yui-ac-prehighlight{background:#B3D4FF;}.yui-skin-sam .yui-ac-content li.yui-ac-highlight{background:#426FD9;color:#FFF;}

Modified: trunk/root/static/yui/autocomplete/autocomplete-debug.js
===================================================================
--- trunk/root/static/yui/autocomplete/autocomplete-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/autocomplete-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -482,7 +482,7 @@
 /**
  * Whether or not the input field should be updated with selections.
  *
- * @property supressInputUpdate
+ * @property suppressInputUpdate
  * @type Boolean
  * @default false
  */
@@ -698,6 +698,7 @@
 * 
 * @method generateRequest
 * @param sQuery {String} Query string
+* @return {MIXED} Request
 */
 YAHOO.widget.AutoComplete.prototype.generateRequest = function(sQuery) {
     var dataType = this.dataSource.dataType;
@@ -732,7 +733,10 @@
  * @param sQuery {String} Query string.
  */
 YAHOO.widget.AutoComplete.prototype.sendQuery = function(sQuery) {
-    // Adjust programatically sent queries to look like they input by user
+    // Reset focus for a new interaction
+    this._bFocused = null;
+    
+    // Adjust programatically sent queries to look like they were input by user
     // when delimiters are enabled
     var newQuery = (this.delimChar) ? this._elTextbox.value + sQuery : sQuery;
     this._sendQuery(newQuery);
@@ -803,6 +807,11 @@
  */
 
 YAHOO.widget.AutoComplete.prototype.filterResults = function(sQuery, oFullResponse, oParsedResponse, oCallback) {
+    // If AC has passed a query string value back to itself, grab it
+    if(oCallback && oCallback.argument && oCallback.argument.query) {
+        sQuery = oCallback.argument.query;
+    }
+
     // Only if a query string is available to match against
     if(sQuery && sQuery !== "") {
         // First make a copy of the oParseResponse
@@ -931,7 +940,7 @@
  * Nulls out the entire AutoComplete instance and related objects, removes attached
  * event listeners, and clears out DOM elements inside the container. After
  * calling this method, the instance reference should be expliclitly nulled by
- * implementer, as in myDataTable = null. Use with caution!
+ * implementer, as in myAutoComplete = null. Use with caution!
  *
  * @method destroy
  */
@@ -1044,8 +1053,6 @@
  *
  * @event containerExpandEvent
  * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]} Results array.
  */
 YAHOO.widget.AutoComplete.prototype.containerExpandEvent = null;
 
@@ -1122,6 +1129,7 @@
  *
  * @event selectionEnforceEvent
  * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
+ * @param sClearedValue {String} The cleared value (including delimiters if applicable). 
  */
 YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent = null;
 
@@ -1577,10 +1585,27 @@
 };
 
 /**
+ * Focuses input field.
+ *
+ * @method _focus
+ * @private
+ */
+YAHOO.widget.AutoComplete.prototype._focus = function() {
+    // http://developer.mozilla.org/en/docs/index.php?title=Key-navigable_custom_DHTML_widgets
+    var oSelf = this;
+    setTimeout(function() {
+        try {
+            oSelf._elTextbox.focus();
+        }
+        catch(e) {
+        }
+    },0);
+};
+
+/**
  * Enables interval detection for IME support.
  *
  * @method _enableIntervalDetection
- * @re 
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._enableIntervalDetection = function() {
@@ -1664,44 +1689,12 @@
         return;
     }
     // Delimiter has been enabled
-    var aDelimChar = (this.delimChar) ? this.delimChar : null;
-    if(aDelimChar) {
-        // Loop through all possible delimiters and find the rightmost one in the query
-        // A " " may be a false positive if they are defined as delimiters AND
-        // are used to separate delimited queries
-        var nDelimIndex = -1;
-        for(var i = aDelimChar.length-1; i >= 0; i--) {
-            var nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
-            if(nNewIndex > nDelimIndex) {
-                nDelimIndex = nNewIndex;
-            }
-        }
-        // If we think the last delimiter is a space (" "), make sure it is NOT
-        // a false positive by also checking the char directly before it
-        if(aDelimChar[i] == " ") {
-            for (var j = aDelimChar.length-1; j >= 0; j--) {
-                if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
-                    nDelimIndex--;
-                    break;
-                }
-            }
-        }
-        // A delimiter has been found in the query so extract the latest query from past selections
-        if(nDelimIndex > -1) {
-            var nQueryStart = nDelimIndex + 1;
-            // Trim any white space from the beginning...
-            while(sQuery.charAt(nQueryStart) == " ") {
-                nQueryStart += 1;
-            }
-            // ...and save the rest of the string for later
-            this._sPastSelections = sQuery.substring(0,nQueryStart);
-            // Here is the query itself
-            sQuery = sQuery.substr(nQueryStart);
-        }
-        // No delimiter found in the query, so there are no selections from past queries
-        else {
-            this._sPastSelections = "";
-        }
+    if(this.delimChar) {
+        var extraction = this._extractQuery(sQuery);
+        // Here is the query itself
+        sQuery = extraction.query;
+        // ...and save the rest of the string for later
+        this._sPastSelections = extraction.previous;
     }
 
     // Don't search queries that are too short
@@ -1898,20 +1891,10 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._clearSelection = function() {
-    var sValue = this._elTextbox.value;
-    //TODO: need to check against all delimChars?
-    var sChar = (this.delimChar) ? this.delimChar[0] : null;
-    var nIndex = (sChar) ? sValue.lastIndexOf(sChar, sValue.length-2) : -1;
-    if(nIndex > -1) {
-        this._elTextbox.value = sValue.substring(0,nIndex);
-    }
-    else {
-         this._elTextbox.value = "";
-    }
-    this._sPastSelections = this._elTextbox.value;
-
-    // Fire custom event
-    this.selectionEnforceEvent.fire(this);
+    var extraction = (this.delimChar) ? this._extractQuery(this._elTextbox.value) :
+            {previous:"",query:this._elTextbox.value};
+    this._elTextbox.value = extraction.previous;
+    this.selectionEnforceEvent.fire(this, extraction.query);
     YAHOO.log("Selection enforced", "info", this.toString());
 };
 
@@ -1927,7 +1910,7 @@
 YAHOO.widget.AutoComplete.prototype._textMatchesOption = function() {
     var elMatch = null;
 
-    for(var i = this._nDisplayedItems-1; i >= 0 ; i--) {
+    for(var i=0; i<this._nDisplayedItems; i++) {
         var elListItem = this._elList.childNodes[i];
         var sMatch = ("" + elListItem._sResultMatch).toLowerCase();
         if(sMatch == this._sCurQuery.toLowerCase()) {
@@ -1997,6 +1980,63 @@
 };
 
 /**
+ * Extracts rightmost query from delimited string.
+ *
+ * @method _extractQuery
+ * @param sQuery {String} String to parse
+ * @return {Object} Object literal containing properties "query" and "previous".  
+ * @private
+ */
+YAHOO.widget.AutoComplete.prototype._extractQuery = function(sQuery) {
+    var aDelimChar = this.delimChar,
+        nDelimIndex = -1,
+        nNewIndex, nQueryStart,
+        i = aDelimChar.length-1,
+        sPrevious;
+        
+    // Loop through all possible delimiters and find the rightmost one in the query
+    // A " " may be a false positive if they are defined as delimiters AND
+    // are used to separate delimited queries
+    for(; i >= 0; i--) {
+        nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
+        if(nNewIndex > nDelimIndex) {
+            nDelimIndex = nNewIndex;
+        }
+    }
+    // If we think the last delimiter is a space (" "), make sure it is NOT
+    // a false positive by also checking the char directly before it
+    if(aDelimChar[i] == " ") {
+        for (var j = aDelimChar.length-1; j >= 0; j--) {
+            if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
+                nDelimIndex--;
+                break;
+            }
+        }
+    }
+    // A delimiter has been found in the query so extract the latest query from past selections
+    if(nDelimIndex > -1) {
+        nQueryStart = nDelimIndex + 1;
+        // Trim any white space from the beginning...
+        while(sQuery.charAt(nQueryStart) == " ") {
+            nQueryStart += 1;
+        }
+        // ...and save the rest of the string for later
+        sPrevious = sQuery.substring(0,nQueryStart);
+        // Here is the query itself
+        sQuery = sQuery.substr(nQueryStart);
+    }
+    // No delimiter found in the query, so there are no selections from past queries
+    else {
+        sPrevious = "";
+    }
+    
+    return {
+        previous: sPrevious,
+        query: sQuery
+    };
+};
+
+/**
  * Syncs results container with its helpers.
  *
  * @method _toggleContainerHelpers
@@ -2045,6 +2085,8 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._toggleContainer = function(bShow) {
+    YAHOO.log("Toggling container " + ((bShow) ? "open" : "closed"), "info", this.toString());
+
     var elContainer = this._elContainer;
 
     // If implementer has container always open and it's already open, don't mess with it
@@ -2060,8 +2102,7 @@
         this._sCurQuery = null;
         
         // Container is already closed, so don't bother with changing the UI
-        if(!this._bContainerOpen) {
-            this._elContent.style.display = "none";
+        if(this._elContent.style.display == "none") {
             return;
         }
     }
@@ -2293,8 +2334,8 @@
 YAHOO.widget.AutoComplete.prototype._moveSelection = function(nKeyCode) {
     if(this._bContainerOpen) {
         // Determine current item's id number
-        var elCurListItem = this._elCurListItem;
-        var nCurItemIndex = -1;
+        var elCurListItem = this._elCurListItem,
+            nCurItemIndex = -1;
 
         if(elCurListItem) {
             nCurItemIndex = elCurListItem._nItemIndex;
@@ -2330,12 +2371,13 @@
             return;
         }
         
-        var elNewListItem = this._elList.childNodes[nNewItemIndex];
+        var elNewListItem = this._elList.childNodes[nNewItemIndex],
 
         // Scroll the container if necessary
-        var elContent = this._elContent;
-        var scrollOn = ((YAHOO.util.Dom.getStyle(elContent,"overflow") == "auto") ||
-            (YAHOO.util.Dom.getStyle(elContent,"overflowY") == "auto"));
+            elContent = this._elContent,
+            sOF = YAHOO.util.Dom.getStyle(elContent,"overflow"),
+            sOFY = YAHOO.util.Dom.getStyle(elContent,"overflowY"),
+            scrollOn = ((sOF == "auto") || (sOF == "scroll") || (sOFY == "auto") || (sOFY == "scroll"));
         if(scrollOn && (nNewItemIndex > -1) &&
         (nNewItemIndex < this._nDisplayedItems)) {
             // User is keying down
@@ -2383,60 +2425,6 @@
 /////////////////////////////////////////////////////////////////////////////
 
 /**
- * Handles <li> element mouseover events in the container.
- *
- * @method _onItemMouseover
- * @param v {HTMLEvent} The mouseover event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseover = function(v,oSelf) {
-    if(oSelf.prehighlightClassName) {
-        oSelf._togglePrehighlight(this,"mouseover");
-    }
-    else {
-        oSelf._toggleHighlight(this,"to");
-    }
-
-    oSelf.itemMouseOverEvent.fire(oSelf, this);
-    YAHOO.log("Item moused over", "info", oSelf.toString());
-};*/
-
-/**
- * Handles <li> element mouseout events in the container.
- *
- * @method _onItemMouseout
- * @param v {HTMLEvent} The mouseout event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseout = function(v,oSelf) {
-    if(oSelf.prehighlightClassName) {
-        oSelf._togglePrehighlight(this,"mouseout");
-    }
-    else {
-        oSelf._toggleHighlight(this,"from");
-    }
-
-    oSelf.itemMouseOutEvent.fire(oSelf, this);
-    YAHOO.log("Item moused out", "info", oSelf.toString());
-};*/
-
-/**
- * Handles <li> element click events in the container.
- *
- * @method _onItemMouseclick
- * @param v {HTMLEvent} The click event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseclick = function(v,oSelf) {
-    // In case item has not been moused over
-    oSelf._toggleHighlight(this,"to");
-    oSelf._selectItem(this);
-};*/
-
-/**
  * Handles container mouseover events.
  *
  * @method _onContainerMouseover
@@ -2566,7 +2554,7 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._onContainerScroll = function(v,oSelf) {
-    oSelf._elTextbox.focus();
+    oSelf._focus();
 };
 
 /**
@@ -2782,7 +2770,7 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._onTextboxBlur = function (v,oSelf) {
-    // Don't treat as a blur if it was a selection via mouse click
+    // Is a true blur
     if(!oSelf._bOverContainer || (oSelf._nKeyCode == 9)) {
         // Current query needs to be validated as a selection
         if(!oSelf._bItemSelected) {
@@ -2808,9 +2796,6 @@
             }
         }
 
-        if(oSelf._bContainerOpen) {
-            oSelf._toggleContainer(false);
-        }
         oSelf._clearInterval();
         oSelf._bFocused = false;
         if(oSelf._sInitInputValue !== oSelf._elTextbox.value) {
@@ -2818,7 +2803,13 @@
         }
         oSelf.textboxBlurEvent.fire(oSelf);
         YAHOO.log("Textbox blurred", "info", oSelf.toString());
+
+        oSelf._toggleContainer(false);
     }
+    // Not a true blur if it was a selection via mouse click
+    else {
+        oSelf._focus();
+    }
 };
 
 /**
@@ -2914,4 +2905,4 @@
 
 
 
-YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.6.0", build: "1321"});
+YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/autocomplete/autocomplete-min.js
===================================================================
--- trunk/root/static/yui/autocomplete/autocomplete-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/autocomplete-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,12 +1,12 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.widget.DS_JSArray=YAHOO.util.LocalDataSource;YAHOO.widget.DS_JSFunction=YAHOO.util.FunctionDataSource;YAHOO.widget.DS_XHR=function(B,A,D){var C=new YAHOO.util.XHRDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_ScriptNode=function(B,A,D){var C=new YAHOO.util.ScriptNodeDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_XHR.TYPE_JSON=YAHOO.util.DataSourceBase.TYPE_JSON;YAHOO.widget.DS_XHR.TYPE_XML=YAHOO.util.DataSourceBase.TYPE_XML;YAHOO.widget.DS_XHR.TYPE_FLAT=YAHOO.util.DataSourceBase.TYPE_TEXT;YAHOO.widget.AutoComplete=function(G,B,J,C){if(G&&B&&J){if(J instanceof YAHOO.util.DataSourceBase){this.dataSource=J;}else{return ;}this.key=0;var D=J.responseSchema;if(J._aDeprecatedSchema){var K=J._aDeprecatedSchema;if(YAHOO.lang.isArray(K)){if((J.responseType===YAHOO.util.DataSourceBase.TYPE_JSON)||(J.responseType===YAHOO.util.DataSourceBase.TYPE_UNKNOWN)){D.resultsList=K[0];this.key=K[1];D.fields=(K.length<3)?null:K.slice(1);}else{if(J.respon!
 seType===YAHOO.util.DataSourceBase.TYPE_XML){D.resultNode=K[0];this.key=K[1];D.fields=K.slice(1);}else{if(J.responseType===YAHOO.util.DataSourceBase.TYPE_TEXT){D.recordDelim=K[0];D.fieldDelim=K[1];}}}J.responseSchema=D;}}if(YAHOO.util.Dom.inDocument(G)){if(YAHOO.lang.isString(G)){this._sName="instance"+YAHOO.widget.AutoComplete._nIndex+" "+G;this._elTextbox=document.getElementById(G);}else{this._sName=(G.id)?"instance"+YAHOO.widget.AutoComplete._nIndex+" "+G.id:"instance"+YAHOO.widget.AutoComplete._nIndex;this._elTextbox=G;}YAHOO.util.Dom.addClass(this._elTextbox,"yui-ac-input");}else{return ;}if(YAHOO.util.Dom.inDocument(B)){if(YAHOO.lang.isString(B)){this._elContainer=document.getElementById(B);}else{this._elContainer=B;}if(this._elContainer.style.display=="none"){}var E=this._elContainer.parentNode;var A=E.tagName.toLowerCase();if(A=="div"){YAHOO.util.Dom.addClass(E,"yui-ac");}else{}}else{return ;}if(this.dataSource.dataType===YAHOO.util.DataSourceBase.TYPE_LOCAL){this.a!
 pplyLocalFilter=true;}if(C&&(C.constructor==Object)){for(var I!
  in C){i
f(I){this[I]=C[I];}}}this._initContainerEl();this._initProps();this._initListEl();this._initContainerHelperEls();var H=this;var F=this._elTextbox;YAHOO.util.Event.addListener(F,"keyup",H._onTextboxKeyUp,H);YAHOO.util.Event.addListener(F,"keydown",H._onTextboxKeyDown,H);YAHOO.util.Event.addListener(F,"focus",H._onTextboxFocus,H);YAHOO.util.Event.addListener(F,"blur",H._onTextboxBlur,H);YAHOO.util.Event.addListener(B,"mouseover",H._onContainerMouseover,H);YAHOO.util.Event.addListener(B,"mouseout",H._onContainerMouseout,H);YAHOO.util.Event.addListener(B,"click",H._onContainerClick,H);YAHOO.util.Event.addListener(B,"scroll",H._onContainerScroll,H);YAHOO.util.Event.addListener(B,"resize",H._onContainerResize,H);YAHOO.util.Event.addListener(F,"keypress",H._onTextboxKeyPress,H);YAHOO.util.Event.addListener(window,"unload",H._onWindowUnload,H);this.textboxFocusEvent=new YAHOO.util.CustomEvent("textboxFocus",this);this.textboxKeyEvent=new YAHOO.util.CustomEvent("textboxKey",this);thi!
 s.dataRequestEvent=new YAHOO.util.CustomEvent("dataRequest",this);this.dataReturnEvent=new YAHOO.util.CustomEvent("dataReturn",this);this.dataErrorEvent=new YAHOO.util.CustomEvent("dataError",this);this.containerPopulateEvent=new YAHOO.util.CustomEvent("containerPopulate",this);this.containerExpandEvent=new YAHOO.util.CustomEvent("containerExpand",this);this.typeAheadEvent=new YAHOO.util.CustomEvent("typeAhead",this);this.itemMouseOverEvent=new YAHOO.util.CustomEvent("itemMouseOver",this);this.itemMouseOutEvent=new YAHOO.util.CustomEvent("itemMouseOut",this);this.itemArrowToEvent=new YAHOO.util.CustomEvent("itemArrowTo",this);this.itemArrowFromEvent=new YAHOO.util.CustomEvent("itemArrowFrom",this);this.itemSelectEvent=new YAHOO.util.CustomEvent("itemSelect",this);this.unmatchedItemSelectEvent=new YAHOO.util.CustomEvent("unmatchedItemSelect",this);this.selectionEnforceEvent=new YAHOO.util.CustomEvent("selectionEnforce",this);this.containerCollapseEvent=new YAHOO.util.CustomE!
 vent("containerCollapse",this);this.textboxBlurEvent=new YAHOO!
 .util.Cu
stomEvent("textboxBlur",this);this.textboxChangeEvent=new YAHOO.util.CustomEvent("textboxChange",this);F.setAttribute("autocomplete","off");YAHOO.widget.AutoComplete._nIndex++;}else{}};YAHOO.widget.AutoComplete.prototype.dataSource=null;YAHOO.widget.AutoComplete.prototype.applyLocalFilter=null;YAHOO.widget.AutoComplete.prototype.queryMatchCase=false;YAHOO.widget.AutoComplete.prototype.queryMatchContains=false;YAHOO.widget.AutoComplete.prototype.queryMatchSubset=false;YAHOO.widget.AutoComplete.prototype.minQueryLength=1;YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed=10;YAHOO.widget.AutoComplete.prototype.queryDelay=0.2;YAHOO.widget.AutoComplete.prototype.typeAheadDelay=0.5;YAHOO.widget.AutoComplete.prototype.queryInterval=500;YAHOO.widget.AutoComplete.prototype.highlightClassName="yui-ac-highlight";YAHOO.widget.AutoComplete.prototype.prehighlightClassName=null;YAHOO.widget.AutoComplete.prototype.delimChar=null;YAHOO.widget.AutoComplete.prototype.autoHighlight=true;YA!
 HOO.widget.AutoComplete.prototype.typeAhead=false;YAHOO.widget.AutoComplete.prototype.animHoriz=false;YAHOO.widget.AutoComplete.prototype.animVert=true;YAHOO.widget.AutoComplete.prototype.animSpeed=0.3;YAHOO.widget.AutoComplete.prototype.forceSelection=false;YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete=true;YAHOO.widget.AutoComplete.prototype.alwaysShowContainer=false;YAHOO.widget.AutoComplete.prototype.useIFrame=false;YAHOO.widget.AutoComplete.prototype.useShadow=false;YAHOO.widget.AutoComplete.prototype.suppressInputUpdate=false;YAHOO.widget.AutoComplete.prototype.resultTypeList=true;YAHOO.widget.AutoComplete.prototype.queryQuestionMark=true;YAHOO.widget.AutoComplete.prototype.toString=function(){return"AutoComplete "+this._sName;};YAHOO.widget.AutoComplete.prototype.getInputEl=function(){return this._elTextbox;};YAHOO.widget.AutoComplete.prototype.getContainerEl=function(){return this._elContainer;
-};YAHOO.widget.AutoComplete.prototype.isFocused=function(){return(this._bFocused===null)?false:this._bFocused;};YAHOO.widget.AutoComplete.prototype.isContainerOpen=function(){return this._bContainerOpen;};YAHOO.widget.AutoComplete.prototype.getListEl=function(){return this._elList;};YAHOO.widget.AutoComplete.prototype.getListItemMatch=function(A){if(A._sResultMatch){return A._sResultMatch;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemData=function(A){if(A._oResultData){return A._oResultData;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemIndex=function(A){if(YAHOO.lang.isNumber(A._nItemIndex)){return A._nItemIndex;}else{return null;}};YAHOO.widget.AutoComplete.prototype.setHeader=function(B){if(this._elHeader){var A=this._elHeader;if(B){A.innerHTML=B;A.style.display="block";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setFooter=function(B){if(this._elFooter){var A=this._elFooter;if(B){A.innerHT!
 ML=B;A.style.display="block";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setBody=function(A){if(this._elBody){var B=this._elBody;YAHOO.util.Event.purgeElement(B,true);if(A){B.innerHTML=A;B.style.display="block";}else{B.innerHTML="";B.style.display="none";}this._elList=null;}};YAHOO.widget.AutoComplete.prototype.generateRequest=function(B){var A=this.dataSource.dataType;if(A===YAHOO.util.DataSourceBase.TYPE_XHR){if(!this.dataSource.connMethodPost){B=(this.queryQuestionMark?"?":"")+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}else{B=(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}else{if(A===YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE){B="&"+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}ret!
 urn B;};YAHOO.widget.AutoComplete.prototype.sendQuery=function!
 (B){var 
A=(this.delimChar)?this._elTextbox.value+B:B;this._sendQuery(A);};YAHOO.widget.AutoComplete.prototype.collapseContainer=function(){this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype.getSubsetMatches=function(E){var D,C,A;for(var B=E.length;B>=this.minQueryLength;B--){A=this.generateRequest(E.substr(0,B));this.dataRequestEvent.fire(this,D,A);C=this.dataSource.getCachedResponse(A);if(C){return this.filterResults.apply(this.dataSource,[E,C,C,{scope:this}]);}}return null;};YAHOO.widget.AutoComplete.prototype.preparseRawResponse=function(C,B,A){var D=((this.responseStripAfter!=="")&&(B.indexOf))?B.indexOf(this.responseStripAfter):-1;if(D!=-1){B=B.substring(0,D);}return B;};YAHOO.widget.AutoComplete.prototype.filterResults=function(J,L,P,K){if(J&&J!==""){P=YAHOO.widget.AutoComplete._cloneObject(P);var H=K.scope,O=this,B=P.results,M=[],D=false,I=(O.queryMatchCase||H.queryMatchCase),A=(O.queryMatchContains||H.queryMatchContains);for(var C=B.length-1;C>=0;C--){var F=B!
 [C];var E=null;if(YAHOO.lang.isString(F)){E=F;}else{if(YAHOO.lang.isArray(F)){E=F[0];}else{if(this.responseSchema.fields){var N=this.responseSchema.fields[0].key||this.responseSchema.fields[0];E=F[N];}else{if(this.key){E=F[this.key];}}}}if(YAHOO.lang.isString(E)){var G=(I)?E.indexOf(decodeURIComponent(J)):E.toLowerCase().indexOf(decodeURIComponent(J).toLowerCase());if((!A&&(G===0))||(A&&(G>-1))){M.unshift(F);}}}P.results=M;}else{}return P;};YAHOO.widget.AutoComplete.prototype.handleResponse=function(C,A,B){if((this instanceof YAHOO.widget.AutoComplete)&&this._sName){this._populateList(C,A,B);}};YAHOO.widget.AutoComplete.prototype.doBeforeLoadData=function(C,A,B){return true;};YAHOO.widget.AutoComplete.prototype.formatResult=function(B,D,A){var C=(A)?A:"";return C;};YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer=function(D,A,C,B){return true;};YAHOO.widget.AutoComplete.prototype.destroy=function(){var B=this.toString();var A=this._elTextbox;var D=this._elContain!
 er;this.textboxFocusEvent.unsubscribeAll();this.textboxKeyEven!
 t.unsubs
cribeAll();this.dataRequestEvent.unsubscribeAll();this.dataReturnEvent.unsubscribeAll();this.dataErrorEvent.unsubscribeAll();this.containerPopulateEvent.unsubscribeAll();this.containerExpandEvent.unsubscribeAll();this.typeAheadEvent.unsubscribeAll();this.itemMouseOverEvent.unsubscribeAll();this.itemMouseOutEvent.unsubscribeAll();this.itemArrowToEvent.unsubscribeAll();this.itemArrowFromEvent.unsubscribeAll();this.itemSelectEvent.unsubscribeAll();this.unmatchedItemSelectEvent.unsubscribeAll();this.selectionEnforceEvent.unsubscribeAll();this.containerCollapseEvent.unsubscribeAll();this.textboxBlurEvent.unsubscribeAll();this.textboxChangeEvent.unsubscribeAll();YAHOO.util.Event.purgeElement(A,true);YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}};YAHOO.widget.AutoComplete.prototype.textboxFocusEvent=null;YAHOO.widget.AutoComplete.prototype.textboxKeyEvent=null;YAHOO.widget.AutoComplete.prototype.dataReq!
 uestEvent=null;YAHOO.widget.AutoComplete.prototype.dataReturnEvent=null;YAHOO.widget.AutoComplete.prototype.dataErrorEvent=null;YAHOO.widget.AutoComplete.prototype.containerPopulateEvent=null;YAHOO.widget.AutoComplete.prototype.containerExpandEvent=null;YAHOO.widget.AutoComplete.prototype.typeAheadEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowToEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent=null;YAHOO.widget.AutoComplete.prototype.itemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent=null;YAHOO.widget.AutoComplete.prototype.containerCollapseEvent=null;YAHOO.widget.AutoComplete.prototype.textboxBlurEvent=null;YAHOO.widget.AutoComplete.prototype.textboxChangeEvent=null;YAHOO.widget.AutoComplete._nIndex=0;
-YAHOO.widget.AutoComplete.prototype._sName=null;YAHOO.widget.AutoComplete.prototype._elTextbox=null;YAHOO.widget.AutoComplete.prototype._elContainer=null;YAHOO.widget.AutoComplete.prototype._elContent=null;YAHOO.widget.AutoComplete.prototype._elHeader=null;YAHOO.widget.AutoComplete.prototype._elBody=null;YAHOO.widget.AutoComplete.prototype._elFooter=null;YAHOO.widget.AutoComplete.prototype._elShadow=null;YAHOO.widget.AutoComplete.prototype._elIFrame=null;YAHOO.widget.AutoComplete.prototype._bFocused=null;YAHOO.widget.AutoComplete.prototype._oAnim=null;YAHOO.widget.AutoComplete.prototype._bContainerOpen=false;YAHOO.widget.AutoComplete.prototype._bOverContainer=false;YAHOO.widget.AutoComplete.prototype._elList=null;YAHOO.widget.AutoComplete.prototype._nDisplayedItems=0;YAHOO.widget.AutoComplete.prototype._sCurQuery=null;YAHOO.widget.AutoComplete.prototype._sPastSelections="";YAHOO.widget.AutoComplete.prototype._sInitInputValue=null;YAHOO.widget.AutoComplete.prototype._elCurLi!
 stItem=null;YAHOO.widget.AutoComplete.prototype._bItemSelected=false;YAHOO.widget.AutoComplete.prototype._nKeyCode=null;YAHOO.widget.AutoComplete.prototype._nDelayID=-1;YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID=-1;YAHOO.widget.AutoComplete.prototype._iFrameSrc="javascript:false;";YAHOO.widget.AutoComplete.prototype._queryInterval=null;YAHOO.widget.AutoComplete.prototype._sLastTextboxValue=null;YAHOO.widget.AutoComplete.prototype._initProps=function(){var B=this.minQueryLength;if(!YAHOO.lang.isNumber(B)){this.minQueryLength=1;}var E=this.maxResultsDisplayed;if(!YAHOO.lang.isNumber(E)||(E<1)){this.maxResultsDisplayed=10;}var F=this.queryDelay;if(!YAHOO.lang.isNumber(F)||(F<0)){this.queryDelay=0.2;}var C=this.typeAheadDelay;if(!YAHOO.lang.isNumber(C)||(C<0)){this.typeAheadDelay=0.2;}var A=this.delimChar;if(YAHOO.lang.isString(A)&&(A.length>0)){this.delimChar=[A];}else{if(!YAHOO.lang.isArray(A)){this.delimChar=null;}}var D=this.animSpeed;if((this.animHoriz||this.an!
 imVert)&&YAHOO.util.Anim){if(!YAHOO.lang.isNumber(D)||(D<0)){t!
 his.anim
Speed=0.3;}if(!this._oAnim){this._oAnim=new YAHOO.util.Anim(this._elContent,{},this.animSpeed);}else{this._oAnim.duration=this.animSpeed;}}if(this.forceSelection&&A){}};YAHOO.widget.AutoComplete.prototype._initContainerHelperEls=function(){if(this.useShadow&&!this._elShadow){var A=document.createElement("div");A.className="yui-ac-shadow";A.style.width=0;A.style.height=0;this._elShadow=this._elContainer.appendChild(A);}if(this.useIFrame&&!this._elIFrame){var B=document.createElement("iframe");B.src=this._iFrameSrc;B.frameBorder=0;B.scrolling="no";B.style.position="absolute";B.style.width=0;B.style.height=0;B.tabIndex=-1;B.style.padding=0;this._elIFrame=this._elContainer.appendChild(B);}};YAHOO.widget.AutoComplete.prototype._initContainerEl=function(){YAHOO.util.Dom.addClass(this._elContainer,"yui-ac-container");if(!this._elContent){var C=document.createElement("div");C.className="yui-ac-content";C.style.display="none";this._elContent=this._elContainer.appendChild(C);var B=doc!
 ument.createElement("div");B.className="yui-ac-hd";B.style.display="none";this._elHeader=this._elContent.appendChild(B);var D=document.createElement("div");D.className="yui-ac-bd";this._elBody=this._elContent.appendChild(D);var A=document.createElement("div");A.className="yui-ac-ft";A.style.display="none";this._elFooter=this._elContent.appendChild(A);}else{}};YAHOO.widget.AutoComplete.prototype._initListEl=function(){var C=this.maxResultsDisplayed;var A=this._elList||document.createElement("ul");var B;while(A.childNodes.length<C){B=document.createElement("li");B.style.display="none";B._nItemIndex=A.childNodes.length;A.appendChild(B);}if(!this._elList){var D=this._elBody;YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";this._elList=D.appendChild(A);}};YAHOO.widget.AutoComplete.prototype._enableIntervalDetection=function(){var A=this;if(!A._queryInterval&&A.queryInterval){A._queryInterval=setInterval(function(){A._onInterval();},A.queryInterval);}};YAHOO.widget.AutoComple!
 te.prototype._onInterval=function(){var A=this._elTextbox.valu!
 e;var B=
this._sLastTextboxValue;if(A!=B){this._sLastTextboxValue=A;this._sendQuery(A);}};YAHOO.widget.AutoComplete.prototype._clearInterval=function(){if(this._queryInterval){clearInterval(this._queryInterval);this._queryInterval=null;}};YAHOO.widget.AutoComplete.prototype._isIgnoreKey=function(A){if((A==9)||(A==13)||(A==16)||(A==17)||(A>=18&&A<=20)||(A==27)||(A>=33&&A<=35)||(A>=36&&A<=40)||(A>=44&&A<=45)||(A==229)){return true;}return false;};YAHOO.widget.AutoComplete.prototype._sendQuery=function(G){if(this.minQueryLength<0){this._toggleContainer(false);return ;}var I=(this.delimChar)?this.delimChar:null;if(I){var B=-1;for(var F=I.length-1;F>=0;F--){var D=G.lastIndexOf(I[F]);if(D>B){B=D;}}if(I[F]==" "){for(var E=I.length-1;E>=0;E--){if(G[B-1]==I[E]){B--;break;}}}if(B>-1){var H=B+1;while(G.charAt(H)==" "){H+=1;}this._sPastSelections=G.substring(0,H);G=G.substr(H);}else{this._sPastSelections="";}}if((G&&(G.length<this.minQueryLength))||(!G&&this.minQueryLength>0)){if(this._nDelayID!!
 =-1){clearTimeout(this._nDelayID);}this._toggleContainer(false);return ;}G=encodeURIComponent(G);this._nDelayID=-1;if(this.dataSource.queryMatchSubset||this.queryMatchSubset){var A=this.getSubsetMatches(G);if(A){this.handleResponse(G,A,{query:G});return ;}}if(this.responseStripAfter){this.dataSource.doBeforeParseData=this.preparseRawResponse;}if(this.applyLocalFilter){this.dataSource.doBeforeCallback=this.filterResults;}var C=this.generateRequest(G);this.dataRequestEvent.fire(this,G,C);this.dataSource.sendRequest(C,{success:this.handleResponse,failure:this.handleResponse,scope:this,argument:{query:G}});};YAHOO.widget.AutoComplete.prototype._populateList=function(K,F,C){if(this._nTypeAheadDelayID!=-1){clearTimeout(this._nTypeAheadDelayID);}K=(C&&C.query)?C.query:K;var H=this.doBeforeLoadData(K,F,C);if(H&&!F.error){this.dataReturnEvent.fire(this,K,F.results);if(this._bFocused||(this._bFocused===null)){var M=decodeURIComponent(K);
-this._sCurQuery=M;this._bItemSelected=false;var R=F.results,A=Math.min(R.length,this.maxResultsDisplayed),J=(this.dataSource.responseSchema.fields)?(this.dataSource.responseSchema.fields[0].key||this.dataSource.responseSchema.fields[0]):0;if(A>0){if(!this._elList||(this._elList.childNodes.length<A)){this._initListEl();}this._initContainerHelperEls();var I=this._elList.childNodes;for(var Q=A-1;Q>=0;Q--){var P=I[Q],E=R[Q];if(this.resultTypeList){var B=[];B[0]=(YAHOO.lang.isString(E))?E:E[J]||E[this.key];var L=this.dataSource.responseSchema.fields;if(YAHOO.lang.isArray(L)&&(L.length>1)){for(var N=1,S=L.length;N<S;N++){B[B.length]=E[L[N].key||L[N]];}}else{if(YAHOO.lang.isArray(E)){B=E;}else{if(YAHOO.lang.isString(E)){B=[E];}else{B[1]=E;}}}E=B;}P._sResultMatch=(YAHOO.lang.isString(E))?E:(YAHOO.lang.isArray(E))?E[0]:(E[J]||"");P._oResultData=E;P.innerHTML=this.formatResult(E,M,P._sResultMatch);P.style.display="";}if(A<I.length){var G;for(var O=I.length-1;O>=A;O--){G=I[O];G.style.!
 display="none";}}this._nDisplayedItems=A;this.containerPopulateEvent.fire(this,K,R);if(this.autoHighlight){var D=this._elList.firstChild;this._toggleHighlight(D,"to");this.itemArrowToEvent.fire(this,D);this._typeAhead(D,K);}else{this._toggleHighlight(this._elCurListItem,"from");}H=this.doBeforeExpandContainer(this._elTextbox,this._elContainer,K,R);this._toggleContainer(H);}else{this._toggleContainer(false);}return ;}}else{this.dataErrorEvent.fire(this,K);}};YAHOO.widget.AutoComplete.prototype._clearSelection=function(){var C=this._elTextbox.value;var B=(this.delimChar)?this.delimChar[0]:null;var A=(B)?C.lastIndexOf(B,C.length-2):-1;if(A>-1){this._elTextbox.value=C.substring(0,A);}else{this._elTextbox.value="";}this._sPastSelections=this._elTextbox.value;this.selectionEnforceEvent.fire(this);};YAHOO.widget.AutoComplete.prototype._textMatchesOption=function(){var A=null;for(var B=this._nDisplayedItems-1;B>=0;B--){var C=this._elList.childNodes[B];var D=(""+C._sResultMatch).toL!
 owerCase();if(D==this._sCurQuery.toLowerCase()){A=C;break;}}re!
 turn(A);
};YAHOO.widget.AutoComplete.prototype._typeAhead=function(B,D){if(!this.typeAhead||(this._nKeyCode==8)){return ;}var A=this,C=this._elTextbox;if(C.setSelectionRange||C.createTextRange){this._nTypeAheadDelayID=setTimeout(function(){var F=C.value.length;A._updateValue(B);var G=C.value.length;A._selectText(C,F,G);var E=C.value.substr(F,G);A.typeAheadEvent.fire(A,D,E);},(this.typeAheadDelay*1000));}};YAHOO.widget.AutoComplete.prototype._selectText=function(D,A,B){if(D.setSelectionRange){D.setSelectionRange(A,B);}else{if(D.createTextRange){var C=D.createTextRange();C.moveStart("character",A);C.moveEnd("character",B-D.value.length);C.select();}else{D.select();}}};YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers=function(D){var E=this._elContent.offsetWidth+"px";var B=this._elContent.offsetHeight+"px";if(this.useIFrame&&this._elIFrame){var C=this._elIFrame;if(D){C.style.width=E;C.style.height=B;C.style.padding="";}else{C.style.width=0;C.style.height=0;C.style.padding=0;}!
 }if(this.useShadow&&this._elShadow){var A=this._elShadow;if(D){A.style.width=E;A.style.height=B;}else{A.style.width=0;A.style.height=0;}}};YAHOO.widget.AutoComplete.prototype._toggleContainer=function(I){var D=this._elContainer;if(this.alwaysShowContainer&&this._bContainerOpen){return ;}if(!I){this._toggleHighlight(this._elCurListItem,"from");this._nDisplayedItems=0;this._sCurQuery=null;if(!this._bContainerOpen){this._elContent.style.display="none";return ;}}var A=this._oAnim;if(A&&A.getEl()&&(this.animHoriz||this.animVert)){if(A.isAnimated()){A.stop(true);}var G=this._elContent.cloneNode(true);D.appendChild(G);G.style.top="-9000px";G.style.width="";G.style.height="";G.style.display="";var F=G.offsetWidth;var C=G.offsetHeight;var B=(this.animHoriz)?0:F;var E=(this.animVert)?0:C;A.attributes=(I)?{width:{to:F},height:{to:C}}:{width:{to:B},height:{to:E}};if(I&&!this._bContainerOpen){this._elContent.style.width=B+"px";this._elContent.style.height=E+"px";}else{this._elContent.st!
 yle.width=F+"px";this._elContent.style.height=C+"px";}D.remove!
 Child(G)
;G=null;var H=this;var J=function(){A.onComplete.unsubscribeAll();if(I){H._toggleContainerHelpers(true);H._bContainerOpen=I;H.containerExpandEvent.fire(H);}else{H._elContent.style.display="none";H._bContainerOpen=I;H.containerCollapseEvent.fire(H);}};this._toggleContainerHelpers(false);this._elContent.style.display="";A.onComplete.subscribe(J);A.animate();}else{if(I){this._elContent.style.display="";this._toggleContainerHelpers(true);this._bContainerOpen=I;this.containerExpandEvent.fire(this);}else{this._toggleContainerHelpers(false);this._elContent.style.display="none";this._bContainerOpen=I;this.containerCollapseEvent.fire(this);}}};YAHOO.widget.AutoComplete.prototype._toggleHighlight=function(A,C){if(A){var B=this.highlightClassName;if(this._elCurListItem){YAHOO.util.Dom.removeClass(this._elCurListItem,B);this._elCurListItem=null;}if((C=="to")&&B){YAHOO.util.Dom.addClass(A,B);this._elCurListItem=A;}}};YAHOO.widget.AutoComplete.prototype._togglePrehighlight=function(B,C){i!
 f(B==this._elCurListItem){return ;}var A=this.prehighlightClassName;if((C=="mouseover")&&A){YAHOO.util.Dom.addClass(B,A);}else{YAHOO.util.Dom.removeClass(B,A);}};YAHOO.widget.AutoComplete.prototype._updateValue=function(C){if(!this.suppressInputUpdate){var F=this._elTextbox;var E=(this.delimChar)?(this.delimChar[0]||this.delimChar):null;var B=C._sResultMatch;var D="";if(E){D=this._sPastSelections;D+=B+E;if(E!=" "){D+=" ";}}else{D=B;}F.value=D;if(F.type=="textarea"){F.scrollTop=F.scrollHeight;}var A=F.value.length;this._selectText(F,A,A);this._elCurListItem=C;}};YAHOO.widget.AutoComplete.prototype._selectItem=function(A){this._bItemSelected=true;this._updateValue(A);this._sPastSelections=this._elTextbox.value;this._clearInterval();this.itemSelectEvent.fire(this,A,A._oResultData);this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype._jumpSelection=function(){if(this._elCurListItem){this._selectItem(this._elCurListItem);
-}else{this._toggleContainer(false);}};YAHOO.widget.AutoComplete.prototype._moveSelection=function(G){if(this._bContainerOpen){var F=this._elCurListItem;var E=-1;if(F){E=F._nItemIndex;}var C=(G==40)?(E+1):(E-1);if(C<-2||C>=this._nDisplayedItems){return ;}if(F){this._toggleHighlight(F,"from");this.itemArrowFromEvent.fire(this,F);}if(C==-1){if(this.delimChar){this._elTextbox.value=this._sPastSelections+this._sCurQuery;}else{this._elTextbox.value=this._sCurQuery;}return ;}if(C==-2){this._toggleContainer(false);return ;}var D=this._elList.childNodes[C];var A=this._elContent;var B=((YAHOO.util.Dom.getStyle(A,"overflow")=="auto")||(YAHOO.util.Dom.getStyle(A,"overflowY")=="auto"));if(B&&(C>-1)&&(C<this._nDisplayedItems)){if(G==40){if((D.offsetTop+D.offsetHeight)>(A.scrollTop+A.offsetHeight)){A.scrollTop=(D.offsetTop+D.offsetHeight)-A.offsetHeight;}else{if((D.offsetTop+D.offsetHeight)<A.scrollTop){A.scrollTop=D.offsetTop;}}}else{if(D.offsetTop<A.scrollTop){this._elContent.scrollTop=!
 D.offsetTop;}else{if(D.offsetTop>(A.scrollTop+A.offsetHeight)){this._elContent.scrollTop=(D.offsetTop+D.offsetHeight)-A.offsetHeight;}}}}this._toggleHighlight(D,"to");this.itemArrowToEvent.fire(this,D);if(this.typeAhead){this._updateValue(D);}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseover=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return ;case"li":if(C.prehighlightClassName){C._togglePrehighlight(D,"mouseover");}else{C._toggleHighlight(D,"to");}C.itemMouseOverEvent.fire(C,D);break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=true;return ;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseout=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return ;case"li":if(C.prehighlightClassName){C._togglePrehi!
 ghlight(D,"mouseout");}else{C._toggleHighlight(D,"from");}C.it!
 emMouseO
utEvent.fire(C,D);break;case"ul":C._toggleHighlight(C._elCurListItem,"to");break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=false;return ;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerClick=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return ;case"li":C._toggleHighlight(D,"to");C._selectItem(D);return ;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerScroll=function(A,B){B._elTextbox.focus();};YAHOO.widget.AutoComplete.prototype._onContainerResize=function(A,B){B._toggleContainerHelpers(B._bContainerOpen);};YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown=function(A,B){var C=A.keyCode;if(B._nTypeAheadDelayID!=-1){clearTimeout(B._nTypeAheadDelayID);}switch(C){case 9:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerC!
 ase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B.delimChar&&(B._nKeyCode!=C)){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B._nKeyCode!=C){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 27:B._toggleContainer(false);return ;case 39:B._jumpSelection();break;case 38:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C);}break;case 40:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C);}break;default:B._bItemSelected=false;B._toggleHighlight(B._elCurListItem,"from");B.textboxKeyEvent.fire(B,C);break;}if(C===18){B._enableIntervalDetection();}B._nKeyCode=C;};YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress=f!
 unction(A,B){var C=A.keyCode;if(YAHOO.env.ua.opera||(navigator!
 .userAge
nt.toLowerCase().indexOf("mac")!=-1)&&(YAHOO.env.ua.webkit<420)){switch(C){case 9:if(B._bContainerOpen){if(B.delimChar){YAHOO.util.Event.stopEvent(A);}if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;default:break;}}else{if(C==229){B._enableIntervalDetection();}}};YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp=function(A,C){var B=this.value;C._initProps();var D=A.keyCode;if(C._isIgnoreKey(D)){return ;}if(C._nDelayID!=-1){clearTimeout(C._nDelayID);}C._nDelayID=setTimeout(function(){C._sendQuery(B);},(C.queryDelay*1000));};YAHOO.widget.AutoComplete.prototype._onTextboxFocus=function(A,B){if(!B._bFocused){B._elTextbox.setAttribute("autocomplete","off");B._bFocused=true;B._sInitInputValue=B._elTextbox.value;B.textboxFocusEvent.fire(B);}};YAHOO.widget.AutoComplete.prototype._onText!
 boxBlur=function(A,C){if(!C._bOverContainer||(C._nKeyCode==9)){if(!C._bItemSelected){var B=C._textMatchesOption();if(!C._bContainerOpen||(C._bContainerOpen&&(B===null))){if(C.forceSelection){C._clearSelection();}else{C.unmatchedItemSelectEvent.fire(C,C._sCurQuery);}}else{if(C.forceSelection){C._selectItem(B);}}}if(C._bContainerOpen){C._toggleContainer(false);}C._clearInterval();C._bFocused=false;if(C._sInitInputValue!==C._elTextbox.value){C.textboxChangeEvent.fire(C);}C.textboxBlurEvent.fire(C);}};YAHOO.widget.AutoComplete.prototype._onWindowUnload=function(A,B){if(B&&B._elTextbox&&B.allowBrowserAutocomplete){B._elTextbox.setAttribute("autocomplete","on");}};YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery=function(A){return this.generateRequest(A);};YAHOO.widget.AutoComplete.prototype.getListItems=function(){var C=[],B=this._elList.childNodes;for(var A=B.length-1;A>=0;A--){C[A]=B[A];}return C;};YAHOO.widget.AutoComplete._cloneObject=function(D){if(!YAHOO.lang.isValue(!
 D)){return D;
-}var F={};if(YAHOO.lang.isFunction(D)){F=D;}else{if(YAHOO.lang.isArray(D)){var E=[];for(var C=0,B=D.length;C<B;C++){E[C]=YAHOO.widget.AutoComplete._cloneObject(D[C]);}F=E;}else{if(YAHOO.lang.isObject(D)){for(var A in D){if(YAHOO.lang.hasOwnProperty(D,A)){if(YAHOO.lang.isValue(D[A])&&YAHOO.lang.isObject(D[A])||YAHOO.lang.isArray(D[A])){F[A]=YAHOO.widget.AutoComplete._cloneObject(D[A]);}else{F[A]=D[A];}}}}else{F=D;}}}return F;};YAHOO.register("autocomplete",YAHOO.widget.AutoComplete,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.widget.DS_JSArray=YAHOO.util.LocalDataSource;YAHOO.widget.DS_JSFunction=YAHOO.util.FunctionDataSource;YAHOO.widget.DS_XHR=function(B,A,D){var C=new YAHOO.util.XHRDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_ScriptNode=function(B,A,D){var C=new YAHOO.util.ScriptNodeDataSource(B,D);C._aDeprecatedSchema=A;return C;};YAHOO.widget.DS_XHR.TYPE_JSON=YAHOO.util.DataSourceBase.TYPE_JSON;YAHOO.widget.DS_XHR.TYPE_XML=YAHOO.util.DataSourceBase.TYPE_XML;YAHOO.widget.DS_XHR.TYPE_FLAT=YAHOO.util.DataSourceBase.TYPE_TEXT;YAHOO.widget.AutoComplete=function(G,B,J,C){if(G&&B&&J){if(J instanceof YAHOO.util.DataSourceBase){this.dataSource=J;}else{return;}this.key=0;var D=J.responseSchema;if(J._aDeprecatedSchema){var K=J._aDeprecatedSchema;if(YAHOO.lang.isArray(K)){if((J.responseType===YAHOO.util.DataSourceBase.TYPE_JSON)||(J.responseType===YAHOO.util.DataSourceBase.TYPE_UNKNOWN)){D.resultsList=K[0];this.key=K[1];D.fields=(K.length<3)?null:K.slice(1);}else{if(J.respons!
 eType===YAHOO.util.DataSourceBase.TYPE_XML){D.resultNode=K[0];this.key=K[1];D.fields=K.slice(1);}else{if(J.responseType===YAHOO.util.DataSourceBase.TYPE_TEXT){D.recordDelim=K[0];D.fieldDelim=K[1];}}}J.responseSchema=D;}}if(YAHOO.util.Dom.inDocument(G)){if(YAHOO.lang.isString(G)){this._sName="instance"+YAHOO.widget.AutoComplete._nIndex+" "+G;this._elTextbox=document.getElementById(G);}else{this._sName=(G.id)?"instance"+YAHOO.widget.AutoComplete._nIndex+" "+G.id:"instance"+YAHOO.widget.AutoComplete._nIndex;this._elTextbox=G;}YAHOO.util.Dom.addClass(this._elTextbox,"yui-ac-input");}else{return;}if(YAHOO.util.Dom.inDocument(B)){if(YAHOO.lang.isString(B)){this._elContainer=document.getElementById(B);}else{this._elContainer=B;}if(this._elContainer.style.display=="none"){}var E=this._elContainer.parentNode;var A=E.tagName.toLowerCase();if(A=="div"){YAHOO.util.Dom.addClass(E,"yui-ac");}else{}}else{return;}if(this.dataSource.dataType===YAHOO.util.DataSourceBase.TYPE_LOCAL){this.appl!
 yLocalFilter=true;}if(C&&(C.constructor==Object)){for(var I in!
  C){if(I
){this[I]=C[I];}}}this._initContainerEl();this._initProps();this._initListEl();this._initContainerHelperEls();var H=this;var F=this._elTextbox;YAHOO.util.Event.addListener(F,"keyup",H._onTextboxKeyUp,H);YAHOO.util.Event.addListener(F,"keydown",H._onTextboxKeyDown,H);YAHOO.util.Event.addListener(F,"focus",H._onTextboxFocus,H);YAHOO.util.Event.addListener(F,"blur",H._onTextboxBlur,H);YAHOO.util.Event.addListener(B,"mouseover",H._onContainerMouseover,H);YAHOO.util.Event.addListener(B,"mouseout",H._onContainerMouseout,H);YAHOO.util.Event.addListener(B,"click",H._onContainerClick,H);YAHOO.util.Event.addListener(B,"scroll",H._onContainerScroll,H);YAHOO.util.Event.addListener(B,"resize",H._onContainerResize,H);YAHOO.util.Event.addListener(F,"keypress",H._onTextboxKeyPress,H);YAHOO.util.Event.addListener(window,"unload",H._onWindowUnload,H);this.textboxFocusEvent=new YAHOO.util.CustomEvent("textboxFocus",this);this.textboxKeyEvent=new YAHOO.util.CustomEvent("textboxKey",this);this.d!
 ataRequestEvent=new YAHOO.util.CustomEvent("dataRequest",this);this.dataReturnEvent=new YAHOO.util.CustomEvent("dataReturn",this);this.dataErrorEvent=new YAHOO.util.CustomEvent("dataError",this);this.containerPopulateEvent=new YAHOO.util.CustomEvent("containerPopulate",this);this.containerExpandEvent=new YAHOO.util.CustomEvent("containerExpand",this);this.typeAheadEvent=new YAHOO.util.CustomEvent("typeAhead",this);this.itemMouseOverEvent=new YAHOO.util.CustomEvent("itemMouseOver",this);this.itemMouseOutEvent=new YAHOO.util.CustomEvent("itemMouseOut",this);this.itemArrowToEvent=new YAHOO.util.CustomEvent("itemArrowTo",this);this.itemArrowFromEvent=new YAHOO.util.CustomEvent("itemArrowFrom",this);this.itemSelectEvent=new YAHOO.util.CustomEvent("itemSelect",this);this.unmatchedItemSelectEvent=new YAHOO.util.CustomEvent("unmatchedItemSelect",this);this.selectionEnforceEvent=new YAHOO.util.CustomEvent("selectionEnforce",this);this.containerCollapseEvent=new YAHOO.util.CustomEven!
 t("containerCollapse",this);this.textboxBlurEvent=new YAHOO.ut!
 il.Custo
mEvent("textboxBlur",this);this.textboxChangeEvent=new YAHOO.util.CustomEvent("textboxChange",this);F.setAttribute("autocomplete","off");YAHOO.widget.AutoComplete._nIndex++;}else{}};YAHOO.widget.AutoComplete.prototype.dataSource=null;YAHOO.widget.AutoComplete.prototype.applyLocalFilter=null;YAHOO.widget.AutoComplete.prototype.queryMatchCase=false;YAHOO.widget.AutoComplete.prototype.queryMatchContains=false;YAHOO.widget.AutoComplete.prototype.queryMatchSubset=false;YAHOO.widget.AutoComplete.prototype.minQueryLength=1;YAHOO.widget.AutoComplete.prototype.maxResultsDisplayed=10;YAHOO.widget.AutoComplete.prototype.queryDelay=0.2;YAHOO.widget.AutoComplete.prototype.typeAheadDelay=0.5;YAHOO.widget.AutoComplete.prototype.queryInterval=500;YAHOO.widget.AutoComplete.prototype.highlightClassName="yui-ac-highlight";YAHOO.widget.AutoComplete.prototype.prehighlightClassName=null;YAHOO.widget.AutoComplete.prototype.delimChar=null;YAHOO.widget.AutoComplete.prototype.autoHighlight=true;YAHOO!
 .widget.AutoComplete.prototype.typeAhead=false;YAHOO.widget.AutoComplete.prototype.animHoriz=false;YAHOO.widget.AutoComplete.prototype.animVert=true;YAHOO.widget.AutoComplete.prototype.animSpeed=0.3;YAHOO.widget.AutoComplete.prototype.forceSelection=false;YAHOO.widget.AutoComplete.prototype.allowBrowserAutocomplete=true;YAHOO.widget.AutoComplete.prototype.alwaysShowContainer=false;YAHOO.widget.AutoComplete.prototype.useIFrame=false;YAHOO.widget.AutoComplete.prototype.useShadow=false;YAHOO.widget.AutoComplete.prototype.suppressInputUpdate=false;YAHOO.widget.AutoComplete.prototype.resultTypeList=true;YAHOO.widget.AutoComplete.prototype.queryQuestionMark=true;YAHOO.widget.AutoComplete.prototype.toString=function(){return"AutoComplete "+this._sName;};YAHOO.widget.AutoComplete.prototype.getInputEl=function(){return this._elTextbox;};YAHOO.widget.AutoComplete.prototype.getContainerEl=function(){return this._elContainer;
+};YAHOO.widget.AutoComplete.prototype.isFocused=function(){return(this._bFocused===null)?false:this._bFocused;};YAHOO.widget.AutoComplete.prototype.isContainerOpen=function(){return this._bContainerOpen;};YAHOO.widget.AutoComplete.prototype.getListEl=function(){return this._elList;};YAHOO.widget.AutoComplete.prototype.getListItemMatch=function(A){if(A._sResultMatch){return A._sResultMatch;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemData=function(A){if(A._oResultData){return A._oResultData;}else{return null;}};YAHOO.widget.AutoComplete.prototype.getListItemIndex=function(A){if(YAHOO.lang.isNumber(A._nItemIndex)){return A._nItemIndex;}else{return null;}};YAHOO.widget.AutoComplete.prototype.setHeader=function(B){if(this._elHeader){var A=this._elHeader;if(B){A.innerHTML=B;A.style.display="block";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setFooter=function(B){if(this._elFooter){var A=this._elFooter;if(B){A.innerHT!
 ML=B;A.style.display="block";}else{A.innerHTML="";A.style.display="none";}}};YAHOO.widget.AutoComplete.prototype.setBody=function(A){if(this._elBody){var B=this._elBody;YAHOO.util.Event.purgeElement(B,true);if(A){B.innerHTML=A;B.style.display="block";}else{B.innerHTML="";B.style.display="none";}this._elList=null;}};YAHOO.widget.AutoComplete.prototype.generateRequest=function(B){var A=this.dataSource.dataType;if(A===YAHOO.util.DataSourceBase.TYPE_XHR){if(!this.dataSource.connMethodPost){B=(this.queryQuestionMark?"?":"")+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}else{B=(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}else{if(A===YAHOO.util.DataSourceBase.TYPE_SCRIPTNODE){B="&"+(this.dataSource.scriptQueryParam||"query")+"="+B+(this.dataSource.scriptQueryAppend?("&"+this.dataSource.scriptQueryAppend):"");}}ret!
 urn B;};YAHOO.widget.AutoComplete.prototype.sendQuery=function!
 (B){this
._bFocused=null;var A=(this.delimChar)?this._elTextbox.value+B:B;this._sendQuery(A);};YAHOO.widget.AutoComplete.prototype.collapseContainer=function(){this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype.getSubsetMatches=function(E){var D,C,A;for(var B=E.length;B>=this.minQueryLength;B--){A=this.generateRequest(E.substr(0,B));this.dataRequestEvent.fire(this,D,A);C=this.dataSource.getCachedResponse(A);if(C){return this.filterResults.apply(this.dataSource,[E,C,C,{scope:this}]);}}return null;};YAHOO.widget.AutoComplete.prototype.preparseRawResponse=function(C,B,A){var D=((this.responseStripAfter!=="")&&(B.indexOf))?B.indexOf(this.responseStripAfter):-1;if(D!=-1){B=B.substring(0,D);}return B;};YAHOO.widget.AutoComplete.prototype.filterResults=function(J,L,P,K){if(K&&K.argument&&K.argument.query){J=K.argument.query;}if(J&&J!==""){P=YAHOO.widget.AutoComplete._cloneObject(P);var H=K.scope,O=this,B=P.results,M=[],D=false,I=(O.queryMatchCase||H.queryMatchCase),A=(O.quer!
 yMatchContains||H.queryMatchContains);for(var C=B.length-1;C>=0;C--){var F=B[C];var E=null;if(YAHOO.lang.isString(F)){E=F;}else{if(YAHOO.lang.isArray(F)){E=F[0];}else{if(this.responseSchema.fields){var N=this.responseSchema.fields[0].key||this.responseSchema.fields[0];E=F[N];}else{if(this.key){E=F[this.key];}}}}if(YAHOO.lang.isString(E)){var G=(I)?E.indexOf(decodeURIComponent(J)):E.toLowerCase().indexOf(decodeURIComponent(J).toLowerCase());if((!A&&(G===0))||(A&&(G>-1))){M.unshift(F);}}}P.results=M;}else{}return P;};YAHOO.widget.AutoComplete.prototype.handleResponse=function(C,A,B){if((this instanceof YAHOO.widget.AutoComplete)&&this._sName){this._populateList(C,A,B);}};YAHOO.widget.AutoComplete.prototype.doBeforeLoadData=function(C,A,B){return true;};YAHOO.widget.AutoComplete.prototype.formatResult=function(B,D,A){var C=(A)?A:"";return C;};YAHOO.widget.AutoComplete.prototype.doBeforeExpandContainer=function(D,A,C,B){return true;};YAHOO.widget.AutoComplete.prototype.destroy=!
 function(){var B=this.toString();var A=this._elTextbox;var D=t!
 his._elC
ontainer;this.textboxFocusEvent.unsubscribeAll();this.textboxKeyEvent.unsubscribeAll();this.dataRequestEvent.unsubscribeAll();this.dataReturnEvent.unsubscribeAll();this.dataErrorEvent.unsubscribeAll();this.containerPopulateEvent.unsubscribeAll();this.containerExpandEvent.unsubscribeAll();this.typeAheadEvent.unsubscribeAll();this.itemMouseOverEvent.unsubscribeAll();this.itemMouseOutEvent.unsubscribeAll();this.itemArrowToEvent.unsubscribeAll();this.itemArrowFromEvent.unsubscribeAll();this.itemSelectEvent.unsubscribeAll();this.unmatchedItemSelectEvent.unsubscribeAll();this.selectionEnforceEvent.unsubscribeAll();this.containerCollapseEvent.unsubscribeAll();this.textboxBlurEvent.unsubscribeAll();this.textboxChangeEvent.unsubscribeAll();YAHOO.util.Event.purgeElement(A,true);YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}};YAHOO.widget.AutoComplete.prototype.textboxFocusEvent=null;YAHOO.widget.AutoComplet!
 e.prototype.textboxKeyEvent=null;YAHOO.widget.AutoComplete.prototype.dataRequestEvent=null;YAHOO.widget.AutoComplete.prototype.dataReturnEvent=null;YAHOO.widget.AutoComplete.prototype.dataErrorEvent=null;YAHOO.widget.AutoComplete.prototype.containerPopulateEvent=null;YAHOO.widget.AutoComplete.prototype.containerExpandEvent=null;YAHOO.widget.AutoComplete.prototype.typeAheadEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOverEvent=null;YAHOO.widget.AutoComplete.prototype.itemMouseOutEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowToEvent=null;YAHOO.widget.AutoComplete.prototype.itemArrowFromEvent=null;YAHOO.widget.AutoComplete.prototype.itemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.unmatchedItemSelectEvent=null;YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent=null;YAHOO.widget.AutoComplete.prototype.containerCollapseEvent=null;YAHOO.widget.AutoComplete.prototype.textboxBlurEvent=null;
+YAHOO.widget.AutoComplete.prototype.textboxChangeEvent=null;YAHOO.widget.AutoComplete._nIndex=0;YAHOO.widget.AutoComplete.prototype._sName=null;YAHOO.widget.AutoComplete.prototype._elTextbox=null;YAHOO.widget.AutoComplete.prototype._elContainer=null;YAHOO.widget.AutoComplete.prototype._elContent=null;YAHOO.widget.AutoComplete.prototype._elHeader=null;YAHOO.widget.AutoComplete.prototype._elBody=null;YAHOO.widget.AutoComplete.prototype._elFooter=null;YAHOO.widget.AutoComplete.prototype._elShadow=null;YAHOO.widget.AutoComplete.prototype._elIFrame=null;YAHOO.widget.AutoComplete.prototype._bFocused=null;YAHOO.widget.AutoComplete.prototype._oAnim=null;YAHOO.widget.AutoComplete.prototype._bContainerOpen=false;YAHOO.widget.AutoComplete.prototype._bOverContainer=false;YAHOO.widget.AutoComplete.prototype._elList=null;YAHOO.widget.AutoComplete.prototype._nDisplayedItems=0;YAHOO.widget.AutoComplete.prototype._sCurQuery=null;YAHOO.widget.AutoComplete.prototype._sPastSelections="";YAHOO.!
 widget.AutoComplete.prototype._sInitInputValue=null;YAHOO.widget.AutoComplete.prototype._elCurListItem=null;YAHOO.widget.AutoComplete.prototype._bItemSelected=false;YAHOO.widget.AutoComplete.prototype._nKeyCode=null;YAHOO.widget.AutoComplete.prototype._nDelayID=-1;YAHOO.widget.AutoComplete.prototype._nTypeAheadDelayID=-1;YAHOO.widget.AutoComplete.prototype._iFrameSrc="javascript:false;";YAHOO.widget.AutoComplete.prototype._queryInterval=null;YAHOO.widget.AutoComplete.prototype._sLastTextboxValue=null;YAHOO.widget.AutoComplete.prototype._initProps=function(){var B=this.minQueryLength;if(!YAHOO.lang.isNumber(B)){this.minQueryLength=1;}var E=this.maxResultsDisplayed;if(!YAHOO.lang.isNumber(E)||(E<1)){this.maxResultsDisplayed=10;}var F=this.queryDelay;if(!YAHOO.lang.isNumber(F)||(F<0)){this.queryDelay=0.2;}var C=this.typeAheadDelay;if(!YAHOO.lang.isNumber(C)||(C<0)){this.typeAheadDelay=0.2;}var A=this.delimChar;if(YAHOO.lang.isString(A)&&(A.length>0)){this.delimChar=[A];}else{i!
 f(!YAHOO.lang.isArray(A)){this.delimChar=null;}}var D=this.ani!
 mSpeed;i
f((this.animHoriz||this.animVert)&&YAHOO.util.Anim){if(!YAHOO.lang.isNumber(D)||(D<0)){this.animSpeed=0.3;}if(!this._oAnim){this._oAnim=new YAHOO.util.Anim(this._elContent,{},this.animSpeed);}else{this._oAnim.duration=this.animSpeed;}}if(this.forceSelection&&A){}};YAHOO.widget.AutoComplete.prototype._initContainerHelperEls=function(){if(this.useShadow&&!this._elShadow){var A=document.createElement("div");A.className="yui-ac-shadow";A.style.width=0;A.style.height=0;this._elShadow=this._elContainer.appendChild(A);}if(this.useIFrame&&!this._elIFrame){var B=document.createElement("iframe");B.src=this._iFrameSrc;B.frameBorder=0;B.scrolling="no";B.style.position="absolute";B.style.width=0;B.style.height=0;B.tabIndex=-1;B.style.padding=0;this._elIFrame=this._elContainer.appendChild(B);}};YAHOO.widget.AutoComplete.prototype._initContainerEl=function(){YAHOO.util.Dom.addClass(this._elContainer,"yui-ac-container");if(!this._elContent){var C=document.createElement("div");C.className="y!
 ui-ac-content";C.style.display="none";this._elContent=this._elContainer.appendChild(C);var B=document.createElement("div");B.className="yui-ac-hd";B.style.display="none";this._elHeader=this._elContent.appendChild(B);var D=document.createElement("div");D.className="yui-ac-bd";this._elBody=this._elContent.appendChild(D);var A=document.createElement("div");A.className="yui-ac-ft";A.style.display="none";this._elFooter=this._elContent.appendChild(A);}else{}};YAHOO.widget.AutoComplete.prototype._initListEl=function(){var C=this.maxResultsDisplayed;var A=this._elList||document.createElement("ul");var B;while(A.childNodes.length<C){B=document.createElement("li");B.style.display="none";B._nItemIndex=A.childNodes.length;A.appendChild(B);}if(!this._elList){var D=this._elBody;YAHOO.util.Event.purgeElement(D,true);D.innerHTML="";this._elList=D.appendChild(A);}};YAHOO.widget.AutoComplete.prototype._focus=function(){var A=this;setTimeout(function(){try{A._elTextbox.focus();}catch(B){}},0)!
 ;};YAHOO.widget.AutoComplete.prototype._enableIntervalDetectio!
 n=functi
on(){var A=this;if(!A._queryInterval&&A.queryInterval){A._queryInterval=setInterval(function(){A._onInterval();},A.queryInterval);}};YAHOO.widget.AutoComplete.prototype._onInterval=function(){var A=this._elTextbox.value;var B=this._sLastTextboxValue;if(A!=B){this._sLastTextboxValue=A;this._sendQuery(A);}};YAHOO.widget.AutoComplete.prototype._clearInterval=function(){if(this._queryInterval){clearInterval(this._queryInterval);this._queryInterval=null;}};YAHOO.widget.AutoComplete.prototype._isIgnoreKey=function(A){if((A==9)||(A==13)||(A==16)||(A==17)||(A>=18&&A<=20)||(A==27)||(A>=33&&A<=35)||(A>=36&&A<=40)||(A>=44&&A<=45)||(A==229)){return true;}return false;};YAHOO.widget.AutoComplete.prototype._sendQuery=function(D){if(this.minQueryLength<0){this._toggleContainer(false);return;}if(this.delimChar){var A=this._extractQuery(D);D=A.query;this._sPastSelections=A.previous;}if((D&&(D.length<this.minQueryLength))||(!D&&this.minQueryLength>0)){if(this._nDelayID!=-1){clearTimeout(this.!
 _nDelayID);}this._toggleContainer(false);return;}D=encodeURIComponent(D);this._nDelayID=-1;if(this.dataSource.queryMatchSubset||this.queryMatchSubset){var C=this.getSubsetMatches(D);if(C){this.handleResponse(D,C,{query:D});return;}}if(this.responseStripAfter){this.dataSource.doBeforeParseData=this.preparseRawResponse;}if(this.applyLocalFilter){this.dataSource.doBeforeCallback=this.filterResults;}var B=this.generateRequest(D);this.dataRequestEvent.fire(this,D,B);this.dataSource.sendRequest(B,{success:this.handleResponse,failure:this.handleResponse,scope:this,argument:{query:D}});};YAHOO.widget.AutoComplete.prototype._populateList=function(K,F,C){if(this._nTypeAheadDelayID!=-1){clearTimeout(this._nTypeAheadDelayID);}K=(C&&C.query)?C.query:K;var H=this.doBeforeLoadData(K,F,C);if(H&&!F.error){this.dataReturnEvent.fire(this,K,F.results);if(this._bFocused||(this._bFocused===null)){var M=decodeURIComponent(K);this._sCurQuery=M;
+this._bItemSelected=false;var R=F.results,A=Math.min(R.length,this.maxResultsDisplayed),J=(this.dataSource.responseSchema.fields)?(this.dataSource.responseSchema.fields[0].key||this.dataSource.responseSchema.fields[0]):0;if(A>0){if(!this._elList||(this._elList.childNodes.length<A)){this._initListEl();}this._initContainerHelperEls();var I=this._elList.childNodes;for(var Q=A-1;Q>=0;Q--){var P=I[Q],E=R[Q];if(this.resultTypeList){var B=[];B[0]=(YAHOO.lang.isString(E))?E:E[J]||E[this.key];var L=this.dataSource.responseSchema.fields;if(YAHOO.lang.isArray(L)&&(L.length>1)){for(var N=1,S=L.length;N<S;N++){B[B.length]=E[L[N].key||L[N]];}}else{if(YAHOO.lang.isArray(E)){B=E;}else{if(YAHOO.lang.isString(E)){B=[E];}else{B[1]=E;}}}E=B;}P._sResultMatch=(YAHOO.lang.isString(E))?E:(YAHOO.lang.isArray(E))?E[0]:(E[J]||"");P._oResultData=E;P.innerHTML=this.formatResult(E,M,P._sResultMatch);P.style.display="";}if(A<I.length){var G;for(var O=I.length-1;O>=A;O--){G=I[O];G.style.display="none";}}t!
 his._nDisplayedItems=A;this.containerPopulateEvent.fire(this,K,R);if(this.autoHighlight){var D=this._elList.firstChild;this._toggleHighlight(D,"to");this.itemArrowToEvent.fire(this,D);this._typeAhead(D,K);}else{this._toggleHighlight(this._elCurListItem,"from");}H=this.doBeforeExpandContainer(this._elTextbox,this._elContainer,K,R);this._toggleContainer(H);}else{this._toggleContainer(false);}return;}}else{this.dataErrorEvent.fire(this,K);}};YAHOO.widget.AutoComplete.prototype._clearSelection=function(){var A=(this.delimChar)?this._extractQuery(this._elTextbox.value):{previous:"",query:this._elTextbox.value};this._elTextbox.value=A.previous;this.selectionEnforceEvent.fire(this,A.query);};YAHOO.widget.AutoComplete.prototype._textMatchesOption=function(){var A=null;for(var B=0;B<this._nDisplayedItems;B++){var C=this._elList.childNodes[B];var D=(""+C._sResultMatch).toLowerCase();if(D==this._sCurQuery.toLowerCase()){A=C;break;}}return(A);};YAHOO.widget.AutoComplete.prototype._type!
 Ahead=function(B,D){if(!this.typeAhead||(this._nKeyCode==8)){r!
 eturn;}v
ar A=this,C=this._elTextbox;if(C.setSelectionRange||C.createTextRange){this._nTypeAheadDelayID=setTimeout(function(){var F=C.value.length;A._updateValue(B);var G=C.value.length;A._selectText(C,F,G);var E=C.value.substr(F,G);A.typeAheadEvent.fire(A,D,E);},(this.typeAheadDelay*1000));}};YAHOO.widget.AutoComplete.prototype._selectText=function(D,A,B){if(D.setSelectionRange){D.setSelectionRange(A,B);}else{if(D.createTextRange){var C=D.createTextRange();C.moveStart("character",A);C.moveEnd("character",B-D.value.length);C.select();}else{D.select();}}};YAHOO.widget.AutoComplete.prototype._extractQuery=function(H){var C=this.delimChar,F=-1,G,E,B=C.length-1,D;for(;B>=0;B--){G=H.lastIndexOf(C[B]);if(G>F){F=G;}}if(C[B]==" "){for(var A=C.length-1;A>=0;A--){if(H[F-1]==C[A]){F--;break;}}}if(F>-1){E=F+1;while(H.charAt(E)==" "){E+=1;}D=H.substring(0,E);H=H.substr(E);}else{D="";}return{previous:D,query:H};};YAHOO.widget.AutoComplete.prototype._toggleContainerHelpers=function(D){var E=this._e!
 lContent.offsetWidth+"px";var B=this._elContent.offsetHeight+"px";if(this.useIFrame&&this._elIFrame){var C=this._elIFrame;if(D){C.style.width=E;C.style.height=B;C.style.padding="";}else{C.style.width=0;C.style.height=0;C.style.padding=0;}}if(this.useShadow&&this._elShadow){var A=this._elShadow;if(D){A.style.width=E;A.style.height=B;}else{A.style.width=0;A.style.height=0;}}};YAHOO.widget.AutoComplete.prototype._toggleContainer=function(I){var D=this._elContainer;if(this.alwaysShowContainer&&this._bContainerOpen){return;}if(!I){this._toggleHighlight(this._elCurListItem,"from");this._nDisplayedItems=0;this._sCurQuery=null;if(this._elContent.style.display=="none"){return;}}var A=this._oAnim;if(A&&A.getEl()&&(this.animHoriz||this.animVert)){if(A.isAnimated()){A.stop(true);}var G=this._elContent.cloneNode(true);D.appendChild(G);G.style.top="-9000px";G.style.width="";G.style.height="";G.style.display="";var F=G.offsetWidth;var C=G.offsetHeight;var B=(this.animHoriz)?0:F;var E=(thi!
 s.animVert)?0:C;A.attributes=(I)?{width:{to:F},height:{to:C}}:!
 {width:{
to:B},height:{to:E}};if(I&&!this._bContainerOpen){this._elContent.style.width=B+"px";this._elContent.style.height=E+"px";}else{this._elContent.style.width=F+"px";this._elContent.style.height=C+"px";}D.removeChild(G);G=null;var H=this;var J=function(){A.onComplete.unsubscribeAll();if(I){H._toggleContainerHelpers(true);H._bContainerOpen=I;H.containerExpandEvent.fire(H);}else{H._elContent.style.display="none";H._bContainerOpen=I;H.containerCollapseEvent.fire(H);}};this._toggleContainerHelpers(false);this._elContent.style.display="";A.onComplete.subscribe(J);A.animate();}else{if(I){this._elContent.style.display="";this._toggleContainerHelpers(true);this._bContainerOpen=I;this.containerExpandEvent.fire(this);}else{this._toggleContainerHelpers(false);this._elContent.style.display="none";this._bContainerOpen=I;this.containerCollapseEvent.fire(this);}}};YAHOO.widget.AutoComplete.prototype._toggleHighlight=function(A,C){if(A){var B=this.highlightClassName;if(this._elCurListItem){YAHO!
 O.util.Dom.removeClass(this._elCurListItem,B);this._elCurListItem=null;}if((C=="to")&&B){YAHOO.util.Dom.addClass(A,B);this._elCurListItem=A;}}};YAHOO.widget.AutoComplete.prototype._togglePrehighlight=function(B,C){if(B==this._elCurListItem){return;}var A=this.prehighlightClassName;if((C=="mouseover")&&A){YAHOO.util.Dom.addClass(B,A);}else{YAHOO.util.Dom.removeClass(B,A);}};YAHOO.widget.AutoComplete.prototype._updateValue=function(C){if(!this.suppressInputUpdate){var F=this._elTextbox;var E=(this.delimChar)?(this.delimChar[0]||this.delimChar):null;var B=C._sResultMatch;var D="";if(E){D=this._sPastSelections;D+=B+E;if(E!=" "){D+=" ";}}else{D=B;}F.value=D;if(F.type=="textarea"){F.scrollTop=F.scrollHeight;}var A=F.value.length;this._selectText(F,A,A);this._elCurListItem=C;}};YAHOO.widget.AutoComplete.prototype._selectItem=function(A){this._bItemSelected=true;this._updateValue(A);this._sPastSelections=this._elTextbox.value;
+this._clearInterval();this.itemSelectEvent.fire(this,A,A._oResultData);this._toggleContainer(false);};YAHOO.widget.AutoComplete.prototype._jumpSelection=function(){if(this._elCurListItem){this._selectItem(this._elCurListItem);}else{this._toggleContainer(false);}};YAHOO.widget.AutoComplete.prototype._moveSelection=function(G){if(this._bContainerOpen){var H=this._elCurListItem,D=-1;if(H){D=H._nItemIndex;}var E=(G==40)?(D+1):(D-1);if(E<-2||E>=this._nDisplayedItems){return;}if(H){this._toggleHighlight(H,"from");this.itemArrowFromEvent.fire(this,H);}if(E==-1){if(this.delimChar){this._elTextbox.value=this._sPastSelections+this._sCurQuery;}else{this._elTextbox.value=this._sCurQuery;}return;}if(E==-2){this._toggleContainer(false);return;}var F=this._elList.childNodes[E],B=this._elContent,C=YAHOO.util.Dom.getStyle(B,"overflow"),I=YAHOO.util.Dom.getStyle(B,"overflowY"),A=((C=="auto")||(C=="scroll")||(I=="auto")||(I=="scroll"));if(A&&(E>-1)&&(E<this._nDisplayedItems)){if(G==40){if((F.!
 offsetTop+F.offsetHeight)>(B.scrollTop+B.offsetHeight)){B.scrollTop=(F.offsetTop+F.offsetHeight)-B.offsetHeight;}else{if((F.offsetTop+F.offsetHeight)<B.scrollTop){B.scrollTop=F.offsetTop;}}}else{if(F.offsetTop<B.scrollTop){this._elContent.scrollTop=F.offsetTop;}else{if(F.offsetTop>(B.scrollTop+B.offsetHeight)){this._elContent.scrollTop=(F.offsetTop+F.offsetHeight)-B.offsetHeight;}}}}this._toggleHighlight(F,"to");this.itemArrowToEvent.fire(this,F);if(this.typeAhead){this._updateValue(F);}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseover=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":if(C.prehighlightClassName){C._togglePrehighlight(D,"mouseover");}else{C._toggleHighlight(D,"to");}C.itemMouseOverEvent.fire(C,D);break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=true;return;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase(!
 );}}};YAHOO.widget.AutoComplete.prototype._onContainerMouseout!
 =functio
n(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":if(C.prehighlightClassName){C._togglePrehighlight(D,"mouseout");}else{C._toggleHighlight(D,"from");}C.itemMouseOutEvent.fire(C,D);break;case"ul":C._toggleHighlight(C._elCurListItem,"to");break;case"div":if(YAHOO.util.Dom.hasClass(D,"yui-ac-container")){C._bOverContainer=false;return;}break;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerClick=function(A,C){var D=YAHOO.util.Event.getTarget(A);var B=D.nodeName.toLowerCase();while(D&&(B!="table")){switch(B){case"body":return;case"li":C._toggleHighlight(D,"to");C._selectItem(D);return;default:break;}D=D.parentNode;if(D){B=D.nodeName.toLowerCase();}}};YAHOO.widget.AutoComplete.prototype._onContainerScroll=function(A,B){B._focus();};YAHOO.widget.AutoComplete.prototype._onContainerResize=function(A,B){B._toggleContainerHelpers(B._bCon!
 tainerOpen);};YAHOO.widget.AutoComplete.prototype._onTextboxKeyDown=function(A,B){var C=A.keyCode;if(B._nTypeAheadDelayID!=-1){clearTimeout(B._nTypeAheadDelayID);}switch(C){case 9:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B.delimChar&&(B._nKeyCode!=C)){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(!YAHOO.env.ua.opera&&(navigator.userAgent.toLowerCase().indexOf("mac")==-1)||(YAHOO.env.ua.webkit>420)){if(B._elCurListItem){if(B._nKeyCode!=C){if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);}}B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 27:B._toggleContainer(false);return;case 39:B._jumpSelection();break;case 38:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C);}break;case 40:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);B._moveSelection(C!
 );}break;default:B._bItemSelected=false;B._toggleHighlight(B._!
 elCurLis
tItem,"from");B.textboxKeyEvent.fire(B,C);break;}if(C===18){B._enableIntervalDetection();}B._nKeyCode=C;};YAHOO.widget.AutoComplete.prototype._onTextboxKeyPress=function(A,B){var C=A.keyCode;if(YAHOO.env.ua.opera||(navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&(YAHOO.env.ua.webkit<420)){switch(C){case 9:if(B._bContainerOpen){if(B.delimChar){YAHOO.util.Event.stopEvent(A);}if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;case 13:if(B._bContainerOpen){YAHOO.util.Event.stopEvent(A);if(B._elCurListItem){B._selectItem(B._elCurListItem);}else{B._toggleContainer(false);}}break;default:break;}}else{if(C==229){B._enableIntervalDetection();}}};YAHOO.widget.AutoComplete.prototype._onTextboxKeyUp=function(A,C){var B=this.value;C._initProps();var D=A.keyCode;if(C._isIgnoreKey(D)){return;}if(C._nDelayID!=-1){clearTimeout(C._nDelayID);}C._nDelayID=setTimeout(function(){C._sendQuery(B);},(C.queryDelay*1000));};YAHOO.widget.AutoComplete.pro!
 totype._onTextboxFocus=function(A,B){if(!B._bFocused){B._elTextbox.setAttribute("autocomplete","off");B._bFocused=true;B._sInitInputValue=B._elTextbox.value;B.textboxFocusEvent.fire(B);}};YAHOO.widget.AutoComplete.prototype._onTextboxBlur=function(A,C){if(!C._bOverContainer||(C._nKeyCode==9)){if(!C._bItemSelected){var B=C._textMatchesOption();if(!C._bContainerOpen||(C._bContainerOpen&&(B===null))){if(C.forceSelection){C._clearSelection();}else{C.unmatchedItemSelectEvent.fire(C,C._sCurQuery);}}else{if(C.forceSelection){C._selectItem(B);}}}C._clearInterval();C._bFocused=false;if(C._sInitInputValue!==C._elTextbox.value){C.textboxChangeEvent.fire(C);}C.textboxBlurEvent.fire(C);C._toggleContainer(false);}else{C._focus();}};YAHOO.widget.AutoComplete.prototype._onWindowUnload=function(A,B){if(B&&B._elTextbox&&B.allowBrowserAutocomplete){B._elTextbox.setAttribute("autocomplete","on");}};YAHOO.widget.AutoComplete.prototype.doBeforeSendQuery=function(A){return this.generateRequest(A);
+};YAHOO.widget.AutoComplete.prototype.getListItems=function(){var C=[],B=this._elList.childNodes;for(var A=B.length-1;A>=0;A--){C[A]=B[A];}return C;};YAHOO.widget.AutoComplete._cloneObject=function(D){if(!YAHOO.lang.isValue(D)){return D;}var F={};if(YAHOO.lang.isFunction(D)){F=D;}else{if(YAHOO.lang.isArray(D)){var E=[];for(var C=0,B=D.length;C<B;C++){E[C]=YAHOO.widget.AutoComplete._cloneObject(D[C]);}F=E;}else{if(YAHOO.lang.isObject(D)){for(var A in D){if(YAHOO.lang.hasOwnProperty(D,A)){if(YAHOO.lang.isValue(D[A])&&YAHOO.lang.isObject(D[A])||YAHOO.lang.isArray(D[A])){F[A]=YAHOO.widget.AutoComplete._cloneObject(D[A]);}else{F[A]=D[A];}}}}else{F=D;}}}return F;};YAHOO.register("autocomplete",YAHOO.widget.AutoComplete,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/autocomplete/autocomplete.js
===================================================================
--- trunk/root/static/yui/autocomplete/autocomplete.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/autocomplete/autocomplete.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -475,7 +475,7 @@
 /**
  * Whether or not the input field should be updated with selections.
  *
- * @property supressInputUpdate
+ * @property suppressInputUpdate
  * @type Boolean
  * @default false
  */
@@ -691,6 +691,7 @@
 * 
 * @method generateRequest
 * @param sQuery {String} Query string
+* @return {MIXED} Request
 */
 YAHOO.widget.AutoComplete.prototype.generateRequest = function(sQuery) {
     var dataType = this.dataSource.dataType;
@@ -725,7 +726,10 @@
  * @param sQuery {String} Query string.
  */
 YAHOO.widget.AutoComplete.prototype.sendQuery = function(sQuery) {
-    // Adjust programatically sent queries to look like they input by user
+    // Reset focus for a new interaction
+    this._bFocused = null;
+    
+    // Adjust programatically sent queries to look like they were input by user
     // when delimiters are enabled
     var newQuery = (this.delimChar) ? this._elTextbox.value + sQuery : sQuery;
     this._sendQuery(newQuery);
@@ -793,6 +797,11 @@
  */
 
 YAHOO.widget.AutoComplete.prototype.filterResults = function(sQuery, oFullResponse, oParsedResponse, oCallback) {
+    // If AC has passed a query string value back to itself, grab it
+    if(oCallback && oCallback.argument && oCallback.argument.query) {
+        sQuery = oCallback.argument.query;
+    }
+
     // Only if a query string is available to match against
     if(sQuery && sQuery !== "") {
         // First make a copy of the oParseResponse
@@ -919,7 +928,7 @@
  * Nulls out the entire AutoComplete instance and related objects, removes attached
  * event listeners, and clears out DOM elements inside the container. After
  * calling this method, the instance reference should be expliclitly nulled by
- * implementer, as in myDataTable = null. Use with caution!
+ * implementer, as in myAutoComplete = null. Use with caution!
  *
  * @method destroy
  */
@@ -1031,8 +1040,6 @@
  *
  * @event containerExpandEvent
  * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @param sQuery {String} The query string.
- * @param aResults {Object[]} Results array.
  */
 YAHOO.widget.AutoComplete.prototype.containerExpandEvent = null;
 
@@ -1109,6 +1116,7 @@
  *
  * @event selectionEnforceEvent
  * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
+ * @param sClearedValue {String} The cleared value (including delimiters if applicable). 
  */
 YAHOO.widget.AutoComplete.prototype.selectionEnforceEvent = null;
 
@@ -1562,10 +1570,27 @@
 };
 
 /**
+ * Focuses input field.
+ *
+ * @method _focus
+ * @private
+ */
+YAHOO.widget.AutoComplete.prototype._focus = function() {
+    // http://developer.mozilla.org/en/docs/index.php?title=Key-navigable_custom_DHTML_widgets
+    var oSelf = this;
+    setTimeout(function() {
+        try {
+            oSelf._elTextbox.focus();
+        }
+        catch(e) {
+        }
+    },0);
+};
+
+/**
  * Enables interval detection for IME support.
  *
  * @method _enableIntervalDetection
- * @re 
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._enableIntervalDetection = function() {
@@ -1646,44 +1671,12 @@
         return;
     }
     // Delimiter has been enabled
-    var aDelimChar = (this.delimChar) ? this.delimChar : null;
-    if(aDelimChar) {
-        // Loop through all possible delimiters and find the rightmost one in the query
-        // A " " may be a false positive if they are defined as delimiters AND
-        // are used to separate delimited queries
-        var nDelimIndex = -1;
-        for(var i = aDelimChar.length-1; i >= 0; i--) {
-            var nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
-            if(nNewIndex > nDelimIndex) {
-                nDelimIndex = nNewIndex;
-            }
-        }
-        // If we think the last delimiter is a space (" "), make sure it is NOT
-        // a false positive by also checking the char directly before it
-        if(aDelimChar[i] == " ") {
-            for (var j = aDelimChar.length-1; j >= 0; j--) {
-                if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
-                    nDelimIndex--;
-                    break;
-                }
-            }
-        }
-        // A delimiter has been found in the query so extract the latest query from past selections
-        if(nDelimIndex > -1) {
-            var nQueryStart = nDelimIndex + 1;
-            // Trim any white space from the beginning...
-            while(sQuery.charAt(nQueryStart) == " ") {
-                nQueryStart += 1;
-            }
-            // ...and save the rest of the string for later
-            this._sPastSelections = sQuery.substring(0,nQueryStart);
-            // Here is the query itself
-            sQuery = sQuery.substr(nQueryStart);
-        }
-        // No delimiter found in the query, so there are no selections from past queries
-        else {
-            this._sPastSelections = "";
-        }
+    if(this.delimChar) {
+        var extraction = this._extractQuery(sQuery);
+        // Here is the query itself
+        sQuery = extraction.query;
+        // ...and save the rest of the string for later
+        this._sPastSelections = extraction.previous;
     }
 
     // Don't search queries that are too short
@@ -1875,20 +1868,10 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._clearSelection = function() {
-    var sValue = this._elTextbox.value;
-    //TODO: need to check against all delimChars?
-    var sChar = (this.delimChar) ? this.delimChar[0] : null;
-    var nIndex = (sChar) ? sValue.lastIndexOf(sChar, sValue.length-2) : -1;
-    if(nIndex > -1) {
-        this._elTextbox.value = sValue.substring(0,nIndex);
-    }
-    else {
-         this._elTextbox.value = "";
-    }
-    this._sPastSelections = this._elTextbox.value;
-
-    // Fire custom event
-    this.selectionEnforceEvent.fire(this);
+    var extraction = (this.delimChar) ? this._extractQuery(this._elTextbox.value) :
+            {previous:"",query:this._elTextbox.value};
+    this._elTextbox.value = extraction.previous;
+    this.selectionEnforceEvent.fire(this, extraction.query);
 };
 
 /**
@@ -1903,7 +1886,7 @@
 YAHOO.widget.AutoComplete.prototype._textMatchesOption = function() {
     var elMatch = null;
 
-    for(var i = this._nDisplayedItems-1; i >= 0 ; i--) {
+    for(var i=0; i<this._nDisplayedItems; i++) {
         var elListItem = this._elList.childNodes[i];
         var sMatch = ("" + elListItem._sResultMatch).toLowerCase();
         if(sMatch == this._sCurQuery.toLowerCase()) {
@@ -1972,6 +1955,63 @@
 };
 
 /**
+ * Extracts rightmost query from delimited string.
+ *
+ * @method _extractQuery
+ * @param sQuery {String} String to parse
+ * @return {Object} Object literal containing properties "query" and "previous".  
+ * @private
+ */
+YAHOO.widget.AutoComplete.prototype._extractQuery = function(sQuery) {
+    var aDelimChar = this.delimChar,
+        nDelimIndex = -1,
+        nNewIndex, nQueryStart,
+        i = aDelimChar.length-1,
+        sPrevious;
+        
+    // Loop through all possible delimiters and find the rightmost one in the query
+    // A " " may be a false positive if they are defined as delimiters AND
+    // are used to separate delimited queries
+    for(; i >= 0; i--) {
+        nNewIndex = sQuery.lastIndexOf(aDelimChar[i]);
+        if(nNewIndex > nDelimIndex) {
+            nDelimIndex = nNewIndex;
+        }
+    }
+    // If we think the last delimiter is a space (" "), make sure it is NOT
+    // a false positive by also checking the char directly before it
+    if(aDelimChar[i] == " ") {
+        for (var j = aDelimChar.length-1; j >= 0; j--) {
+            if(sQuery[nDelimIndex - 1] == aDelimChar[j]) {
+                nDelimIndex--;
+                break;
+            }
+        }
+    }
+    // A delimiter has been found in the query so extract the latest query from past selections
+    if(nDelimIndex > -1) {
+        nQueryStart = nDelimIndex + 1;
+        // Trim any white space from the beginning...
+        while(sQuery.charAt(nQueryStart) == " ") {
+            nQueryStart += 1;
+        }
+        // ...and save the rest of the string for later
+        sPrevious = sQuery.substring(0,nQueryStart);
+        // Here is the query itself
+        sQuery = sQuery.substr(nQueryStart);
+    }
+    // No delimiter found in the query, so there are no selections from past queries
+    else {
+        sPrevious = "";
+    }
+    
+    return {
+        previous: sPrevious,
+        query: sQuery
+    };
+};
+
+/**
  * Syncs results container with its helpers.
  *
  * @method _toggleContainerHelpers
@@ -2016,6 +2056,7 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._toggleContainer = function(bShow) {
+
     var elContainer = this._elContainer;
 
     // If implementer has container always open and it's already open, don't mess with it
@@ -2031,8 +2072,7 @@
         this._sCurQuery = null;
         
         // Container is already closed, so don't bother with changing the UI
-        if(!this._bContainerOpen) {
-            this._elContent.style.display = "none";
+        if(this._elContent.style.display == "none") {
             return;
         }
     }
@@ -2259,8 +2299,8 @@
 YAHOO.widget.AutoComplete.prototype._moveSelection = function(nKeyCode) {
     if(this._bContainerOpen) {
         // Determine current item's id number
-        var elCurListItem = this._elCurListItem;
-        var nCurItemIndex = -1;
+        var elCurListItem = this._elCurListItem,
+            nCurItemIndex = -1;
 
         if(elCurListItem) {
             nCurItemIndex = elCurListItem._nItemIndex;
@@ -2295,12 +2335,13 @@
             return;
         }
         
-        var elNewListItem = this._elList.childNodes[nNewItemIndex];
+        var elNewListItem = this._elList.childNodes[nNewItemIndex],
 
         // Scroll the container if necessary
-        var elContent = this._elContent;
-        var scrollOn = ((YAHOO.util.Dom.getStyle(elContent,"overflow") == "auto") ||
-            (YAHOO.util.Dom.getStyle(elContent,"overflowY") == "auto"));
+            elContent = this._elContent,
+            sOF = YAHOO.util.Dom.getStyle(elContent,"overflow"),
+            sOFY = YAHOO.util.Dom.getStyle(elContent,"overflowY"),
+            scrollOn = ((sOF == "auto") || (sOF == "scroll") || (sOFY == "auto") || (sOFY == "scroll"));
         if(scrollOn && (nNewItemIndex > -1) &&
         (nNewItemIndex < this._nDisplayedItems)) {
             // User is keying down
@@ -2347,58 +2388,6 @@
 /////////////////////////////////////////////////////////////////////////////
 
 /**
- * Handles <li> element mouseover events in the container.
- *
- * @method _onItemMouseover
- * @param v {HTMLEvent} The mouseover event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseover = function(v,oSelf) {
-    if(oSelf.prehighlightClassName) {
-        oSelf._togglePrehighlight(this,"mouseover");
-    }
-    else {
-        oSelf._toggleHighlight(this,"to");
-    }
-
-    oSelf.itemMouseOverEvent.fire(oSelf, this);
-};*/
-
-/**
- * Handles <li> element mouseout events in the container.
- *
- * @method _onItemMouseout
- * @param v {HTMLEvent} The mouseout event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseout = function(v,oSelf) {
-    if(oSelf.prehighlightClassName) {
-        oSelf._togglePrehighlight(this,"mouseout");
-    }
-    else {
-        oSelf._toggleHighlight(this,"from");
-    }
-
-    oSelf.itemMouseOutEvent.fire(oSelf, this);
-};*/
-
-/**
- * Handles <li> element click events in the container.
- *
- * @method _onItemMouseclick
- * @param v {HTMLEvent} The click event.
- * @param oSelf {YAHOO.widget.AutoComplete} The AutoComplete instance.
- * @private
- */
-/*YAHOO.widget.AutoComplete.prototype._onItemMouseclick = function(v,oSelf) {
-    // In case item has not been moused over
-    oSelf._toggleHighlight(this,"to");
-    oSelf._selectItem(this);
-};*/
-
-/**
  * Handles container mouseover events.
  *
  * @method _onContainerMouseover
@@ -2526,7 +2515,7 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._onContainerScroll = function(v,oSelf) {
-    oSelf._elTextbox.focus();
+    oSelf._focus();
 };
 
 /**
@@ -2740,7 +2729,7 @@
  * @private
  */
 YAHOO.widget.AutoComplete.prototype._onTextboxBlur = function (v,oSelf) {
-    // Don't treat as a blur if it was a selection via mouse click
+    // Is a true blur
     if(!oSelf._bOverContainer || (oSelf._nKeyCode == 9)) {
         // Current query needs to be validated as a selection
         if(!oSelf._bItemSelected) {
@@ -2765,16 +2754,19 @@
             }
         }
 
-        if(oSelf._bContainerOpen) {
-            oSelf._toggleContainer(false);
-        }
         oSelf._clearInterval();
         oSelf._bFocused = false;
         if(oSelf._sInitInputValue !== oSelf._elTextbox.value) {
             oSelf.textboxChangeEvent.fire(oSelf);
         }
         oSelf.textboxBlurEvent.fire(oSelf);
+
+        oSelf._toggleContainer(false);
     }
+    // Not a true blur if it was a selection via mouse click
+    else {
+        oSelf._focus();
+    }
 };
 
 /**
@@ -2870,4 +2862,4 @@
 
 
 
-YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.6.0", build: "1321"});
+YAHOO.register("autocomplete", YAHOO.widget.AutoComplete, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/base/README
===================================================================
--- trunk/root/static/yui/base/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/base/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,29 +0,0 @@
-YUI Library - Base - Release Notes
-
-Version 2.6.0
-
-  * No changes.
-
-Version 2.5.2
-
-  * No changes.
-
-Version 2.5.1
-
-  * No changes.
-
-Version 2.5.0
-
-  * No changes.
-
-Version 2.4.0
-
-  * Fixed typo in comments.
-  * Added margin-bottom:1em; for PRE element to match P
-  * Added color:#000 for legend element, accomodation for IE
-  * Added set width (equivilant to 160px but set in EMs) for input's
-    width type = text or password, and for textareas. 
-  
-Version 2.3.0
-
-  * Initial release.
\ No newline at end of file

Modified: trunk/root/static/yui/base/base-min.css
===================================================================
--- trunk/root/static/yui/base/base-min.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/base/base-min.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong{font-weight:bold;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;} em{font-style:italic;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}p,fieldset,table,pre{margin-bottom:1em;}input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
+body{margin:10px;}h1{font-size:138.5%;}h2{font-size:123.1%;}h3{font-size:108%;}h1,h2,h3{margin:1em 0;}h1,h2,h3,h4,h5,h6,strong,dt{font-weight:bold;}optgroup{font-weight:normal;}abbr,acronym{border-bottom:1px dotted #000;cursor:help;}em{font-style:italic;}del{text-decoration:line-through;}blockquote,ul,ol,dl{margin:1em;}ol,ul,dl{margin-left:2em;}ol li{list-style:decimal outside;}ul li{list-style:disc outside;}dl dd{margin-left:1em;}th,td{border:1px solid #000;padding:.5em;}th{font-weight:bold;text-align:center;}caption{margin-bottom:.5em;text-align:center;}sup{vertical-align:super;}sub{vertical-align:sub;}p,fieldset,table,pre{margin-bottom:1em;}button,input[type="checkbox"],input[type="radio"],input[type="reset"],input[type="submit"]{padding:1px;}
\ No newline at end of file

Modified: trunk/root/static/yui/base/base.css
===================================================================
--- trunk/root/static/yui/base/base.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/base/base.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,82 +1,131 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-/* base.css, part of YUI's CSS Foundation */
+/**
+ * YUI Base
+ * @module base
+ * @namespace yui-
+ * @requires reset, fonts
+*/
+
+body {
+	/* For breathing room between content and viewport. */
+	margin:10px;
+}
+
 h1 {
-	/*18px via YUI Fonts CSS foundation*/
-	font-size:138.5%;  
+	/* 18px via YUI Fonts CSS foundation. */
+	font-size: 138.5%;
 }
+
 h2 {
-	/*16px via YUI Fonts CSS foundation*/
-	font-size:123.1%; 
+	/* 16px via YUI Fonts CSS foundation. */
+	font-size: 123.1%;
 }
+
 h3 {
-	/*14px via YUI Fonts CSS foundation*/
-	font-size:108%;  
+	/* 14px via YUI Fonts CSS foundation. */
+	font-size: 108%;
 }
+
 h1,h2,h3 {
-	/* top & bottom margin based on font size */
-	margin:1em 0;
+	/* Top & bottom margin based on font size. */
+	margin: 1em 0;
 }
-h1,h2,h3,h4,h5,h6,strong {
-	/*bringing boldness back to headers and the strong element*/
-	font-weight:bold; 
+
+h1,h2,h3,h4,h5,h6,strong,dt {
+	/* Bringing boldness back to headers and the strong element. */
+	font-weight: bold;
 }
+optgroup {
+	font-weight:normal;
+}
+
 abbr,acronym {
-	/*indicating to users that more info is available */
-	border-bottom:1px dotted #000;
-	cursor:help;
-} 
+	/* Indicating to users that more info is available. */
+	border-bottom: 1px dotted #000;
+	cursor: help;
+}
+
 em {
-	/*bringing italics back to the em element*/
-	font-style:italic;
+	/* Bringing italics back to the em element. */
+	font-style: italic;
 }
+
 del {
-	text-decoration:line-through;
+	/* Striking deleted phrases. */
+	text-decoration: line-through;
 }
+
 blockquote,ul,ol,dl {
-	/*giving blockquotes and lists room to breath*/
-	margin:1em;
+	/* Giving blockquotes and lists room to breath. */
+	margin: 1em;
 }
+
 ol,ul,dl {
-	/*bringing lists on to the page with breathing room */
-	margin-left:2em;
+	/* Bringing lists on to the page with breathing room. */
+	margin-left: 2em;
 }
+
 ol li {
-	/*giving OL's LIs generated numbers*/
-	list-style: decimal outside;	
+	/* Giving OL's LIs generated numbers. */
+	list-style: decimal outside;
 }
+
 ul li {
-	/*giving UL's LIs generated disc markers*/
+	/* Giving UL's LIs generated disc markers. */
 	list-style: disc outside;
 }
+
 dl dd {
-	/*giving UL's LIs generated numbers*/
-	margin-left:1em;
+	/* Giving UL's LIs generated numbers. */
+	margin-left: 1em;
 }
+
 th,td {
-	/*borders and padding to make the table readable*/
-	border:1px solid #000;
-	padding:.5em;
+	/* Borders and padding to make the table readable. */
+	border: 1px solid #000;
+	padding: .5em;
 }
+
 th {
-	/*distinguishing table headers from data cells*/
-	font-weight:bold;
-	text-align:center;
+	/* Distinguishing table headers from data cells. */
+	font-weight: bold;
+	text-align: center;
 }
+
 caption {
-	/*coordinated margin to match cell's padding*/
-	margin-bottom:.5em;
-	/*centered so it doesn't blend in to other content*/
-	text-align:center;
+	/* Coordinated margin to match cell's padding. */
+	margin-bottom: .5em;
+	/* Centered so it doesn't blend in to other content. */
+	text-align: center;
 }
-p,fieldset,table,pre {
-	/*so things don't run into each other*/
-	margin-bottom:1em;
+
+sup {
+	/* to preserve line-height and selector appearance */
+	vertical-align: super;
 }
-/* setting a consistent width, 160px; 
-   control of type=file still not possible */
-input[type=text],input[type=password],textarea{width:12.25em;*width:11.9em;}
+
+sub {
+	/* to preserve line-height and selector appearance */
+	vertical-align: sub;
+}
+
+p,
+fieldset,
+table,
+pre {
+	/* So things don't run into each other. */
+	margin-bottom: 1em;
+}
+/* Opera requires 1px of passing to render with contemporary native chrome */
+button,
+input[type="checkbox"],
+input[type="radio"],
+input[type="reset"],
+input[type="submit"] {
+	padding:1px;
+}

Deleted: trunk/root/static/yui/button/README
===================================================================
--- trunk/root/static/yui/button/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,436 +0,0 @@
-*** version 2.6.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Clicking on the option region of a Button of "type" split will fire the "option" event, but not
-  "mousedown," "mouseup," "click," or "dblclick".
-
-+ Buttons of type "radio" and "checkbox" will not override a value provided for the title attribute.
-
-+ Returning false in an inline "submit" event handler for a form will now prevent the form
-  from being submitted when the form contains Button instances.
-  
-+ Pressing the enter key to submit a form containing Button instances will no longer 
-  trigger a beep sound in Internet Explorer.
-
-+ The Button widget no longer logs errors when strict error reporting is enabled in FireFox.
-
-+ Button instances are now automatically clicked when their corresponding <label> is clicked.
-
-+ The name and value of selected MenuItems in submenus of a Button's Menu are now part of their
-  parent form's data when the form is submitted.
-
-+ For Button's of type "menu" and "split" created using an existing <SELECT> element: The name and 
-  value of the pre-selected MenuItem in a Button's Menu are now part of their parent form's data 
-  when the form is submitted.
-	
-+ The "appendTo" event now correctly fires when the "container" attribute is set to a 
-  node reference.
-
-+ Simple forms with two fields: a Button of type "submit" and a text field will no longer 
-  be submitted twice when the enter key is pressed.
-
-+ Submitting a form by pressing the enter key will now result in a Button's "click" event 
-  handlers getting called.
-
-+ Buttons of type "menu" and "split" now consistently display their Menus in Opera.
-
-+ Button no longer logs a warning when a Button is created without an id.
-  
-
-Added the following features:
------------------------------
-
-+ Added a new "menumaxheight" attribute used to set the "maxheight" configuration property of a 
-  Button's Menu.
-
-+ Added a new "menuminscrollheight" attribute used to set the "minscrollheight" configuration 
-  property of a Button's Menu.
-
-+ Added a "menualignment" attribute attribute used to control how a Menu is aligned to its 
-  corresponding Button.
-
-+ Added a "yui-split-button-hoveroption" CSS class that is applied when the user hovers the mouse 
-  over the "option" section of a split button.
-
-
-Changes:
---------
-
-+ Removed the rounded corners for IE 6 Quirks Mode and Strict Mode and IE 7 Quirks Mode.
-
-+ Changed the keyboard shortcut used to display the Menu for Button's of type "split" to the down
-  arrow key.
-
-+ Passing a DOM element reference to the "container" attribute will no longer result in the Button 
-  being appended to the container immediately.  Use the "appendTo" event to listen for when 
-  the Button will be appended to the element specified as its container.  To append a Button to
-  an element in the DOM immediately, use the "appendTo" method rather than the "container" 
-  attribute.
-
-
-*** Version 2.5.2 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Button instances no longer flicker in Firefox 3 when their "label" attributed is updated.
-
-+ Scrolled Menus of Buttons whose type attribute is set to "menu" or "split" no longer appear 
-  on top of their corresponding Button instance.
-
-+ The keyboard shortcut responsible for triggering the display of the Menu for Button instances of
-  type "split" will no longer trigger the display of the browser's default context menu in Opera.
-
-
-
-*** Version 2.5.1 ***
-
-+ No changes.
-
-
-
-*** Version 2.5.0 ***
-
-+ Fixed issue where returning false inside the scope of a listener for attribute "before" 
-  events (i.e "beforeCheckedChange") would not cancel the attribute's default setter.
-
-
-
-*** Version 2.4.1 ***
-
-+ No changes.
-
-
-
-*** Version 2.4.0 ***
-
-Added the following features:
------------------------------
-
-+ Added a static method "YAHOO.widget.Button.getButton" that returns a Button 
-  instance with the specified HTML element id.
-
-
-Fixed the following bugs:
--------------------------
-
-+ Removed the ".yui-skin-sam" CSS class name from style rules in the core 
-  stylesheet so that it is now truly skin agnostic.
-
-+ Updated the default text for tooltips for Buttons of type "radio" so that 
-  they offer the correct instructional text.
-
-+ Menus with grouped YAHOO.widget.MenuItem instances will now highlight 
-  correctly when used with Button.
-
-+ Buttons of type "link" now have the same default height as other Button
-  types in Internet Explorer.
-
-+ Buttons of various types now line up correctly on the same line.
-
-+ Menu is now truly an optional dependancy of Button.
-
-+ Menus now render with the correct width when the "yui-skin-sam" CSS class 
-  name is applied to an element other than the <BODY>.
-
-
-
-*** Version 2.3.1 ***
-
-Fixed the following bugs:
--------------------------
-+ Purged the old 2.2.2 Button stylesheet and related image assets that was 
-  mistakenly included in the 2.3.0 build.
-
-+ Fixed an issue in Gecko where changing a Button instance's "label" attribute
-  after the Button had been created would not result in the Button redrawing at
-  a width to fit its content.
-  
-+ Fixed an issue where the singleton keypress event handler
-  (YAHOO.widget.Button.onFormKeyPress) registered for forms containing
-  Button instances of type "submit" was not removed from the form once all of 
-  its child Button instances are destroyed.
-
-+ Submitting a form by clicking on a MenuItem of a SplitButton's or MenuButton's
-  Menu will no longer result in a JavaScript error.
-  
-+ Modified how element tag names are compared to support XHTML applications.
-
-+ Added code to remove the CSS class names representing the "hover," "focus," 
-  and "active" states when a Button instance is disabled.
-
-
-*** Version 2.3 ***
-
-Added the following features:
------------------------------
-
-+ Added a "focusmenu" configuration attribute that controls whether or not a 
-  Button instance's menu will automatically be focused when made visible. 
-
-+ Added a "lazyloadmenu" configuration attribute that controls the value of 
-  the "lazyload" configuration property of a Button's menu.
-
-+ Added "menuclassname" configuration attribute that defines a CSS class name
-  to be applied to the root HTML element of a button's menu.
-
-
-Fixed the following bugs:
--------------------------
-
-+ Setting the "label" attribute of a Button of type "link" to a string with 
-  a "www." prefix will no longer result in the value of the "href" property 
-  being used for the "label" in IE.
-
-+ Disabling a Button when its menu is visible will now result in the menu 
-  being hidden.
-
-+ Hidden field(s) created by a Button instance are now removed if the 
-  submission of its parent form is cancelled.
-
-+ If a Button instance is preceeded by another enabled HTML submit button 
-  (<input type="submit" ...> or <button type="submit" ...>), it will no longer 
-  create a hidden field representing its name and value when its parent form 
-  is submitted.
-
-+ If an HTML form contains a mix of YUI Buttons of type "submit" and standard 
-  HTML submit buttons (<input type="submit" ...> or <button type="submit" ...>) 
-  its "submit" event will no longer fire twice when it is submitted by the user 
-  pressing the enter key while focus inside another HTML form control.
-
-+ If all Button instances in a form are disabled, the form will no longer be 
-  submitted when the user presses the enter key while focused inside another 
-  HTML form control.
-
-+ The first enabled Button instance in a form now correctly adds its name and 
-  value to the form's data set when the form is submitted by the user pressing 
-  the enter key while focused inside another form control.  
-
-+ Fixed typo in the source file for the ButtonGroup class that was causing the 
-  private variable "m_oButtons" to be declared as a global.
-
-+ Switched to use of the CSS display type "-moz-inline-box" from 
-  "-moz-inline-stack" for Gecko-based browsers so that the entire area of a 
-  Button instance is clickable when it is rendered inside another inline 
-  element.
-
-+ Added "yui-button" and "yui-[button type]-button" prefix to CSS classes to 
-  sandbox Button styles.
-
-
-Changes:
---------
-
-+ Default value of "type" configuration attribute now "push" (was "button").
-
-+ Type "menubutton" now "menu."
-
-+ Type "splitbuton" now "split."
-
-+ Added "addStateCSSClasses" method.
-
-+ Added "removeStateCSSClasses" method.
-
-+ Renamed protected property "_hiddenField" to "_hiddenFields."
-
-+ Removed protected "submit" event handler named "_onFormSubmit."
-
-+ Renamed public method "createHiddenField" to "createHiddenFields."
-
-+ Added new "removeHiddenFields" method.
-
-+ Renamed static method "YAHOO.widget.Button.onFormKeyDown" 
-  to "YAHOO.widget.Button.onFormKeyPress."
-
-+ Renamed "TAG_NAME" constant (YAHOO.widget.Button.prototype.TAG_NAME and 
-  YAHOO.widget.ButtonGroup.prototype.TAG_NAME) to 
-  "NODE_NAME" (YAHOO.widget.Button.prototype.NODE_NAME and 
-  YAHOO.widget.ButtonGroup.prototype.NODE_NAME).
-
-+ The "selectedMenuItem" configuration attribute now correctly gets/sets the 
-  index of the selected MenuItem instance of the button's menu, rather than a
-  MenuItem instance.
-
-+ The "container" configuration attribute is now writeonce
-
-+ The "menu" configuration attribute is now writeonce
-
-+ The root element of each button's menu now will have two CSS classes 
-  appended to it:
-    - The CSS class name specified by the "menuclassname" configuration 
-      attribute (by default is "yui-button-menu")
-    - A type-specific class name (either "yui-split-button-menu" 
-      or "yui-menu-button-menu")
-
-+ "menu" configuration attribute now supports creation or use of 
-  YAHOO.widget.Overlay in addition to previously supported 
-  YAHOO.widget.Menu:
-  
-	- To create a menu from existing markup using YAHOO.widget.Overlay, pass the
-	  id or node reference of the HTML element to be used to create the Overlay 
-	  as the value of the "menu" configuration attribute.
-
-    - YAHOO.widget.Overlay instances passed as a value for the "menu" 
-      configuration attribute need to be fully rendered.  
-
-	- To create a menu from existing markup using YAHOO.widget.Menu, pass the 
-	  id or node reference of the HTML element to be used to create the menu 
-	  as the value of the "menu" configuration attribute and give the 
-	  HTML element the same class name as specified by 
-	  YAHOO.widget.Menu.prototype.CSS_CLASS_NAME.
-	
-	- YAHOO.widget.Overlay instances used as a menu are by default not rendered 
-	  until they are are made visible for the first time.  This behavior 
-	  can be changed so that they are rendered immediately by setting the value 
-	  of the "lazyloadmenu" configuration attribute to "false."
-
-+ If you pass an element id for the value of the "menu" configuration 
-  attribute, that node is now accessed immediately via the "get" method of the 
-  Dom utility (YAHOO.util.Dom) as opposed to the "onContentReady" method of the
-  Event utility (YAHOO.util.Event).
-
-+ Modified code to support a more generic markup format.  Now any number of 
-  HTML elements can exist between a Button's root HTML element and its button 
-  node (be it an <A> or <BUTTON> element):
-
-    <ROOT_NODE> ... <BUTTON_NODE /> ... </ROOT_NODE>
-
-+ A Button can now be initialized using any of the following six HTML patterns:
-
-    - <A> TEXT/HTML </A>
-    - <BUTTON> TEXT/HTML </BUTTON>
-    - <INPUT />
-    - <ROOT_NODE> ... <A> TEXT/HTML </A> ... </ROOT_NODE>
-    - <ROOT_NODE> ... <BUTTON> TEXT/HTML </BUTTON> ... </ROOT_NODE>
-    - <ROOT_NODE> ... <INPUT /> ... </ROOT_NODE>
-
-+ The id of a Button instance can now match that of its source element.
-
-+ CSS changes:
-
-    1) All Buttons have a "yui-" prefix as opposed to "yui":
-    
-    2.2.2	    | 2.3
-    -------------------------
-    .yuibutton  | .yui-button
-    
-    
-    2) Each Button type has its own class name with a "yui-" prefix and 
-    "-button" suffix IN ADDITION TO the default "yui-button" class name:
-    
-    2.2.2			| 2.3
-    ------------------------------------------
-    .yuibutton.splitbutton	| .yui-split-button
-    .yuibutton.menubutton	| .yui-menu-button
-    
-    * Allows for the definition of generic styles that apply to all buttons, 
-    while providing a means for uniquely styling buttons of a specific type.
-    
-    
-    3) For states that are common to all Buttons, two classes are applied: a
-    generic class name (i.e. yui-button-[state]) and a type-specific state class
-    name (yui-[type]-button-[state]):
-    
-    2.2.2			| 2.3
-    -------------------------------------------
-    .yuibutton.focus	| .yui-button-focus
-    .yuibutton.radio.focus	| .yui-radio-button-focus
-    
-    * States common to all Button types are:
-        + focus
-        + hover
-        + active
-        + disabled
-    
-    ** Allows for the definition of generic styles that apply to all states of 
-    all buttons, while providing a means for uniquely styling states for 
-    buttons of a specific type.
-    
-    
-    4) Buttons of type "radio" and "checkbox" have two classes applied to 
-    represent their "checked" state: a generic class name 
-    (i.e. yui-button-checked) and a type-specific class 
-    name (yui-[type]-button-checked):
-    
-    2.2.2			    | 2.3
-    -------------------------------------------
-    .yuibutton.checked	    | .yui-button-checked
-    .yuibutton.radio.checked    | .yui-radio-button-checked
-    .yuibutton.checkbox.checked | .yui-checkbox-button-checked
-    
-    ** This allows for the definition of a universal style for all Buttons that
-    have a "checked" state or the ability to define a type-specific style for 
-    the "checked" state.
-    
-    
-    5) States that are specific to a particular type only get a type-specific 
-    state class name.  Currently this only applies to the "splitbutton" type:
-    
-    2.2.2			    | 2.3
-    -------------------------------------------
-    .yuibutton.activeoption     | .yui-split-button-activeoption
-    
-    
-    6) The "ie6" class name is removed.
-
-
-*** Version 2.2.2 ***
-
-+ No changes
-
-
-*** Version 2.2.1 ***
-
-Added the following features:
------------------------------
-
-+ Added "getHiddenField" method to YAHOO.widget.Button.
-
-
-Fixed the following bugs:
--------------------------
-
-+ Removed built-in use of the Event utility's "onAvailable" method from the
-  constructor of Button and ButtonGroup as it was preventing the addition of 
-  event listeners on instances created from existing markup.  Going forward 
-  Button and ButtonGroup instances created from existing markup can only be 
-  instantiated once their source HTML element is available in the DOM.  The 
-  Button examples illustrate how this can be accomplished.
-
-+ Modified code so that disabled Button instances no longer fire DOM events.
-
-+ Pressing the enter key while focused on a form field whose parent form 
-  contains a Button instance of type "submit" will now automatically submit 
-  the form using the first Button instance of type "submit".
-
-+ Clicking a Button instance of type="submit" will now cause the Button's 
-  parent form's "submit" event to fire.
-
-+ Modified Button CSS so that the filter used to apply alpha transparency to 
-  a Button's background PNG is only used by IE 6.  The previous code was 
-  enabling IE's Alpha image loader for IE 7 in Quirks mode. 
-
-+ Fixed documentation error for "getForm" method.  
-
-
-Changes:
---------
-
-+ Made the "submitForm" method of YAHOO.widget.Button public (was 
-  previously protected).  
-
-+ Removed "init" event and corresponding "oninit" configuration attribute
-  from YAHOO.widget.Button and YAHOO.widget.ButtonGroup.
-
-+ Added the CSS class "ie6" to button.css.  This classname is append to root 
-  DOM element of Button instances created with IE 6.  By default this class
-  is used to apply a filter that gives alpha transparency to a Button's 
-  background PNG.
-
-
-
-*** Version 2.2.0 ***
-
-* Button Control introduced

Modified: trunk/root/static/yui/button/assets/button-core.css
===================================================================
--- trunk/root/static/yui/button/assets/button-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/assets/button-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-button  {
 

Modified: trunk/root/static/yui/button/assets/skins/sam/button-skin.css
===================================================================
--- trunk/root/static/yui/button/assets/skins/sam/button-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/assets/skins/sam/button-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-button  {
 
@@ -20,15 +20,13 @@
     border-style: solid;
     border-color: #808080;
     margin: 0 -1px;
-    *position: relative;    /* Necessary to get negative margins working in IE */
-    *left: -1px;
-    
-	/* 
-		Don't apply rounded corners for IE 6 (Quirks and Standards Mode) and IE 7 Quirks Mode 
-		since it causes more problems than its worth.
+
+	/*
+		Using negative margins for rounded corners won't work in IE 6 and IE 7 
+		(Quirks Mode Only), so set the "margin" property to "0" for those 
+		browsers.
 	*/
-	_margin: 0;
-	_position: static;    
+ 	_margin: 0;
 
 }
 

Modified: trunk/root/static/yui/button/assets/skins/sam/button.css
===================================================================
--- trunk/root/static/yui/button/assets/skins/sam/button.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/assets/skins/sam/button.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;*position:relative;*left:-1px;_margin:0;_position:static;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yu!
 i-menu-button button{padding-right:20px;background-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B!
 8;background-position:0 -1700px;}.yui-skin-sam .yui-button-act!
 ive .fir
st-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-active button,.yui-skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-d!
 isabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}
+.yui-button{display:-moz-inline-box;display:inline-block;vertical-align:text-bottom;}.yui-button .first-child{display:block;*display:inline-block;}.yui-button button,.yui-button a{display:block;*display:inline-block;border:none;margin:0;}.yui-button button{background-color:transparent;*overflow:visible;cursor:pointer;}.yui-button a{text-decoration:none;}.yui-skin-sam .yui-button{border-width:1px 0;border-style:solid;border-color:#808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;margin:auto .25em;}.yui-skin-sam .yui-button .first-child{border-width:0 1px;border-style:solid;border-color:#808080;margin:0 -1px;_margin:0;}.yui-skin-sam .yui-button button,.yui-skin-sam .yui-button a{padding:0 10px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-button a{*line-height:1.875;*padding-bottom:1px;}.yui-skin-sam .yui-split-button button,.yui-skin-sam .yui-menu-button button{padding-right:20px;backgro!
 und-position:right center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-button button{background-image:url(menu-button-arrow.png);}.yui-skin-sam .yui-split-button button{background-image:url(split-button-arrow.png);}.yui-skin-sam .yui-button-focus{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-focus .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-focus button,.yui-skin-sam .yui-button-focus a{color:#000;}.yui-skin-sam .yui-split-button-focus button{background-image:url(split-button-arrow-focus.png);}.yui-skin-sam .yui-button-hover{border-color:#7D98B8;background-position:0 -1300px;}.yui-skin-sam .yui-button-hover .first-child{border-color:#7D98B8;}.yui-skin-sam .yui-button-hover button,.yui-skin-sam .yui-button-hover a{color:#000;}.yui-skin-sam .yui-split-button-hover button{background-image:url(split-button-arrow-hover.png);}.yui-skin-sam .yui-button-active{border-color:#7D98B8;background-position:0 -1700px;}.yui-skin-sam !
 .yui-button-active .first-child{border-color:#7D98B8;}.yui-ski!
 n-sam .y
ui-button-active button,.yui-skin-sam .yui-button-active a{color:#000;}.yui-skin-sam .yui-split-button-activeoption{border-color:#808080;background-position:0 0;}.yui-skin-sam .yui-split-button-activeoption .first-child{border-color:#808080;}.yui-skin-sam .yui-split-button-activeoption button{background-image:url(split-button-arrow-active.png);}.yui-skin-sam .yui-radio-button-checked,.yui-skin-sam .yui-checkbox-button-checked{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-radio-button-checked .first-child,.yui-skin-sam .yui-checkbox-button-checked .first-child{border-color:#304369;}.yui-skin-sam .yui-radio-button-checked button,.yui-skin-sam .yui-checkbox-button-checked button{color:#fff;}.yui-skin-sam .yui-button-disabled{border-color:#ccc;background-position:0 -1500px;}.yui-skin-sam .yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-button-disabled button,.yui-skin-sam .yui-button-disabled a{color:#A6A6A6;cursor:default;}.yui-sk!
 in-sam .yui-menu-button-disabled button{background-image:url(menu-button-arrow-disabled.png);}.yui-skin-sam .yui-split-button-disabled button{background-image:url(split-button-arrow-disabled.png);}

Modified: trunk/root/static/yui/button/button-debug.js
===================================================================
--- trunk/root/static/yui/button/button-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/button-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
 * @module button
 * @description <p>The Button Control enables the creation of rich, graphical 
 * buttons that function like traditional HTML form buttons.  <em>Unlike</em> 
-* tradition HTML form buttons, buttons created with the Button Control can have 
+* traditional HTML form buttons, buttons created with the Button Control can have 
 * a label that is different from its value.  With the inclusion of the optional 
 * <a href="module_menu.html">Menu Control</a>, the Button Control can also be
 * used to create menu buttons and split buttons, controls that are not 
@@ -1060,8 +1060,8 @@
             }
         
         },
+
         
-        
         /**
         * @method _setMenu
         * @description Sets the value of the button's "menu" attribute.
@@ -1081,15 +1081,9 @@
                 */
         
                 bInstance = false,
-        
-
                 oMenu,
                 oMenuElement,
-                oSrcElement,
-                aItems,
-                nItems,
-                oItem,
-                i;
+                oSrcElement;
         
 
 			function onAppendTo() {
@@ -1147,12 +1141,13 @@
 
 						oMenu.keyDownEvent.subscribe(this._onMenuKeyDown, this, true);
 						oMenu.subscribe("click", this._onMenuClick, this, true);
-						oMenu.itemAddedEvent.subscribe(this._onMenuItemAdded, this, true);
+
+						this.on("selectedMenuItemChange", this._onSelectedMenuItemChange);
 		
 						oSrcElement = oMenu.srcElement;
 		
 						if (oSrcElement && oSrcElement.nodeName.toUpperCase() == "SELECT") {
-				
+
 							oSrcElement.style.display = "none";
 							oSrcElement.parentNode.removeChild(oSrcElement);
 		
@@ -1206,31 +1201,8 @@
 				if (p_oMenu && Menu && (p_oMenu instanceof Menu)) {
 			
 					oMenu = p_oMenu;
-					aItems = oMenu.getItems();
-					nItems = aItems.length;
 					bInstance = true;
 			
-			
-					if (nItems > 0) {
-			
-						i = nItems - 1;
-			
-						do {
-			
-							oItem = aItems[i];
-			
-							if (oItem) {
-			
-								oItem.cfg.subscribeToConfigEvent("selected", 
-									this._onMenuItemSelected, oItem, this);
-			
-							}
-			
-						}
-						while (i--);
-			
-					}
-			
 					initMenu.call(this);
 			
 				}
@@ -1344,36 +1316,7 @@
             }
         
         },
-        
-        
-        /**
-        * @method _setSelectedMenuItem
-        * @description Sets the value of the button's 
-        * "selectedMenuItem" attribute.
-        * @protected
-        * @param {Number} p_nIndex Number representing the index of the item 
-        * in the button's menu that is currently selected.
-        */
-        _setSelectedMenuItem: function (p_nIndex) {
 
-            var oMenu = this._menu,
-                oMenuItem;
-
-
-            if (Menu && oMenu && oMenu instanceof Menu) {
-
-                oMenuItem = oMenu.getItem(p_nIndex);
-                
-
-                if (oMenuItem && !oMenuItem.cfg.getProperty("selected")) {
-                
-                    oMenuItem.cfg.setProperty("selected", true);
-                
-                }
-            
-            }
-
-        },
         
         
         // Protected methods
@@ -2176,99 +2119,101 @@
                 bReturnVal;
         
 
-            switch (sType) {
-        
-            case "radio":
-            case "checkbox":
+			switch (sType) {
 
+			case "radio":
+			case "checkbox":
+
 				if (!this._hasDefaultTitle) {
-    
+
 					if (this.get("checked")) {
-						
+
 						sTitle = (sType == "radio") ? 
 									this.RADIO_CHECKED_TITLE : 
 									this.CHECKBOX_CHECKED_TITLE;
-					
+
 					}
 					else {
-					
+
 						sTitle = (sType == "radio") ? 
 									this.RADIO_DEFAULT_TITLE : 
 									this.CHECKBOX_DEFAULT_TITLE;
-					
+
 					}
-					
+
 					this.set("title", sTitle);
-                
-                }
-    
-                break;
-    
-            case "submit":
 
+				}
+
+				break;
+
+			case "submit":
+
 				if (p_oEvent.returnValue !== false) {
-    
-                	this.submitForm();
-                
-                }
-            
-                break;
-    
-            case "reset":
-    
-                oForm = this.getForm();
-    
-                if (oForm) {
-    
-                    oForm.reset();
-                
-                }
-    
-                break;
-    
-            case "menu":
-    
-                sTitle = this._menu.cfg.getProperty("visible") ? 
-                                this.MENUBUTTON_MENU_VISIBLE_TITLE : 
-                                this.MENUBUTTON_DEFAULT_TITLE;
-    
-                this.set("title", sTitle);
-    
-                break;
-    
-            case "split":
-    
-                if (Event.getPageX(p_oEvent) > this._nOptionRegionX) {
-    
-                    bReturnVal = false;
-                
-                }
-                else {
-    
-                    this._hideMenu();
+
+					this.submitForm();
+
+				}
+
+				break;
+
+			case "reset":
+
+				oForm = this.getForm();
+
+				if (oForm) {
+
+					oForm.reset();
+
+				}
+
+				break;
+
+			case "menu":
+
+				sTitle = this._menu.cfg.getProperty("visible") ? 
+								this.MENUBUTTON_MENU_VISIBLE_TITLE : 
+								this.MENUBUTTON_DEFAULT_TITLE;
+
+				this.set("title", sTitle);
+
+				break;
+
+			case "split":
+
+				if (this._nOptionRegionX > 0 && 
+						(Event.getPageX(p_oEvent) > this._nOptionRegionX)) {
+
+					bReturnVal = false;
+
+				}
+				else {
+
+					this._hideMenu();
+
+					oSrcElement = this.get("srcelement");
+
+					if (oSrcElement && oSrcElement.type == "submit" && 
+							p_oEvent.returnValue !== false) {
+
+						this.submitForm();
+
+					}
+
+				}
+
+				sTitle = this._menu.cfg.getProperty("visible") ? 
+								this.SPLITBUTTON_OPTION_VISIBLE_TITLE : 
+								this.SPLITBUTTON_DEFAULT_TITLE;
+
+				this.set("title", sTitle);
+
+				break;
+
+			}
+
+			return bReturnVal;
         
-                    oSrcElement = this.get("srcelement");
-        
-                    if (oSrcElement && oSrcElement.type == "submit") {
-    
-                        this.submitForm();
-                    
-                    }
-                
-                }
-    
-                sTitle = this._menu.cfg.getProperty("visible") ? 
-                                this.SPLITBUTTON_OPTION_VISIBLE_TITLE : 
-                                this.SPLITBUTTON_DEFAULT_TITLE;
-    
-                this.set("title", sTitle);
-    
-                break;
-        
-            }
-        
-        	return bReturnVal;
-        
         },
         
         
@@ -2526,7 +2471,9 @@
         
             var oButtonElement = this.get("element"),
                 oButtonParent = oButtonElement.parentNode,
-                oMenuElement = this._menu.element;
+				oMenu = this._menu,
+                oMenuElement = oMenu.element,
+				oSrcElement = oMenu.srcElement;
         
         
             if (oButtonParent != oMenuElement.parentNode) {
@@ -2537,58 +2484,24 @@
 
 			this._renderedMenu = true;
 
-            this.set("selectedMenuItem", this.get("selectedMenuItem"));
+			//	If the user has designated an <option> of the Menu's source 
+			//	<select> element to be selected, sync the selectedIndex with 
+			//	the "selectedMenuItem" Attribute.
 
+			if (oSrcElement && 
+					oSrcElement.nodeName.toLowerCase() === "select" && 
+					oSrcElement.value) {
+				
+				this.set("selectedMenuItem", 
+							oMenu.getItem(oSrcElement.selectedIndex));
+				
+			}
+
         },
-        
-        
-        /**
-        * @method _onMenuItemSelected
-        * @description "selectedchange" event handler for each item in the 
-        * button's menu.
-        * @private
-        * @param {String} p_sType String representing the name of the event  
-        * that was fired.
-        * @param {Array} p_aArgs Array of arguments sent when the event 
-        * was fired.
-        * @param {MenuItem} p_oItem Object representing the menu item that
-        * subscribed to the event.
-        */
-        _onMenuItemSelected: function (p_sType, p_aArgs, p_oItem) {
 
-            var bSelected = p_aArgs[0];
-
-            if (bSelected) {
-            
-                this.set("selectedMenuItem", p_oItem);
-
-            }
         
-        },
         
-        
         /**
-        * @method _onMenuItemAdded
-        * @description "itemadded" event handler for the button's menu.
-        * @private
-        * @param {String} p_sType String representing the name of the event  
-        * that was fired.
-        * @param {Array} p_aArgs Array of arguments sent when the event
-        * was fired.
-        * @param {<a href="YAHOO.widget.MenuItem.html">
-        * YAHOO.widget.MenuItem</a>} p_oItem Object representing the menu 
-        * item that subscribed to the event.
-        */
-        _onMenuItemAdded: function (p_sType, p_aArgs, p_oItem) {
-            
-            var oItem = p_aArgs[0];
-        
-           	oItem.cfg.subscribeToConfigEvent("selected", this._onMenuItemSelected, oItem, this);
-        
-        },
-        
-        
-        /**
         * @method _onMenuClick
         * @description "click" event handler for the button's menu.
         * @private
@@ -2619,9 +2532,31 @@
             }
         
         },
+
+
+        /**
+        * @method _onSelectedMenuItemChange
+        * @description "selectedMenuItemChange" event handler for the Button's
+		* "selectedMenuItem" attribute.
+        * @param {Event} event Object representing the DOM event object  
+        * passed back by the event utility (YAHOO.util.Event).
+        */
+		_onSelectedMenuItemChange: function (event) {
+		
+			var oSelected = event.prevValue,
+				oItem = event.newValue;
+
+			if (oSelected) {
+				Dom.removeClass(oSelected.element, "yui-button-selectedmenuitem");
+			}
+			
+			if (oItem) {
+				Dom.addClass(oItem.element, "yui-button-selectedmenuitem");
+			}
+			
+		},        
         
         
-        
         // Public methods
         
         
@@ -3048,6 +2983,16 @@
 			this.on("mousedown", this._onMouseDown);
 			this.on("mouseup", this._onMouseUp);
             this.on("click", this._onClick);
+
+			//	Need to reset the value of the "onclick" Attribute so that any
+			//	handlers registered via the "onclick" Attribute are fired after 
+			//	Button's default "_onClick" listener.
+
+			var fnOnClick = this.get("onclick");
+
+			this.set("onclick", null);
+			this.set("onclick", fnOnClick);
+
             this.on("dblclick", this._onDblClick);
 
             if (oLabel) {
@@ -3157,6 +3102,7 @@
             * "radio," "menu," and "split."
             * @default "push"
             * @type String
+			* @writeonce
             */
             this.setAttributeConfig("type", {
         
@@ -3164,7 +3110,7 @@
                 validator: Lang.isString,
                 writeOnce: true,
                 method: this._setType
-        
+
             });
         
         
@@ -3312,6 +3258,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("container", {
         
@@ -3329,6 +3276,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("srcelement", {
         
@@ -3372,6 +3320,7 @@
             * href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-
             * one-html.html#ID-58190037">HTMLElement</a>|String|Array
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("menu", {
         
@@ -3405,6 +3354,7 @@
             * attribute.</em>
             * @default true
             * @type Boolean
+			* @writeonce
             */
             this.setAttributeConfig("lazyloadmenu", {
         
@@ -3421,6 +3371,7 @@
             * applied to the root element of the button's menu.
             * @type String
             * @default "yui-button-menu"
+			* @writeonce
             */
             this.setAttributeConfig("menuclassname", {
         
@@ -3491,8 +3442,7 @@
             */
             this.setAttributeConfig("selectedMenuItem", {
         
-                value: null,
-                method: this._setSelectedMenuItem
+                value: null
         
             });
         
@@ -4469,6 +4419,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("container", {
         
@@ -4856,4 +4807,4 @@
     });
 
 })();
-YAHOO.register("button", YAHOO.widget.Button, {version: "2.6.0", build: "1321"});
+YAHOO.register("button", YAHOO.widget.Button, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/button/button-min.js
===================================================================
--- trunk/root/static/yui/button/button-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/button-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var G=YAHOO.util.Dom,M=YAHOO.util.Event,I=YAHOO.lang,L=YAHOO.env.ua,B=YAHOO.widget.Overlay,J=YAHOO.widget.Menu,D={},K=null,E=null,C=null;function F(O,N,R,P){var S,Q;if(I.isString(O)&&I.isString(N)){if(L.ie){Q='<input type="'+O+'" name="'+N+'"';if(P){Q+=" checked";}Q+=">";S=document.createElement(Q);}else{S=document.createElement("input");S.name=N;S.type=O;if(P){S.checked=true;}}S.value=R;}return S;}function H(O,U){var N=O.nodeName.toUpperCase(),S=this,T,P,Q;function V(W){if(!(W in U)){T=O.getAttributeNode(W);if(T&&("value" in T)){U[W]=T.value;}}}function R(){V("type");if(U.type=="button"){U.type="push";}if(!("disabled" in U)){U.disabled=O.disabled;}V("name");V("value");V("title");}switch(N){case"A":U.type="link";V("href");V("target");break;case"INPUT":R();if(!("checked" in U)){U.checked=O.checked;}break;case"BUTTON":R();P=O.parentNode.parentNode;if(G.hasClass(P,this.CSS_CLASS_NAME+"-checked")){U.checked=true;}if(G.hasClass(P,this.CSS_CLASS_NAME+"-disabled")){U.d!
 isabled=true;}O.removeAttribute("value");O.setAttribute("type","button");break;}O.removeAttribute("id");O.removeAttribute("name");if(!("tabindex" in U)){U.tabindex=O.tabIndex;}if(!("label" in U)){Q=N=="INPUT"?O.value:O.innerHTML;if(Q&&Q.length>0){U.label=Q;}}}function A(P){var O=P.attributes,N=O.srcelement,R=N.nodeName.toUpperCase(),Q=this;if(R==this.NODE_NAME){P.element=N;P.id=N.id;G.getElementsBy(function(S){switch(S.nodeName.toUpperCase()){case"BUTTON":case"A":case"INPUT":H.call(Q,S,O);break;}},"*",N);}else{switch(R){case"BUTTON":case"A":case"INPUT":H.call(this,N,O);break;}}}YAHOO.widget.Button=function(R,O){if(!B&&YAHOO.widget.Overlay){B=YAHOO.widget.Overlay;}if(!J&&YAHOO.widget.Menu){J=YAHOO.widget.Menu;}var Q=YAHOO.widget.Button.superclass.constructor,P,N;if(arguments.length==1&&!I.isString(R)&&!R.nodeName){if(!R.id){R.id=G.generateId();}Q.call(this,(this.createButtonElement(R.type)),R);}else{P={element:null,attributes:(O||{})};if(I.isString(R)){N=G.get(R);if(N){if(!P!
 .attributes.id){P.attributes.id=R;}P.attributes.srcelement=N;A!
 .call(th
is,P);if(!P.element){P.element=this.createButtonElement(P.attributes.type);}Q.call(this,P.element,P.attributes);}}else{if(R.nodeName){if(!P.attributes.id){if(R.id){P.attributes.id=R.id;}else{P.attributes.id=G.generateId();}}P.attributes.srcelement=R;A.call(this,P);if(!P.element){P.element=this.createButtonElement(P.attributes.type);}Q.call(this,P.element,P.attributes);}}}};YAHOO.extend(YAHOO.widget.Button,YAHOO.util.Element,{_button:null,_menu:null,_hiddenFields:null,_onclickAttributeValue:null,_activationKeyPressed:false,_activationButtonPressed:false,_hasKeyEventHandlers:false,_hasMouseEventHandlers:false,_nOptionRegionX:0,NODE_NAME:"SPAN",CHECK_ACTIVATION_KEYS:[32],ACTIVATION_KEYS:[13,32],OPTION_AREA_WIDTH:20,CSS_CLASS_NAME:"yui-button",RADIO_DEFAULT_TITLE:"Unchecked.  Click to check.",RADIO_CHECKED_TITLE:"Checked.  Click another button to uncheck",CHECKBOX_DEFAULT_TITLE:"Unchecked.  Click to check.",CHECKBOX_CHECKED_TITLE:"Checked.  Click to uncheck.",MENUBUTTON_DEFAULT_!
 TITLE:"Menu collapsed.  Click to expand.",MENUBUTTON_MENU_VISIBLE_TITLE:"Menu expanded.  Click or press Esc to collapse.",SPLITBUTTON_DEFAULT_TITLE:("Menu collapsed.  Click inside option "+"region or press down arrow key to show the menu."),SPLITBUTTON_OPTION_VISIBLE_TITLE:"Menu expanded.  Press Esc to hide the menu.",SUBMIT_TITLE:"Click to submit form.",_setType:function(N){if(N=="split"){this.on("option",this._onOption);}},_setLabel:function(O){this._button.innerHTML=O;var P,N=L.gecko;if(N&&N<1.9&&G.inDocument(this.get("element"))){P=this.CSS_CLASS_NAME;this.removeClass(P);I.later(0,this,this.addClass,P);}},_setTabIndex:function(N){this._button.tabIndex=N;},_setTitle:function(O){var N=O;if(this.get("type")!="link"){if(!N){switch(this.get("type")){case"radio":N=this.RADIO_DEFAULT_TITLE;break;case"checkbox":N=this.CHECKBOX_DEFAULT_TITLE;break;case"menu":N=this.MENUBUTTON_DEFAULT_TITLE;break;case"split":N=this.SPLITBUTTON_DEFAULT_TITLE;break;case"submit":N=this.SUBMIT_TITLE;!
 break;}}this._button.title=N;}},_setDisabled:function(N){if(th!
 is.get("
type")!="link"){if(N){if(this._menu){this._menu.hide();}if(this.hasFocus()){this.blur();}this._button.setAttribute("disabled","disabled");this.addStateCSSClasses("disabled");this.removeStateCSSClasses("hover");this.removeStateCSSClasses("active");this.removeStateCSSClasses("focus");}else{this._button.removeAttribute("disabled");this.removeStateCSSClasses("disabled");}}},_setHref:function(N){if(this.get("type")=="link"){this._button.href=N;}},_setTarget:function(N){if(this.get("type")=="link"){this._button.setAttribute("target",N);}},_setChecked:function(O){var P=this.get("type"),N;if(P=="checkbox"||P=="radio"){if(O){this.addStateCSSClasses("checked");N=(P=="radio")?this.RADIO_CHECKED_TITLE:this.CHECKBOX_CHECKED_TITLE;}else{this.removeStateCSSClasses("checked");N=(P=="radio")?this.RADIO_DEFAULT_TITLE:this.CHECKBOX_DEFAULT_TITLE;}if(!this._hasDefaultTitle){this.set("title",N);}}},_setMenu:function(Y){var R=this.get("lazyloadmenu"),U=this.get("element"),N,a=false,b,Q,T,P,O,X,S;!
 function Z(){b.render(U.parentNode);this.removeListener("appendTo",Z);}function W(){b.cfg.queueProperty("container",U.parentNode);this.removeListener("appendTo",W);}function V(){var c;if(b){G.addClass(b.element,this.get("menuclassname"));G.addClass(b.element,"yui-"+this.get("type")+"-button-menu");b.showEvent.subscribe(this._onMenuShow,null,this);b.hideEvent.subscribe(this._onMenuHide,null,this);b.renderEvent.subscribe(this._onMenuRender,null,this);if(J&&b instanceof J){if(R){c=this.get("container");if(c){b.cfg.queueProperty("container",c);}else{this.on("appendTo",W);}}b.cfg.queueProperty("clicktohide",false);b.keyDownEvent.subscribe(this._onMenuKeyDown,this,true);b.subscribe("click",this._onMenuClick,this,true);b.itemAddedEvent.subscribe(this._onMenuItemAdded,this,true);T=b.srcElement;if(T&&T.nodeName.toUpperCase()=="SELECT"){T.style.display="none";T.parentNode.removeChild(T);}}else{if(B&&b instanceof B){if(!K){K=new YAHOO.widget.OverlayManager();
-}K.register(b);}}this._menu=b;if(!a&&!R){if(G.inDocument(U)){b.render(U.parentNode);}else{this.on("appendTo",Z);}}}}if(B){if(J){N=J.prototype.CSS_CLASS_NAME;}if(Y&&J&&(Y instanceof J)){b=Y;P=b.getItems();O=P.length;a=true;if(O>0){S=O-1;do{X=P[S];if(X){X.cfg.subscribeToConfigEvent("selected",this._onMenuItemSelected,X,this);}}while(S--);}V.call(this);}else{if(B&&Y&&(Y instanceof B)){b=Y;a=true;b.cfg.queueProperty("visible",false);V.call(this);}else{if(J&&I.isArray(Y)){b=new J(G.generateId(),{lazyload:R,itemdata:Y});this._menu=b;this.on("appendTo",V);}else{if(I.isString(Y)){Q=G.get(Y);if(Q){if(J&&G.hasClass(Q,N)||Q.nodeName.toUpperCase()=="SELECT"){b=new J(Y,{lazyload:R});V.call(this);}else{if(B){b=new B(Y,{visible:false});V.call(this);}}}}else{if(Y&&Y.nodeName){if(J&&G.hasClass(Y,N)||Y.nodeName.toUpperCase()=="SELECT"){b=new J(Y,{lazyload:R});V.call(this);}else{if(B){if(!Y.id){G.generateId(Y);}b=new B(Y,{visible:false});V.call(this);}}}}}}}}},_setOnClick:function(N){if(this.!
 _onclickAttributeValue&&(this._onclickAttributeValue!=N)){this.removeListener("click",this._onclickAttributeValue.fn);this._onclickAttributeValue=null;}if(!this._onclickAttributeValue&&I.isObject(N)&&I.isFunction(N.fn)){this.on("click",N.fn,N.obj,N.scope);this._onclickAttributeValue=N;}},_setSelectedMenuItem:function(O){var N=this._menu,P;if(J&&N&&N instanceof J){P=N.getItem(O);if(P&&!P.cfg.getProperty("selected")){P.cfg.setProperty("selected",true);}}},_isActivationKey:function(N){var S=this.get("type"),O=(S=="checkbox"||S=="radio")?this.CHECK_ACTIVATION_KEYS:this.ACTIVATION_KEYS,Q=O.length,R=false,P;if(Q>0){P=Q-1;do{if(N==O[P]){R=true;break;}}while(P--);}return R;},_isSplitButtonOptionKey:function(P){var O=(M.getCharCode(P)==40);var N=function(Q){M.preventDefault(Q);this.removeListener("keypress",N);};if(O){if(L.opera){this.on("keypress",N);}M.preventDefault(P);}return O;},_addListenersToForm:function(){var T=this.getForm(),S=YAHOO.widget.Button.onFormKeyPress,R,N,Q,P,O;i!
 f(T){M.on(T,"reset",this._onFormReset,null,this);M.on(T,"submi!
 t",this.
_onFormSubmit,null,this);N=this.get("srcelement");if(this.get("type")=="submit"||(N&&N.type=="submit")){Q=M.getListeners(T,"keypress");R=false;if(Q){P=Q.length;if(P>0){O=P-1;do{if(Q[O].fn==S){R=true;break;}}while(O--);}}if(!R){M.on(T,"keypress",S);}}}},_showMenu:function(R){if(YAHOO.widget.MenuManager){YAHOO.widget.MenuManager.hideVisible();}if(K){K.hideAll();}var N=this._menu,Q=this.get("menualignment"),P=this.get("focusmenu"),O;if(this._renderedMenu){N.cfg.setProperty("context",[this.get("element"),Q[0],Q[1]]);N.cfg.setProperty("preventcontextoverlap",true);N.cfg.setProperty("constraintoviewport",true);}else{N.cfg.queueProperty("context",[this.get("element"),Q[0],Q[1]]);N.cfg.queueProperty("preventcontextoverlap",true);N.cfg.queueProperty("constraintoviewport",true);}this.focus();if(J&&N&&(N instanceof J)){O=N.focus;N.focus=function(){};if(this._renderedMenu){N.cfg.setProperty("minscrollheight",this.get("menuminscrollheight"));N.cfg.setProperty("maxheight",this.get("menuma!
 xheight"));}else{N.cfg.queueProperty("minscrollheight",this.get("menuminscrollheight"));N.cfg.queueProperty("maxheight",this.get("menumaxheight"));}N.show();N.focus=O;N.align();if(R.type=="mousedown"){M.stopPropagation(R);}if(P){N.focus();}}else{if(B&&N&&(N instanceof B)){if(!this._renderedMenu){N.render(this.get("element").parentNode);}N.show();N.align();}}},_hideMenu:function(){var N=this._menu;if(N){N.hide();}},_onMouseOver:function(O){var Q=this.get("type"),N,P;if(Q==="split"){N=this.get("element");P=(G.getX(N)+(N.offsetWidth-this.OPTION_AREA_WIDTH));this._nOptionRegionX=P;}if(!this._hasMouseEventHandlers){if(Q==="split"){this.on("mousemove",this._onMouseMove);}this.on("mouseout",this._onMouseOut);this._hasMouseEventHandlers=true;}this.addStateCSSClasses("hover");if(Q==="split"&&(M.getPageX(O)>P)){this.addStateCSSClasses("hoveroption");}if(this._activationButtonPressed){this.addStateCSSClasses("active");}if(this._bOptionPressed){this.addStateCSSClasses("activeoption");}!
 if(this._activationButtonPressed||this._bOptionPressed){M.remo!
 veListen
er(document,"mouseup",this._onDocumentMouseUp);}},_onMouseMove:function(N){var O=this._nOptionRegionX;if(O){if(M.getPageX(N)>O){this.addStateCSSClasses("hoveroption");}else{this.removeStateCSSClasses("hoveroption");}}},_onMouseOut:function(N){var O=this.get("type");this.removeStateCSSClasses("hover");if(O!="menu"){this.removeStateCSSClasses("active");}if(this._activationButtonPressed||this._bOptionPressed){M.on(document,"mouseup",this._onDocumentMouseUp,null,this);}if(O==="split"&&(M.getPageX(N)>this._nOptionRegionX)){this.removeStateCSSClasses("hoveroption");}},_onDocumentMouseUp:function(P){this._activationButtonPressed=false;this._bOptionPressed=false;var Q=this.get("type"),N,O;if(Q=="menu"||Q=="split"){N=M.getTarget(P);O=this._menu.element;if(N!=O&&!G.isAncestor(O,N)){this.removeStateCSSClasses((Q=="menu"?"active":"activeoption"));this._hideMenu();}}M.removeListener(document,"mouseup",this._onDocumentMouseUp);},_onMouseDown:function(P){var Q,O=true;function N(){this._hid!
 eMenu();this.removeListener("mouseup",N);}if((P.which||P.button)==1){if(!this.hasFocus()){this.focus();}Q=this.get("type");if(Q=="split"){if(M.getPageX(P)>this._nOptionRegionX){this.fireEvent("option",P);O=false;}else{this.addStateCSSClasses("active");this._activationButtonPressed=true;}}else{if(Q=="menu"){if(this.isActive()){this._hideMenu();this._activationButtonPressed=false;}else{this._showMenu(P);this._activationButtonPressed=true;}}else{this.addStateCSSClasses("active");this._activationButtonPressed=true;}}if(Q=="split"||Q=="menu"){this._hideMenuTimer=I.later(250,this,this.on,["mouseup",N]);}}return O;},_onMouseUp:function(P){var Q=this.get("type"),N=this._hideMenuTimer,O=true;if(N){N.cancel();}if(Q=="checkbox"||Q=="radio"){this.set("checked",!(this.get("checked")));}this._activationButtonPressed=false;if(Q!="menu"){this.removeStateCSSClasses("active");}if(Q=="split"&&M.getPageX(P)>this._nOptionRegionX){O=false;
-}return O;},_onFocus:function(O){var N;this.addStateCSSClasses("focus");if(this._activationKeyPressed){this.addStateCSSClasses("active");}C=this;if(!this._hasKeyEventHandlers){N=this._button;M.on(N,"blur",this._onBlur,null,this);M.on(N,"keydown",this._onKeyDown,null,this);M.on(N,"keyup",this._onKeyUp,null,this);this._hasKeyEventHandlers=true;}this.fireEvent("focus",O);},_onBlur:function(N){this.removeStateCSSClasses("focus");if(this.get("type")!="menu"){this.removeStateCSSClasses("active");}if(this._activationKeyPressed){M.on(document,"keyup",this._onDocumentKeyUp,null,this);}C=null;this.fireEvent("blur",N);},_onDocumentKeyUp:function(N){if(this._isActivationKey(M.getCharCode(N))){this._activationKeyPressed=false;M.removeListener(document,"keyup",this._onDocumentKeyUp);}},_onKeyDown:function(O){var N=this._menu;if(this.get("type")=="split"&&this._isSplitButtonOptionKey(O)){this.fireEvent("option",O);}else{if(this._isActivationKey(M.getCharCode(O))){if(this.get("type")=="men!
 u"){this._showMenu(O);}else{this._activationKeyPressed=true;this.addStateCSSClasses("active");}}}if(N&&N.cfg.getProperty("visible")&&M.getCharCode(O)==27){N.hide();this.focus();}},_onKeyUp:function(N){var O;if(this._isActivationKey(M.getCharCode(N))){O=this.get("type");if(O=="checkbox"||O=="radio"){this.set("checked",!(this.get("checked")));}this._activationKeyPressed=false;if(this.get("type")!="menu"){this.removeStateCSSClasses("active");}}},_onClick:function(Q){var S=this.get("type"),N,R,O,P;switch(S){case"radio":case"checkbox":if(!this._hasDefaultTitle){if(this.get("checked")){N=(S=="radio")?this.RADIO_CHECKED_TITLE:this.CHECKBOX_CHECKED_TITLE;}else{N=(S=="radio")?this.RADIO_DEFAULT_TITLE:this.CHECKBOX_DEFAULT_TITLE;}this.set("title",N);}break;case"submit":if(Q.returnValue!==false){this.submitForm();}break;case"reset":R=this.getForm();if(R){R.reset();}break;case"menu":N=this._menu.cfg.getProperty("visible")?this.MENUBUTTON_MENU_VISIBLE_TITLE:this.MENUBUTTON_DEFAULT_TITLE!
 ;this.set("title",N);break;case"split":if(M.getPageX(Q)>this._!
 nOptionR
egionX){P=false;}else{this._hideMenu();O=this.get("srcelement");if(O&&O.type=="submit"){this.submitForm();}}N=this._menu.cfg.getProperty("visible")?this.SPLITBUTTON_OPTION_VISIBLE_TITLE:this.SPLITBUTTON_DEFAULT_TITLE;this.set("title",N);break;}return P;},_onDblClick:function(O){var N=true;if(this.get("type")=="split"&&M.getPageX(O)>this._nOptionRegionX){N=false;}return N;},_onAppendTo:function(N){I.later(0,this,this._addListenersToForm);},_onFormReset:function(O){var P=this.get("type"),N=this._menu;if(P=="checkbox"||P=="radio"){this.resetValue("checked");}if(J&&N&&(N instanceof J)){this.resetValue("selectedMenuItem");}},_onFormSubmit:function(N){this.createHiddenFields();},_onDocumentMouseDown:function(Q){var N=M.getTarget(Q),P=this.get("element"),O=this._menu.element;if(N!=P&&!G.isAncestor(P,N)&&N!=O&&!G.isAncestor(O,N)){this._hideMenu();M.removeListener(document,"mousedown",this._onDocumentMouseDown);}},_onOption:function(N){if(this.hasClass("yui-split-button-activeoption"!
 )){this._hideMenu();this._bOptionPressed=false;}else{this._showMenu(N);this._bOptionPressed=true;}},_onMenuShow:function(O){M.on(document,"mousedown",this._onDocumentMouseDown,null,this);var N,P;if(this.get("type")=="split"){N=this.SPLITBUTTON_OPTION_VISIBLE_TITLE;P="activeoption";}else{N=this.MENUBUTTON_MENU_VISIBLE_TITLE;P="active";}this.addStateCSSClasses(P);this.set("title",N);},_onMenuHide:function(P){var O=this._menu,N,Q;if(this.get("type")=="split"){N=this.SPLITBUTTON_DEFAULT_TITLE;Q="activeoption";}else{N=this.MENUBUTTON_DEFAULT_TITLE;Q="active";}this.removeStateCSSClasses(Q);this.set("title",N);if(this.get("type")=="split"){this._bOptionPressed=false;}},_onMenuKeyDown:function(P,O){var N=O[0];if(M.getCharCode(N)==27){this.focus();if(this.get("type")=="split"){this._bOptionPressed=false;}}},_onMenuRender:function(O){var Q=this.get("element"),N=Q.parentNode,P=this._menu.element;if(N!=P.parentNode){N.appendChild(P);}this._renderedMenu=true;this.set("selectedMenuItem",!
 this.get("selectedMenuItem"));},_onMenuItemSelected:function(P!
 ,O,N){va
r Q=O[0];if(Q){this.set("selectedMenuItem",N);}},_onMenuItemAdded:function(P,O,N){var Q=O[0];Q.cfg.subscribeToConfigEvent("selected",this._onMenuItemSelected,Q,this);},_onMenuClick:function(O,N){var Q=N[1],P;if(Q){this.set("selectedMenuItem",Q);P=this.get("srcelement");if(P&&P.type=="submit"){this.submitForm();}this._hideMenu();}},createButtonElement:function(N){var P=this.NODE_NAME,O=document.createElement(P);O.innerHTML="<"+P+' class="first-child">'+(N=="link"?"<a></a>":'<button type="button"></button>')+"</"+P+">";return O;},addStateCSSClasses:function(N){var O=this.get("type");if(I.isString(N)){if(N!="activeoption"&&N!="hoveroption"){this.addClass(this.CSS_CLASS_NAME+("-"+N));}this.addClass("yui-"+O+("-button-"+N));}},removeStateCSSClasses:function(N){var O=this.get("type");if(I.isString(N)){this.removeClass(this.CSS_CLASS_NAME+("-"+N));this.removeClass("yui-"+O+("-button-"+N));}},createHiddenFields:function(){this.removeHiddenFields();var V=this.getForm(),Z,O,S,X,Y,T,U,!
 N,R,W,P,Q=false;if(V&&!this.get("disabled")){O=this.get("type");S=(O=="checkbox"||O=="radio");if((S&&this.get("checked"))||(E==this)){Z=F((S?O:"hidden"),this.get("name"),this.get("value"),this.get("checked"));if(Z){if(S){Z.style.display="none";}V.appendChild(Z);}}X=this._menu;if(J&&X&&(X instanceof J)){Y=this.get("selectedMenuItem");P=X.srcElement;Q=(P&&P.nodeName.toUpperCase()=="SELECT");if(Y){U=(Y.value===null||Y.value==="")?Y.cfg.getProperty("text"):Y.value;T=this.get("name");if(Q){W=P.name;}else{if(T){W=(T+"_options");}}if(U&&W){N=F("hidden",W,U);V.appendChild(N);}}else{if(Q){V.appendChild(P);}}}if(Z&&N){this._hiddenFields=[Z,N];}else{if(!Z&&N){this._hiddenFields=N;}else{if(Z&&!N){this._hiddenFields=Z;}}}R=this._hiddenFields;}return R;},removeHiddenFields:function(){var Q=this._hiddenFields,O,P;function N(R){if(G.inDocument(R)){R.parentNode.removeChild(R);}}if(Q){if(I.isArray(Q)){O=Q.length;if(O>0){P=O-1;
-do{N(Q[P]);}while(P--);}}else{N(Q);}this._hiddenFields=null;}},submitForm:function(){var Q=this.getForm(),P=this.get("srcelement"),O=false,N;if(Q){if(this.get("type")=="submit"||(P&&P.type=="submit")){E=this;}if(L.ie){O=Q.fireEvent("onsubmit");}else{N=document.createEvent("HTMLEvents");N.initEvent("submit",true,true);O=Q.dispatchEvent(N);}if((L.ie||L.webkit)&&O){Q.submit();}}return O;},init:function(O,Z){var Q=Z.type=="link"?"a":"button",V=Z.srcelement,Y=O.getElementsByTagName(Q)[0],X;if(!Y){X=O.getElementsByTagName("input")[0];if(X){Y=document.createElement("button");Y.setAttribute("type","button");X.parentNode.replaceChild(Y,X);}}this._button=Y;this._hasDefaultTitle=(Z.title&&Z.title.length>0);YAHOO.widget.Button.superclass.init.call(this,O,Z);var T=this.get("id"),N=T+"-button";Y.id=N;var U,W;var c=function(d){return(d.htmlFor===T);};var S=function(){W.setAttribute((L.ie?"htmlFor":"for"),N);};if(V&&this.get("type")!="link"){U=G.getElementsBy(c,"label");if(I.isArray(U)&&U.!
 length>0){W=U[0];}}D[T]=this;this.addClass(this.CSS_CLASS_NAME);this.addClass("yui-"+this.get("type")+"-button");M.on(this._button,"focus",this._onFocus,null,this);this.on("mouseover",this._onMouseOver);this.on("mousedown",this._onMouseDown);this.on("mouseup",this._onMouseUp);this.on("click",this._onClick);this.on("dblclick",this._onDblClick);if(W){this.on("appendTo",S);}this.on("appendTo",this._onAppendTo);var b=this.get("container"),P=this.get("element"),a=G.inDocument(P),R;if(b){if(V&&V!=P){R=V.parentNode;if(R){R.removeChild(V);}}if(I.isString(b)){M.onContentReady(b,this.appendTo,b,this);}else{this.on("init",function(){I.later(0,this,this.appendTo,b);});}}else{if(!a&&V&&V!=P){R=V.parentNode;if(R){this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:R});R.replaceChild(P,V);this.fireEvent("appendTo",{type:"appendTo",target:R});}}else{if(this.get("type")!="link"&&a&&V&&V==P){this._addListenersToForm();}}}this.fireEvent("init",{type:"init",target:this});},initAttrib!
 utes:function(O){var N=O||{};YAHOO.widget.Button.superclass.in!
 itAttrib
utes.call(this,N);this.setAttributeConfig("type",{value:(N.type||"push"),validator:I.isString,writeOnce:true,method:this._setType});this.setAttributeConfig("label",{value:N.label,validator:I.isString,method:this._setLabel});this.setAttributeConfig("value",{value:N.value});this.setAttributeConfig("name",{value:N.name,validator:I.isString});this.setAttributeConfig("tabindex",{value:N.tabindex,validator:I.isNumber,method:this._setTabIndex});this.configureAttribute("title",{value:N.title,validator:I.isString,method:this._setTitle});this.setAttributeConfig("disabled",{value:(N.disabled||false),validator:I.isBoolean,method:this._setDisabled});this.setAttributeConfig("href",{value:N.href,validator:I.isString,method:this._setHref});this.setAttributeConfig("target",{value:N.target,validator:I.isString,method:this._setTarget});this.setAttributeConfig("checked",{value:(N.checked||false),validator:I.isBoolean,method:this._setChecked});this.setAttributeConfig("container",{value:N.contain!
 er,writeOnce:true});this.setAttributeConfig("srcelement",{value:N.srcelement,writeOnce:true});this.setAttributeConfig("menu",{value:null,method:this._setMenu,writeOnce:true});this.setAttributeConfig("lazyloadmenu",{value:(N.lazyloadmenu===false?false:true),validator:I.isBoolean,writeOnce:true});this.setAttributeConfig("menuclassname",{value:(N.menuclassname||"yui-button-menu"),validator:I.isString,method:this._setMenuClassName,writeOnce:true});this.setAttributeConfig("menuminscrollheight",{value:(N.menuminscrollheight||90),validator:I.isNumber});this.setAttributeConfig("menumaxheight",{value:(N.menumaxheight||0),validator:I.isNumber});this.setAttributeConfig("menualignment",{value:(N.menualignment||["tl","bl"]),validator:I.isArray});this.setAttributeConfig("selectedMenuItem",{value:null,method:this._setSelectedMenuItem});this.setAttributeConfig("onclick",{value:N.onclick,method:this._setOnClick});this.setAttributeConfig("focusmenu",{value:(N.focusmenu===false?false:true),va!
 lidator:I.isBoolean});},focus:function(){if(!this.get("disable!
 d")){thi
s._button.focus();}},blur:function(){if(!this.get("disabled")){this._button.blur();}},hasFocus:function(){return(C==this);},isActive:function(){return this.hasClass(this.CSS_CLASS_NAME+"-active");},getMenu:function(){return this._menu;},getForm:function(){var N=this._button,O;if(N){O=N.form;}return O;},getHiddenFields:function(){return this._hiddenFields;},destroy:function(){var P=this.get("element"),O=P.parentNode,N=this._menu,R;if(N){if(K&&K.find(N)){K.remove(N);}N.destroy();}M.purgeElement(P);M.purgeElement(this._button);M.removeListener(document,"mouseup",this._onDocumentMouseUp);M.removeListener(document,"keyup",this._onDocumentKeyUp);M.removeListener(document,"mousedown",this._onDocumentMouseDown);var Q=this.getForm();if(Q){M.removeListener(Q,"reset",this._onFormReset);M.removeListener(Q,"submit",this._onFormSubmit);}this.unsubscribeAll();if(O){O.removeChild(P);}delete D[this.get("id")];R=G.getElementsByClassName(this.CSS_CLASS_NAME,this.NODE_NAME,Q);if(I.isArray(R)&&R!
 .length===0){M.removeListener(Q,"keypress",YAHOO.widget.Button.onFormKeyPress);}},fireEvent:function(O,N){var P=arguments[0];if(this.DOM_EVENTS[P]&&this.get("disabled")){return false;}return YAHOO.widget.Button.superclass.fireEvent.apply(this,arguments);},toString:function(){return("Button "+this.get("id"));}});YAHOO.widget.Button.onFormKeyPress=function(R){var P=M.getTarget(R),S=M.getCharCode(R),Q=P.nodeName&&P.nodeName.toUpperCase(),N=P.type,T=false,V,X,O,W;function U(a){var Z,Y;switch(a.nodeName.toUpperCase()){case"INPUT":case"BUTTON":if(a.type=="submit"&&!a.disabled){if(!T&&!O){O=a;}}break;default:Z=a.id;if(Z){V=D[Z];if(V){T=true;if(!V.get("disabled")){Y=V.get("srcelement");if(!X&&(V.get("type")=="submit"||(Y&&Y.type=="submit"))){X=V;}}}}break;}}if(S==13&&((Q=="INPUT"&&(N=="text"||N=="password"||N=="checkbox"||N=="radio"||N=="file"))||Q=="SELECT")){G.getElementsBy(U,"*",this);if(O){O.focus();}else{if(!O&&X){M.preventDefault(R);
-if(L.ie){X.get("element").fireEvent("onclick");}else{W=document.createEvent("HTMLEvents");W.initEvent("click",true,true);if(L.gecko<1.9){X.fireEvent("click",W);}else{X.get("element").dispatchEvent(W);}}}}}};YAHOO.widget.Button.addHiddenFieldsToForm=function(N){var S=G.getElementsByClassName(YAHOO.widget.Button.prototype.CSS_CLASS_NAME,"*",N),Q=S.length,R,O,P;if(Q>0){for(P=0;P<Q;P++){O=S[P].id;if(O){R=D[O];if(R){R.createHiddenFields();}}}}};YAHOO.widget.Button.getButton=function(N){return D[N];};})();(function(){var C=YAHOO.util.Dom,B=YAHOO.util.Event,D=YAHOO.lang,A=YAHOO.widget.Button,E={};YAHOO.widget.ButtonGroup=function(J,H){var I=YAHOO.widget.ButtonGroup.superclass.constructor,K,G,F;if(arguments.length==1&&!D.isString(J)&&!J.nodeName){if(!J.id){F=C.generateId();J.id=F;}I.call(this,(this._createGroupElement()),J);}else{if(D.isString(J)){G=C.get(J);if(G){if(G.nodeName.toUpperCase()==this.NODE_NAME){I.call(this,G,H);}}}else{K=J.nodeName.toUpperCase();if(K&&K==this.NODE_NAM!
 E){if(!J.id){J.id=C.generateId();}I.call(this,J,H);}}}};YAHOO.extend(YAHOO.widget.ButtonGroup,YAHOO.util.Element,{_buttons:null,NODE_NAME:"DIV",CSS_CLASS_NAME:"yui-buttongroup",_createGroupElement:function(){var F=document.createElement(this.NODE_NAME);return F;},_setDisabled:function(G){var H=this.getCount(),F;if(H>0){F=H-1;do{this._buttons[F].set("disabled",G);}while(F--);}},_onKeyDown:function(K){var G=B.getTarget(K),I=B.getCharCode(K),H=G.parentNode.parentNode.id,J=E[H],F=-1;if(I==37||I==38){F=(J.index===0)?(this._buttons.length-1):(J.index-1);}else{if(I==39||I==40){F=(J.index===(this._buttons.length-1))?0:(J.index+1);}}if(F>-1){this.check(F);this.getButton(F).focus();}},_onAppendTo:function(H){var I=this._buttons,G=I.length,F;for(F=0;F<G;F++){I[F].appendTo(this.get("element"));}},_onButtonCheckedChange:function(G,F){var I=G.newValue,H=this.get("checkedButton");if(I&&H!=F){if(H){H.set("checked",false,true);}this.set("checkedButton",F);this.set("value",F.get("value"));}e!
 lse{if(H&&!H.set("checked")){H.set("checked",true,true);}}},in!
 it:funct
ion(I,H){this._buttons=[];YAHOO.widget.ButtonGroup.superclass.init.call(this,I,H);this.addClass(this.CSS_CLASS_NAME);var J=this.getElementsByClassName("yui-radio-button");if(J.length>0){this.addButtons(J);}function F(K){return(K.type=="radio");}J=C.getElementsBy(F,"input",this.get("element"));if(J.length>0){this.addButtons(J);}this.on("keydown",this._onKeyDown);this.on("appendTo",this._onAppendTo);var G=this.get("container");if(G){if(D.isString(G)){B.onContentReady(G,function(){this.appendTo(G);},null,this);}else{this.appendTo(G);}}},initAttributes:function(G){var F=G||{};YAHOO.widget.ButtonGroup.superclass.initAttributes.call(this,F);this.setAttributeConfig("name",{value:F.name,validator:D.isString});this.setAttributeConfig("disabled",{value:(F.disabled||false),validator:D.isBoolean,method:this._setDisabled});this.setAttributeConfig("value",{value:F.value});this.setAttributeConfig("container",{value:F.container,writeOnce:true});this.setAttributeConfig("checkedButton",{value!
 :null});},addButton:function(J){var L,K,G,F,H,I;if(J instanceof A&&J.get("type")=="radio"){L=J;}else{if(!D.isString(J)&&!J.nodeName){J.type="radio";L=new A(J);}else{L=new A(J,{type:"radio"});}}if(L){F=this._buttons.length;H=L.get("name");I=this.get("name");L.index=F;this._buttons[F]=L;E[L.get("id")]=L;if(H!=I){L.set("name",I);}if(this.get("disabled")){L.set("disabled",true);}if(L.get("checked")){this.set("checkedButton",L);}K=L.get("element");G=this.get("element");if(K.parentNode!=G){G.appendChild(K);}L.on("checkedChange",this._onButtonCheckedChange,L,this);}return L;},addButtons:function(G){var H,I,J,F;if(D.isArray(G)){H=G.length;J=[];if(H>0){for(F=0;F<H;F++){I=this.addButton(G[F]);if(I){J[J.length]=I;}}}}return J;},removeButton:function(H){var I=this.getButton(H),G,F;if(I){this._buttons.splice(H,1);delete E[I.get("id")];I.removeListener("checkedChange",this._onButtonCheckedChange);I.destroy();G=this._buttons.length;if(G>0){F=this._buttons.length-1;do{this._buttons[F].inde!
 x=F;}while(F--);}}},getButton:function(F){return this._buttons!
 [F];},ge
tButtons:function(){return this._buttons;},getCount:function(){return this._buttons.length;},focus:function(H){var I,G,F;if(D.isNumber(H)){I=this._buttons[H];if(I){I.focus();}}else{G=this.getCount();for(F=0;F<G;F++){I=this._buttons[F];if(!I.get("disabled")){I.focus();break;}}}},check:function(F){var G=this.getButton(F);if(G){G.set("checked",true);}},destroy:function(){var I=this._buttons.length,H=this.get("element"),F=H.parentNode,G;if(I>0){G=this._buttons.length-1;do{this._buttons[G].destroy();}while(G--);}B.purgeElement(H);F.removeChild(H);},toString:function(){return("ButtonGroup "+this.get("id"));}});})();YAHOO.register("button",YAHOO.widget.Button,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var G=YAHOO.util.Dom,M=YAHOO.util.Event,I=YAHOO.lang,L=YAHOO.env.ua,B=YAHOO.widget.Overlay,J=YAHOO.widget.Menu,D={},K=null,E=null,C=null;function F(O,N,R,P){var S,Q;if(I.isString(O)&&I.isString(N)){if(L.ie){Q='<input type="'+O+'" name="'+N+'"';if(P){Q+=" checked";}Q+=">";S=document.createElement(Q);}else{S=document.createElement("input");S.name=N;S.type=O;if(P){S.checked=true;}}S.value=R;}return S;}function H(O,U){var N=O.nodeName.toUpperCase(),S=this,T,P,Q;function V(W){if(!(W in U)){T=O.getAttributeNode(W);if(T&&("value" in T)){U[W]=T.value;}}}function R(){V("type");if(U.type=="button"){U.type="push";}if(!("disabled" in U)){U.disabled=O.disabled;}V("name");V("value");V("title");}switch(N){case"A":U.type="link";V("href");V("target");break;case"INPUT":R();if(!("checked" in U)){U.checked=O.checked;}break;case"BUTTON":R();P=O.parentNode.parentNode;if(G.hasClass(P,this.CSS_CLASS_NAME+"-checked")){U.checked=true;}if(G.hasClass(P,this.CSS_CLASS_NAME+"-disabled")){U.d!
 isabled=true;}O.removeAttribute("value");O.setAttribute("type","button");break;}O.removeAttribute("id");O.removeAttribute("name");if(!("tabindex" in U)){U.tabindex=O.tabIndex;}if(!("label" in U)){Q=N=="INPUT"?O.value:O.innerHTML;if(Q&&Q.length>0){U.label=Q;}}}function A(P){var O=P.attributes,N=O.srcelement,R=N.nodeName.toUpperCase(),Q=this;if(R==this.NODE_NAME){P.element=N;P.id=N.id;G.getElementsBy(function(S){switch(S.nodeName.toUpperCase()){case"BUTTON":case"A":case"INPUT":H.call(Q,S,O);break;}},"*",N);}else{switch(R){case"BUTTON":case"A":case"INPUT":H.call(this,N,O);break;}}}YAHOO.widget.Button=function(R,O){if(!B&&YAHOO.widget.Overlay){B=YAHOO.widget.Overlay;}if(!J&&YAHOO.widget.Menu){J=YAHOO.widget.Menu;}var Q=YAHOO.widget.Button.superclass.constructor,P,N;if(arguments.length==1&&!I.isString(R)&&!R.nodeName){if(!R.id){R.id=G.generateId();}Q.call(this,(this.createButtonElement(R.type)),R);}else{P={element:null,attributes:(O||{})};if(I.isString(R)){N=G.get(R);if(N){if(!P!
 .attributes.id){P.attributes.id=R;}P.attributes.srcelement=N;A!
 .call(th
is,P);if(!P.element){P.element=this.createButtonElement(P.attributes.type);}Q.call(this,P.element,P.attributes);}}else{if(R.nodeName){if(!P.attributes.id){if(R.id){P.attributes.id=R.id;}else{P.attributes.id=G.generateId();}}P.attributes.srcelement=R;A.call(this,P);if(!P.element){P.element=this.createButtonElement(P.attributes.type);}Q.call(this,P.element,P.attributes);}}}};YAHOO.extend(YAHOO.widget.Button,YAHOO.util.Element,{_button:null,_menu:null,_hiddenFields:null,_onclickAttributeValue:null,_activationKeyPressed:false,_activationButtonPressed:false,_hasKeyEventHandlers:false,_hasMouseEventHandlers:false,_nOptionRegionX:0,NODE_NAME:"SPAN",CHECK_ACTIVATION_KEYS:[32],ACTIVATION_KEYS:[13,32],OPTION_AREA_WIDTH:20,CSS_CLASS_NAME:"yui-button",RADIO_DEFAULT_TITLE:"Unchecked.  Click to check.",RADIO_CHECKED_TITLE:"Checked.  Click another button to uncheck",CHECKBOX_DEFAULT_TITLE:"Unchecked.  Click to check.",CHECKBOX_CHECKED_TITLE:"Checked.  Click to uncheck.",MENUBUTTON_DEFAULT_!
 TITLE:"Menu collapsed.  Click to expand.",MENUBUTTON_MENU_VISIBLE_TITLE:"Menu expanded.  Click or press Esc to collapse.",SPLITBUTTON_DEFAULT_TITLE:("Menu collapsed.  Click inside option "+"region or press down arrow key to show the menu."),SPLITBUTTON_OPTION_VISIBLE_TITLE:"Menu expanded.  Press Esc to hide the menu.",SUBMIT_TITLE:"Click to submit form.",_setType:function(N){if(N=="split"){this.on("option",this._onOption);}},_setLabel:function(O){this._button.innerHTML=O;var P,N=L.gecko;if(N&&N<1.9&&G.inDocument(this.get("element"))){P=this.CSS_CLASS_NAME;this.removeClass(P);I.later(0,this,this.addClass,P);}},_setTabIndex:function(N){this._button.tabIndex=N;},_setTitle:function(O){var N=O;if(this.get("type")!="link"){if(!N){switch(this.get("type")){case"radio":N=this.RADIO_DEFAULT_TITLE;break;case"checkbox":N=this.CHECKBOX_DEFAULT_TITLE;break;case"menu":N=this.MENUBUTTON_DEFAULT_TITLE;break;case"split":N=this.SPLITBUTTON_DEFAULT_TITLE;break;case"submit":N=this.SUBMIT_TITLE;!
 break;}}this._button.title=N;}},_setDisabled:function(N){if(th!
 is.get("
type")!="link"){if(N){if(this._menu){this._menu.hide();}if(this.hasFocus()){this.blur();}this._button.setAttribute("disabled","disabled");this.addStateCSSClasses("disabled");this.removeStateCSSClasses("hover");this.removeStateCSSClasses("active");this.removeStateCSSClasses("focus");}else{this._button.removeAttribute("disabled");this.removeStateCSSClasses("disabled");}}},_setHref:function(N){if(this.get("type")=="link"){this._button.href=N;}},_setTarget:function(N){if(this.get("type")=="link"){this._button.setAttribute("target",N);}},_setChecked:function(O){var P=this.get("type"),N;if(P=="checkbox"||P=="radio"){if(O){this.addStateCSSClasses("checked");N=(P=="radio")?this.RADIO_CHECKED_TITLE:this.CHECKBOX_CHECKED_TITLE;}else{this.removeStateCSSClasses("checked");N=(P=="radio")?this.RADIO_DEFAULT_TITLE:this.CHECKBOX_DEFAULT_TITLE;}if(!this._hasDefaultTitle){this.set("title",N);}}},_setMenu:function(U){var P=this.get("lazyloadmenu"),R=this.get("element"),N,W=false,X,O,Q;function!
  V(){X.render(R.parentNode);this.removeListener("appendTo",V);}function T(){X.cfg.queueProperty("container",R.parentNode);this.removeListener("appendTo",T);}function S(){var Y;if(X){G.addClass(X.element,this.get("menuclassname"));G.addClass(X.element,"yui-"+this.get("type")+"-button-menu");X.showEvent.subscribe(this._onMenuShow,null,this);X.hideEvent.subscribe(this._onMenuHide,null,this);X.renderEvent.subscribe(this._onMenuRender,null,this);if(J&&X instanceof J){if(P){Y=this.get("container");if(Y){X.cfg.queueProperty("container",Y);}else{this.on("appendTo",T);}}X.cfg.queueProperty("clicktohide",false);X.keyDownEvent.subscribe(this._onMenuKeyDown,this,true);X.subscribe("click",this._onMenuClick,this,true);this.on("selectedMenuItemChange",this._onSelectedMenuItemChange);Q=X.srcElement;if(Q&&Q.nodeName.toUpperCase()=="SELECT"){Q.style.display="none";Q.parentNode.removeChild(Q);}}else{if(B&&X instanceof B){if(!K){K=new YAHOO.widget.OverlayManager();
+}K.register(X);}}this._menu=X;if(!W&&!P){if(G.inDocument(R)){X.render(R.parentNode);}else{this.on("appendTo",V);}}}}if(B){if(J){N=J.prototype.CSS_CLASS_NAME;}if(U&&J&&(U instanceof J)){X=U;W=true;S.call(this);}else{if(B&&U&&(U instanceof B)){X=U;W=true;X.cfg.queueProperty("visible",false);S.call(this);}else{if(J&&I.isArray(U)){X=new J(G.generateId(),{lazyload:P,itemdata:U});this._menu=X;this.on("appendTo",S);}else{if(I.isString(U)){O=G.get(U);if(O){if(J&&G.hasClass(O,N)||O.nodeName.toUpperCase()=="SELECT"){X=new J(U,{lazyload:P});S.call(this);}else{if(B){X=new B(U,{visible:false});S.call(this);}}}}else{if(U&&U.nodeName){if(J&&G.hasClass(U,N)||U.nodeName.toUpperCase()=="SELECT"){X=new J(U,{lazyload:P});S.call(this);}else{if(B){if(!U.id){G.generateId(U);}X=new B(U,{visible:false});S.call(this);}}}}}}}}},_setOnClick:function(N){if(this._onclickAttributeValue&&(this._onclickAttributeValue!=N)){this.removeListener("click",this._onclickAttributeValue.fn);this._onclickAttributeVal!
 ue=null;}if(!this._onclickAttributeValue&&I.isObject(N)&&I.isFunction(N.fn)){this.on("click",N.fn,N.obj,N.scope);this._onclickAttributeValue=N;}},_isActivationKey:function(N){var S=this.get("type"),O=(S=="checkbox"||S=="radio")?this.CHECK_ACTIVATION_KEYS:this.ACTIVATION_KEYS,Q=O.length,R=false,P;if(Q>0){P=Q-1;do{if(N==O[P]){R=true;break;}}while(P--);}return R;},_isSplitButtonOptionKey:function(P){var O=(M.getCharCode(P)==40);var N=function(Q){M.preventDefault(Q);this.removeListener("keypress",N);};if(O){if(L.opera){this.on("keypress",N);}M.preventDefault(P);}return O;},_addListenersToForm:function(){var T=this.getForm(),S=YAHOO.widget.Button.onFormKeyPress,R,N,Q,P,O;if(T){M.on(T,"reset",this._onFormReset,null,this);M.on(T,"submit",this._onFormSubmit,null,this);N=this.get("srcelement");if(this.get("type")=="submit"||(N&&N.type=="submit")){Q=M.getListeners(T,"keypress");R=false;if(Q){P=Q.length;if(P>0){O=P-1;do{if(Q[O].fn==S){R=true;break;}}while(O--);}}if(!R){M.on(T,"keypres!
 s",S);}}}},_showMenu:function(R){if(YAHOO.widget.MenuManager){!
 YAHOO.wi
dget.MenuManager.hideVisible();}if(K){K.hideAll();}var N=this._menu,Q=this.get("menualignment"),P=this.get("focusmenu"),O;if(this._renderedMenu){N.cfg.setProperty("context",[this.get("element"),Q[0],Q[1]]);N.cfg.setProperty("preventcontextoverlap",true);N.cfg.setProperty("constraintoviewport",true);}else{N.cfg.queueProperty("context",[this.get("element"),Q[0],Q[1]]);N.cfg.queueProperty("preventcontextoverlap",true);N.cfg.queueProperty("constraintoviewport",true);}this.focus();if(J&&N&&(N instanceof J)){O=N.focus;N.focus=function(){};if(this._renderedMenu){N.cfg.setProperty("minscrollheight",this.get("menuminscrollheight"));N.cfg.setProperty("maxheight",this.get("menumaxheight"));}else{N.cfg.queueProperty("minscrollheight",this.get("menuminscrollheight"));N.cfg.queueProperty("maxheight",this.get("menumaxheight"));}N.show();N.focus=O;N.align();if(R.type=="mousedown"){M.stopPropagation(R);}if(P){N.focus();}}else{if(B&&N&&(N instanceof B)){if(!this._renderedMenu){N.render(this.g!
 et("element").parentNode);}N.show();N.align();}}},_hideMenu:function(){var N=this._menu;if(N){N.hide();}},_onMouseOver:function(O){var Q=this.get("type"),N,P;if(Q==="split"){N=this.get("element");P=(G.getX(N)+(N.offsetWidth-this.OPTION_AREA_WIDTH));this._nOptionRegionX=P;}if(!this._hasMouseEventHandlers){if(Q==="split"){this.on("mousemove",this._onMouseMove);}this.on("mouseout",this._onMouseOut);this._hasMouseEventHandlers=true;}this.addStateCSSClasses("hover");if(Q==="split"&&(M.getPageX(O)>P)){this.addStateCSSClasses("hoveroption");}if(this._activationButtonPressed){this.addStateCSSClasses("active");}if(this._bOptionPressed){this.addStateCSSClasses("activeoption");}if(this._activationButtonPressed||this._bOptionPressed){M.removeListener(document,"mouseup",this._onDocumentMouseUp);}},_onMouseMove:function(N){var O=this._nOptionRegionX;if(O){if(M.getPageX(N)>O){this.addStateCSSClasses("hoveroption");}else{this.removeStateCSSClasses("hoveroption");}}},_onMouseOut:function(N)!
 {var O=this.get("type");this.removeStateCSSClasses("hover");if!
 (O!="men
u"){this.removeStateCSSClasses("active");}if(this._activationButtonPressed||this._bOptionPressed){M.on(document,"mouseup",this._onDocumentMouseUp,null,this);}if(O==="split"&&(M.getPageX(N)>this._nOptionRegionX)){this.removeStateCSSClasses("hoveroption");}},_onDocumentMouseUp:function(P){this._activationButtonPressed=false;this._bOptionPressed=false;var Q=this.get("type"),N,O;if(Q=="menu"||Q=="split"){N=M.getTarget(P);O=this._menu.element;if(N!=O&&!G.isAncestor(O,N)){this.removeStateCSSClasses((Q=="menu"?"active":"activeoption"));this._hideMenu();}}M.removeListener(document,"mouseup",this._onDocumentMouseUp);},_onMouseDown:function(P){var Q,O=true;function N(){this._hideMenu();this.removeListener("mouseup",N);}if((P.which||P.button)==1){if(!this.hasFocus()){this.focus();}Q=this.get("type");if(Q=="split"){if(M.getPageX(P)>this._nOptionRegionX){this.fireEvent("option",P);O=false;}else{this.addStateCSSClasses("active");this._activationButtonPressed=true;}}else{if(Q=="menu"){if(t!
 his.isActive()){this._hideMenu();this._activationButtonPressed=false;}else{this._showMenu(P);this._activationButtonPressed=true;}}else{this.addStateCSSClasses("active");this._activationButtonPressed=true;}}if(Q=="split"||Q=="menu"){this._hideMenuTimer=I.later(250,this,this.on,["mouseup",N]);}}return O;},_onMouseUp:function(P){var Q=this.get("type"),N=this._hideMenuTimer,O=true;if(N){N.cancel();}if(Q=="checkbox"||Q=="radio"){this.set("checked",!(this.get("checked")));}this._activationButtonPressed=false;if(Q!="menu"){this.removeStateCSSClasses("active");}if(Q=="split"&&M.getPageX(P)>this._nOptionRegionX){O=false;}return O;},_onFocus:function(O){var N;this.addStateCSSClasses("focus");if(this._activationKeyPressed){this.addStateCSSClasses("active");}C=this;if(!this._hasKeyEventHandlers){N=this._button;M.on(N,"blur",this._onBlur,null,this);M.on(N,"keydown",this._onKeyDown,null,this);M.on(N,"keyup",this._onKeyUp,null,this);
+this._hasKeyEventHandlers=true;}this.fireEvent("focus",O);},_onBlur:function(N){this.removeStateCSSClasses("focus");if(this.get("type")!="menu"){this.removeStateCSSClasses("active");}if(this._activationKeyPressed){M.on(document,"keyup",this._onDocumentKeyUp,null,this);}C=null;this.fireEvent("blur",N);},_onDocumentKeyUp:function(N){if(this._isActivationKey(M.getCharCode(N))){this._activationKeyPressed=false;M.removeListener(document,"keyup",this._onDocumentKeyUp);}},_onKeyDown:function(O){var N=this._menu;if(this.get("type")=="split"&&this._isSplitButtonOptionKey(O)){this.fireEvent("option",O);}else{if(this._isActivationKey(M.getCharCode(O))){if(this.get("type")=="menu"){this._showMenu(O);}else{this._activationKeyPressed=true;this.addStateCSSClasses("active");}}}if(N&&N.cfg.getProperty("visible")&&M.getCharCode(O)==27){N.hide();this.focus();}},_onKeyUp:function(N){var O;if(this._isActivationKey(M.getCharCode(N))){O=this.get("type");if(O=="checkbox"||O=="radio"){this.set("che!
 cked",!(this.get("checked")));}this._activationKeyPressed=false;if(this.get("type")!="menu"){this.removeStateCSSClasses("active");}}},_onClick:function(Q){var S=this.get("type"),N,R,O,P;switch(S){case"radio":case"checkbox":if(!this._hasDefaultTitle){if(this.get("checked")){N=(S=="radio")?this.RADIO_CHECKED_TITLE:this.CHECKBOX_CHECKED_TITLE;}else{N=(S=="radio")?this.RADIO_DEFAULT_TITLE:this.CHECKBOX_DEFAULT_TITLE;}this.set("title",N);}break;case"submit":if(Q.returnValue!==false){this.submitForm();}break;case"reset":R=this.getForm();if(R){R.reset();}break;case"menu":N=this._menu.cfg.getProperty("visible")?this.MENUBUTTON_MENU_VISIBLE_TITLE:this.MENUBUTTON_DEFAULT_TITLE;this.set("title",N);break;case"split":if(this._nOptionRegionX>0&&(M.getPageX(Q)>this._nOptionRegionX)){P=false;}else{this._hideMenu();O=this.get("srcelement");if(O&&O.type=="submit"&&Q.returnValue!==false){this.submitForm();}}N=this._menu.cfg.getProperty("visible")?this.SPLITBUTTON_OPTION_VISIBLE_TITLE:this.SPL!
 ITBUTTON_DEFAULT_TITLE;this.set("title",N);break;}return P;},_!
 onDblCli
ck:function(O){var N=true;if(this.get("type")=="split"&&M.getPageX(O)>this._nOptionRegionX){N=false;}return N;},_onAppendTo:function(N){I.later(0,this,this._addListenersToForm);},_onFormReset:function(O){var P=this.get("type"),N=this._menu;if(P=="checkbox"||P=="radio"){this.resetValue("checked");}if(J&&N&&(N instanceof J)){this.resetValue("selectedMenuItem");}},_onFormSubmit:function(N){this.createHiddenFields();},_onDocumentMouseDown:function(Q){var N=M.getTarget(Q),P=this.get("element"),O=this._menu.element;if(N!=P&&!G.isAncestor(P,N)&&N!=O&&!G.isAncestor(O,N)){this._hideMenu();M.removeListener(document,"mousedown",this._onDocumentMouseDown);}},_onOption:function(N){if(this.hasClass("yui-split-button-activeoption")){this._hideMenu();this._bOptionPressed=false;}else{this._showMenu(N);this._bOptionPressed=true;}},_onMenuShow:function(O){M.on(document,"mousedown",this._onDocumentMouseDown,null,this);var N,P;if(this.get("type")=="split"){N=this.SPLITBUTTON_OPTION_VISIBLE_TITLE!
 ;P="activeoption";}else{N=this.MENUBUTTON_MENU_VISIBLE_TITLE;P="active";}this.addStateCSSClasses(P);this.set("title",N);},_onMenuHide:function(P){var O=this._menu,N,Q;if(this.get("type")=="split"){N=this.SPLITBUTTON_DEFAULT_TITLE;Q="activeoption";}else{N=this.MENUBUTTON_DEFAULT_TITLE;Q="active";}this.removeStateCSSClasses(Q);this.set("title",N);if(this.get("type")=="split"){this._bOptionPressed=false;}},_onMenuKeyDown:function(P,O){var N=O[0];if(M.getCharCode(N)==27){this.focus();if(this.get("type")=="split"){this._bOptionPressed=false;}}},_onMenuRender:function(P){var S=this.get("element"),O=S.parentNode,N=this._menu,R=N.element,Q=N.srcElement;if(O!=R.parentNode){O.appendChild(R);}this._renderedMenu=true;if(Q&&Q.nodeName.toLowerCase()==="select"&&Q.value){this.set("selectedMenuItem",N.getItem(Q.selectedIndex));}},_onMenuClick:function(O,N){var Q=N[1],P;if(Q){this.set("selectedMenuItem",Q);P=this.get("srcelement");if(P&&P.type=="submit"){this.submitForm();}this._hideMenu();!
 }},_onSelectedMenuItemChange:function(N){var O=N.prevValue,P=N!
 .newValu
e;if(O){G.removeClass(O.element,"yui-button-selectedmenuitem");}if(P){G.addClass(P.element,"yui-button-selectedmenuitem");}},createButtonElement:function(N){var P=this.NODE_NAME,O=document.createElement(P);O.innerHTML="<"+P+' class="first-child">'+(N=="link"?"<a></a>":'<button type="button"></button>')+"</"+P+">";return O;},addStateCSSClasses:function(N){var O=this.get("type");if(I.isString(N)){if(N!="activeoption"&&N!="hoveroption"){this.addClass(this.CSS_CLASS_NAME+("-"+N));}this.addClass("yui-"+O+("-button-"+N));}},removeStateCSSClasses:function(N){var O=this.get("type");if(I.isString(N)){this.removeClass(this.CSS_CLASS_NAME+("-"+N));this.removeClass("yui-"+O+("-button-"+N));}},createHiddenFields:function(){this.removeHiddenFields();var V=this.getForm(),Z,O,S,X,Y,T,U,N,R,W,P,Q=false;if(V&&!this.get("disabled")){O=this.get("type");S=(O=="checkbox"||O=="radio");if((S&&this.get("checked"))||(E==this)){Z=F((S?O:"hidden"),this.get("name"),this.get("value"),this.get("checked"))!
 ;if(Z){if(S){Z.style.display="none";}V.appendChild(Z);}}X=this._menu;if(J&&X&&(X instanceof J)){Y=this.get("selectedMenuItem");P=X.srcElement;Q=(P&&P.nodeName.toUpperCase()=="SELECT");if(Y){U=(Y.value===null||Y.value==="")?Y.cfg.getProperty("text"):Y.value;T=this.get("name");if(Q){W=P.name;}else{if(T){W=(T+"_options");}}if(U&&W){N=F("hidden",W,U);V.appendChild(N);}}else{if(Q){V.appendChild(P);}}}if(Z&&N){this._hiddenFields=[Z,N];}else{if(!Z&&N){this._hiddenFields=N;}else{if(Z&&!N){this._hiddenFields=Z;}}}R=this._hiddenFields;}return R;},removeHiddenFields:function(){var Q=this._hiddenFields,O,P;function N(R){if(G.inDocument(R)){R.parentNode.removeChild(R);}}if(Q){if(I.isArray(Q)){O=Q.length;if(O>0){P=O-1;do{N(Q[P]);}while(P--);}}else{N(Q);}this._hiddenFields=null;}},submitForm:function(){var Q=this.getForm(),P=this.get("srcelement"),O=false,N;if(Q){if(this.get("type")=="submit"||(P&&P.type=="submit")){E=this;
+}if(L.ie){O=Q.fireEvent("onsubmit");}else{N=document.createEvent("HTMLEvents");N.initEvent("submit",true,true);O=Q.dispatchEvent(N);}if((L.ie||L.webkit)&&O){Q.submit();}}return O;},init:function(O,a){var Q=a.type=="link"?"a":"button",V=a.srcelement,Z=O.getElementsByTagName(Q)[0],X;if(!Z){X=O.getElementsByTagName("input")[0];if(X){Z=document.createElement("button");Z.setAttribute("type","button");X.parentNode.replaceChild(Z,X);}}this._button=Z;this._hasDefaultTitle=(a.title&&a.title.length>0);YAHOO.widget.Button.superclass.init.call(this,O,a);var T=this.get("id"),N=T+"-button";Z.id=N;var U,W;var d=function(e){return(e.htmlFor===T);};var S=function(){W.setAttribute((L.ie?"htmlFor":"for"),N);};if(V&&this.get("type")!="link"){U=G.getElementsBy(d,"label");if(I.isArray(U)&&U.length>0){W=U[0];}}D[T]=this;this.addClass(this.CSS_CLASS_NAME);this.addClass("yui-"+this.get("type")+"-button");M.on(this._button,"focus",this._onFocus,null,this);this.on("mouseover",this._onMouseOver);this.!
 on("mousedown",this._onMouseDown);this.on("mouseup",this._onMouseUp);this.on("click",this._onClick);var Y=this.get("onclick");this.set("onclick",null);this.set("onclick",Y);this.on("dblclick",this._onDblClick);if(W){this.on("appendTo",S);}this.on("appendTo",this._onAppendTo);var c=this.get("container"),P=this.get("element"),b=G.inDocument(P),R;if(c){if(V&&V!=P){R=V.parentNode;if(R){R.removeChild(V);}}if(I.isString(c)){M.onContentReady(c,this.appendTo,c,this);}else{this.on("init",function(){I.later(0,this,this.appendTo,c);});}}else{if(!b&&V&&V!=P){R=V.parentNode;if(R){this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:R});R.replaceChild(P,V);this.fireEvent("appendTo",{type:"appendTo",target:R});}}else{if(this.get("type")!="link"&&b&&V&&V==P){this._addListenersToForm();}}}this.fireEvent("init",{type:"init",target:this});},initAttributes:function(O){var N=O||{};YAHOO.widget.Button.superclass.initAttributes.call(this,N);this.setAttributeConfig("type",{value:(N.type||!
 "push"),validator:I.isString,writeOnce:true,method:this._setTy!
 pe});thi
s.setAttributeConfig("label",{value:N.label,validator:I.isString,method:this._setLabel});this.setAttributeConfig("value",{value:N.value});this.setAttributeConfig("name",{value:N.name,validator:I.isString});this.setAttributeConfig("tabindex",{value:N.tabindex,validator:I.isNumber,method:this._setTabIndex});this.configureAttribute("title",{value:N.title,validator:I.isString,method:this._setTitle});this.setAttributeConfig("disabled",{value:(N.disabled||false),validator:I.isBoolean,method:this._setDisabled});this.setAttributeConfig("href",{value:N.href,validator:I.isString,method:this._setHref});this.setAttributeConfig("target",{value:N.target,validator:I.isString,method:this._setTarget});this.setAttributeConfig("checked",{value:(N.checked||false),validator:I.isBoolean,method:this._setChecked});this.setAttributeConfig("container",{value:N.container,writeOnce:true});this.setAttributeConfig("srcelement",{value:N.srcelement,writeOnce:true});this.setAttributeConfig("menu",{value:nul!
 l,method:this._setMenu,writeOnce:true});this.setAttributeConfig("lazyloadmenu",{value:(N.lazyloadmenu===false?false:true),validator:I.isBoolean,writeOnce:true});this.setAttributeConfig("menuclassname",{value:(N.menuclassname||"yui-button-menu"),validator:I.isString,method:this._setMenuClassName,writeOnce:true});this.setAttributeConfig("menuminscrollheight",{value:(N.menuminscrollheight||90),validator:I.isNumber});this.setAttributeConfig("menumaxheight",{value:(N.menumaxheight||0),validator:I.isNumber});this.setAttributeConfig("menualignment",{value:(N.menualignment||["tl","bl"]),validator:I.isArray});this.setAttributeConfig("selectedMenuItem",{value:null});this.setAttributeConfig("onclick",{value:N.onclick,method:this._setOnClick});this.setAttributeConfig("focusmenu",{value:(N.focusmenu===false?false:true),validator:I.isBoolean});},focus:function(){if(!this.get("disabled")){this._button.focus();}},blur:function(){if(!this.get("disabled")){this._button.blur();}},hasFocus:fun!
 ction(){return(C==this);},isActive:function(){return this.hasC!
 lass(thi
s.CSS_CLASS_NAME+"-active");},getMenu:function(){return this._menu;},getForm:function(){var N=this._button,O;if(N){O=N.form;}return O;},getHiddenFields:function(){return this._hiddenFields;},destroy:function(){var P=this.get("element"),O=P.parentNode,N=this._menu,R;if(N){if(K&&K.find(N)){K.remove(N);}N.destroy();}M.purgeElement(P);M.purgeElement(this._button);M.removeListener(document,"mouseup",this._onDocumentMouseUp);M.removeListener(document,"keyup",this._onDocumentKeyUp);M.removeListener(document,"mousedown",this._onDocumentMouseDown);var Q=this.getForm();if(Q){M.removeListener(Q,"reset",this._onFormReset);M.removeListener(Q,"submit",this._onFormSubmit);}this.unsubscribeAll();if(O){O.removeChild(P);}delete D[this.get("id")];R=G.getElementsByClassName(this.CSS_CLASS_NAME,this.NODE_NAME,Q);if(I.isArray(R)&&R.length===0){M.removeListener(Q,"keypress",YAHOO.widget.Button.onFormKeyPress);}},fireEvent:function(O,N){var P=arguments[0];if(this.DOM_EVENTS[P]&&this.get("disabled")!
 ){return false;}return YAHOO.widget.Button.superclass.fireEvent.apply(this,arguments);},toString:function(){return("Button "+this.get("id"));}});YAHOO.widget.Button.onFormKeyPress=function(R){var P=M.getTarget(R),S=M.getCharCode(R),Q=P.nodeName&&P.nodeName.toUpperCase(),N=P.type,T=false,V,X,O,W;function U(a){var Z,Y;switch(a.nodeName.toUpperCase()){case"INPUT":case"BUTTON":if(a.type=="submit"&&!a.disabled){if(!T&&!O){O=a;}}break;default:Z=a.id;if(Z){V=D[Z];if(V){T=true;if(!V.get("disabled")){Y=V.get("srcelement");if(!X&&(V.get("type")=="submit"||(Y&&Y.type=="submit"))){X=V;}}}}break;}}if(S==13&&((Q=="INPUT"&&(N=="text"||N=="password"||N=="checkbox"||N=="radio"||N=="file"))||Q=="SELECT")){G.getElementsBy(U,"*",this);if(O){O.focus();}else{if(!O&&X){M.preventDefault(R);if(L.ie){X.get("element").fireEvent("onclick");}else{W=document.createEvent("HTMLEvents");W.initEvent("click",true,true);if(L.gecko<1.9){X.fireEvent("click",W);
+}else{X.get("element").dispatchEvent(W);}}}}}};YAHOO.widget.Button.addHiddenFieldsToForm=function(N){var S=G.getElementsByClassName(YAHOO.widget.Button.prototype.CSS_CLASS_NAME,"*",N),Q=S.length,R,O,P;if(Q>0){for(P=0;P<Q;P++){O=S[P].id;if(O){R=D[O];if(R){R.createHiddenFields();}}}}};YAHOO.widget.Button.getButton=function(N){return D[N];};})();(function(){var C=YAHOO.util.Dom,B=YAHOO.util.Event,D=YAHOO.lang,A=YAHOO.widget.Button,E={};YAHOO.widget.ButtonGroup=function(J,H){var I=YAHOO.widget.ButtonGroup.superclass.constructor,K,G,F;if(arguments.length==1&&!D.isString(J)&&!J.nodeName){if(!J.id){F=C.generateId();J.id=F;}I.call(this,(this._createGroupElement()),J);}else{if(D.isString(J)){G=C.get(J);if(G){if(G.nodeName.toUpperCase()==this.NODE_NAME){I.call(this,G,H);}}}else{K=J.nodeName.toUpperCase();if(K&&K==this.NODE_NAME){if(!J.id){J.id=C.generateId();}I.call(this,J,H);}}}};YAHOO.extend(YAHOO.widget.ButtonGroup,YAHOO.util.Element,{_buttons:null,NODE_NAME:"DIV",CSS_CLASS_NAME:"!
 yui-buttongroup",_createGroupElement:function(){var F=document.createElement(this.NODE_NAME);return F;},_setDisabled:function(G){var H=this.getCount(),F;if(H>0){F=H-1;do{this._buttons[F].set("disabled",G);}while(F--);}},_onKeyDown:function(K){var G=B.getTarget(K),I=B.getCharCode(K),H=G.parentNode.parentNode.id,J=E[H],F=-1;if(I==37||I==38){F=(J.index===0)?(this._buttons.length-1):(J.index-1);}else{if(I==39||I==40){F=(J.index===(this._buttons.length-1))?0:(J.index+1);}}if(F>-1){this.check(F);this.getButton(F).focus();}},_onAppendTo:function(H){var I=this._buttons,G=I.length,F;for(F=0;F<G;F++){I[F].appendTo(this.get("element"));}},_onButtonCheckedChange:function(G,F){var I=G.newValue,H=this.get("checkedButton");if(I&&H!=F){if(H){H.set("checked",false,true);}this.set("checkedButton",F);this.set("value",F.get("value"));}else{if(H&&!H.set("checked")){H.set("checked",true,true);}}},init:function(I,H){this._buttons=[];YAHOO.widget.ButtonGroup.superclass.init.call(this,I,H);this.add!
 Class(this.CSS_CLASS_NAME);var J=this.getElementsByClassName("!
 yui-radi
o-button");if(J.length>0){this.addButtons(J);}function F(K){return(K.type=="radio");}J=C.getElementsBy(F,"input",this.get("element"));if(J.length>0){this.addButtons(J);}this.on("keydown",this._onKeyDown);this.on("appendTo",this._onAppendTo);var G=this.get("container");if(G){if(D.isString(G)){B.onContentReady(G,function(){this.appendTo(G);},null,this);}else{this.appendTo(G);}}},initAttributes:function(G){var F=G||{};YAHOO.widget.ButtonGroup.superclass.initAttributes.call(this,F);this.setAttributeConfig("name",{value:F.name,validator:D.isString});this.setAttributeConfig("disabled",{value:(F.disabled||false),validator:D.isBoolean,method:this._setDisabled});this.setAttributeConfig("value",{value:F.value});this.setAttributeConfig("container",{value:F.container,writeOnce:true});this.setAttributeConfig("checkedButton",{value:null});},addButton:function(J){var L,K,G,F,H,I;if(J instanceof A&&J.get("type")=="radio"){L=J;}else{if(!D.isString(J)&&!J.nodeName){J.type="radio";L=new A(J);}!
 else{L=new A(J,{type:"radio"});}}if(L){F=this._buttons.length;H=L.get("name");I=this.get("name");L.index=F;this._buttons[F]=L;E[L.get("id")]=L;if(H!=I){L.set("name",I);}if(this.get("disabled")){L.set("disabled",true);}if(L.get("checked")){this.set("checkedButton",L);}K=L.get("element");G=this.get("element");if(K.parentNode!=G){G.appendChild(K);}L.on("checkedChange",this._onButtonCheckedChange,L,this);}return L;},addButtons:function(G){var H,I,J,F;if(D.isArray(G)){H=G.length;J=[];if(H>0){for(F=0;F<H;F++){I=this.addButton(G[F]);if(I){J[J.length]=I;}}}}return J;},removeButton:function(H){var I=this.getButton(H),G,F;if(I){this._buttons.splice(H,1);delete E[I.get("id")];I.removeListener("checkedChange",this._onButtonCheckedChange);I.destroy();G=this._buttons.length;if(G>0){F=this._buttons.length-1;do{this._buttons[F].index=F;}while(F--);}}},getButton:function(F){return this._buttons[F];},getButtons:function(){return this._buttons;},getCount:function(){return this._buttons.length!
 ;},focus:function(H){var I,G,F;if(D.isNumber(H)){I=this._butto!
 ns[H];if
(I){I.focus();}}else{G=this.getCount();for(F=0;F<G;F++){I=this._buttons[F];if(!I.get("disabled")){I.focus();break;}}}},check:function(F){var G=this.getButton(F);if(G){G.set("checked",true);}},destroy:function(){var I=this._buttons.length,H=this.get("element"),F=H.parentNode,G;if(I>0){G=this._buttons.length-1;do{this._buttons[G].destroy();}while(G--);}B.purgeElement(H);F.removeChild(H);},toString:function(){return("ButtonGroup "+this.get("id"));}});})();YAHOO.register("button",YAHOO.widget.Button,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/button/button.js
===================================================================
--- trunk/root/static/yui/button/button.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/button/button.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
 * @module button
 * @description <p>The Button Control enables the creation of rich, graphical 
 * buttons that function like traditional HTML form buttons.  <em>Unlike</em> 
-* tradition HTML form buttons, buttons created with the Button Control can have 
+* traditional HTML form buttons, buttons created with the Button Control can have 
 * a label that is different from its value.  With the inclusion of the optional 
 * <a href="module_menu.html">Menu Control</a>, the Button Control can also be
 * used to create menu buttons and split buttons, controls that are not 
@@ -1039,8 +1039,8 @@
             }
         
         },
+
         
-        
         /**
         * @method _setMenu
         * @description Sets the value of the button's "menu" attribute.
@@ -1060,15 +1060,9 @@
                 */
         
                 bInstance = false,
-        
-
                 oMenu,
                 oMenuElement,
-                oSrcElement,
-                aItems,
-                nItems,
-                oItem,
-                i;
+                oSrcElement;
         
 
 			function onAppendTo() {
@@ -1126,12 +1120,13 @@
 
 						oMenu.keyDownEvent.subscribe(this._onMenuKeyDown, this, true);
 						oMenu.subscribe("click", this._onMenuClick, this, true);
-						oMenu.itemAddedEvent.subscribe(this._onMenuItemAdded, this, true);
+
+						this.on("selectedMenuItemChange", this._onSelectedMenuItemChange);
 		
 						oSrcElement = oMenu.srcElement;
 		
 						if (oSrcElement && oSrcElement.nodeName.toUpperCase() == "SELECT") {
-				
+
 							oSrcElement.style.display = "none";
 							oSrcElement.parentNode.removeChild(oSrcElement);
 		
@@ -1185,31 +1180,8 @@
 				if (p_oMenu && Menu && (p_oMenu instanceof Menu)) {
 			
 					oMenu = p_oMenu;
-					aItems = oMenu.getItems();
-					nItems = aItems.length;
 					bInstance = true;
 			
-			
-					if (nItems > 0) {
-			
-						i = nItems - 1;
-			
-						do {
-			
-							oItem = aItems[i];
-			
-							if (oItem) {
-			
-								oItem.cfg.subscribeToConfigEvent("selected", 
-									this._onMenuItemSelected, oItem, this);
-			
-							}
-			
-						}
-						while (i--);
-			
-					}
-			
 					initMenu.call(this);
 			
 				}
@@ -1323,36 +1295,7 @@
             }
         
         },
-        
-        
-        /**
-        * @method _setSelectedMenuItem
-        * @description Sets the value of the button's 
-        * "selectedMenuItem" attribute.
-        * @protected
-        * @param {Number} p_nIndex Number representing the index of the item 
-        * in the button's menu that is currently selected.
-        */
-        _setSelectedMenuItem: function (p_nIndex) {
 
-            var oMenu = this._menu,
-                oMenuItem;
-
-
-            if (Menu && oMenu && oMenu instanceof Menu) {
-
-                oMenuItem = oMenu.getItem(p_nIndex);
-                
-
-                if (oMenuItem && !oMenuItem.cfg.getProperty("selected")) {
-                
-                    oMenuItem.cfg.setProperty("selected", true);
-                
-                }
-            
-            }
-
-        },
         
         
         // Protected methods
@@ -2155,99 +2098,101 @@
                 bReturnVal;
         
 
-            switch (sType) {
-        
-            case "radio":
-            case "checkbox":
+			switch (sType) {
 
+			case "radio":
+			case "checkbox":
+
 				if (!this._hasDefaultTitle) {
-    
+
 					if (this.get("checked")) {
-						
+
 						sTitle = (sType == "radio") ? 
 									this.RADIO_CHECKED_TITLE : 
 									this.CHECKBOX_CHECKED_TITLE;
-					
+
 					}
 					else {
-					
+
 						sTitle = (sType == "radio") ? 
 									this.RADIO_DEFAULT_TITLE : 
 									this.CHECKBOX_DEFAULT_TITLE;
-					
+
 					}
-					
+
 					this.set("title", sTitle);
-                
-                }
-    
-                break;
-    
-            case "submit":
 
+				}
+
+				break;
+
+			case "submit":
+
 				if (p_oEvent.returnValue !== false) {
-    
-                	this.submitForm();
-                
-                }
-            
-                break;
-    
-            case "reset":
-    
-                oForm = this.getForm();
-    
-                if (oForm) {
-    
-                    oForm.reset();
-                
-                }
-    
-                break;
-    
-            case "menu":
-    
-                sTitle = this._menu.cfg.getProperty("visible") ? 
-                                this.MENUBUTTON_MENU_VISIBLE_TITLE : 
-                                this.MENUBUTTON_DEFAULT_TITLE;
-    
-                this.set("title", sTitle);
-    
-                break;
-    
-            case "split":
-    
-                if (Event.getPageX(p_oEvent) > this._nOptionRegionX) {
-    
-                    bReturnVal = false;
-                
-                }
-                else {
-    
-                    this._hideMenu();
+
+					this.submitForm();
+
+				}
+
+				break;
+
+			case "reset":
+
+				oForm = this.getForm();
+
+				if (oForm) {
+
+					oForm.reset();
+
+				}
+
+				break;
+
+			case "menu":
+
+				sTitle = this._menu.cfg.getProperty("visible") ? 
+								this.MENUBUTTON_MENU_VISIBLE_TITLE : 
+								this.MENUBUTTON_DEFAULT_TITLE;
+
+				this.set("title", sTitle);
+
+				break;
+
+			case "split":
+
+				if (this._nOptionRegionX > 0 && 
+						(Event.getPageX(p_oEvent) > this._nOptionRegionX)) {
+
+					bReturnVal = false;
+
+				}
+				else {
+
+					this._hideMenu();
+
+					oSrcElement = this.get("srcelement");
+
+					if (oSrcElement && oSrcElement.type == "submit" && 
+							p_oEvent.returnValue !== false) {
+
+						this.submitForm();
+
+					}
+
+				}
+
+				sTitle = this._menu.cfg.getProperty("visible") ? 
+								this.SPLITBUTTON_OPTION_VISIBLE_TITLE : 
+								this.SPLITBUTTON_DEFAULT_TITLE;
+
+				this.set("title", sTitle);
+
+				break;
+
+			}
+
+			return bReturnVal;
         
-                    oSrcElement = this.get("srcelement");
-        
-                    if (oSrcElement && oSrcElement.type == "submit") {
-    
-                        this.submitForm();
-                    
-                    }
-                
-                }
-    
-                sTitle = this._menu.cfg.getProperty("visible") ? 
-                                this.SPLITBUTTON_OPTION_VISIBLE_TITLE : 
-                                this.SPLITBUTTON_DEFAULT_TITLE;
-    
-                this.set("title", sTitle);
-    
-                break;
-        
-            }
-        
-        	return bReturnVal;
-        
         },
         
         
@@ -2505,7 +2450,9 @@
         
             var oButtonElement = this.get("element"),
                 oButtonParent = oButtonElement.parentNode,
-                oMenuElement = this._menu.element;
+				oMenu = this._menu,
+                oMenuElement = oMenu.element,
+				oSrcElement = oMenu.srcElement;
         
         
             if (oButtonParent != oMenuElement.parentNode) {
@@ -2516,58 +2463,24 @@
 
 			this._renderedMenu = true;
 
-            this.set("selectedMenuItem", this.get("selectedMenuItem"));
+			//	If the user has designated an <option> of the Menu's source 
+			//	<select> element to be selected, sync the selectedIndex with 
+			//	the "selectedMenuItem" Attribute.
 
+			if (oSrcElement && 
+					oSrcElement.nodeName.toLowerCase() === "select" && 
+					oSrcElement.value) {
+				
+				this.set("selectedMenuItem", 
+							oMenu.getItem(oSrcElement.selectedIndex));
+				
+			}
+
         },
-        
-        
-        /**
-        * @method _onMenuItemSelected
-        * @description "selectedchange" event handler for each item in the 
-        * button's menu.
-        * @private
-        * @param {String} p_sType String representing the name of the event  
-        * that was fired.
-        * @param {Array} p_aArgs Array of arguments sent when the event 
-        * was fired.
-        * @param {MenuItem} p_oItem Object representing the menu item that
-        * subscribed to the event.
-        */
-        _onMenuItemSelected: function (p_sType, p_aArgs, p_oItem) {
 
-            var bSelected = p_aArgs[0];
-
-            if (bSelected) {
-            
-                this.set("selectedMenuItem", p_oItem);
-
-            }
         
-        },
         
-        
         /**
-        * @method _onMenuItemAdded
-        * @description "itemadded" event handler for the button's menu.
-        * @private
-        * @param {String} p_sType String representing the name of the event  
-        * that was fired.
-        * @param {Array} p_aArgs Array of arguments sent when the event
-        * was fired.
-        * @param {<a href="YAHOO.widget.MenuItem.html">
-        * YAHOO.widget.MenuItem</a>} p_oItem Object representing the menu 
-        * item that subscribed to the event.
-        */
-        _onMenuItemAdded: function (p_sType, p_aArgs, p_oItem) {
-            
-            var oItem = p_aArgs[0];
-        
-           	oItem.cfg.subscribeToConfigEvent("selected", this._onMenuItemSelected, oItem, this);
-        
-        },
-        
-        
-        /**
         * @method _onMenuClick
         * @description "click" event handler for the button's menu.
         * @private
@@ -2598,9 +2511,31 @@
             }
         
         },
+
+
+        /**
+        * @method _onSelectedMenuItemChange
+        * @description "selectedMenuItemChange" event handler for the Button's
+		* "selectedMenuItem" attribute.
+        * @param {Event} event Object representing the DOM event object  
+        * passed back by the event utility (YAHOO.util.Event).
+        */
+		_onSelectedMenuItemChange: function (event) {
+		
+			var oSelected = event.prevValue,
+				oItem = event.newValue;
+
+			if (oSelected) {
+				Dom.removeClass(oSelected.element, "yui-button-selectedmenuitem");
+			}
+			
+			if (oItem) {
+				Dom.addClass(oItem.element, "yui-button-selectedmenuitem");
+			}
+			
+		},        
         
         
-        
         // Public methods
         
         
@@ -3025,6 +2960,16 @@
 			this.on("mousedown", this._onMouseDown);
 			this.on("mouseup", this._onMouseUp);
             this.on("click", this._onClick);
+
+			//	Need to reset the value of the "onclick" Attribute so that any
+			//	handlers registered via the "onclick" Attribute are fired after 
+			//	Button's default "_onClick" listener.
+
+			var fnOnClick = this.get("onclick");
+
+			this.set("onclick", null);
+			this.set("onclick", fnOnClick);
+
             this.on("dblclick", this._onDblClick);
 
             if (oLabel) {
@@ -3133,6 +3078,7 @@
             * "radio," "menu," and "split."
             * @default "push"
             * @type String
+			* @writeonce
             */
             this.setAttributeConfig("type", {
         
@@ -3140,7 +3086,7 @@
                 validator: Lang.isString,
                 writeOnce: true,
                 method: this._setType
-        
+
             });
         
         
@@ -3288,6 +3234,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("container", {
         
@@ -3305,6 +3252,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("srcelement", {
         
@@ -3348,6 +3296,7 @@
             * href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-
             * one-html.html#ID-58190037">HTMLElement</a>|String|Array
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("menu", {
         
@@ -3381,6 +3330,7 @@
             * attribute.</em>
             * @default true
             * @type Boolean
+			* @writeonce
             */
             this.setAttributeConfig("lazyloadmenu", {
         
@@ -3397,6 +3347,7 @@
             * applied to the root element of the button's menu.
             * @type String
             * @default "yui-button-menu"
+			* @writeonce
             */
             this.setAttributeConfig("menuclassname", {
         
@@ -3467,8 +3418,7 @@
             */
             this.setAttributeConfig("selectedMenuItem", {
         
-                value: null,
-                method: this._setSelectedMenuItem
+                value: null
         
             });
         
@@ -4414,6 +4364,7 @@
             * @type <a href="http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/
             * level-one-html.html#ID-58190037">HTMLElement</a>|String
             * @default null
+			* @writeonce
             */
             this.setAttributeConfig("container", {
         
@@ -4795,4 +4746,4 @@
     });
 
 })();
-YAHOO.register("button", YAHOO.widget.Button, {version: "2.6.0", build: "1321"});
+YAHOO.register("button", YAHOO.widget.Button, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/calendar/README
===================================================================
--- trunk/root/static/yui/calendar/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,421 +0,0 @@
-Calendar Release Notes
-
-*** version 2.6.0 ***
-
-+ Fixed incorrect cell index parsing from cell id attribute, when
-  Calendar id contained "cell".
-  
-+ Added text to previous month, next month and close icons, to 
-  enhance accessibility for screen-readers.
-  
-+ Fixed issue with bubbled previous month, next month click events 
-  missing target information in certain browsers (due to replaced HTML), 
-  by delaying click event handling through a setTimeout.
-  
-+ Added destroy method to Calendar/CalendarGroup
-
-+ Fixed incorrect clear method behavior for CalendarGroup where all
-  pages would be set to the same month.
-  
-+ Refactored code to reduce minified Kweight.
-
-*** version 2.5.2 ***
-
-+ CalendarGroup toDate method no longer throws javascript exception
-
-*** version 2.5.1 *** 
-
-+ Fixed bug with mindate, maxdate being applied incorrectly if 
-  set to a day on which time change took place (DST, E.U Summertime) 
-  and the day is not the first day of the week.
-
-+ Fixed DateMath.getWeekNumber implementation to return correct 
-  week numbers. The older implementation would return Week 0 for 
-  certain weeks (e.g. the week starting Sun Dec 28th 2008)
-
-  To suppor the fix, DateMath.getWeekNumber has a signature 
-  change in 2.5.1 and can now support U.S Week calculations based 
-  on Jan 1st identifying the first week of the year, as well as 
-  ISO8601 week calculations based on Jan 4th identifying the first 
-  week of the year
-
-  The arguments which the method expected prior to 2.5.1 were not 
-  being used in calculating the week number. The new signature is:
-
-  DateMath.getWeekNumber(Date dt, Number firstDayOfWeek, Number janDate)
-
-  Where:
-
-    dt is the date for which week number is required
-
-    firstDayOfWeek is the day index identifying the first 
-    day of the week. Default is 0 (Sunday).
-
-    janDate is the date in the first week of January, which
-    identifies the first week of the year. 
-    Default is YAHOO.widget.DateMath.WEEK_ONE_JAN_DATE (1)
-
-  NOTE: Calendar instances themselves do not currently expose a 
-  configuration property to change the week numbering system 
-  used. A "janDate" value is not passed to the getWeekNumber 
-  method, when used by Calendar, resulting in it using the default value.
-
-  Therefore, ISO8601 week numbering can be generated for Calendars 
-  by setting the value of YAHOO.widget.DateMath.WEEK_ONE_JAN_DATE
-  to 4.
-
-*** version 2.5.0 *** 
-
-+ Prevent default event handling in CalendarNavigator enter key 
-  listener, to prevent automatic form submission when using Calendar
-  inside a form.
-
-+ Added workaround to DateMath.add and subtract for Safari 2 (webkit) 
-  bug in Date.setDate(n) which doesn't handle value of n less than -128 
-  or greater than 127 correctly.
-
-  See: http://brianary.blogspot.com/2006/03/safari-date-bug.html
-
-+ Added border, padding and margin rules to Calendar Sam Skin to 
-  protect Sam Skin's look and feel when Calendar is used with 
-  YUI base.css
-
-*** version 2.4.0 *** 
-
-+ Added CalendarNavigator (year selector) feature to allow the user to 
-  jump to a year/month directly without having to scroll through months
-  sequentially. 
-
-  The feature is enabled/configured using the "navigator" configuration
-  property.
-
-+ Added Custom Events: 
-
-    showNav/beforeShowNav
-    hideNav/beforeHideNav, 
-    renderNav/beforeRenderNav 
-
-  To Calendar/CalendarGroup, in support of the CalendarNavigator 
-  functionality. 
-
-+ Added Custom Events:
-
-    show/beforeShow
-    hide/beforeHide 
-
-  To Calendar and CalendarGroup. Returning false from a 
-  beforeShow/beforeHide listener can be used to prevent the Calendar 
-  from being shown/hidden respectively. 
-
-+ Added Public Methods: 
-
-    getCellIndex(date)    [ Calendar ]
-    getCalendarPage(date) [ CalendarGroup ]
-    toDate(dateArray)     [ Calendar/CalendarGroup ]
-    removeRenderers()     [ Calendar/CalendarGroup ]
-    
-+ The Calendar/CalendarGroup constructor is now more flexible: 
-
-    * It no longer requires an "id" argument. 
-
-      In it's simplest form, a Calendar/CalendarGroup can be 
-      constructed by simply providing a container id or reference.
-
-          var cal = new YAHOO.widget.Calendar("container"); 
-          -or-
-          var containerDiv = YAHOO.util.Dom.get("container");
-          var cal = new YAHOO.widget.Calendar(containerDiv); 
-
-      An id for the Calendar does not need to be provided, and will be 
-      generated from the container id by appending an "_t" suffix to the
-      container id if only the container is provided. 
-
-    * The container argument can be either a string, representing the 
-      id of the container, or an HTMLElement referring to the container 
-      element itself, as suggested in the example above. 
-
-    * If an HTMLElement is provided for the container argument and the 
-      element does not have an id, one will be generated for it using 
-      YAHOO.util.Dom.generateId(). 
-
-    * The older form of Calendar/CalendarGroup signature, expecting 
-      both an id and containerId is still supported and works as it did 
-      prior to 2.4.0. 
-
-+ Fixed performance issue, where the same custom renderer was being 
-  applied multiple times to the same cell.
-
-+ Added getDate(year, month, date) factory method to the DateMath utility, 
-  which can be used to create JavaScript Date instances for years less 
-  than 100.
-
-  The default Date(year, month, date) constructor implementations across 
-  browsers, assume that if year < 100, the caller is referring to the 
-  nineteen hundreds, and the year is set to 19xx instead of xx (as with
-  the deprecated setYear method). However Date.setFullYear(xx) can 
-  be used to set dates below 100. The above factory method provides a 
-  construction mechanism consistent with setFullYear.
-
-+ Changed Calendar/CalendarGroup/DateMath code to use the DateMath.getDate
-  method, so that 2 digit years are  not assumed to be in the 1900's. 
-
-  NOTE: Calendar's API already expects 4 digit date strings when referring 
-  to years after 999.
-
-*** version 2.3.1 *** 
-
-+ Changed Calendar/CalendarGroup to render an empty title bar element 
-  when "close" is set to true, but "title" has not been set, to allow Sam 
-  Skin to render a title bar correctly. 
-
-*** version 2.3.0 *** 
-
-+ Added checks to select, selectCell, deselect and deselectCell methods 
-  to ensure the Calendar/Calendar group was not set to an invalid state 
-  by programmatically selecting unselectable dates or cells.
-  
-+ Added new locale configuration properties for the Month/Year label 
-  used in the Calendar header (MY_LABEL_MONTH_POSITION, 
-  MY_LABEL_YEAR_POSITION, MY_LABEL_YEAR_SUFFIX, MY_LABEL_MONTH_SUFFIX). 
-  Japan is an example locale, where customization of the Month/Year 
-  label is required.
-  
-+ Changed "first", "last" class names to "first-of-type", "last-of-type", 
-  to avoid collision with YUI Grids' use of the "first" class name.
-  
-+ Added public isDateOOB method, to check if a given date is outside of 
-  the minimum/maximum configuration dates of the Calendar.
-  
-+ Deprecated YAHOO.widget.Calendar.browser, refactored to use 
-  YAHOO.env.ua instead. 
-  
-+ Removed overflow:hidden from default Calendar/CalendarGroup container 
-  for non-IE6 browsers to fix clipping issue with IE7 when CalendarGroup 
-  was inside a box with a specific width. overflow:hidden is still 
-  required for IE6 with an iframe shim.
-
-+ Added Opera container width calculation fix to CalendarGroup.show 
-  method, to fix incorrect wrapping when using a CalendarGroup which is 
-  initially rendered hidden (display:none). Previously this fix was 
-  only applied on render. 
-
-*** version 2.2.2 *** 
-
-+ Fixed problem with selected dates being shared across instances, when 
-  more than one Calendar/CalendarGroup was on the page 
-
-*** version 2.2.1 *** 
-
-+ Fixed problem with selectCell adding duplicate selected date entries 
-  for dates which were already selected
-
-+ Fixed problem with CalendarGroup iframe shim not covering the 
-  CalendarGroup title area
-  
-+ Removed javascript:void(null) from close button and cell links which 
-  was interrupting form submission and firing onbeforeunload in IE
-  
-+ Fixed problem with CalendarGroup getSelectedDates returning invalid 
-  results, when used in conjunction with the "selected" Config property 
-  (either passed in the constructor config argument or set seperately 
-  after construction)
-  
-+ Refactored Calendar and CalendarGroup to improve performance, 
-  especially when working with a large number of instances in 
-  IE6 
-
-*** version 2.2.0 *** 
-
-+ Image customization can now be done through CSS. Images for Close, 
-  Left and Right Arrows are now pulled in using CSS defined in 
-  calendar.css and by default use relative paths to the images in 
-  the same directory as calendar.css.
-  
-+ Deprecated Calendar.IMG_ROOT and NAV_ARROW_LEFT, NAV_ARROW_RIGHT 
-  configuration properties. Customizations based on older releases 
-  which set these properties will still function as expected.
-
-+ Deprecated CalendarGroup.CSS_2UPCLOSE. Calendar's Style.CSS_CLOSE 
-  property now represents the new default CSS class (calclose) for 
-  the close button. CSS_2UPCLOSE is still applied along with 
-  CSS_CLOSE to the new markup for the close button to support existing
-  customizations of the CSS_2UPCLOSE CSS class (close-icon)
-
-+ Fixed problem with Safari setting Calendar pages to incorrect dates 
-  if the pages spanned a year boundary in CalendarGroups with 3 or more 
-  pages, due to a bug in Safari's implementation of Date setMonth
-
-+ Fixed problem with CalendarGroup setMonth rendering Calendar pages 
-  with incorrect dates in all browsers if current pages spanned year 
-  boundary 
-
-+ Fixed incorrect CalendarGroup logging statement in calendar-debug.js
-
-+ Fixed domEventMap support for Safari versions prior to 2.0.2, 
-  caused by hasOwnProperty not being supported
-  
-+ Removed unused private property : _pageDate from Calendar class 
-
-*** version 0.12.2 *** 
-
-+ Corrected documentation for clearTime function to reflect the 
-  change from midnight to noon 
-
-*** version 0.12.1 *** 
-
-+ Calendar and CalendarGroup now automatically parse the argument 
-  passed to setMonth and setYear into an integer, eliminating 
-  potential concatenation bugs. 
-
-*** version 0.12 *** 
-
-+ New documentation format implemented
-
-+ Calendar2up and Calendar_Core are now deprecated. Now, Calendar alone
-  represents the single Calendar instance, and CalendarGroup represents 
-  an n-up instance, defaulting to 2up
-  
-+ Added semantic style classes to Calendar elements to allow for 
-  custom styling solely using CSS.
-  
-+ Remapped all configuration properties to use the Config object 
- (familiar to those who use the Container collection of controls). 
- Property names are the same as their previous counterparts, but 
- wrapped into Calendar.cfg, allowing for runtime reconfiguration of 
- most properties
- 
-+ Added "title" property for setting the Calendar title
-
-+ Added "close" property for enabling and disabling the close icon
-
-+ Added "iframe" property for enabling an iframe shim in Internet 
-  Explorer 6 and below to fix the select bleed-through bug
-  
-+ pageDate moved to property: "pagedate"
-
-+ selectedDates moved to property: "selected"
-
-+ minDate moved to property : "mindate", which accepts a JavaScript 
-  Date object like its predecessor, but also supports string dates
-  
-+ maxDate moved to property : "maxdate", which accepts a JavaScript 
-  Date object like its predecessor, but also supports string dates
-  
-+ Moved style declarations to initStyles function
-
-+ Optimized event handling in doSelectCell/doCellMouseOver/
-  doCellMouseOut by only attaching the listener to the outer 
-  Calendar container, and only reacting to events on cells with 
-  the "selectable" CSS class.
-  
-+ Added domEventMap field for applying DOM event listeners to cells 
-  containing specific class and tag combinations.
-  
-+ Moved all cell DOM event attachment to applyListeners function
-
-+ Added getDateByCellId / getDateFieldsByCellId helper functions
-
-+ Corrected DateMath.getWeekNumber to comply with ISO week number 
-  handling
-  
-+ Separated renderCellDefault style portions into styleCellDefault 
-  function for easy extension
-  
-+ Deprecated onBeforeSelect. Created beforeSelectEvent which 
-  automatically subscribes to its deprecated predecessor.
-  
-+ Deprecated onSelect. Created selectEvent, which automatically 
-  subscribes to its deprecated predecessor.
-  
-+ Deprecated onBeforeDeselect. Created beforeSelectEvent which 
-  automatically subscribes to its deprecated predecessor.
-  
-+ Deprecated onDeselect. Created beforeDeselectEvent, which 
-  automatically subscribes to its deprecated predecessor.
-  
-+ Deprecated onChangePage. Created changePageEvent, which automatically
-  subscribes to its deprecated predecessor.
-  
-+ Deprecated onRender. Created renderEvent, which automatically 
-  subscribes to its deprecated predecessor.
-  
-+ Deprecated onReset. Created resetEvent, which automatically 
-  subscribes to its deprecated predecessor.
-  
-+ Deprecated onClear. Created clearEvent, which automatically 
-  subscribes to its deprecated predecessor.
-  
-+ Corrected setMonth documentation to refer to 0-11 indexed months.
-
-+ Added show and hide methods to Calendar for setting the Calendar's 
-  display property.
-  
-+ Optimized internal render classes to use innerHTML and string buffers
- 
-+ Removed wireCustomEvents function
-
-+ Removed wireDefaultEvents function 
-
-+ Removed doNextMonth / doPreviousMonth
-
-+ Removed all buildShell (header, body, footer) functions, since 
-  the Calendar shell is now built dynamically on each render
-  
-+ Wired all CalendarGroup events and configuration properties to 
-  be properly delegated to Calendar
-  
-+ Augmented CalendarGroup with all built-in renderers, label functions, 
-  hide, show, and initStyles, creating API transparency between Calendar 
-  and CalendarGroup.
-  
-+ Made all tagName, createElement, and entity references XHTML compliant
-
-+ Fixed Daylight Saving Time bug for Brazilian time zone 
-
-*** version 0.11.3 *** 
-
-+ Calendar_Core: Added arguments for selected/deselected dates to 
-  onSelect/onDeselect
-  
-+ CalendarGroup: Fixed bug where selected dates passed to constructor 
-  were not represented in selectedDates
-  
-+ Calendar2up: Now displays correctly in Opera 9 
-
-*** version 0.11.0 *** 
-
-+ DateMath: DateMath.add now properly adds weeks
-
-+ DateMath: between() function added
-
-+ DateMath: getWeekNumber() fixed to take starting day of week into
-  account
-  
-+ All references to Calendar's built in CSS class handlers are 
-  removed, replaced with calls to Dom utility (addClass, removeClass)
-  
-+ Several CSS class constants now have clearer names
-
-+ All CSS classes are now properly namespaced to avoid CSS conflicts
-
-+ Fixed table:hover bug in CSS
-
-+ Calendar no longer requires the container ID and variable name to 
-  match in order for month navigation to function properly
-
-+ Calendar month navigation arrows are now represented as 
-  background images 
-
-*** version 0.10.0 *** 
-
-+ Major performance improvements from attaching DOM events to 
-  associated table cells only once, when the Calendar shell is built
-  
-+ DOM events for mouseover/mouseout are now fired for all browsers 
- (not just Internet Explorer)
- 
-+ Reset functionality bug fixed for 2-up Calendar view 
-
-*** version 0.9.0 *** 
-
-* Initial release
\ No newline at end of file

Modified: trunk/root/static/yui/calendar/assets/calendar-core.css
===================================================================
--- trunk/root/static/yui/calendar/assets/calendar-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/assets/calendar-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * CORE

Modified: trunk/root/static/yui/calendar/assets/calendar.css
===================================================================
--- trunk/root/static/yui/calendar/assets/calendar.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/assets/calendar.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-calcontainer {
 	position:relative;

Modified: trunk/root/static/yui/calendar/assets/skins/sam/calendar-skin.css
===================================================================
--- trunk/root/static/yui/calendar/assets/skins/sam/calendar-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/assets/skins/sam/calendar-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * SAM
@@ -259,7 +259,7 @@
 .yui-skin-sam .yui-calcontainer .yui-cal-nav-mask {
 	background-color:#000;
 	opacity:0.25;
-	*filter:alpha(opacity=25); /* IE */
+	filter:alpha(opacity=25); /* IE */
 }
 
 /* NAVIGATOR BOUNDING BOX */

Modified: trunk/root/static/yui/calendar/assets/skins/sam/calendar.css
===================================================================
--- trunk/root/static/yui/calendar/assets/skins/sam/calendar.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/assets/skins/sam/calendar.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0px;top:0px;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-in!
 dex:3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;border-bottom:1px solid #cccccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5p!
 x;}.yui-skin-sam .yui-calcontainer.withtitle{padding-top:0;}.y!
 ui-skin-
sam .yui-calcontainer .calclose{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .!
 calweekdayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-calendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #cccccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#0066cc;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui!
 -calendar td.calcell.oom{background-color:#cccccc;color:#a6a6a!
 6;cursor
:default;}.yui-skin-sam .yui-calendar td.calcell.selected{background-color:#fff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.selected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#ccff99;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#99ccff;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#ffcccc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#ccff99;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{backgroun!
 d:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opacity:0.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav la!
 bel{display:block;font-weight:bold;}.yui-skin-sam .yui-calcont!
 ainer .y
ui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1px solid #000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}
+.yui-calcontainer{position:relative;float:left;_overflow:hidden;}.yui-calcontainer iframe{position:absolute;border:none;margin:0;padding:0;z-index:0;width:100%;height:100%;left:0;top:0;}.yui-calcontainer iframe.fixedsize{width:50em;height:50em;top:-1px;left:-1px;}.yui-calcontainer.multi .groupcal{z-index:1;float:left;position:relative;}.yui-calcontainer .title{position:relative;z-index:1;}.yui-calcontainer .close-icon{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar{position:relative;}.yui-calendar .calnavleft{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calnavright{position:absolute;z-index:1;text-indent:-10000em;overflow:hidden;}.yui-calendar .calheader{position:relative;width:100%;text-align:center;}.yui-calcontainer .yui-cal-nav-mask{position:absolute;z-index:2;margin:0;padding:0;width:100%;height:100%;_width:0;_height:0;left:0;top:0;display:none;}.yui-calcontainer .yui-cal-nav{position:absolute;z-index:!
 3;top:0;display:none;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{display:-moz-inline-box;display:inline-block;}.yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{display:block;*display:inline-block;*overflow:visible;border:none;background-color:transparent;cursor:pointer;}.yui-calendar .calbody a:hover{background:inherit;}p#clear{clear:left;padding-top:10px;}.yui-skin-sam .yui-calcontainer{background-color:#f2f2f2;border:1px solid #808080;padding:10px;}.yui-skin-sam .yui-calcontainer.multi{padding:0 5px 0 5px;}.yui-skin-sam .yui-calcontainer.multi .groupcal{background-color:transparent;border:none;padding:10px 5px 10px 5px;margin:0;}.yui-skin-sam .yui-calcontainer .title{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;border-bottom:1px solid #ccc;font:100% sans-serif;color:#000;font-weight:bold;height:auto;padding:.4em;margin:0 -10px 10px -10px;top:0;left:0;text-align:left;}.yui-skin-sam .yui-calcontainer.multi .title{margin:0 -5px 0 -5px;}.yui!
 -skin-sam .yui-calcontainer.withtitle{padding-top:0;}.yui-skin!
 -sam .yu
i-calcontainer .calclose{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;width:25px;height:15px;top:.4em;right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar{border-spacing:0;border-collapse:collapse;font:100% sans-serif;text-align:center;margin:0;}.yui-skin-sam .yui-calendar .calhead{background:transparent;border:none;vertical-align:middle;padding:0;}.yui-skin-sam .yui-calendar .calheader{background:transparent;font-weight:bold;padding:0 0 .6em 0;text-align:center;}.yui-skin-sam .yui-calendar .calheader img{border:none;}.yui-skin-sam .yui-calendar .calnavleft{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -450px;width:25px;height:15px;top:0;bottom:0;left:-10px;margin-left:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calnavright{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -500px;width:25px;height:15px;top:0;bottom:0;right:-10px;margin-right:.4em;cursor:pointer;}.yui-skin-sam .yui-calendar .calweek!
 dayrow{height:2em;}.yui-skin-sam .yui-calendar .calweekdayrow th{padding:0;border:none;}.yui-skin-sam .yui-calendar .calweekdaycell{color:#000;font-weight:bold;text-align:center;width:2em;}.yui-skin-sam .yui-calendar .calfoot{background-color:#f2f2f2;}.yui-skin-sam .yui-calendar .calrowhead,.yui-skin-sam .yui-calendar .calrowfoot{color:#a6a6a6;font-size:85%;font-style:normal;font-weight:normal;border:none;}.yui-skin-sam .yui-calendar .calrowhead{text-align:right;padding:0 2px 0 0;}.yui-skin-sam .yui-calendar .calrowfoot{text-align:left;padding:0 0 0 2px;}.yui-skin-sam .yui-calendar td.calcell{border:1px solid #ccc;background:#fff;padding:1px;height:1.6em;line-height:1.6em;text-align:center;white-space:nowrap;}.yui-skin-sam .yui-calendar td.calcell a{color:#06c;display:block;height:100%;text-decoration:none;}.yui-skin-sam .yui-calendar td.calcell.today{background-color:#000;}.yui-skin-sam .yui-calendar td.calcell.today a{background-color:#fff;}.yui-skin-sam .yui-calendar td.!
 calcell.oom{background-color:#ccc;color:#a6a6a6;cursor:default!
 ;}.yui-s
kin-sam .yui-calendar td.calcell.selected{background-color:#fff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.selected a{background-color:#b3d4ff;color:#000;}.yui-skin-sam .yui-calendar td.calcell.calcellhover{background-color:#426fd9;color:#fff;cursor:pointer;}.yui-skin-sam .yui-calendar td.calcell.calcellhover a{background-color:#426fd9;color:#fff;}.yui-skin-sam .yui-calendar td.calcell.previous{color:#e0e0e0;}.yui-skin-sam .yui-calendar td.calcell.restricted{text-decoration:line-through;}.yui-skin-sam .yui-calendar td.calcell.highlight1{background-color:#cf9;}.yui-skin-sam .yui-calendar td.calcell.highlight2{background-color:#9cf;}.yui-skin-sam .yui-calendar td.calcell.highlight3{background-color:#fcc;}.yui-skin-sam .yui-calendar td.calcell.highlight4{background-color:#cf9;}.yui-skin-sam .yui-calendar a.calnav{border:1px solid #f2f2f2;padding:0 4px;text-decoration:none;color:#000;zoom:1;}.yui-skin-sam .yui-calendar a.calnav:hover{background:url(../../../../assets/ski!
 ns/sam/sprite.png) repeat-x 0 0;border-color:#A0A0A0;cursor:pointer;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-calcontainer .yui-cal-nav{font-family:arial,helvetica,clean,sans-serif;font-size:93%;border:1px solid #808080;left:50%;margin-left:-7em;width:14em;padding:0;top:2.5em;background-color:#f2f2f2;}.yui-skin-sam .yui-calcontainer.withtitle .yui-cal-nav{top:4.5em;}.yui-skin-sam .yui-calcontainer.multi .yui-cal-nav{width:16em;margin-left:-8em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y,.yui-skin-sam .yui-calcontainer .yui-cal-nav-m,.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{padding:5px 10px 5px 10px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-b{text-align:center;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-e{margin-top:5px;padding:5px;background-color:#EDF5FF;border-top:1px solid black;display:none;}.yui-skin-sam .yui-calcontainer .yui-cal-nav label{display:block;font-weight:!
 bold;}
+.yui-skin-sam .yui-calcontainer .yui-cal-nav-mc{width:100%;_width:auto;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-y input.yui-invalid{background-color:#FFEE69;border:1px solid #000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav-yc{width:4em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn{border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;background-color:#ccc;margin:auto .15em;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn button{padding:0 8px;font-size:93%;line-height:2;*line-height:1.7;min-height:2em;*min-height:auto;color:#000;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default{border:1px solid #304369;background-color:#426fd9;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1400px;}.yui-skin-sam .yui-calcontainer .yui-cal-nav .yui-cal-nav-btn.yui-default button{color:#fff;}

Modified: trunk/root/static/yui/calendar/calendar-debug.js
===================================================================
--- trunk/root/static/yui/calendar/calendar-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/calendar-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -518,9 +518,14 @@
                     key = queueItem[0];
                     value = queueItem[1];
                     property = this.config[key];
-        
+
                     property.value = value;
-        
+
+                    // Clear out queue entry, to avoid it being 
+                    // re-added to the queue by any queueProperty/supercedes
+                    // calls which are invoked during fireEvent
+                    this.eventQueue[i] = null;
+
                     this.fireEvent(key,value);
                 }
             }
@@ -690,7 +695,6 @@
     YAHOO.lang.augmentProto(Config, YAHOO.util.EventProvider);
 
 }());
-
 /**
 * YAHOO.widget.DateMath is used for simple date manipulation. The class is a static utility
 * used for adding, subtracting, and comparing dates.
@@ -1723,26 +1727,26 @@
 			cal = this; // To help with minification
 
 		/**
-		* Fired before a selection is made
+		* Fired before a date selection is made
 		* @event beforeSelectEvent
 		*/
 		cal.beforeSelectEvent = new CE(defEvents.BEFORE_SELECT); 
 
 		/**
-		* Fired when a selection is made
+		* Fired when a date selection is made
 		* @event selectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
 		cal.selectEvent = new CE(defEvents.SELECT);
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date or set of dates is deselected
 		* @event beforeDeselectEvent
 		*/
 		cal.beforeDeselectEvent = new CE(defEvents.BEFORE_DESELECT);
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date or set of dates is deselected
 		* @event deselectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
@@ -3874,19 +3878,19 @@
 				}
 				selected.splice(cellDateIndex, 1);
 			}
-	
+
 			if (this.parent) {
 				this.parent.cfg.setProperty(DEF_CFG.SELECTED.key, selected);
 			} else {
 				this.cfg.setProperty(DEF_CFG.SELECTED.key, selected);
 			}
-	
-			this.deselectEvent.fire(selectDate);
+
+			this.deselectEvent.fire([selectDate]);
 		}
-	
+
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Deselects all dates on the current calendar.
 	* @method deselectAll
@@ -5059,33 +5063,33 @@
 				cal[this.type + strEvent].unsubscribe(fn, obj);
 			}
 		};
-		
+
 		var defEvents = Calendar._EVENT_TYPES;
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date selection is made
 		* @event beforeSelectEvent
 		*/
 		me.beforeSelectEvent = new CE(defEvents.BEFORE_SELECT);
 		me.beforeSelectEvent.subscribe = sub; me.beforeSelectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date selection is made
 		* @event selectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
 		me.selectEvent = new CE(defEvents.SELECT); 
 		me.selectEvent.subscribe = sub; me.selectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date or set of dates is deselected
 		* @event beforeDeselectEvent
 		*/
 		me.beforeDeselectEvent = new CE(defEvents.BEFORE_DESELECT); 
 		me.beforeDeselectEvent.subscribe = sub; me.beforeDeselectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date or set of dates has been deselected
 		* @event deselectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
@@ -5216,6 +5220,8 @@
 		var pageCount = args[0],
 			cfgPageDate = DEF_CFG.PAGEDATE.key,
 			sep = "_",
+			caldate,
+			firstPageDate = null,
 			groupCalClass = "groupcal",
 			firstClass = "first-of-type",
 			lastClass = "last-of-type";
@@ -5229,15 +5235,19 @@
 			childConfig.title = false;
 			childConfig.navigator = null;
 
+			if (p > 0) {
+				caldate = new Date(firstPageDate);
+				this._setMonthOnDate(caldate, caldate.getMonth() + p);
+				childConfig.pageDate = caldate;
+			}
+
 			var cal = this.constructChild(calId, calContainerId, childConfig);
-			var caldate = cal.cfg.getProperty(cfgPageDate);
-			this._setMonthOnDate(caldate, caldate.getMonth() + p);
-			cal.cfg.setProperty(cfgPageDate, caldate);
 
 			Dom.removeClass(cal.oDomContainer, this.Style.CSS_SINGLE);
 			Dom.addClass(cal.oDomContainer, groupCalClass);
 
 			if (p===0) {
+				firstPageDate = cal.cfg.getProperty(cfgPageDate);
 				Dom.addClass(cal.oDomContainer, firstClass);
 			}
 	
@@ -5332,7 +5342,7 @@
 	*/
 	callChildFunction : function(fnName, args) {
 		var pageCount = this.cfg.getProperty(DEF_CFG.PAGES.key);
-	
+
 		for (var p=0;p<pageCount;++p) {
 			var page = this.pages[p];
 			if (page[fnName]) {
@@ -5493,7 +5503,7 @@
 		}
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Deselects dates in the CalendarGroup based on the cell index provided. This method is used to select cells without having to do a full render. The selected style is applied to the cells directly.
 	* deselectCell will deselect the cell at the specified index on each displayed Calendar page.
@@ -5509,7 +5519,7 @@
 		}
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Resets the calendar widget to the originally selected month and year, and 
 	* sets the calendar to the initial selection(s).
@@ -6305,12 +6315,12 @@
 		this._doc = calBox.ownerDocument;
 
 		/**
-		 * Private flag, to identify IE6/IE7 Quirks
+		 * Private flag, to identify IE Quirks
 		 * @private
 		 * @property __isIEQuirks
 		 */
 		var ie = YAHOO.env.ua.ie;
-		this.__isIEQuirks = (ie && ((ie <= 6) || (ie === 7 && this._doc.compatMode == "BackCompat")));
+		this.__isIEQuirks = (ie && ((ie <= 6) || (this._doc.compatMode == "BackCompat")));
 	},
 
 	/**
@@ -6508,7 +6518,7 @@
 
 	/**
 	 * Used to set the width/height of the mask in pixels to match the Calendar Container.
-	 * Currently only used for IE6 and IE7 quirks mode. The other A-Grade browser are handled using CSS (width/height 100%).
+	 * Currently only used for IE6 or IE in quirks mode. The other A-Grade browser are handled using CSS (width/height 100%).
 	 * <p>
 	 * The method is also registered as an HTMLElement resize listener on the Calendars container element.
 	 * </p>
@@ -7165,4 +7175,4 @@
 
 };
 
-YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.6.0", build: "1321"});
+YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/calendar/calendar-min.js
===================================================================
--- trunk/root/static/yui/calendar/calendar-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/calendar-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,18 +1,18 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.unsubscribeAll();this.co!
 nfigChangedEvent=null;this.owner=null;this.config=null;this.in!
 itialCon
fig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());YAHOO.widget.DateMath={DAY:"D",WEEK:"W",YEAR:"Y",MONTH:"M",ONE_DAY_MS:1000*60*60*24,WEEK_ONE_JAN_DATE:1,add:function(A,D,C){var F=new Date(A.getTime());switch(D){case this.MONTH:var E=A.getMonth()+C;var B=0;if(E<0){while(E<0){E+=12;B-=1;}}else{if(E>11){while(E>11){E-=12;B+=1;}}}F.setMonth(E);F.setFullYear(A.getFullYear()+B);break;case this.DAY:this._addDays(F,C);break;case this.YEAR:F.setFullYear(A.getFullYear()+C);break;case this.WEEK:this._addDays(F,(C*7));break;}return F;},_addDays:function(D,C){if(YAHOO.env.ua.webkit&&YAHOO.env.ua.webkit<420){if(C<0){for(var B=-128;C<B;C-=B){D.setDate(D.getDate()+B);}}else{for(var A=96;C>A;C-=A){D.setDate(D.getDate()+A);}}}D.setDate(D.getDate()+C);},subtract:function(A,C,B){return th!
 is.add(A,C,(B*-1));},before:function(C,B){var A=B.getTime();if(C.getTime()<A){return true;}else{return false;}},after:function(C,B){var A=B.getTime();if(C.getTime()>A){return true;}else{return false;}},between:function(B,A,C){if(this.after(B,A)&&this.before(B,C)){return true;}else{return false;}},getJan1:function(A){return this.getDate(A,0,1);},getDayOffset:function(B,D){var C=this.getJan1(D);var A=Math.ceil((B.getTime()-C.getTime())/this.ONE_DAY_MS);return A;},getWeekNumber:function(E,B,H){B=B||0;H=H||this.WEEK_ONE_JAN_DATE;var I=this.clearTime(E),M,N;if(I.getDay()===B){M=I;}else{M=this.getFirstDayOfWeek(I,B);}var J=M.getFullYear(),C=M.getTime();N=new Date(M.getTime()+6*this.ONE_DAY_MS);var G;if(J!==N.getFullYear()&&N.getDate()>=H){G=1;}else{var F=this.clearTime(this.getDate(J,0,H)),A=this.getFirstDayOfWeek(F,B);var K=Math.round((I.getTime()-A.getTime())/this.ONE_DAY_MS);var L=K%7;var D=(K-L)/7;G=D+1;}return G;
-},getFirstDayOfWeek:function(D,A){A=A||0;var B=D.getDay(),C=(B-A+7)%7;return this.subtract(D,this.DAY,C);},isYearOverlapWeek:function(A){var C=false;var B=this.add(A,this.DAY,6);if(B.getFullYear()!=A.getFullYear()){C=true;}return C;},isMonthOverlapWeek:function(A){var C=false;var B=this.add(A,this.DAY,6);if(B.getMonth()!=A.getMonth()){C=true;}return C;},findMonthStart:function(A){var B=this.getDate(A.getFullYear(),A.getMonth(),1);return B;},findMonthEnd:function(B){var D=this.findMonthStart(B);var C=this.add(D,this.MONTH,1);var A=this.subtract(C,this.DAY,1);return A;},clearTime:function(A){A.setHours(12,0,0,0);return A;},getDate:function(D,A,C){var B=null;if(YAHOO.lang.isUndefined(C)){C=1;}if(D>=100){B=new Date(D,A,C);}else{B=new Date();B.setFullYear(D);B.setMonth(A);B.setDate(C);B.setHours(0,0,0,0);}return B;}};(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,E=YAHOO.lang,D=YAHOO.widget.DateMath;function F(I,G,H){this.init.apply(this,arguments);}F.IMG_ROOT=null;F.DATE="!
 D";F.MONTH_DAY="MD";F.WEEKDAY="WD";F.RANGE="R";F.MONTH="M";F.DISPLAY_DAYS=42;F.STOP_RENDER="S";F.SHORT="short";F.LONG="long";F.MEDIUM="medium";F.ONE_CHAR="1char";F._DEFAULT_CONFIG={PAGEDATE:{key:"pagedate",value:null},SELECTED:{key:"selected",value:null},TITLE:{key:"title",value:""},CLOSE:{key:"close",value:false},IFRAME:{key:"iframe",value:(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6)?true:false},MINDATE:{key:"mindate",value:null},MAXDATE:{key:"maxdate",value:null},MULTI_SELECT:{key:"multi_select",value:false},START_WEEKDAY:{key:"start_weekday",value:0},SHOW_WEEKDAYS:{key:"show_weekdays",value:true},SHOW_WEEK_HEADER:{key:"show_week_header",value:false},SHOW_WEEK_FOOTER:{key:"show_week_footer",value:false},HIDE_BLANK_WEEKS:{key:"hide_blank_weeks",value:false},NAV_ARROW_LEFT:{key:"nav_arrow_left",value:null},NAV_ARROW_RIGHT:{key:"nav_arrow_right",value:null},MONTHS_SHORT:{key:"months_short",value:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]},MONTHS_LONG:!
 {key:"months_long",value:["January","February","March","April"!
 ,"May","
June","July","August","September","October","November","December"]},WEEKDAYS_1CHAR:{key:"weekdays_1char",value:["S","M","T","W","T","F","S"]},WEEKDAYS_SHORT:{key:"weekdays_short",value:["Su","Mo","Tu","We","Th","Fr","Sa"]},WEEKDAYS_MEDIUM:{key:"weekdays_medium",value:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},WEEKDAYS_LONG:{key:"weekdays_long",value:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},LOCALE_MONTHS:{key:"locale_months",value:"long"},LOCALE_WEEKDAYS:{key:"locale_weekdays",value:"short"},DATE_DELIMITER:{key:"date_delimiter",value:","},DATE_FIELD_DELIMITER:{key:"date_field_delimiter",value:"/"},DATE_RANGE_DELIMITER:{key:"date_range_delimiter",value:"-"},MY_MONTH_POSITION:{key:"my_month_position",value:1},MY_YEAR_POSITION:{key:"my_year_position",value:2},MD_MONTH_POSITION:{key:"md_month_position",value:1},MD_DAY_POSITION:{key:"md_day_position",value:2},MDY_MONTH_POSITION:{key:"mdy_month_position",value:1},MDY_DAY_POSITION:{key:"mdy_day_pos!
 ition",value:2},MDY_YEAR_POSITION:{key:"mdy_year_position",value:3},MY_LABEL_MONTH_POSITION:{key:"my_label_month_position",value:1},MY_LABEL_YEAR_POSITION:{key:"my_label_year_position",value:2},MY_LABEL_MONTH_SUFFIX:{key:"my_label_month_suffix",value:" "},MY_LABEL_YEAR_SUFFIX:{key:"my_label_year_suffix",value:""},NAV:{key:"navigator",value:null},STRINGS:{key:"strings",value:{previousMonth:"Previous Month",nextMonth:"Next Month",close:"Close"},supercedes:["close","title"]}};var B=F._DEFAULT_CONFIG;F._EVENT_TYPES={BEFORE_SELECT:"beforeSelect",SELECT:"select",BEFORE_DESELECT:"beforeDeselect",DESELECT:"deselect",CHANGE_PAGE:"changePage",BEFORE_RENDER:"beforeRender",RENDER:"render",BEFORE_DESTROY:"beforeDestroy",DESTROY:"destroy",RESET:"reset",CLEAR:"clear",BEFORE_HIDE:"beforeHide",HIDE:"hide",BEFORE_SHOW:"beforeShow",SHOW:"show",BEFORE_HIDE_NAV:"beforeHideNav",HIDE_NAV:"hideNav",BEFORE_SHOW_NAV:"beforeShowNav",SHOW_NAV:"showNav",BEFORE_RENDER_NAV:"beforeRenderNav",RENDER_NAV:"r!
 enderNav"};F._STYLES={CSS_ROW_HEADER:"calrowhead",CSS_ROW_FOOT!
 ER:"calr
owfoot",CSS_CELL:"calcell",CSS_CELL_SELECTOR:"selector",CSS_CELL_SELECTED:"selected",CSS_CELL_SELECTABLE:"selectable",CSS_CELL_RESTRICTED:"restricted",CSS_CELL_TODAY:"today",CSS_CELL_OOM:"oom",CSS_CELL_OOB:"previous",CSS_HEADER:"calheader",CSS_HEADER_TEXT:"calhead",CSS_BODY:"calbody",CSS_WEEKDAY_CELL:"calweekdaycell",CSS_WEEKDAY_ROW:"calweekdayrow",CSS_FOOTER:"calfoot",CSS_CALENDAR:"yui-calendar",CSS_SINGLE:"single",CSS_CONTAINER:"yui-calcontainer",CSS_NAV_LEFT:"calnavleft",CSS_NAV_RIGHT:"calnavright",CSS_NAV:"calnav",CSS_CLOSE:"calclose",CSS_CELL_TOP:"calcelltop",CSS_CELL_LEFT:"calcellleft",CSS_CELL_RIGHT:"calcellright",CSS_CELL_BOTTOM:"calcellbottom",CSS_CELL_HOVER:"calcellhover",CSS_CELL_HIGHLIGHT1:"highlight1",CSS_CELL_HIGHLIGHT2:"highlight2",CSS_CELL_HIGHLIGHT3:"highlight3",CSS_CELL_HIGHLIGHT4:"highlight4"};F.prototype={Config:null,parent:null,index:-1,cells:null,cellDates:null,id:null,containerId:null,oDomContainer:null,today:null,renderStack:null,_renderStack:null,oNa!
 vigator:null,_selectedDates:null,domEventMap:null,_parseArgs:function(H){var G={id:null,container:null,config:null};if(H&&H.length&&H.length>0){switch(H.length){case 1:G.id=null;G.container=H[0];G.config=null;break;case 2:if(E.isObject(H[1])&&!H[1].tagName&&!(H[1] instanceof String)){G.id=null;G.container=H[0];G.config=H[1];}else{G.id=H[0];G.container=H[1];G.config=null;}break;default:G.id=H[0];G.container=H[1];G.config=H[2];break;}}else{}return G;},init:function(J,H,I){var G=this._parseArgs(arguments);J=G.id;H=G.container;I=G.config;this.oDomContainer=C.get(H);if(!this.oDomContainer.id){this.oDomContainer.id=C.generateId();}if(!J){J=this.oDomContainer.id+"_t";}this.id=J;this.containerId=this.oDomContainer.id;this.initEvents();this.today=new Date();D.clearTime(this.today);this.cfg=new YAHOO.util.Config(this);this.Options={};this.Locale={};this.initStyles();C.addClass(this.oDomContainer,this.Style.CSS_CONTAINER);
-C.addClass(this.oDomContainer,this.Style.CSS_SINGLE);this.cellDates=[];this.cells=[];this.renderStack=[];this._renderStack=[];this.setupConfig();if(I){this.cfg.applyConfig(I,true);}this.cfg.fireQueue();},configIframe:function(I,H,J){var G=H[0];if(!this.parent){if(C.inDocument(this.oDomContainer)){if(G){var K=C.getStyle(this.oDomContainer,"position");if(K=="absolute"||K=="relative"){if(!C.inDocument(this.iframe)){this.iframe=document.createElement("iframe");this.iframe.src="javascript:false;";C.setStyle(this.iframe,"opacity","0");if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6){C.addClass(this.iframe,"fixedsize");}this.oDomContainer.insertBefore(this.iframe,this.oDomContainer.firstChild);}}}else{if(this.iframe){if(this.iframe.parentNode){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;}}}}},configTitle:function(H,G,I){var K=G[0];if(K){this.createTitleBar(K);}else{var J=this.cfg.getProperty(B.CLOSE.key);if(!J){this.removeTitleBar();}else{this.createTitleBar(" ")!
 ;}}},configClose:function(H,G,I){var K=G[0],J=this.cfg.getProperty(B.TITLE.key);if(K){if(!J){this.createTitleBar(" ");}this.createCloseButton();}else{this.removeCloseButton();if(!J){this.removeTitleBar();}}},initEvents:function(){var G=F._EVENT_TYPES,I=YAHOO.util.CustomEvent,H=this;H.beforeSelectEvent=new I(G.BEFORE_SELECT);H.selectEvent=new I(G.SELECT);H.beforeDeselectEvent=new I(G.BEFORE_DESELECT);H.deselectEvent=new I(G.DESELECT);H.changePageEvent=new I(G.CHANGE_PAGE);H.beforeRenderEvent=new I(G.BEFORE_RENDER);H.renderEvent=new I(G.RENDER);H.beforeDestroyEvent=new I(G.BEFORE_DESTROY);H.destroyEvent=new I(G.DESTROY);H.resetEvent=new I(G.RESET);H.clearEvent=new I(G.CLEAR);H.beforeShowEvent=new I(G.BEFORE_SHOW);H.showEvent=new I(G.SHOW);H.beforeHideEvent=new I(G.BEFORE_HIDE);H.hideEvent=new I(G.HIDE);H.beforeShowNavEvent=new I(G.BEFORE_SHOW_NAV);H.showNavEvent=new I(G.SHOW_NAV);H.beforeHideNavEvent=new I(G.BEFORE_HIDE_NAV);H.hideNavEvent=new I(G.HIDE_NAV);H.beforeRende!
 rNavEvent=new I(G.BEFORE_RENDER_NAV);H.renderNavEvent=new I(G.!
 RENDER_N
AV);H.beforeSelectEvent.subscribe(H.onBeforeSelect,this,true);H.selectEvent.subscribe(H.onSelect,this,true);H.beforeDeselectEvent.subscribe(H.onBeforeDeselect,this,true);H.deselectEvent.subscribe(H.onDeselect,this,true);H.changePageEvent.subscribe(H.onChangePage,this,true);H.renderEvent.subscribe(H.onRender,this,true);H.resetEvent.subscribe(H.onReset,this,true);H.clearEvent.subscribe(H.onClear,this,true);},doPreviousMonthNav:function(H,G){A.preventDefault(H);setTimeout(function(){G.previousMonth();var I=C.getElementsByClassName(G.Style.CSS_NAV_LEFT,"a",G.oDomContainer);if(I&&I[0]){try{I[0].focus();}catch(J){}}},0);},doNextMonthNav:function(H,G){A.preventDefault(H);setTimeout(function(){G.nextMonth();var I=C.getElementsByClassName(G.Style.CSS_NAV_RIGHT,"a",G.oDomContainer);if(I&&I[0]){try{I[0].focus();}catch(J){}}},0);},doSelectCell:function(M,G){var R,O,I,L;var N=A.getTarget(M),H=N.tagName.toLowerCase(),K=false;while(H!="td"&&!C.hasClass(N,G.Style.CSS_CELL_SELECTABLE)){if(!K!
 &&H=="a"&&C.hasClass(N,G.Style.CSS_CELL_SELECTOR)){K=true;}N=N.parentNode;H=N.tagName.toLowerCase();if(N==this.oDomContainer||H=="html"){return ;}}if(K){A.preventDefault(M);}R=N;if(C.hasClass(R,G.Style.CSS_CELL_SELECTABLE)){L=G.getIndexFromId(R.id);if(L>-1){O=G.cellDates[L];if(O){I=D.getDate(O[0],O[1]-1,O[2]);var Q;if(G.Options.MULTI_SELECT){Q=R.getElementsByTagName("a")[0];if(Q){Q.blur();}var J=G.cellDates[L];var P=G._indexOfSelectedFieldArray(J);if(P>-1){G.deselectCell(L);}else{G.selectCell(L);}}else{Q=R.getElementsByTagName("a")[0];if(Q){Q.blur();}G.selectCell(L);}}}}},doCellMouseOver:function(I,H){var G;if(I){G=A.getTarget(I);}else{G=this;}while(G.tagName&&G.tagName.toLowerCase()!="td"){G=G.parentNode;if(!G.tagName||G.tagName.toLowerCase()=="html"){return ;}}if(C.hasClass(G,H.Style.CSS_CELL_SELECTABLE)){C.addClass(G,H.Style.CSS_CELL_HOVER);}},doCellMouseOut:function(I,H){var G;if(I){G=A.getTarget(I);}else{G=this;}while(G.tagName&&G.tagName.toLowerCase()!="td"){G=G.paren!
 tNode;if(!G.tagName||G.tagName.toLowerCase()=="html"){return ;!
 }}if(C.h
asClass(G,H.Style.CSS_CELL_SELECTABLE)){C.removeClass(G,H.Style.CSS_CELL_HOVER);}},setupConfig:function(){var G=this.cfg;G.addProperty(B.PAGEDATE.key,{value:new Date(),handler:this.configPageDate});G.addProperty(B.SELECTED.key,{value:[],handler:this.configSelected});G.addProperty(B.TITLE.key,{value:B.TITLE.value,handler:this.configTitle});G.addProperty(B.CLOSE.key,{value:B.CLOSE.value,handler:this.configClose});G.addProperty(B.IFRAME.key,{value:B.IFRAME.value,handler:this.configIframe,validator:G.checkBoolean});G.addProperty(B.MINDATE.key,{value:B.MINDATE.value,handler:this.configMinDate});G.addProperty(B.MAXDATE.key,{value:B.MAXDATE.value,handler:this.configMaxDate});G.addProperty(B.MULTI_SELECT.key,{value:B.MULTI_SELECT.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.START_WEEKDAY.key,{value:B.START_WEEKDAY.value,handler:this.configOptions,validator:G.checkNumber});G.addProperty(B.SHOW_WEEKDAYS.key,{value:B.SHOW_WEEKDAYS.value,handler:this.confi!
 gOptions,validator:G.checkBoolean});G.addProperty(B.SHOW_WEEK_HEADER.key,{value:B.SHOW_WEEK_HEADER.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.SHOW_WEEK_FOOTER.key,{value:B.SHOW_WEEK_FOOTER.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.HIDE_BLANK_WEEKS.key,{value:B.HIDE_BLANK_WEEKS.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.NAV_ARROW_LEFT.key,{value:B.NAV_ARROW_LEFT.value,handler:this.configOptions});G.addProperty(B.NAV_ARROW_RIGHT.key,{value:B.NAV_ARROW_RIGHT.value,handler:this.configOptions});G.addProperty(B.MONTHS_SHORT.key,{value:B.MONTHS_SHORT.value,handler:this.configLocale});G.addProperty(B.MONTHS_LONG.key,{value:B.MONTHS_LONG.value,handler:this.configLocale});G.addProperty(B.WEEKDAYS_1CHAR.key,{value:B.WEEKDAYS_1CHAR.value,handler:this.configLocale});G.addProperty(B.WEEKDAYS_SHORT.key,{value:B.WEEKDAYS_SHORT.value,handler:this.configLocale});
+(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.!
 unsubscribeAll();this.configChangedEvent=null;this.owner=null;!
 this.con
fig=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());YAHOO.widget.DateMath={DAY:"D",WEEK:"W",YEAR:"Y",MONTH:"M",ONE_DAY_MS:1000*60*60*24,WEEK_ONE_JAN_DATE:1,add:function(A,D,C){var F=new Date(A.getTime());switch(D){case this.MONTH:var E=A.getMonth()+C;var B=0;if(E<0){while(E<0){E+=12;B-=1;}}else{if(E>11){while(E>11){E-=12;B+=1;}}}F.setMonth(E);F.setFullYear(A.getFullYear()+B);break;case this.DAY:this._addDays(F,C);break;case this.YEAR:F.setFullYear(A.getFullYear()+C);break;case this.WEEK:this._addDays(F,(C*7));break;}return F;},_addDays:function(D,C){if(YAHOO.env.ua.webkit&&YAHOO.env.ua.webkit<420){if(C<0){for(var B=-128;C<B;C-=B){D.setDate(D.getDate()+B);}}else{for(var A=96;C>A;C-=A){D.setDate(D.getDate()+A);}}}D.setDate(D.getDate()+C);},subtract:f!
 unction(A,C,B){return this.add(A,C,(B*-1));},before:function(C,B){var A=B.getTime();if(C.getTime()<A){return true;}else{return false;}},after:function(C,B){var A=B.getTime();if(C.getTime()>A){return true;}else{return false;}},between:function(B,A,C){if(this.after(B,A)&&this.before(B,C)){return true;}else{return false;}},getJan1:function(A){return this.getDate(A,0,1);},getDayOffset:function(B,D){var C=this.getJan1(D);var A=Math.ceil((B.getTime()-C.getTime())/this.ONE_DAY_MS);return A;},getWeekNumber:function(E,B,H){B=B||0;H=H||this.WEEK_ONE_JAN_DATE;var I=this.clearTime(E),M,N;if(I.getDay()===B){M=I;}else{M=this.getFirstDayOfWeek(I,B);}var J=M.getFullYear(),C=M.getTime();N=new Date(M.getTime()+6*this.ONE_DAY_MS);var G;if(J!==N.getFullYear()&&N.getDate()>=H){G=1;}else{var F=this.clearTime(this.getDate(J,0,H)),A=this.getFirstDayOfWeek(F,B);var K=Math.round((I.getTime()-A.getTime())/this.ONE_DAY_MS);var L=K%7;
+var D=(K-L)/7;G=D+1;}return G;},getFirstDayOfWeek:function(D,A){A=A||0;var B=D.getDay(),C=(B-A+7)%7;return this.subtract(D,this.DAY,C);},isYearOverlapWeek:function(A){var C=false;var B=this.add(A,this.DAY,6);if(B.getFullYear()!=A.getFullYear()){C=true;}return C;},isMonthOverlapWeek:function(A){var C=false;var B=this.add(A,this.DAY,6);if(B.getMonth()!=A.getMonth()){C=true;}return C;},findMonthStart:function(A){var B=this.getDate(A.getFullYear(),A.getMonth(),1);return B;},findMonthEnd:function(B){var D=this.findMonthStart(B);var C=this.add(D,this.MONTH,1);var A=this.subtract(C,this.DAY,1);return A;},clearTime:function(A){A.setHours(12,0,0,0);return A;},getDate:function(D,A,C){var B=null;if(YAHOO.lang.isUndefined(C)){C=1;}if(D>=100){B=new Date(D,A,C);}else{B=new Date();B.setFullYear(D);B.setMonth(A);B.setDate(C);B.setHours(0,0,0,0);}return B;}};(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,E=YAHOO.lang,D=YAHOO.widget.DateMath;function F(I,G,H){this.init.apply(this,argume!
 nts);}F.IMG_ROOT=null;F.DATE="D";F.MONTH_DAY="MD";F.WEEKDAY="WD";F.RANGE="R";F.MONTH="M";F.DISPLAY_DAYS=42;F.STOP_RENDER="S";F.SHORT="short";F.LONG="long";F.MEDIUM="medium";F.ONE_CHAR="1char";F._DEFAULT_CONFIG={PAGEDATE:{key:"pagedate",value:null},SELECTED:{key:"selected",value:null},TITLE:{key:"title",value:""},CLOSE:{key:"close",value:false},IFRAME:{key:"iframe",value:(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6)?true:false},MINDATE:{key:"mindate",value:null},MAXDATE:{key:"maxdate",value:null},MULTI_SELECT:{key:"multi_select",value:false},START_WEEKDAY:{key:"start_weekday",value:0},SHOW_WEEKDAYS:{key:"show_weekdays",value:true},SHOW_WEEK_HEADER:{key:"show_week_header",value:false},SHOW_WEEK_FOOTER:{key:"show_week_footer",value:false},HIDE_BLANK_WEEKS:{key:"hide_blank_weeks",value:false},NAV_ARROW_LEFT:{key:"nav_arrow_left",value:null},NAV_ARROW_RIGHT:{key:"nav_arrow_right",value:null},MONTHS_SHORT:{key:"months_short",value:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","O!
 ct","Nov","Dec"]},MONTHS_LONG:{key:"months_long",value:["Janua!
 ry","Feb
ruary","March","April","May","June","July","August","September","October","November","December"]},WEEKDAYS_1CHAR:{key:"weekdays_1char",value:["S","M","T","W","T","F","S"]},WEEKDAYS_SHORT:{key:"weekdays_short",value:["Su","Mo","Tu","We","Th","Fr","Sa"]},WEEKDAYS_MEDIUM:{key:"weekdays_medium",value:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},WEEKDAYS_LONG:{key:"weekdays_long",value:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},LOCALE_MONTHS:{key:"locale_months",value:"long"},LOCALE_WEEKDAYS:{key:"locale_weekdays",value:"short"},DATE_DELIMITER:{key:"date_delimiter",value:","},DATE_FIELD_DELIMITER:{key:"date_field_delimiter",value:"/"},DATE_RANGE_DELIMITER:{key:"date_range_delimiter",value:"-"},MY_MONTH_POSITION:{key:"my_month_position",value:1},MY_YEAR_POSITION:{key:"my_year_position",value:2},MD_MONTH_POSITION:{key:"md_month_position",value:1},MD_DAY_POSITION:{key:"md_day_position",value:2},MDY_MONTH_POSITION:{key:"mdy_month_position",value:1},MDY_!
 DAY_POSITION:{key:"mdy_day_position",value:2},MDY_YEAR_POSITION:{key:"mdy_year_position",value:3},MY_LABEL_MONTH_POSITION:{key:"my_label_month_position",value:1},MY_LABEL_YEAR_POSITION:{key:"my_label_year_position",value:2},MY_LABEL_MONTH_SUFFIX:{key:"my_label_month_suffix",value:" "},MY_LABEL_YEAR_SUFFIX:{key:"my_label_year_suffix",value:""},NAV:{key:"navigator",value:null},STRINGS:{key:"strings",value:{previousMonth:"Previous Month",nextMonth:"Next Month",close:"Close"},supercedes:["close","title"]}};var B=F._DEFAULT_CONFIG;F._EVENT_TYPES={BEFORE_SELECT:"beforeSelect",SELECT:"select",BEFORE_DESELECT:"beforeDeselect",DESELECT:"deselect",CHANGE_PAGE:"changePage",BEFORE_RENDER:"beforeRender",RENDER:"render",BEFORE_DESTROY:"beforeDestroy",DESTROY:"destroy",RESET:"reset",CLEAR:"clear",BEFORE_HIDE:"beforeHide",HIDE:"hide",BEFORE_SHOW:"beforeShow",SHOW:"show",BEFORE_HIDE_NAV:"beforeHideNav",HIDE_NAV:"hideNav",BEFORE_SHOW_NAV:"beforeShowNav",SHOW_NAV:"showNav",BEFORE_RENDER_NAV:"!
 beforeRenderNav",RENDER_NAV:"renderNav"};F._STYLES={CSS_ROW_HE!
 ADER:"ca
lrowhead",CSS_ROW_FOOTER:"calrowfoot",CSS_CELL:"calcell",CSS_CELL_SELECTOR:"selector",CSS_CELL_SELECTED:"selected",CSS_CELL_SELECTABLE:"selectable",CSS_CELL_RESTRICTED:"restricted",CSS_CELL_TODAY:"today",CSS_CELL_OOM:"oom",CSS_CELL_OOB:"previous",CSS_HEADER:"calheader",CSS_HEADER_TEXT:"calhead",CSS_BODY:"calbody",CSS_WEEKDAY_CELL:"calweekdaycell",CSS_WEEKDAY_ROW:"calweekdayrow",CSS_FOOTER:"calfoot",CSS_CALENDAR:"yui-calendar",CSS_SINGLE:"single",CSS_CONTAINER:"yui-calcontainer",CSS_NAV_LEFT:"calnavleft",CSS_NAV_RIGHT:"calnavright",CSS_NAV:"calnav",CSS_CLOSE:"calclose",CSS_CELL_TOP:"calcelltop",CSS_CELL_LEFT:"calcellleft",CSS_CELL_RIGHT:"calcellright",CSS_CELL_BOTTOM:"calcellbottom",CSS_CELL_HOVER:"calcellhover",CSS_CELL_HIGHLIGHT1:"highlight1",CSS_CELL_HIGHLIGHT2:"highlight2",CSS_CELL_HIGHLIGHT3:"highlight3",CSS_CELL_HIGHLIGHT4:"highlight4"};F.prototype={Config:null,parent:null,index:-1,cells:null,cellDates:null,id:null,containerId:null,oDomContainer:null,today:null,renderSt!
 ack:null,_renderStack:null,oNavigator:null,_selectedDates:null,domEventMap:null,_parseArgs:function(H){var G={id:null,container:null,config:null};if(H&&H.length&&H.length>0){switch(H.length){case 1:G.id=null;G.container=H[0];G.config=null;break;case 2:if(E.isObject(H[1])&&!H[1].tagName&&!(H[1] instanceof String)){G.id=null;G.container=H[0];G.config=H[1];}else{G.id=H[0];G.container=H[1];G.config=null;}break;default:G.id=H[0];G.container=H[1];G.config=H[2];break;}}else{}return G;},init:function(J,H,I){var G=this._parseArgs(arguments);J=G.id;H=G.container;I=G.config;this.oDomContainer=C.get(H);if(!this.oDomContainer.id){this.oDomContainer.id=C.generateId();}if(!J){J=this.oDomContainer.id+"_t";}this.id=J;this.containerId=this.oDomContainer.id;this.initEvents();this.today=new Date();D.clearTime(this.today);this.cfg=new YAHOO.util.Config(this);this.Options={};this.Locale={};this.initStyles();C.addClass(this.oDomContainer,this.Style.CSS_CONTAINER);
+C.addClass(this.oDomContainer,this.Style.CSS_SINGLE);this.cellDates=[];this.cells=[];this.renderStack=[];this._renderStack=[];this.setupConfig();if(I){this.cfg.applyConfig(I,true);}this.cfg.fireQueue();},configIframe:function(I,H,J){var G=H[0];if(!this.parent){if(C.inDocument(this.oDomContainer)){if(G){var K=C.getStyle(this.oDomContainer,"position");if(K=="absolute"||K=="relative"){if(!C.inDocument(this.iframe)){this.iframe=document.createElement("iframe");this.iframe.src="javascript:false;";C.setStyle(this.iframe,"opacity","0");if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6){C.addClass(this.iframe,"fixedsize");}this.oDomContainer.insertBefore(this.iframe,this.oDomContainer.firstChild);}}}else{if(this.iframe){if(this.iframe.parentNode){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;}}}}},configTitle:function(H,G,I){var K=G[0];if(K){this.createTitleBar(K);}else{var J=this.cfg.getProperty(B.CLOSE.key);if(!J){this.removeTitleBar();}else{this.createTitleBar(" ")!
 ;}}},configClose:function(H,G,I){var K=G[0],J=this.cfg.getProperty(B.TITLE.key);if(K){if(!J){this.createTitleBar(" ");}this.createCloseButton();}else{this.removeCloseButton();if(!J){this.removeTitleBar();}}},initEvents:function(){var G=F._EVENT_TYPES,I=YAHOO.util.CustomEvent,H=this;H.beforeSelectEvent=new I(G.BEFORE_SELECT);H.selectEvent=new I(G.SELECT);H.beforeDeselectEvent=new I(G.BEFORE_DESELECT);H.deselectEvent=new I(G.DESELECT);H.changePageEvent=new I(G.CHANGE_PAGE);H.beforeRenderEvent=new I(G.BEFORE_RENDER);H.renderEvent=new I(G.RENDER);H.beforeDestroyEvent=new I(G.BEFORE_DESTROY);H.destroyEvent=new I(G.DESTROY);H.resetEvent=new I(G.RESET);H.clearEvent=new I(G.CLEAR);H.beforeShowEvent=new I(G.BEFORE_SHOW);H.showEvent=new I(G.SHOW);H.beforeHideEvent=new I(G.BEFORE_HIDE);H.hideEvent=new I(G.HIDE);H.beforeShowNavEvent=new I(G.BEFORE_SHOW_NAV);H.showNavEvent=new I(G.SHOW_NAV);H.beforeHideNavEvent=new I(G.BEFORE_HIDE_NAV);H.hideNavEvent=new I(G.HIDE_NAV);H.beforeRende!
 rNavEvent=new I(G.BEFORE_RENDER_NAV);H.renderNavEvent=new I(G.!
 RENDER_N
AV);H.beforeSelectEvent.subscribe(H.onBeforeSelect,this,true);H.selectEvent.subscribe(H.onSelect,this,true);H.beforeDeselectEvent.subscribe(H.onBeforeDeselect,this,true);H.deselectEvent.subscribe(H.onDeselect,this,true);H.changePageEvent.subscribe(H.onChangePage,this,true);H.renderEvent.subscribe(H.onRender,this,true);H.resetEvent.subscribe(H.onReset,this,true);H.clearEvent.subscribe(H.onClear,this,true);},doPreviousMonthNav:function(H,G){A.preventDefault(H);setTimeout(function(){G.previousMonth();var I=C.getElementsByClassName(G.Style.CSS_NAV_LEFT,"a",G.oDomContainer);if(I&&I[0]){try{I[0].focus();}catch(J){}}},0);},doNextMonthNav:function(H,G){A.preventDefault(H);setTimeout(function(){G.nextMonth();var I=C.getElementsByClassName(G.Style.CSS_NAV_RIGHT,"a",G.oDomContainer);if(I&&I[0]){try{I[0].focus();}catch(J){}}},0);},doSelectCell:function(M,G){var R,O,I,L;var N=A.getTarget(M),H=N.tagName.toLowerCase(),K=false;while(H!="td"&&!C.hasClass(N,G.Style.CSS_CELL_SELECTABLE)){if(!K!
 &&H=="a"&&C.hasClass(N,G.Style.CSS_CELL_SELECTOR)){K=true;}N=N.parentNode;H=N.tagName.toLowerCase();if(N==this.oDomContainer||H=="html"){return;}}if(K){A.preventDefault(M);}R=N;if(C.hasClass(R,G.Style.CSS_CELL_SELECTABLE)){L=G.getIndexFromId(R.id);if(L>-1){O=G.cellDates[L];if(O){I=D.getDate(O[0],O[1]-1,O[2]);var Q;if(G.Options.MULTI_SELECT){Q=R.getElementsByTagName("a")[0];if(Q){Q.blur();}var J=G.cellDates[L];var P=G._indexOfSelectedFieldArray(J);if(P>-1){G.deselectCell(L);}else{G.selectCell(L);}}else{Q=R.getElementsByTagName("a")[0];if(Q){Q.blur();}G.selectCell(L);}}}}},doCellMouseOver:function(I,H){var G;if(I){G=A.getTarget(I);}else{G=this;}while(G.tagName&&G.tagName.toLowerCase()!="td"){G=G.parentNode;if(!G.tagName||G.tagName.toLowerCase()=="html"){return;}}if(C.hasClass(G,H.Style.CSS_CELL_SELECTABLE)){C.addClass(G,H.Style.CSS_CELL_HOVER);}},doCellMouseOut:function(I,H){var G;if(I){G=A.getTarget(I);}else{G=this;}while(G.tagName&&G.tagName.toLowerCase()!="td"){G=G.parentN!
 ode;if(!G.tagName||G.tagName.toLowerCase()=="html"){return;}}i!
 f(C.hasC
lass(G,H.Style.CSS_CELL_SELECTABLE)){C.removeClass(G,H.Style.CSS_CELL_HOVER);}},setupConfig:function(){var G=this.cfg;G.addProperty(B.PAGEDATE.key,{value:new Date(),handler:this.configPageDate});G.addProperty(B.SELECTED.key,{value:[],handler:this.configSelected});G.addProperty(B.TITLE.key,{value:B.TITLE.value,handler:this.configTitle});G.addProperty(B.CLOSE.key,{value:B.CLOSE.value,handler:this.configClose});G.addProperty(B.IFRAME.key,{value:B.IFRAME.value,handler:this.configIframe,validator:G.checkBoolean});G.addProperty(B.MINDATE.key,{value:B.MINDATE.value,handler:this.configMinDate});G.addProperty(B.MAXDATE.key,{value:B.MAXDATE.value,handler:this.configMaxDate});G.addProperty(B.MULTI_SELECT.key,{value:B.MULTI_SELECT.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.START_WEEKDAY.key,{value:B.START_WEEKDAY.value,handler:this.configOptions,validator:G.checkNumber});G.addProperty(B.SHOW_WEEKDAYS.key,{value:B.SHOW_WEEKDAYS.value,handler:this.configOp!
 tions,validator:G.checkBoolean});G.addProperty(B.SHOW_WEEK_HEADER.key,{value:B.SHOW_WEEK_HEADER.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.SHOW_WEEK_FOOTER.key,{value:B.SHOW_WEEK_FOOTER.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.HIDE_BLANK_WEEKS.key,{value:B.HIDE_BLANK_WEEKS.value,handler:this.configOptions,validator:G.checkBoolean});G.addProperty(B.NAV_ARROW_LEFT.key,{value:B.NAV_ARROW_LEFT.value,handler:this.configOptions});G.addProperty(B.NAV_ARROW_RIGHT.key,{value:B.NAV_ARROW_RIGHT.value,handler:this.configOptions});G.addProperty(B.MONTHS_SHORT.key,{value:B.MONTHS_SHORT.value,handler:this.configLocale});G.addProperty(B.MONTHS_LONG.key,{value:B.MONTHS_LONG.value,handler:this.configLocale});G.addProperty(B.WEEKDAYS_1CHAR.key,{value:B.WEEKDAYS_1CHAR.value,handler:this.configLocale});G.addProperty(B.WEEKDAYS_SHORT.key,{value:B.WEEKDAYS_SHORT.value,handler:this.configLocale});
 G.addProperty(B.WEEKDAYS_MEDIUM.key,{value:B.WEEKDAYS_MEDIUM.value,handler:this.configLocale});G.addProperty(B.WEEKDAYS_LONG.key,{value:B.WEEKDAYS_LONG.value,handler:this.configLocale});var H=function(){G.refireEvent(B.LOCALE_MONTHS.key);G.refireEvent(B.LOCALE_WEEKDAYS.key);};G.subscribeToConfigEvent(B.START_WEEKDAY.key,H,this,true);G.subscribeToConfigEvent(B.MONTHS_SHORT.key,H,this,true);G.subscribeToConfigEvent(B.MONTHS_LONG.key,H,this,true);G.subscribeToConfigEvent(B.WEEKDAYS_1CHAR.key,H,this,true);G.subscribeToConfigEvent(B.WEEKDAYS_SHORT.key,H,this,true);G.subscribeToConfigEvent(B.WEEKDAYS_MEDIUM.key,H,this,true);G.subscribeToConfigEvent(B.WEEKDAYS_LONG.key,H,this,true);G.addProperty(B.LOCALE_MONTHS.key,{value:B.LOCALE_MONTHS.value,handler:this.configLocaleValues});G.addProperty(B.LOCALE_WEEKDAYS.key,{value:B.LOCALE_WEEKDAYS.value,handler:this.configLocaleValues});G.addProperty(B.DATE_DELIMITER.key,{value:B.DATE_DELIMITER.value,handler:this.configLocale});G.addProperty!
 (B.DATE_FIELD_DELIMITER.key,{value:B.DATE_FIELD_DELIMITER.value,handler:this.configLocale});G.addProperty(B.DATE_RANGE_DELIMITER.key,{value:B.DATE_RANGE_DELIMITER.value,handler:this.configLocale});G.addProperty(B.MY_MONTH_POSITION.key,{value:B.MY_MONTH_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MY_YEAR_POSITION.key,{value:B.MY_YEAR_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MD_MONTH_POSITION.key,{value:B.MD_MONTH_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MD_DAY_POSITION.key,{value:B.MD_DAY_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MDY_MONTH_POSITION.key,{value:B.MDY_MONTH_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MDY_DAY_POSITION.key,{value:B.MDY_DAY_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MDY_YEAR_POSITION.key,{value:B.MDY_YEAR_POS!
 ITION.value,handler:this.configLocale,validator:G.checkNumber}!
 );G.addP
roperty(B.MY_LABEL_MONTH_POSITION.key,{value:B.MY_LABEL_MONTH_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MY_LABEL_YEAR_POSITION.key,{value:B.MY_LABEL_YEAR_POSITION.value,handler:this.configLocale,validator:G.checkNumber});G.addProperty(B.MY_LABEL_MONTH_SUFFIX.key,{value:B.MY_LABEL_MONTH_SUFFIX.value,handler:this.configLocale});G.addProperty(B.MY_LABEL_YEAR_SUFFIX.key,{value:B.MY_LABEL_YEAR_SUFFIX.value,handler:this.configLocale});G.addProperty(B.NAV.key,{value:B.NAV.value,handler:this.configNavigator});G.addProperty(B.STRINGS.key,{value:B.STRINGS.value,handler:this.configStrings,validator:function(I){return E.isObject(I);},supercedes:B.STRINGS.supercedes});},configStrings:function(H,G,I){var J=E.merge(B.STRINGS.value,G[0]);this.cfg.setProperty(B.STRINGS.key,J,true);},configPageDate:function(H,G,I){this.cfg.setProperty(B.PAGEDATE.key,this._parsePageDate(G[0]),true);},configMinDate:function(H,G,I){var J=G[0];if(E.isString(J)){J=this._par!
 seDate(J);this.cfg.setProperty(B.MINDATE.key,D.getDate(J[0],(J[1]-1),J[2]));}},configMaxDate:function(H,G,I){var J=G[0];if(E.isString(J)){J=this._parseDate(J);this.cfg.setProperty(B.MAXDATE.key,D.getDate(J[0],(J[1]-1),J[2]));}},configSelected:function(I,G,K){var H=G[0],J=B.SELECTED.key;if(H){if(E.isString(H)){this.cfg.setProperty(J,this._parseDates(H),true);}}if(!this._selectedDates){this._selectedDates=this.cfg.getProperty(J);}},configOptions:function(H,G,I){this.Options[H.toUpperCase()]=G[0];},configLocale:function(H,G,I){this.Locale[H.toUpperCase()]=G[0];this.cfg.refireEvent(B.LOCALE_MONTHS.key);this.cfg.refireEvent(B.LOCALE_WEEKDAYS.key);},configLocaleValues:function(J,I,K){J=J.toLowerCase();var M=I[0],H=this.cfg,N=this.Locale;switch(J){case B.LOCALE_MONTHS.key:switch(M){case F.SHORT:N.LOCALE_MONTHS=H.getProperty(B.MONTHS_SHORT.key).concat();break;case F.LONG:N.LOCALE_MONTHS=H.getProperty(B.MONTHS_LONG.key).concat();break;}break;case B.LOCALE_WEEKDAYS.key:switch(M){case!
  F.ONE_CHAR:N.LOCALE_WEEKDAYS=H.getProperty(B.WEEKDAYS_1CHAR.k!
 ey).conc
at();break;case F.SHORT:N.LOCALE_WEEKDAYS=H.getProperty(B.WEEKDAYS_SHORT.key).concat();break;case F.MEDIUM:N.LOCALE_WEEKDAYS=H.getProperty(B.WEEKDAYS_MEDIUM.key).concat();break;case F.LONG:N.LOCALE_WEEKDAYS=H.getProperty(B.WEEKDAYS_LONG.key).concat();break;}var L=H.getProperty(B.START_WEEKDAY.key);if(L>0){for(var G=0;G<L;++G){N.LOCALE_WEEKDAYS.push(N.LOCALE_WEEKDAYS.shift());}}break;}},configNavigator:function(H,G,I){var J=G[0];if(YAHOO.widget.CalendarNavigator&&(J===true||E.isObject(J))){if(!this.oNavigator){this.oNavigator=new YAHOO.widget.CalendarNavigator(this);this.beforeRenderEvent.subscribe(function(){if(!this.pages){this.oNavigator.erase();}},this,true);}}else{if(this.oNavigator){this.oNavigator.destroy();this.oNavigator=null;}}},initStyles:function(){var G=F._STYLES;this.Style={CSS_ROW_HEADER:G.CSS_ROW_HEADER,CSS_ROW_FOOTER:G.CSS_ROW_FOOTER,CSS_CELL:G.CSS_CELL,CSS_CELL_SELECTOR:G.CSS_CELL_SELECTOR,CSS_CELL_SELECTED:G.CSS_CELL_SELECTED,CSS_CELL_SELECTABLE:G.CSS_CELL_!
 SELECTABLE,CSS_CELL_RESTRICTED:G.CSS_CELL_RESTRICTED,CSS_CELL_TODAY:G.CSS_CELL_TODAY,CSS_CELL_OOM:G.CSS_CELL_OOM,CSS_CELL_OOB:G.CSS_CELL_OOB,CSS_HEADER:G.CSS_HEADER,CSS_HEADER_TEXT:G.CSS_HEADER_TEXT,CSS_BODY:G.CSS_BODY,CSS_WEEKDAY_CELL:G.CSS_WEEKDAY_CELL,CSS_WEEKDAY_ROW:G.CSS_WEEKDAY_ROW,CSS_FOOTER:G.CSS_FOOTER,CSS_CALENDAR:G.CSS_CALENDAR,CSS_SINGLE:G.CSS_SINGLE,CSS_CONTAINER:G.CSS_CONTAINER,CSS_NAV_LEFT:G.CSS_NAV_LEFT,CSS_NAV_RIGHT:G.CSS_NAV_RIGHT,CSS_NAV:G.CSS_NAV,CSS_CLOSE:G.CSS_CLOSE,CSS_CELL_TOP:G.CSS_CELL_TOP,CSS_CELL_LEFT:G.CSS_CELL_LEFT,CSS_CELL_RIGHT:G.CSS_CELL_RIGHT,CSS_CELL_BOTTOM:G.CSS_CELL_BOTTOM,CSS_CELL_HOVER:G.CSS_CELL_HOVER,CSS_CELL_HIGHLIGHT1:G.CSS_CELL_HIGHLIGHT1,CSS_CELL_HIGHLIGHT2:G.CSS_CELL_HIGHLIGHT2,CSS_CELL_HIGHLIGHT3:G.CSS_CELL_HIGHLIGHT3,CSS_CELL_HIGHLIGHT4:G.CSS_CELL_HIGHLIGHT4};},buildMonthLabel:function(){return this._buildMonthLabel(this.cfg.getProperty(B.PAGEDATE.key));},_buildMonthLabel:function(G){var I=this.Locale.LOCALE_MONTHS[G.getMonth(!
 )]+this.Locale.MY_LABEL_MONTH_SUFFIX,H=G.getFullYear()+this.Lo!
 cale.MY_
LABEL_YEAR_SUFFIX;
 if(this.Locale.MY_LABEL_MONTH_POSITION==2||this.Locale.MY_LABEL_YEAR_POSITION==1){return H+I;}else{return I+H;}},buildDayLabel:function(G){return G.getDate();},createTitleBar:function(G){var H=C.getElementsByClassName(YAHOO.widget.CalendarGroup.CSS_2UPTITLE,"div",this.oDomContainer)[0]||document.createElement("div");H.className=YAHOO.widget.CalendarGroup.CSS_2UPTITLE;H.innerHTML=G;this.oDomContainer.insertBefore(H,this.oDomContainer.firstChild);C.addClass(this.oDomContainer,"withtitle");return H;},removeTitleBar:function(){var G=C.getElementsByClassName(YAHOO.widget.CalendarGroup.CSS_2UPTITLE,"div",this.oDomContainer)[0]||null;if(G){A.purgeElement(G);this.oDomContainer.removeChild(G);}C.removeClass(this.oDomContainer,"withtitle");},createCloseButton:function(){var J=YAHOO.widget.CalendarGroup.CSS_2UPCLOSE,L="us/my/bn/x_d.gif",K=C.getElementsByClassName("link-close","a",this.oDomContainer)[0],G=this.cfg.getProperty(B.STRINGS.key),H=(G&&G.close)?G.close:"";if(!K){K=document.c!
 reateElement("a");A.addListener(K,"click",function(N,M){M.hide();A.preventDefault(N);},this);}K.href="#";K.className="link-close";if(F.IMG_ROOT!==null){var I=C.getElementsByClassName(J,"img",K)[0]||document.createElement("img");I.src=F.IMG_ROOT+L;I.className=J;K.appendChild(I);}else{K.innerHTML='<span class="'+J+" "+this.Style.CSS_CLOSE+'">'+H+"</span>";}this.oDomContainer.appendChild(K);return K;},removeCloseButton:function(){var G=C.getElementsByClassName("link-close","a",this.oDomContainer)[0]||null;if(G){A.purgeElement(G);this.oDomContainer.removeChild(G);}},renderHeader:function(Q){var P=7,O="us/tr/callt.gif",G="us/tr/calrt.gif",N=this.cfg,K=N.getProperty(B.PAGEDATE.key),L=N.getProperty(B.STRINGS.key),V=(L&&L.previousMonth)?L.previousMonth:"",H=(L&&L.nextMonth)?L.nextMonth:"",M;if(N.getProperty(B.SHOW_WEEK_HEADER.key)){P+=1;}if(N.getProperty(B.SHOW_WEEK_FOOTER.key)){P+=1;}Q[Q.length]="<thead>";Q[Q.length]="<tr>";Q[Q.length]='<th colspan="'+P+'" class="'+this.Style.CSS_!
 HEADER_TEXT+'">';Q[Q.length]='<div class="'+this.Style.CSS_HEA!
 DER+'">'
;var X,U=false;if(this.parent){if(this.index===0){X=true;}if(this.index==(this.parent.cfg.getProperty("pages")-1)){U=true;}}else{X=true;U=true;}if(X){M=this._buildMonthLabel(D.subtract(K,D.MONTH,1));var R=N.getProperty(B.NAV_ARROW_LEFT.key);if(R===null&&F.IMG_ROOT!==null){R=F.IMG_ROOT+O;}var I=(R===null)?"":' style="background-image:url('+R+')"';Q[Q.length]='<a class="'+this.Style.CSS_NAV_LEFT+'"'+I+' href="#">'+V+" ("+M+")"+"</a>";}var W=this.buildMonthLabel();var S=this.parent||this;if(S.cfg.getProperty("navigator")){W='<a class="'+this.Style.CSS_NAV+'" href="#">'+W+"</a>";}Q[Q.length]=W;if(U){M=this._buildMonthLabel(D.add(K,D.MONTH,1));var T=N.getProperty(B.NAV_ARROW_RIGHT.key);if(T===null&&F.IMG_ROOT!==null){T=F.IMG_ROOT+G;}var J=(T===null)?"":' style="background-image:url('+T+')"';Q[Q.length]='<a class="'+this.Style.CSS_NAV_RIGHT+'"'+J+' href="#">'+H+" ("+M+")"+"</a>";}Q[Q.length]="</div>\n</th>\n</tr>";if(N.getProperty(B.SHOW_WEEKDAYS.key)){Q=this.buildWeekdays(Q);}Q[Q!
 .length]="</thead>";return Q;},buildWeekdays:function(H){H[H.length]='<tr class="'+this.Style.CSS_WEEKDAY_ROW+'">';if(this.cfg.getProperty(B.SHOW_WEEK_HEADER.key)){H[H.length]="<th> </th>";}for(var G=0;G<this.Locale.LOCALE_WEEKDAYS.length;++G){H[H.length]='<th class="calweekdaycell">'+this.Locale.LOCALE_WEEKDAYS[G]+"</th>";}if(this.cfg.getProperty(B.SHOW_WEEK_FOOTER.key)){H[H.length]="<th> </th>";}H[H.length]="</tr>";return H;},renderBody:function(l,j){var AJ=this.cfg.getProperty(B.START_WEEKDAY.key);this.preMonthDays=l.getDay();if(AJ>0){this.preMonthDays-=AJ;}if(this.preMonthDays<0){this.preMonthDays+=7;}this.monthDays=D.findMonthEnd(l).getDate();this.postMonthDays=F.DISPLAY_DAYS-this.preMonthDays-this.monthDays;l=D.subtract(l,D.DAY,this.preMonthDays);var X,N,M="w",e="_cell",b="wd",v="d",P,q,AB=this.today,O=this.cfg,V=AB.getFullYear(),u=AB.getMonth(),J=AB.getDate(),AA=O.getProperty(B.PAGEDATE.key),I=O.getProperty(B.HIDE_BLANK_WEEKS.key),h=O.getProperty(B.SHOW_WEE!
 K_FOOTER.key),a=O.getProperty(B.SHOW_WEEK_HEADER.key),T=O.getP!
 roperty(
B.MINDATE.key),Z=O.getProperty(B.MAXDATE.key);if(T){T=D.clearTime(T);}if(Z){Z=D.clearTime(Z);}j[j.length]='<tbody class="m'+(AA.getMonth()+1)+" "+this.Style.CSS_BODY+'">';var AH=0,Q=document.createElement("div"),k=document.createElement("td");Q.appendChild(k);var z=this.parent||this;for(var AD=0;AD<6;AD++){X=D.getWeekNumber(l,AJ);N=M+X;if(AD!==0&&I===true&&l.getMonth()!=AA.getMonth()){break;}else{j[j.length]='<tr class="'+N+'">';if(a){j=this.renderRowHeader(X,j);}for(var AI=0;AI<7;AI++){P=[];this.clearElement(k);k.className=this.Style.CSS_CELL;k.id=this.id+e+AH;if(l.getDate()==J&&l.getMonth()==u&&l.getFullYear()==V){P[P.length]=z.renderCellStyleToday;}var Y=[l.getFullYear(),l.getMonth()+1,l.getDate()];this.cellDates[this.cellDates.length]=Y;if(l.getMonth()!=AA.getMonth()){P[P.length]=z.renderCellNotThisMonth;}else{C.addClass(k,b+l.getDay());C.addClass(k,v+l.getDate());for(var AC=0;AC<this.renderStack.length;++AC){q=null;var w=this.renderStack[AC],AK=w[0],H,c,L;switch(AK){cas!
 e F.DATE:H=w[1][1];c=w[1][2];L=w[1][0];if(l.getMonth()+1==H&&l.getDate()==c&&l.getFullYear()==L){q=w[2];this.renderStack.splice(AC,1);}break;case F.MONTH_DAY:H=w[1][0];c=w[1][1];if(l.getMonth()+1==H&&l.getDate()==c){q=w[2];this.renderStack.splice(AC,1);}break;case F.RANGE:var g=w[1][0],f=w[1][1],m=g[1],S=g[2],W=g[0],AG=D.getDate(W,m-1,S),K=f[1],o=f[2],G=f[0],AF=D.getDate(G,K-1,o);if(l.getTime()>=AG.getTime()&&l.getTime()<=AF.getTime()){q=w[2];if(l.getTime()==AF.getTime()){this.renderStack.splice(AC,1);}}break;case F.WEEKDAY:var R=w[1][0];if(l.getDay()+1==R){q=w[2];}break;case F.MONTH:H=w[1][0];if(l.getMonth()+1==H){q=w[2];}break;}if(q){P[P.length]=q;}}}if(this._indexOfSelectedFieldArray(Y)>-1){P[P.length]=z.renderCellStyleSelected;}if((T&&(l.getTime()<T.getTime()))||(Z&&(l.getTime()>Z.getTime()))){P[P.length]=z.renderOutOfBoundsDate;}else{P[P.length]=z.styleCellDefault;P[P.length]=z.renderCellDefault;}for(var y=0;
 y<P.length;++y){if(P[y].call(z,l,k)==F.STOP_RENDER){break;}}l.setTime(l.getTime()+D.ONE_DAY_MS);l=D.clearTime(l);if(AH>=0&&AH<=6){C.addClass(k,this.Style.CSS_CELL_TOP);}if((AH%7)===0){C.addClass(k,this.Style.CSS_CELL_LEFT);}if(((AH+1)%7)===0){C.addClass(k,this.Style.CSS_CELL_RIGHT);}var n=this.postMonthDays;if(I&&n>=7){var U=Math.floor(n/7);for(var AE=0;AE<U;++AE){n-=7;}}if(AH>=((this.preMonthDays+n+this.monthDays)-7)){C.addClass(k,this.Style.CSS_CELL_BOTTOM);}j[j.length]=Q.innerHTML;AH++;}if(h){j=this.renderRowFooter(X,j);}j[j.length]="</tr>";}}j[j.length]="</tbody>";return j;},renderFooter:function(G){return G;},render:function(){this.beforeRenderEvent.fire();var H=D.findMonthStart(this.cfg.getProperty(B.PAGEDATE.key));this.resetRenderers();this.cellDates.length=0;A.purgeElement(this.oDomContainer,true);var G=[];G[G.length]='<table cellSpacing="0" class="'+this.Style.CSS_CALENDAR+" y"+H.getFullYear()+'" id="'+this.id+'">';G=this.renderHeader(G);G=this.renderBody(H,G);G=th!
 is.renderFooter(G);G[G.length]="</table>";this.oDomContainer.innerHTML=G.join("\n");this.applyListeners();this.cells=this.oDomContainer.getElementsByTagName("td");this.cfg.refireEvent(B.TITLE.key);this.cfg.refireEvent(B.CLOSE.key);this.cfg.refireEvent(B.IFRAME.key);this.renderEvent.fire();},applyListeners:function(){var P=this.oDomContainer,H=this.parent||this,L="a",S="click";var M=C.getElementsByClassName(this.Style.CSS_NAV_LEFT,L,P),I=C.getElementsByClassName(this.Style.CSS_NAV_RIGHT,L,P);if(M&&M.length>0){this.linkLeft=M[0];A.addListener(this.linkLeft,S,this.doPreviousMonthNav,H,true);}if(I&&I.length>0){this.linkRight=I[0];A.addListener(this.linkRight,S,this.doNextMonthNav,H,true);}if(H.cfg.getProperty("navigator")!==null){this.applyNavListeners();}if(this.domEventMap){var J,G;for(var R in this.domEventMap){if(E.hasOwnProperty(this.domEventMap,R)){var N=this.domEventMap[R];if(!(N instanceof Array)){N=[N];}for(var K=0;K<N.length;K++){var Q=N[K];G=C.getElementsByClassName(!
 R,Q.tag,this.oDomContainer);for(var O=0;O<G.length;O++){J=G[O]!
 ;A.addLi
stener(J,Q.event,Q.handler,Q.scope,Q.correct);}}}}}A.addListener(this.oDomContainer,"click",this.doSelectCell,this);A.addListener(this.oDomContainer,"mouseover",this.doCellMouseOver,this);A.addListener(this.oDomContainer,"mouseout",this.doCellMouseOut,this);},applyNavListeners:function(){var H=this.parent||this,I=this,G=C.getElementsByClassName(this.Style.CSS_NAV,"a",this.oDomContainer);if(G.length>0){A.addListener(G,"click",function(N,M){var L=A.getTarget(N);if(this===L||C.isAncestor(this,L)){A.preventDefault(N);}var J=H.oNavigator;if(J){var K=I.cfg.getProperty("pagedate");J.setYear(K.getFullYear());J.setMonth(K.getMonth());J.show();}});}},getDateByCellId:function(H){var G=this.getDateFieldsByCellId(H);return(G)?D.getDate(G[0],G[1]-1,G[2]):null;},getDateFieldsByCellId:function(G){G=this.getIndexFromId(G);return(G>-1)?this.cellDates[G]:null;},getCellIndex:function(I){var H=-1;if(I){var G=I.getMonth(),N=I.getFullYear(),M=I.getDate(),K=this.cellDates;for(var J=0;J<K.length;++J!
 ){var L=K[J];if(L[0]===N&&L[1]===G+1&&L[2]===M){H=J;break;}}}return H;},getIndexFromId:function(I){var H=-1,G=I.lastIndexOf("_cell");if(G>-1){H=parseInt(I.substring(G+5),10);}return H;},renderOutOfBoundsDate:function(H,G){C.addClass(G,this.Style.CSS_CELL_OOB);G.innerHTML=H.getDate();return F.STOP_RENDER;},renderRowHeader:function(H,G){G[G.length]='<th class="calrowhead">'+H+"</th>";return G;},renderRowFooter:function(H,G){G[G.length]='<th class="calrowfoot">'+H+"</th>";return G;},renderCellDefault:function(H,G){G.innerHTML='<a href="#" class="'+this.Style.CSS_CELL_SELECTOR+'">'+this.buildDayLabel(H)+"</a>";},styleCellDefault:function(H,G){C.addClass(G,this.Style.CSS_CELL_SELECTABLE);},renderCellStyleHighlight1:function(H,G){C.addClass(G,this.Style.CSS_CELL_HIGHLIGHT1);},renderCellStyleHighlight2:function(H,G){C.addClass(G,this.Style.CSS_CELL_HIGHLIGHT2);},renderCellStyleHighlight3:function(H,G){C.addClass(G,this.Style.CSS_CELL_HIGHLIGHT3);},renderCellStyleHighlight4:functio!
 n(H,G){C.addClass(G,this.Style.CSS_CELL_HIGHLIGHT4);},renderCe!
 llStyleT
oday:function(H,G){C.addClass(G,this.Style.CSS_CELL_TODAY);},renderCellStyleSelected:function(H,G){C.addClass(G,this.Style.CSS_CELL_SELECTED);},renderCellNotThisMonth:function(H,G){C.addClass(G,this.Style.CSS_CELL_OOM);G.innerHTML=H.getDate();return F.STOP_RENDER;},renderBodyCellRestricted:function(H,G){C.addClass(G,this.Style.CSS_CELL);C.addClass(G,this.Style.CSS_CELL_RESTRICTED);G.innerHTML=H.getDate();return F.STOP_RENDER;},addMonths:function(H){var G=B.PAGEDATE.key;this.cfg.setProperty(G,D.add(this.cfg.getProperty(G),D.MONTH,H));this.resetRenderers();this.changePageEvent.fire();},subtractMonths:function(H){var G=B.PAGEDATE.key;this.cfg.setProperty(G,D.subtract(this.cfg.getProperty(G),D.MONTH,H));this.resetRenderers();this.changePageEvent.fire();},addYears:function(H){var G=B.PAGEDATE.key;this.cfg.setProperty(G,D.add(this.cfg.getProperty(G),D.YEAR,H));this.resetRenderers();this.changePageEvent.fire();},subtractYears:function(H){var G=B.PAGEDATE.key;this.cfg.setProperty(G,!
 D.subtract(this.cfg.getProperty(G),D.YEAR,H));this.resetRenderers();this.changePageEvent.fire();},nextMonth:function(){this.addMonths(1);},previousMonth:function(){this.subtractMonths(1);},nextYear:function(){this.addYears(1);},previousYear:function(){this.subtractYears(1);},reset:function(){this.cfg.resetProperty(B.SELECTED.key);this.cfg.resetProperty(B.PAGEDATE.key);this.resetEvent.fire();},clear:function(){this.cfg.setProperty(B.SELECTED.key,[]);this.cfg.setProperty(B.PAGEDATE.key,new Date(this.today.getTime()));this.clearEvent.fire();},select:function(I){var L=this._toFieldArray(I),H=[],K=[],M=B.SELECTED.key;for(var G=0;G<L.length;++G){var J=L[G];if(!this.isDateOOB(this._toDate(J))){if(H.length===0){this.beforeSelectEvent.fire();K=this.cfg.getProperty(M);}H.push(J);if(this._indexOfSelectedFieldArray(J)==-1){K[K.length]=J;}}}if(H.length>0){if(this.parent){this.parent.cfg.setProperty(M,K);}else{this.cfg.setProperty(M,K);
-}this.selectEvent.fire(H);}return this.getSelectedDates();},selectCell:function(J){var H=this.cells[J],N=this.cellDates[J],M=this._toDate(N),I=C.hasClass(H,this.Style.CSS_CELL_SELECTABLE);if(I){this.beforeSelectEvent.fire();var L=B.SELECTED.key;var K=this.cfg.getProperty(L);var G=N.concat();if(this._indexOfSelectedFieldArray(G)==-1){K[K.length]=G;}if(this.parent){this.parent.cfg.setProperty(L,K);}else{this.cfg.setProperty(L,K);}this.renderCellStyleSelected(M,H);this.selectEvent.fire([G]);this.doCellMouseOut.call(H,null,this);}return this.getSelectedDates();},deselect:function(K){var G=this._toFieldArray(K),J=[],M=[],N=B.SELECTED.key;for(var H=0;H<G.length;++H){var L=G[H];if(!this.isDateOOB(this._toDate(L))){if(J.length===0){this.beforeDeselectEvent.fire();M=this.cfg.getProperty(N);}J.push(L);var I=this._indexOfSelectedFieldArray(L);if(I!=-1){M.splice(I,1);}}}if(J.length>0){if(this.parent){this.parent.cfg.setProperty(N,M);}else{this.cfg.setProperty(N,M);}this.deselectEvent.f!
 ire(J);}return this.getSelectedDates();},deselectCell:function(K){var H=this.cells[K],N=this.cellDates[K],I=this._indexOfSelectedFieldArray(N);var J=C.hasClass(H,this.Style.CSS_CELL_SELECTABLE);if(J){this.beforeDeselectEvent.fire();var L=this.cfg.getProperty(B.SELECTED.key),M=this._toDate(N),G=N.concat();if(I>-1){if(this.cfg.getProperty(B.PAGEDATE.key).getMonth()==M.getMonth()&&this.cfg.getProperty(B.PAGEDATE.key).getFullYear()==M.getFullYear()){C.removeClass(H,this.Style.CSS_CELL_SELECTED);}L.splice(I,1);}if(this.parent){this.parent.cfg.setProperty(B.SELECTED.key,L);}else{this.cfg.setProperty(B.SELECTED.key,L);}this.deselectEvent.fire(G);}return this.getSelectedDates();},deselectAll:function(){this.beforeDeselectEvent.fire();var J=B.SELECTED.key,G=this.cfg.getProperty(J),H=G.length,I=G.concat();if(this.parent){this.parent.cfg.setProperty(J,[]);}else{this.cfg.setProperty(J,[]);}if(H>0){this.deselectEvent.fire(I);}return this.getSelectedDates();},_toFieldArray:function(H){va!
 r G=[];if(H instanceof Date){G=[[H.getFullYear(),H.getMonth()+!
 1,H.getD
ate()]];}else{if(E.isString(H)){G=this._parseDates(H);}else{if(E.isArray(H)){for(var I=0;I<H.length;++I){var J=H[I];G[G.length]=[J.getFullYear(),J.getMonth()+1,J.getDate()];}}}}return G;},toDate:function(G){return this._toDate(G);},_toDate:function(G){if(G instanceof Date){return G;}else{return D.getDate(G[0],G[1]-1,G[2]);}},_fieldArraysAreEqual:function(I,H){var G=false;if(I[0]==H[0]&&I[1]==H[1]&&I[2]==H[2]){G=true;}return G;},_indexOfSelectedFieldArray:function(K){var J=-1,G=this.cfg.getProperty(B.SELECTED.key);for(var I=0;I<G.length;++I){var H=G[I];if(K[0]==H[0]&&K[1]==H[1]&&K[2]==H[2]){J=I;break;}}return J;},isDateOOM:function(G){return(G.getMonth()!=this.cfg.getProperty(B.PAGEDATE.key).getMonth());},isDateOOB:function(I){var J=this.cfg.getProperty(B.MINDATE.key),K=this.cfg.getProperty(B.MAXDATE.key),H=D;if(J){J=H.clearTime(J);}if(K){K=H.clearTime(K);}var G=new Date(I.getTime());G=H.clearTime(G);return((J&&G.getTime()<J.getTime())||(K&&G.getTime()>K.getTime()));},_parseP!
 ageDate:function(G){var J;if(G){if(G instanceof Date){J=D.findMonthStart(G);}else{var K,I,H;H=G.split(this.cfg.getProperty(B.DATE_FIELD_DELIMITER.key));K=parseInt(H[this.cfg.getProperty(B.MY_MONTH_POSITION.key)-1],10)-1;I=parseInt(H[this.cfg.getProperty(B.MY_YEAR_POSITION.key)-1],10);J=D.getDate(I,K,1);}}else{J=D.getDate(this.today.getFullYear(),this.today.getMonth(),1);}return J;},onBeforeSelect:function(){if(this.cfg.getProperty(B.MULTI_SELECT.key)===false){if(this.parent){this.parent.callChildFunction("clearAllBodyCellStyles",this.Style.CSS_CELL_SELECTED);this.parent.deselectAll();}else{this.clearAllBodyCellStyles(this.Style.CSS_CELL_SELECTED);this.deselectAll();}}},onSelect:function(G){},onBeforeDeselect:function(){},onDeselect:function(G){},onChangePage:function(){this.render();},onRender:function(){},onReset:function(){this.render();},onClear:function(){this.render();},validate:function(){return true;},_parseDate:function(I){var J=I.split(this.Locale.DATE_FIELD_DELIMI!
 TER),G;if(J.length==2){G=[J[this.Locale.MD_MONTH_POSITION-1],J!
 [this.Lo
cale.MD_DAY_POSITION-1]];G.type=F.MONTH_DAY;}else{G=[J[this.Locale.MDY_YEAR_POSITION-1],J[this.Locale.MDY_MONTH_POSITION-1],J[this.Locale.MDY_DAY_POSITION-1]];G.type=F.DATE;}for(var H=0;H<G.length;H++){G[H]=parseInt(G[H],10);}return G;},_parseDates:function(H){var O=[],N=H.split(this.Locale.DATE_DELIMITER);for(var M=0;M<N.length;++M){var L=N[M];if(L.indexOf(this.Locale.DATE_RANGE_DELIMITER)!=-1){var G=L.split(this.Locale.DATE_RANGE_DELIMITER),K=this._parseDate(G[0]),P=this._parseDate(G[1]),J=this._parseRange(K,P);O=O.concat(J);}else{var I=this._parseDate(L);O.push(I);}}return O;},_parseRange:function(G,K){var H=D.add(D.getDate(G[0],G[1]-1,G[2]),D.DAY,1),J=D.getDate(K[0],K[1]-1,K[2]),I=[];I.push(G);while(H.getTime()<=J.getTime()){I.push([H.getFullYear(),H.getMonth()+1,H.getDate()]);H=D.add(H,D.DAY,1);}return I;},resetRenderers:function(){this.renderStack=this._renderStack.concat();},removeRenderers:function(){this._renderStack=[];this.renderStack=[];},clearElement:function(G)!
 {G.innerHTML=" ";G.className="";},addRenderer:function(G,H){var J=this._parseDates(G);for(var I=0;I<J.length;++I){var K=J[I];if(K.length==2){if(K[0] instanceof Array){this._addRenderer(F.RANGE,K,H);}else{this._addRenderer(F.MONTH_DAY,K,H);}}else{if(K.length==3){this._addRenderer(F.DATE,K,H);}}}},_addRenderer:function(H,I,G){var J=[H,I,G];this.renderStack.unshift(J);this._renderStack=this.renderStack.concat();},addMonthRenderer:function(H,G){this._addRenderer(F.MONTH,[H],G);},addWeekdayRenderer:function(H,G){this._addRenderer(F.WEEKDAY,[H],G);},clearAllBodyCellStyles:function(G){for(var H=0;H<this.cells.length;++H){C.removeClass(this.cells[H],G);}},setMonth:function(I){var G=B.PAGEDATE.key,H=this.cfg.getProperty(G);H.setMonth(parseInt(I,10));this.cfg.setProperty(G,H);},setYear:function(H){var G=B.PAGEDATE.key,I=this.cfg.getProperty(G);I.setFullYear(parseInt(H,10));this.cfg.setProperty(G,I);},getSelectedDates:function(){var I=[],H=this.cfg.getProperty(B.SELECTED.key);
+}this.selectEvent.fire(H);}return this.getSelectedDates();},selectCell:function(J){var H=this.cells[J],N=this.cellDates[J],M=this._toDate(N),I=C.hasClass(H,this.Style.CSS_CELL_SELECTABLE);if(I){this.beforeSelectEvent.fire();var L=B.SELECTED.key;var K=this.cfg.getProperty(L);var G=N.concat();if(this._indexOfSelectedFieldArray(G)==-1){K[K.length]=G;}if(this.parent){this.parent.cfg.setProperty(L,K);}else{this.cfg.setProperty(L,K);}this.renderCellStyleSelected(M,H);this.selectEvent.fire([G]);this.doCellMouseOut.call(H,null,this);}return this.getSelectedDates();},deselect:function(K){var G=this._toFieldArray(K),J=[],M=[],N=B.SELECTED.key;for(var H=0;H<G.length;++H){var L=G[H];if(!this.isDateOOB(this._toDate(L))){if(J.length===0){this.beforeDeselectEvent.fire();M=this.cfg.getProperty(N);}J.push(L);var I=this._indexOfSelectedFieldArray(L);if(I!=-1){M.splice(I,1);}}}if(J.length>0){if(this.parent){this.parent.cfg.setProperty(N,M);}else{this.cfg.setProperty(N,M);}this.deselectEvent.f!
 ire(J);}return this.getSelectedDates();},deselectCell:function(K){var H=this.cells[K],N=this.cellDates[K],I=this._indexOfSelectedFieldArray(N);var J=C.hasClass(H,this.Style.CSS_CELL_SELECTABLE);if(J){this.beforeDeselectEvent.fire();var L=this.cfg.getProperty(B.SELECTED.key),M=this._toDate(N),G=N.concat();if(I>-1){if(this.cfg.getProperty(B.PAGEDATE.key).getMonth()==M.getMonth()&&this.cfg.getProperty(B.PAGEDATE.key).getFullYear()==M.getFullYear()){C.removeClass(H,this.Style.CSS_CELL_SELECTED);}L.splice(I,1);}if(this.parent){this.parent.cfg.setProperty(B.SELECTED.key,L);}else{this.cfg.setProperty(B.SELECTED.key,L);}this.deselectEvent.fire([G]);}return this.getSelectedDates();},deselectAll:function(){this.beforeDeselectEvent.fire();var J=B.SELECTED.key,G=this.cfg.getProperty(J),H=G.length,I=G.concat();if(this.parent){this.parent.cfg.setProperty(J,[]);}else{this.cfg.setProperty(J,[]);}if(H>0){this.deselectEvent.fire(I);}return this.getSelectedDates();},_toFieldArray:function(H){!
 var G=[];if(H instanceof Date){G=[[H.getFullYear(),H.getMonth(!
 )+1,H.ge
tDate()]];}else{if(E.isString(H)){G=this._parseDates(H);}else{if(E.isArray(H)){for(var I=0;I<H.length;++I){var J=H[I];G[G.length]=[J.getFullYear(),J.getMonth()+1,J.getDate()];}}}}return G;},toDate:function(G){return this._toDate(G);},_toDate:function(G){if(G instanceof Date){return G;}else{return D.getDate(G[0],G[1]-1,G[2]);}},_fieldArraysAreEqual:function(I,H){var G=false;if(I[0]==H[0]&&I[1]==H[1]&&I[2]==H[2]){G=true;}return G;},_indexOfSelectedFieldArray:function(K){var J=-1,G=this.cfg.getProperty(B.SELECTED.key);for(var I=0;I<G.length;++I){var H=G[I];if(K[0]==H[0]&&K[1]==H[1]&&K[2]==H[2]){J=I;break;}}return J;},isDateOOM:function(G){return(G.getMonth()!=this.cfg.getProperty(B.PAGEDATE.key).getMonth());},isDateOOB:function(I){var J=this.cfg.getProperty(B.MINDATE.key),K=this.cfg.getProperty(B.MAXDATE.key),H=D;if(J){J=H.clearTime(J);}if(K){K=H.clearTime(K);}var G=new Date(I.getTime());G=H.clearTime(G);return((J&&G.getTime()<J.getTime())||(K&&G.getTime()>K.getTime()));},_pars!
 ePageDate:function(G){var J;if(G){if(G instanceof Date){J=D.findMonthStart(G);}else{var K,I,H;H=G.split(this.cfg.getProperty(B.DATE_FIELD_DELIMITER.key));K=parseInt(H[this.cfg.getProperty(B.MY_MONTH_POSITION.key)-1],10)-1;I=parseInt(H[this.cfg.getProperty(B.MY_YEAR_POSITION.key)-1],10);J=D.getDate(I,K,1);}}else{J=D.getDate(this.today.getFullYear(),this.today.getMonth(),1);}return J;},onBeforeSelect:function(){if(this.cfg.getProperty(B.MULTI_SELECT.key)===false){if(this.parent){this.parent.callChildFunction("clearAllBodyCellStyles",this.Style.CSS_CELL_SELECTED);this.parent.deselectAll();}else{this.clearAllBodyCellStyles(this.Style.CSS_CELL_SELECTED);this.deselectAll();}}},onSelect:function(G){},onBeforeDeselect:function(){},onDeselect:function(G){},onChangePage:function(){this.render();},onRender:function(){},onReset:function(){this.render();},onClear:function(){this.render();},validate:function(){return true;},_parseDate:function(I){var J=I.split(this.Locale.DATE_FIELD_DELI!
 MITER),G;if(J.length==2){G=[J[this.Locale.MD_MONTH_POSITION-1]!
 ,J[this.
Locale.MD_DAY_POSITION-1]];G.type=F.MONTH_DAY;}else{G=[J[this.Locale.MDY_YEAR_POSITION-1],J[this.Locale.MDY_MONTH_POSITION-1],J[this.Locale.MDY_DAY_POSITION-1]];G.type=F.DATE;}for(var H=0;H<G.length;H++){G[H]=parseInt(G[H],10);}return G;},_parseDates:function(H){var O=[],N=H.split(this.Locale.DATE_DELIMITER);for(var M=0;M<N.length;++M){var L=N[M];if(L.indexOf(this.Locale.DATE_RANGE_DELIMITER)!=-1){var G=L.split(this.Locale.DATE_RANGE_DELIMITER),K=this._parseDate(G[0]),P=this._parseDate(G[1]),J=this._parseRange(K,P);O=O.concat(J);}else{var I=this._parseDate(L);O.push(I);}}return O;},_parseRange:function(G,K){var H=D.add(D.getDate(G[0],G[1]-1,G[2]),D.DAY,1),J=D.getDate(K[0],K[1]-1,K[2]),I=[];I.push(G);while(H.getTime()<=J.getTime()){I.push([H.getFullYear(),H.getMonth()+1,H.getDate()]);H=D.add(H,D.DAY,1);}return I;},resetRenderers:function(){this.renderStack=this._renderStack.concat();},removeRenderers:function(){this._renderStack=[];this.renderStack=[];},clearElement:function(!
 G){G.innerHTML=" ";G.className="";},addRenderer:function(G,H){var J=this._parseDates(G);for(var I=0;I<J.length;++I){var K=J[I];if(K.length==2){if(K[0] instanceof Array){this._addRenderer(F.RANGE,K,H);}else{this._addRenderer(F.MONTH_DAY,K,H);}}else{if(K.length==3){this._addRenderer(F.DATE,K,H);}}}},_addRenderer:function(H,I,G){var J=[H,I,G];this.renderStack.unshift(J);this._renderStack=this.renderStack.concat();},addMonthRenderer:function(H,G){this._addRenderer(F.MONTH,[H],G);},addWeekdayRenderer:function(H,G){this._addRenderer(F.WEEKDAY,[H],G);},clearAllBodyCellStyles:function(G){for(var H=0;H<this.cells.length;++H){C.removeClass(this.cells[H],G);}},setMonth:function(I){var G=B.PAGEDATE.key,H=this.cfg.getProperty(G);H.setMonth(parseInt(I,10));this.cfg.setProperty(G,H);},setYear:function(H){var G=B.PAGEDATE.key,I=this.cfg.getProperty(G);I.setFullYear(parseInt(H,10));this.cfg.setProperty(G,I);},getSelectedDates:function(){var I=[],H=this.cfg.getProperty(B.SELECTED.key);
 for(var K=0;K<H.length;++K){var J=H[K];var G=D.getDate(J[0],J[1]-1,J[2]);I.push(G);}I.sort(function(M,L){return M-L;});return I;},hide:function(){if(this.beforeHideEvent.fire()){this.oDomContainer.style.display="none";this.hideEvent.fire();}},show:function(){if(this.beforeShowEvent.fire()){this.oDomContainer.style.display="block";this.showEvent.fire();}},browser:(function(){var G=navigator.userAgent.toLowerCase();if(G.indexOf("opera")!=-1){return"opera";}else{if(G.indexOf("msie 7")!=-1){return"ie7";}else{if(G.indexOf("msie")!=-1){return"ie";}else{if(G.indexOf("safari")!=-1){return"safari";}else{if(G.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}})(),toString:function(){return"Calendar "+this.id;},destroy:function(){if(this.beforeDestroyEvent.fire()){var G=this;if(G.navigator){G.navigator.destroy();}if(G.cfg){G.cfg.destroy();}A.purgeElement(G.oDomContainer,true);C.removeClass(G.oDomContainer,"withtitle");C.removeClass(G.oDomContainer,G.Style.CSS_CONTAINER);C.re!
 moveClass(G.oDomContainer,G.Style.CSS_SINGLE);G.oDomContainer.innerHTML="";G.oDomContainer=null;G.cells=null;this.destroyEvent.fire();}}};YAHOO.widget.Calendar=F;YAHOO.widget.Calendar_Core=YAHOO.widget.Calendar;YAHOO.widget.Cal_Core=YAHOO.widget.Calendar;})();(function(){var D=YAHOO.util.Dom,F=YAHOO.widget.DateMath,A=YAHOO.util.Event,E=YAHOO.lang,G=YAHOO.widget.Calendar;function B(J,H,I){if(arguments.length>0){this.init.apply(this,arguments);}}B._DEFAULT_CONFIG=G._DEFAULT_CONFIG;B._DEFAULT_CONFIG.PAGES={key:"pages",value:2};var C=B._DEFAULT_CONFIG;B.prototype={init:function(K,I,J){var H=this._parseArgs(arguments);K=H.id;I=H.container;J=H.config;this.oDomContainer=D.get(I);if(!this.oDomContainer.id){this.oDomContainer.id=D.generateId();}if(!K){K=this.oDomContainer.id+"_t";}this.id=K;this.containerId=this.oDomContainer.id;this.initEvents();this.initStyles();this.pages=[];D.addClass(this.oDomContainer,B.CSS_CONTAINER);D.addClass(this.oDomContainer,B.CSS_MULTI_UP);this.cfg=new !
 YAHOO.util.Config(this);this.Options={};this.Locale={};this.se!
 tupConfi
g();if(J){this.cfg.applyConfig(J,true);}this.cfg.fireQueue();if(YAHOO.env.ua.opera){this.renderEvent.subscribe(this._fixWidth,this,true);this.showEvent.subscribe(this._fixWidth,this,true);}},setupConfig:function(){var H=this.cfg;H.addProperty(C.PAGES.key,{value:C.PAGES.value,validator:H.checkNumber,handler:this.configPages});H.addProperty(C.PAGEDATE.key,{value:new Date(),handler:this.configPageDate});H.addProperty(C.SELECTED.key,{value:[],handler:this.configSelected});H.addProperty(C.TITLE.key,{value:C.TITLE.value,handler:this.configTitle});H.addProperty(C.CLOSE.key,{value:C.CLOSE.value,handler:this.configClose});H.addProperty(C.IFRAME.key,{value:C.IFRAME.value,handler:this.configIframe,validator:H.checkBoolean});H.addProperty(C.MINDATE.key,{value:C.MINDATE.value,handler:this.delegateConfig});H.addProperty(C.MAXDATE.key,{value:C.MAXDATE.value,handler:this.delegateConfig});H.addProperty(C.MULTI_SELECT.key,{value:C.MULTI_SELECT.value,handler:this.delegateConfig,validator:H.che!
 ckBoolean});H.addProperty(C.START_WEEKDAY.key,{value:C.START_WEEKDAY.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.SHOW_WEEKDAYS.key,{value:C.SHOW_WEEKDAYS.value,handler:this.delegateConfig,validator:H.checkBoolean});H.addProperty(C.SHOW_WEEK_HEADER.key,{value:C.SHOW_WEEK_HEADER.value,handler:this.delegateConfig,validator:H.checkBoolean});H.addProperty(C.SHOW_WEEK_FOOTER.key,{value:C.SHOW_WEEK_FOOTER.value,handler:this.delegateConfig,validator:H.checkBoolean});H.addProperty(C.HIDE_BLANK_WEEKS.key,{value:C.HIDE_BLANK_WEEKS.value,handler:this.delegateConfig,validator:H.checkBoolean});H.addProperty(C.NAV_ARROW_LEFT.key,{value:C.NAV_ARROW_LEFT.value,handler:this.delegateConfig});H.addProperty(C.NAV_ARROW_RIGHT.key,{value:C.NAV_ARROW_RIGHT.value,handler:this.delegateConfig});H.addProperty(C.MONTHS_SHORT.key,{value:C.MONTHS_SHORT.value,handler:this.delegateConfig});H.addProperty(C.MONTHS_LONG.key,{value:C.MONTHS_LONG.value,handler:this.delegateConfig!
 });H.addProperty(C.WEEKDAYS_1CHAR.key,{value:C.WEEKDAYS_1CHAR.!
 value,ha
ndler:this.delegateConfig});H.addProperty(C.WEEKDAYS_SHORT.key,{value:C.WEEKDAYS_SHORT.value,handler:this.delegateConfig});H.addProperty(C.WEEKDAYS_MEDIUM.key,{value:C.WEEKDAYS_MEDIUM.value,handler:this.delegateConfig});H.addProperty(C.WEEKDAYS_LONG.key,{value:C.WEEKDAYS_LONG.value,handler:this.delegateConfig});H.addProperty(C.LOCALE_MONTHS.key,{value:C.LOCALE_MONTHS.value,handler:this.delegateConfig});H.addProperty(C.LOCALE_WEEKDAYS.key,{value:C.LOCALE_WEEKDAYS.value,handler:this.delegateConfig});H.addProperty(C.DATE_DELIMITER.key,{value:C.DATE_DELIMITER.value,handler:this.delegateConfig});H.addProperty(C.DATE_FIELD_DELIMITER.key,{value:C.DATE_FIELD_DELIMITER.value,handler:this.delegateConfig});H.addProperty(C.DATE_RANGE_DELIMITER.key,{value:C.DATE_RANGE_DELIMITER.value,handler:this.delegateConfig});H.addProperty(C.MY_MONTH_POSITION.key,{value:C.MY_MONTH_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MY_YEAR_POSITION.key,{value:C.MY_YEA!
 R_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MD_MONTH_POSITION.key,{value:C.MD_MONTH_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MD_DAY_POSITION.key,{value:C.MD_DAY_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MDY_MONTH_POSITION.key,{value:C.MDY_MONTH_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MDY_DAY_POSITION.key,{value:C.MDY_DAY_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MDY_YEAR_POSITION.key,{value:C.MDY_YEAR_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MY_LABEL_MONTH_POSITION.key,{value:C.MY_LABEL_MONTH_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});H.addProperty(C.MY_LABEL_YEAR_POSITION.key,{value:C.MY_LABEL_YEAR_POSITION.value,handler:this.delegateConfig,validator:H.checkNumber});
-H.addProperty(C.MY_LABEL_MONTH_SUFFIX.key,{value:C.MY_LABEL_MONTH_SUFFIX.value,handler:this.delegateConfig});H.addProperty(C.MY_LABEL_YEAR_SUFFIX.key,{value:C.MY_LABEL_YEAR_SUFFIX.value,handler:this.delegateConfig});H.addProperty(C.NAV.key,{value:C.NAV.value,handler:this.configNavigator});H.addProperty(C.STRINGS.key,{value:C.STRINGS.value,handler:this.configStrings,validator:function(I){return E.isObject(I);},supercedes:C.STRINGS.supercedes});},initEvents:function(){var J=this,L="Event",M=YAHOO.util.CustomEvent;var I=function(O,R,N){for(var Q=0;Q<J.pages.length;++Q){var P=J.pages[Q];P[this.type+L].subscribe(O,R,N);}};var H=function(N,Q){for(var P=0;P<J.pages.length;++P){var O=J.pages[P];O[this.type+L].unsubscribe(N,Q);}};var K=G._EVENT_TYPES;J.beforeSelectEvent=new M(K.BEFORE_SELECT);J.beforeSelectEvent.subscribe=I;J.beforeSelectEvent.unsubscribe=H;J.selectEvent=new M(K.SELECT);J.selectEvent.subscribe=I;J.selectEvent.unsubscribe=H;J.beforeDeselectEvent=new M(K.BEFORE_DESELE!
 CT);J.beforeDeselectEvent.subscribe=I;J.beforeDeselectEvent.unsubscribe=H;J.deselectEvent=new M(K.DESELECT);J.deselectEvent.subscribe=I;J.deselectEvent.unsubscribe=H;J.changePageEvent=new M(K.CHANGE_PAGE);J.changePageEvent.subscribe=I;J.changePageEvent.unsubscribe=H;J.beforeRenderEvent=new M(K.BEFORE_RENDER);J.beforeRenderEvent.subscribe=I;J.beforeRenderEvent.unsubscribe=H;J.renderEvent=new M(K.RENDER);J.renderEvent.subscribe=I;J.renderEvent.unsubscribe=H;J.resetEvent=new M(K.RESET);J.resetEvent.subscribe=I;J.resetEvent.unsubscribe=H;J.clearEvent=new M(K.CLEAR);J.clearEvent.subscribe=I;J.clearEvent.unsubscribe=H;J.beforeShowEvent=new M(K.BEFORE_SHOW);J.showEvent=new M(K.SHOW);J.beforeHideEvent=new M(K.BEFORE_HIDE);J.hideEvent=new M(K.HIDE);J.beforeShowNavEvent=new M(K.BEFORE_SHOW_NAV);J.showNavEvent=new M(K.SHOW_NAV);J.beforeHideNavEvent=new M(K.BEFORE_HIDE_NAV);J.hideNavEvent=new M(K.HIDE_NAV);J.beforeRenderNavEvent=new M(K.BEFORE_RENDER_NAV);J.renderNavEvent=new M(K.RENDE!
 R_NAV);J.beforeDestroyEvent=new M(K.BEFORE_DESTROY);J.destroyE!
 vent=new
 M(K.DESTROY);},configPages:function(R,Q,N){var L=Q[0],J=C.PAGEDATE.key,V="_",S="groupcal",U="first-of-type",K="last-of-type";for(var I=0;I<L;++I){var T=this.id+V+I,P=this.containerId+V+I,O=this.cfg.getConfig();O.close=false;O.title=false;O.navigator=null;var H=this.constructChild(T,P,O);var M=H.cfg.getProperty(J);this._setMonthOnDate(M,M.getMonth()+I);H.cfg.setProperty(J,M);D.removeClass(H.oDomContainer,this.Style.CSS_SINGLE);D.addClass(H.oDomContainer,S);if(I===0){D.addClass(H.oDomContainer,U);}if(I==(L-1)){D.addClass(H.oDomContainer,K);}H.parent=this;H.index=I;this.pages[this.pages.length]=H;}},configPageDate:function(O,N,L){var J=N[0],M;var K=C.PAGEDATE.key;for(var I=0;I<this.pages.length;++I){var H=this.pages[I];if(I===0){M=H._parsePageDate(J);H.cfg.setProperty(K,M);}else{var P=new Date(M);this._setMonthOnDate(P,P.getMonth()+I);H.cfg.setProperty(K,P);}}},configSelected:function(J,H,L){var K=C.SELECTED.key;this.delegateConfig(J,H,L);var I=(this.pages.length>0)?this.pages!
 [0].cfg.getProperty(K):[];this.cfg.setProperty(K,I,true);},delegateConfig:function(I,H,L){var M=H[0];var K;for(var J=0;J<this.pages.length;J++){K=this.pages[J];K.cfg.setProperty(I,M);}},setChildFunction:function(K,I){var H=this.cfg.getProperty(C.PAGES.key);for(var J=0;J<H;++J){this.pages[J][K]=I;}},callChildFunction:function(M,I){var H=this.cfg.getProperty(C.PAGES.key);for(var L=0;L<H;++L){var K=this.pages[L];if(K[M]){var J=K[M];J.call(K,I);}}},constructChild:function(K,I,J){var H=document.getElementById(I);if(!H){H=document.createElement("div");H.id=I;this.oDomContainer.appendChild(H);}return new G(K,I,J);},setMonth:function(L){L=parseInt(L,10);var M;var I=C.PAGEDATE.key;for(var K=0;K<this.pages.length;++K){var J=this.pages[K];var H=J.cfg.getProperty(I);if(K===0){M=H.getFullYear();}else{H.setFullYear(M);}this._setMonthOnDate(H,L+K);J.cfg.setProperty(I,H);}},setYear:function(J){var I=C.PAGEDATE.key;J=parseInt(J,10);for(var L=0;L<this.pages.length;++L){var K=this.pages[L];va!
 r H=K.cfg.getProperty(I);if((H.getMonth()+1)==1&&L>0){J+=1;}K.!
 setYear(
J);}},render:function(){this.renderHeader();for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.render();}this.renderFooter();},select:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.select(H);}return this.getSelectedDates();},selectCell:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.selectCell(H);}return this.getSelectedDates();},deselect:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.deselect(H);}return this.getSelectedDates();},deselectAll:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.deselectAll();}return this.getSelectedDates();},deselectCell:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.deselectCell(H);}return this.getSelectedDates();},reset:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.reset();}},clear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.clear();}this.cfg.setProperty(C.SELECTED.key,[]);!
 this.cfg.setProperty(C.PAGEDATE.key,new Date(this.pages[0].today.getTime()));this.render();},nextMonth:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.nextMonth();}},previousMonth:function(){for(var I=this.pages.length-1;I>=0;--I){var H=this.pages[I];H.previousMonth();}},nextYear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.nextYear();}},previousYear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.previousYear();}},getSelectedDates:function(){var J=[];var I=this.cfg.getProperty(C.SELECTED.key);for(var L=0;L<I.length;++L){var K=I[L];var H=F.getDate(K[0],K[1]-1,K[2]);J.push(H);}J.sort(function(N,M){return N-M;});return J;},addRenderer:function(H,I){for(var K=0;K<this.pages.length;++K){var J=this.pages[K];J.addRenderer(H,I);}},addMonthRenderer:function(K,H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.addMonthRenderer(K,H);}},addWeekdayRenderer:function(I,H){for(var K=0;
-K<this.pages.length;++K){var J=this.pages[K];J.addWeekdayRenderer(I,H);}},removeRenderers:function(){this.callChildFunction("removeRenderers");},renderHeader:function(){},renderFooter:function(){},addMonths:function(H){this.callChildFunction("addMonths",H);},subtractMonths:function(H){this.callChildFunction("subtractMonths",H);},addYears:function(H){this.callChildFunction("addYears",H);},subtractYears:function(H){this.callChildFunction("subtractYears",H);},getCalendarPage:function(K){var M=null;if(K){var N=K.getFullYear(),J=K.getMonth();var I=this.pages;for(var L=0;L<I.length;++L){var H=I[L].cfg.getProperty("pagedate");if(H.getFullYear()===N&&H.getMonth()===J){M=I[L];break;}}}return M;},_setMonthOnDate:function(I,J){if(YAHOO.env.ua.webkit&&YAHOO.env.ua.webkit<420&&(J<0||J>11)){var H=F.add(I,F.MONTH,J-I.getMonth());I.setTime(H.getTime());}else{I.setMonth(J);}},_fixWidth:function(){var H=0;for(var J=0;J<this.pages.length;++J){var I=this.pages[J];H+=I.oDomContainer.offsetWidth!
 ;}if(H>0){this.oDomContainer.style.width=H+"px";}},toString:function(){return"CalendarGroup "+this.id;},destroy:function(){if(this.beforeDestroyEvent.fire()){var J=this;if(J.navigator){J.navigator.destroy();}if(J.cfg){J.cfg.destroy();}A.purgeElement(J.oDomContainer,true);D.removeClass(J.oDomContainer,B.CSS_CONTAINER);D.removeClass(J.oDomContainer,B.CSS_MULTI_UP);for(var I=0,H=J.pages.length;I<H;I++){J.pages[I].destroy();J.pages[I]=null;}J.oDomContainer.innerHTML="";J.oDomContainer=null;this.destroyEvent.fire();}}};B.CSS_CONTAINER="yui-calcontainer";B.CSS_MULTI_UP="multi";B.CSS_2UPTITLE="title";B.CSS_2UPCLOSE="close-icon";YAHOO.lang.augmentProto(B,G,"buildDayLabel","buildMonthLabel","renderOutOfBoundsDate","renderRowHeader","renderRowFooter","renderCellDefault","styleCellDefault","renderCellStyleHighlight1","renderCellStyleHighlight2","renderCellStyleHighlight3","renderCellStyleHighlight4","renderCellStyleToday","renderCellStyleSelected","renderCellNotThisMonth","renderBodyC!
 ellRestricted","initStyles","configTitle","configClose","confi!
 gIframe"
,"configStrings","configNavigator","createTitleBar","createCloseButton","removeTitleBar","removeCloseButton","hide","show","toDate","_toDate","_parseArgs","browser");YAHOO.widget.CalGrp=B;YAHOO.widget.CalendarGroup=B;YAHOO.widget.Calendar2up=function(J,H,I){this.init(J,H,I);};YAHOO.extend(YAHOO.widget.Calendar2up,B);YAHOO.widget.Cal2up=YAHOO.widget.Calendar2up;})();YAHOO.widget.CalendarNavigator=function(A){this.init(A);};(function(){var A=YAHOO.widget.CalendarNavigator;A.CLASSES={NAV:"yui-cal-nav",NAV_VISIBLE:"yui-cal-nav-visible",MASK:"yui-cal-nav-mask",YEAR:"yui-cal-nav-y",MONTH:"yui-cal-nav-m",BUTTONS:"yui-cal-nav-b",BUTTON:"yui-cal-nav-btn",ERROR:"yui-cal-nav-e",YEAR_CTRL:"yui-cal-nav-yc",MONTH_CTRL:"yui-cal-nav-mc",INVALID:"yui-invalid",DEFAULT:"yui-default"};A._DEFAULT_CFG={strings:{month:"Month",year:"Year",submit:"Okay",cancel:"Cancel",invalidYear:"Year needs to be a number"},monthFormat:YAHOO.widget.Calendar.LONG,initialFocus:"year"};A.ID_SUFFIX="_nav";A.MONTH_SUFF!
 IX="_month";A.YEAR_SUFFIX="_year";A.ERROR_SUFFIX="_error";A.CANCEL_SUFFIX="_cancel";A.SUBMIT_SUFFIX="_submit";A.YR_MAX_DIGITS=4;A.YR_MINOR_INC=1;A.YR_MAJOR_INC=10;A.UPDATE_DELAY=50;A.YR_PATTERN=/^\d+$/;A.TRIM=/^\s*(.*?)\s*$/;})();YAHOO.widget.CalendarNavigator.prototype={id:null,cal:null,navEl:null,maskEl:null,yearEl:null,monthEl:null,errorEl:null,submitEl:null,cancelEl:null,firstCtrl:null,lastCtrl:null,_doc:null,_year:null,_month:0,__rendered:false,init:function(A){var C=A.oDomContainer;this.cal=A;this.id=C.id+YAHOO.widget.CalendarNavigator.ID_SUFFIX;this._doc=C.ownerDocument;var B=YAHOO.env.ua.ie;this.__isIEQuirks=(B&&((B<=6)||(B===7&&this._doc.compatMode=="BackCompat")));},show:function(){var A=YAHOO.widget.CalendarNavigator.CLASSES;if(this.cal.beforeShowNavEvent.fire()){if(!this.__rendered){this.render();}this.clearErrors();this._updateMonthUI();this._updateYearUI();this._show(this.navEl,true);this.setInitialFocus();this.showMask();YAHOO.util.Dom.addClass(this.cal.oDomC!
 ontainer,A.NAV_VISIBLE);this.cal.showNavEvent.fire();}},hide:f!
 unction(
){var A=YAHOO.widget.CalendarNavigator.CLASSES;if(this.cal.beforeHideNavEvent.fire()){this._show(this.navEl,false);this.hideMask();YAHOO.util.Dom.removeClass(this.cal.oDomContainer,A.NAV_VISIBLE);this.cal.hideNavEvent.fire();}},showMask:function(){this._show(this.maskEl,true);if(this.__isIEQuirks){this._syncMask();}},hideMask:function(){this._show(this.maskEl,false);},getMonth:function(){return this._month;},getYear:function(){return this._year;},setMonth:function(A){if(A>=0&&A<12){this._month=A;}this._updateMonthUI();},setYear:function(B){var A=YAHOO.widget.CalendarNavigator.YR_PATTERN;if(YAHOO.lang.isNumber(B)&&A.test(B+"")){this._year=B;}this._updateYearUI();},render:function(){this.cal.beforeRenderNavEvent.fire();if(!this.__rendered){this.createNav();this.createMask();this.applyListeners();this.__rendered=true;}this.cal.renderNavEvent.fire();},createNav:function(){var B=YAHOO.widget.CalendarNavigator;var C=this._doc;var D=C.createElement("div");D.className=B.CLASSES.NAV;!
 var A=this.renderNavContents([]);D.innerHTML=A.join("");this.cal.oDomContainer.appendChild(D);this.navEl=D;this.yearEl=C.getElementById(this.id+B.YEAR_SUFFIX);this.monthEl=C.getElementById(this.id+B.MONTH_SUFFIX);this.errorEl=C.getElementById(this.id+B.ERROR_SUFFIX);this.submitEl=C.getElementById(this.id+B.SUBMIT_SUFFIX);this.cancelEl=C.getElementById(this.id+B.CANCEL_SUFFIX);if(YAHOO.env.ua.gecko&&this.yearEl&&this.yearEl.type=="text"){this.yearEl.setAttribute("autocomplete","off");}this._setFirstLastElements();},createMask:function(){var B=YAHOO.widget.CalendarNavigator.CLASSES;var A=this._doc.createElement("div");A.className=B.MASK;this.cal.oDomContainer.appendChild(A);this.maskEl=A;},_syncMask:function(){var B=this.cal.oDomContainer;if(B&&this.maskEl){var A=YAHOO.util.Dom.getRegion(B);YAHOO.util.Dom.setStyle(this.maskEl,"width",A.right-A.left+"px");YAHOO.util.Dom.setStyle(this.maskEl,"height",A.bottom-A.top+"px");
+H.addProperty(C.MY_LABEL_MONTH_SUFFIX.key,{value:C.MY_LABEL_MONTH_SUFFIX.value,handler:this.delegateConfig});H.addProperty(C.MY_LABEL_YEAR_SUFFIX.key,{value:C.MY_LABEL_YEAR_SUFFIX.value,handler:this.delegateConfig});H.addProperty(C.NAV.key,{value:C.NAV.value,handler:this.configNavigator});H.addProperty(C.STRINGS.key,{value:C.STRINGS.value,handler:this.configStrings,validator:function(I){return E.isObject(I);},supercedes:C.STRINGS.supercedes});},initEvents:function(){var J=this,L="Event",M=YAHOO.util.CustomEvent;var I=function(O,R,N){for(var Q=0;Q<J.pages.length;++Q){var P=J.pages[Q];P[this.type+L].subscribe(O,R,N);}};var H=function(N,Q){for(var P=0;P<J.pages.length;++P){var O=J.pages[P];O[this.type+L].unsubscribe(N,Q);}};var K=G._EVENT_TYPES;J.beforeSelectEvent=new M(K.BEFORE_SELECT);J.beforeSelectEvent.subscribe=I;J.beforeSelectEvent.unsubscribe=H;J.selectEvent=new M(K.SELECT);J.selectEvent.subscribe=I;J.selectEvent.unsubscribe=H;J.beforeDeselectEvent=new M(K.BEFORE_DESELE!
 CT);J.beforeDeselectEvent.subscribe=I;J.beforeDeselectEvent.unsubscribe=H;J.deselectEvent=new M(K.DESELECT);J.deselectEvent.subscribe=I;J.deselectEvent.unsubscribe=H;J.changePageEvent=new M(K.CHANGE_PAGE);J.changePageEvent.subscribe=I;J.changePageEvent.unsubscribe=H;J.beforeRenderEvent=new M(K.BEFORE_RENDER);J.beforeRenderEvent.subscribe=I;J.beforeRenderEvent.unsubscribe=H;J.renderEvent=new M(K.RENDER);J.renderEvent.subscribe=I;J.renderEvent.unsubscribe=H;J.resetEvent=new M(K.RESET);J.resetEvent.subscribe=I;J.resetEvent.unsubscribe=H;J.clearEvent=new M(K.CLEAR);J.clearEvent.subscribe=I;J.clearEvent.unsubscribe=H;J.beforeShowEvent=new M(K.BEFORE_SHOW);J.showEvent=new M(K.SHOW);J.beforeHideEvent=new M(K.BEFORE_HIDE);J.hideEvent=new M(K.HIDE);J.beforeShowNavEvent=new M(K.BEFORE_SHOW_NAV);J.showNavEvent=new M(K.SHOW_NAV);J.beforeHideNavEvent=new M(K.BEFORE_HIDE_NAV);J.hideNavEvent=new M(K.HIDE_NAV);J.beforeRenderNavEvent=new M(K.BEFORE_RENDER_NAV);J.renderNavEvent=new M(K.RENDE!
 R_NAV);J.beforeDestroyEvent=new M(K.BEFORE_DESTROY);J.destroyE!
 vent=new
 M(K.DESTROY);},configPages:function(T,R,N){var L=R[0],J=C.PAGEDATE.key,W="_",M,O=null,S="groupcal",V="first-of-type",K="last-of-type";for(var I=0;I<L;++I){var U=this.id+W+I,Q=this.containerId+W+I,P=this.cfg.getConfig();P.close=false;P.title=false;P.navigator=null;if(I>0){M=new Date(O);this._setMonthOnDate(M,M.getMonth()+I);P.pageDate=M;}var H=this.constructChild(U,Q,P);D.removeClass(H.oDomContainer,this.Style.CSS_SINGLE);D.addClass(H.oDomContainer,S);if(I===0){O=H.cfg.getProperty(J);D.addClass(H.oDomContainer,V);}if(I==(L-1)){D.addClass(H.oDomContainer,K);}H.parent=this;H.index=I;this.pages[this.pages.length]=H;}},configPageDate:function(O,N,L){var J=N[0],M;var K=C.PAGEDATE.key;for(var I=0;I<this.pages.length;++I){var H=this.pages[I];if(I===0){M=H._parsePageDate(J);H.cfg.setProperty(K,M);}else{var P=new Date(M);this._setMonthOnDate(P,P.getMonth()+I);H.cfg.setProperty(K,P);}}},configSelected:function(J,H,L){var K=C.SELECTED.key;this.delegateConfig(J,H,L);var I=(this.pages.le!
 ngth>0)?this.pages[0].cfg.getProperty(K):[];this.cfg.setProperty(K,I,true);},delegateConfig:function(I,H,L){var M=H[0];var K;for(var J=0;J<this.pages.length;J++){K=this.pages[J];K.cfg.setProperty(I,M);}},setChildFunction:function(K,I){var H=this.cfg.getProperty(C.PAGES.key);for(var J=0;J<H;++J){this.pages[J][K]=I;}},callChildFunction:function(M,I){var H=this.cfg.getProperty(C.PAGES.key);for(var L=0;L<H;++L){var K=this.pages[L];if(K[M]){var J=K[M];J.call(K,I);}}},constructChild:function(K,I,J){var H=document.getElementById(I);if(!H){H=document.createElement("div");H.id=I;this.oDomContainer.appendChild(H);}return new G(K,I,J);},setMonth:function(L){L=parseInt(L,10);var M;var I=C.PAGEDATE.key;for(var K=0;K<this.pages.length;++K){var J=this.pages[K];var H=J.cfg.getProperty(I);if(K===0){M=H.getFullYear();}else{H.setFullYear(M);}this._setMonthOnDate(H,L+K);J.cfg.setProperty(I,H);}},setYear:function(J){var I=C.PAGEDATE.key;J=parseInt(J,10);for(var L=0;L<this.pages.length;++L){var !
 K=this.pages[L];var H=K.cfg.getProperty(I);if((H.getMonth()+1)!
 ==1&&L>0
){J+=1;}K.setYear(J);}},render:function(){this.renderHeader();for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.render();}this.renderFooter();},select:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.select(H);}return this.getSelectedDates();},selectCell:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.selectCell(H);}return this.getSelectedDates();},deselect:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.deselect(H);}return this.getSelectedDates();},deselectAll:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.deselectAll();}return this.getSelectedDates();},deselectCell:function(H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.deselectCell(H);}return this.getSelectedDates();},reset:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.reset();}},clear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.clear();}this.cfg.setProperty(C!
 .SELECTED.key,[]);this.cfg.setProperty(C.PAGEDATE.key,new Date(this.pages[0].today.getTime()));this.render();},nextMonth:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.nextMonth();}},previousMonth:function(){for(var I=this.pages.length-1;I>=0;--I){var H=this.pages[I];H.previousMonth();}},nextYear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.nextYear();}},previousYear:function(){for(var I=0;I<this.pages.length;++I){var H=this.pages[I];H.previousYear();}},getSelectedDates:function(){var J=[];var I=this.cfg.getProperty(C.SELECTED.key);for(var L=0;L<I.length;++L){var K=I[L];var H=F.getDate(K[0],K[1]-1,K[2]);J.push(H);}J.sort(function(N,M){return N-M;});return J;},addRenderer:function(H,I){for(var K=0;K<this.pages.length;++K){var J=this.pages[K];J.addRenderer(H,I);}},addMonthRenderer:function(K,H){for(var J=0;J<this.pages.length;++J){var I=this.pages[J];I.addMonthRenderer(K,H);
+}},addWeekdayRenderer:function(I,H){for(var K=0;K<this.pages.length;++K){var J=this.pages[K];J.addWeekdayRenderer(I,H);}},removeRenderers:function(){this.callChildFunction("removeRenderers");},renderHeader:function(){},renderFooter:function(){},addMonths:function(H){this.callChildFunction("addMonths",H);},subtractMonths:function(H){this.callChildFunction("subtractMonths",H);},addYears:function(H){this.callChildFunction("addYears",H);},subtractYears:function(H){this.callChildFunction("subtractYears",H);},getCalendarPage:function(K){var M=null;if(K){var N=K.getFullYear(),J=K.getMonth();var I=this.pages;for(var L=0;L<I.length;++L){var H=I[L].cfg.getProperty("pagedate");if(H.getFullYear()===N&&H.getMonth()===J){M=I[L];break;}}}return M;},_setMonthOnDate:function(I,J){if(YAHOO.env.ua.webkit&&YAHOO.env.ua.webkit<420&&(J<0||J>11)){var H=F.add(I,F.MONTH,J-I.getMonth());I.setTime(H.getTime());}else{I.setMonth(J);}},_fixWidth:function(){var H=0;for(var J=0;J<this.pages.length;++J){va!
 r I=this.pages[J];H+=I.oDomContainer.offsetWidth;}if(H>0){this.oDomContainer.style.width=H+"px";}},toString:function(){return"CalendarGroup "+this.id;},destroy:function(){if(this.beforeDestroyEvent.fire()){var J=this;if(J.navigator){J.navigator.destroy();}if(J.cfg){J.cfg.destroy();}A.purgeElement(J.oDomContainer,true);D.removeClass(J.oDomContainer,B.CSS_CONTAINER);D.removeClass(J.oDomContainer,B.CSS_MULTI_UP);for(var I=0,H=J.pages.length;I<H;I++){J.pages[I].destroy();J.pages[I]=null;}J.oDomContainer.innerHTML="";J.oDomContainer=null;this.destroyEvent.fire();}}};B.CSS_CONTAINER="yui-calcontainer";B.CSS_MULTI_UP="multi";B.CSS_2UPTITLE="title";B.CSS_2UPCLOSE="close-icon";YAHOO.lang.augmentProto(B,G,"buildDayLabel","buildMonthLabel","renderOutOfBoundsDate","renderRowHeader","renderRowFooter","renderCellDefault","styleCellDefault","renderCellStyleHighlight1","renderCellStyleHighlight2","renderCellStyleHighlight3","renderCellStyleHighlight4","renderCellStyleToday","renderCellStyl!
 eSelected","renderCellNotThisMonth","renderBodyCellRestricted"!
 ,"initSt
yles","configTitle","configClose","configIframe","configStrings","configNavigator","createTitleBar","createCloseButton","removeTitleBar","removeCloseButton","hide","show","toDate","_toDate","_parseArgs","browser");YAHOO.widget.CalGrp=B;YAHOO.widget.CalendarGroup=B;YAHOO.widget.Calendar2up=function(J,H,I){this.init(J,H,I);};YAHOO.extend(YAHOO.widget.Calendar2up,B);YAHOO.widget.Cal2up=YAHOO.widget.Calendar2up;})();YAHOO.widget.CalendarNavigator=function(A){this.init(A);};(function(){var A=YAHOO.widget.CalendarNavigator;A.CLASSES={NAV:"yui-cal-nav",NAV_VISIBLE:"yui-cal-nav-visible",MASK:"yui-cal-nav-mask",YEAR:"yui-cal-nav-y",MONTH:"yui-cal-nav-m",BUTTONS:"yui-cal-nav-b",BUTTON:"yui-cal-nav-btn",ERROR:"yui-cal-nav-e",YEAR_CTRL:"yui-cal-nav-yc",MONTH_CTRL:"yui-cal-nav-mc",INVALID:"yui-invalid",DEFAULT:"yui-default"};A._DEFAULT_CFG={strings:{month:"Month",year:"Year",submit:"Okay",cancel:"Cancel",invalidYear:"Year needs to be a number"},monthFormat:YAHOO.widget.Calendar.LONG,init!
 ialFocus:"year"};A.ID_SUFFIX="_nav";A.MONTH_SUFFIX="_month";A.YEAR_SUFFIX="_year";A.ERROR_SUFFIX="_error";A.CANCEL_SUFFIX="_cancel";A.SUBMIT_SUFFIX="_submit";A.YR_MAX_DIGITS=4;A.YR_MINOR_INC=1;A.YR_MAJOR_INC=10;A.UPDATE_DELAY=50;A.YR_PATTERN=/^\d+$/;A.TRIM=/^\s*(.*?)\s*$/;})();YAHOO.widget.CalendarNavigator.prototype={id:null,cal:null,navEl:null,maskEl:null,yearEl:null,monthEl:null,errorEl:null,submitEl:null,cancelEl:null,firstCtrl:null,lastCtrl:null,_doc:null,_year:null,_month:0,__rendered:false,init:function(A){var C=A.oDomContainer;this.cal=A;this.id=C.id+YAHOO.widget.CalendarNavigator.ID_SUFFIX;this._doc=C.ownerDocument;var B=YAHOO.env.ua.ie;this.__isIEQuirks=(B&&((B<=6)||(this._doc.compatMode=="BackCompat")));},show:function(){var A=YAHOO.widget.CalendarNavigator.CLASSES;if(this.cal.beforeShowNavEvent.fire()){if(!this.__rendered){this.render();}this.clearErrors();this._updateMonthUI();this._updateYearUI();this._show(this.navEl,true);this.setInitialFocus();this.showMask!
 ();YAHOO.util.Dom.addClass(this.cal.oDomContainer,A.NAV_VISIBL!
 E);this.
cal.showNavEvent.fire();}},hide:function(){var A=YAHOO.widget.CalendarNavigator.CLASSES;if(this.cal.beforeHideNavEvent.fire()){this._show(this.navEl,false);this.hideMask();YAHOO.util.Dom.removeClass(this.cal.oDomContainer,A.NAV_VISIBLE);this.cal.hideNavEvent.fire();}},showMask:function(){this._show(this.maskEl,true);if(this.__isIEQuirks){this._syncMask();}},hideMask:function(){this._show(this.maskEl,false);},getMonth:function(){return this._month;},getYear:function(){return this._year;},setMonth:function(A){if(A>=0&&A<12){this._month=A;}this._updateMonthUI();},setYear:function(B){var A=YAHOO.widget.CalendarNavigator.YR_PATTERN;if(YAHOO.lang.isNumber(B)&&A.test(B+"")){this._year=B;}this._updateYearUI();},render:function(){this.cal.beforeRenderNavEvent.fire();if(!this.__rendered){this.createNav();this.createMask();this.applyListeners();this.__rendered=true;}this.cal.renderNavEvent.fire();},createNav:function(){var B=YAHOO.widget.CalendarNavigator;var C=this._doc;var D=C.create!
 Element("div");D.className=B.CLASSES.NAV;var A=this.renderNavContents([]);D.innerHTML=A.join("");this.cal.oDomContainer.appendChild(D);this.navEl=D;this.yearEl=C.getElementById(this.id+B.YEAR_SUFFIX);this.monthEl=C.getElementById(this.id+B.MONTH_SUFFIX);this.errorEl=C.getElementById(this.id+B.ERROR_SUFFIX);this.submitEl=C.getElementById(this.id+B.SUBMIT_SUFFIX);this.cancelEl=C.getElementById(this.id+B.CANCEL_SUFFIX);if(YAHOO.env.ua.gecko&&this.yearEl&&this.yearEl.type=="text"){this.yearEl.setAttribute("autocomplete","off");}this._setFirstLastElements();},createMask:function(){var B=YAHOO.widget.CalendarNavigator.CLASSES;var A=this._doc.createElement("div");A.className=B.MASK;this.cal.oDomContainer.appendChild(A);this.maskEl=A;},_syncMask:function(){var B=this.cal.oDomContainer;if(B&&this.maskEl){var A=YAHOO.util.Dom.getRegion(B);YAHOO.util.Dom.setStyle(this.maskEl,"width",A.right-A.left+"px");YAHOO.util.Dom.setStyle(this.maskEl,"height",A.bottom-A.top+"px");
 }},renderNavContents:function(A){var D=YAHOO.widget.CalendarNavigator,E=D.CLASSES,B=A;B[B.length]='<div class="'+E.MONTH+'">';this.renderMonth(B);B[B.length]="</div>";B[B.length]='<div class="'+E.YEAR+'">';this.renderYear(B);B[B.length]="</div>";B[B.length]='<div class="'+E.BUTTONS+'">';this.renderButtons(B);B[B.length]="</div>";B[B.length]='<div class="'+E.ERROR+'" id="'+this.id+D.ERROR_SUFFIX+'"></div>';return B;},renderMonth:function(D){var G=YAHOO.widget.CalendarNavigator,H=G.CLASSES;var I=this.id+G.MONTH_SUFFIX,F=this.__getCfg("monthFormat"),A=this.cal.cfg.getProperty((F==YAHOO.widget.Calendar.SHORT)?"MONTHS_SHORT":"MONTHS_LONG"),E=D;if(A&&A.length>0){E[E.length]='<label for="'+I+'">';E[E.length]=this.__getCfg("month",true);E[E.length]="</label>";E[E.length]='<select name="'+I+'" id="'+I+'" class="'+H.MONTH_CTRL+'">';for(var B=0;B<A.length;B++){E[E.length]='<option value="'+B+'">';E[E.length]=A[B];E[E.length]="</option>";}E[E.length]="</select>";}return E;},renderYear:!
 function(B){var E=YAHOO.widget.CalendarNavigator,F=E.CLASSES;var G=this.id+E.YEAR_SUFFIX,A=E.YR_MAX_DIGITS,D=B;D[D.length]='<label for="'+G+'">';D[D.length]=this.__getCfg("year",true);D[D.length]="</label>";D[D.length]='<input type="text" name="'+G+'" id="'+G+'" class="'+F.YEAR_CTRL+'" maxlength="'+A+'"/>';return D;},renderButtons:function(A){var D=YAHOO.widget.CalendarNavigator.CLASSES;var B=A;B[B.length]='<span class="'+D.BUTTON+" "+D.DEFAULT+'">';B[B.length]='<button type="button" id="'+this.id+"_submit"+'">';B[B.length]=this.__getCfg("submit",true);B[B.length]="</button>";B[B.length]="</span>";B[B.length]='<span class="'+D.BUTTON+'">';B[B.length]='<button type="button" id="'+this.id+"_cancel"+'">';B[B.length]=this.__getCfg("cancel",true);B[B.length]="</button>";B[B.length]="</span>";return B;},applyListeners:function(){var B=YAHOO.util.Event;function A(){if(this.validate()){this.setYear(this._getYearFromUI());}}function C(){this.setMonth(this._getMonthFromUI());}B.on(th!
 is.submitEl,"click",this.submit,this,true);B.on(this.cancelEl,!
 "click",
this.cancel,this,true);B.on(this.yearEl,"blur",A,this,true);B.on(this.monthEl,"change",C,this,true);if(this.__isIEQuirks){YAHOO.util.Event.on(this.cal.oDomContainer,"resize",this._syncMask,this,true);}this.applyKeyListeners();},purgeListeners:function(){var A=YAHOO.util.Event;A.removeListener(this.submitEl,"click",this.submit);A.removeListener(this.cancelEl,"click",this.cancel);A.removeListener(this.yearEl,"blur");A.removeListener(this.monthEl,"change");if(this.__isIEQuirks){A.removeListener(this.cal.oDomContainer,"resize",this._syncMask);}this.purgeKeyListeners();},applyKeyListeners:function(){var D=YAHOO.util.Event,A=YAHOO.env.ua;var C=(A.ie||A.webkit)?"keydown":"keypress";var B=(A.ie||A.opera||A.webkit)?"keydown":"keypress";D.on(this.yearEl,"keypress",this._handleEnterKey,this,true);D.on(this.yearEl,C,this._handleDirectionKeys,this,true);D.on(this.lastCtrl,B,this._handleTabKey,this,true);D.on(this.firstCtrl,B,this._handleShiftTabKey,this,true);},purgeKeyListeners:function!
 (){var D=YAHOO.util.Event,A=YAHOO.env.ua;var C=(A.ie||A.webkit)?"keydown":"keypress";var B=(A.ie||A.opera||A.webkit)?"keydown":"keypress";D.removeListener(this.yearEl,"keypress",this._handleEnterKey);D.removeListener(this.yearEl,C,this._handleDirectionKeys);D.removeListener(this.lastCtrl,B,this._handleTabKey);D.removeListener(this.firstCtrl,B,this._handleShiftTabKey);},submit:function(){if(this.validate()){this.hide();this.setMonth(this._getMonthFromUI());this.setYear(this._getYearFromUI());var B=this.cal;var A=YAHOO.widget.CalendarNavigator.UPDATE_DELAY;if(A>0){var C=this;window.setTimeout(function(){C._update(B);},A);}else{this._update(B);}}},_update:function(A){A.setYear(this.getYear());A.setMonth(this.getMonth());A.render();},cancel:function(){this.hide();},validate:function(){if(this._getYearFromUI()!==null){this.clearErrors();return true;}else{this.setYearError();this.setError(this.__getCfg("invalidYear",true));return false;}},setError:function(A){if(this.errorEl){thi!
 s.errorEl.innerHTML=A;this._show(this.errorEl,true);}},clearEr!
 ror:func
tion(){if(this.errorEl){this.errorEl.innerHTML="";this._show(this.errorEl,false);}},setYearError:function(){YAHOO.util.Dom.addClass(this.yearEl,YAHOO.widget.CalendarNavigator.CLASSES.INVALID);},clearYearError:function(){YAHOO.util.Dom.removeClass(this.yearEl,YAHOO.widget.CalendarNavigator.CLASSES.INVALID);},clearErrors:function(){this.clearError();this.clearYearError();},setInitialFocus:function(){var A=this.submitEl,C=this.__getCfg("initialFocus");if(C&&C.toLowerCase){C=C.toLowerCase();if(C=="year"){A=this.yearEl;try{this.yearEl.select();}catch(B){}}else{if(C=="month"){A=this.monthEl;}}}if(A&&YAHOO.lang.isFunction(A.focus)){try{A.focus();}catch(D){}}},erase:function(){if(this.__rendered){this.purgeListeners();this.yearEl=null;this.monthEl=null;this.errorEl=null;this.submitEl=null;this.cancelEl=null;this.firstCtrl=null;this.lastCtrl=null;if(this.navEl){this.navEl.innerHTML="";}var B=this.navEl.parentNode;if(B){B.removeChild(this.navEl);}this.navEl=null;var A=this.maskEl.pare!
 ntNode;if(A){A.removeChild(this.maskEl);}this.maskEl=null;this.__rendered=false;}},destroy:function(){this.erase();this._doc=null;this.cal=null;this.id=null;},_show:function(B,A){if(B){YAHOO.util.Dom.setStyle(B,"display",(A)?"block":"none");}},_getMonthFromUI:function(){if(this.monthEl){return this.monthEl.selectedIndex;}else{return 0;}},_getYearFromUI:function(){var B=YAHOO.widget.CalendarNavigator;var A=null;if(this.yearEl){var C=this.yearEl.value;C=C.replace(B.TRIM,"$1");if(B.YR_PATTERN.test(C)){A=parseInt(C,10);}}return A;},_updateYearUI:function(){if(this.yearEl&&this._year!==null){this.yearEl.value=this._year;}},_updateMonthUI:function(){if(this.monthEl){this.monthEl.selectedIndex=this._month;}},_setFirstLastElements:function(){this.firstCtrl=this.monthEl;this.lastCtrl=this.cancelEl;if(this.__isMac){if(YAHOO.env.ua.webkit&&YAHOO.env.ua.webkit<420){this.firstCtrl=this.monthEl;this.lastCtrl=this.yearEl;
-}if(YAHOO.env.ua.gecko){this.firstCtrl=this.yearEl;this.lastCtrl=this.yearEl;}}},_handleEnterKey:function(B){var A=YAHOO.util.KeyListener.KEY;if(YAHOO.util.Event.getCharCode(B)==A.ENTER){YAHOO.util.Event.preventDefault(B);this.submit();}},_handleDirectionKeys:function(H){var G=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY,D=YAHOO.widget.CalendarNavigator;var F=(this.yearEl.value)?parseInt(this.yearEl.value,10):null;if(isFinite(F)){var B=false;switch(G.getCharCode(H)){case A.UP:this.yearEl.value=F+D.YR_MINOR_INC;B=true;break;case A.DOWN:this.yearEl.value=Math.max(F-D.YR_MINOR_INC,0);B=true;break;case A.PAGE_UP:this.yearEl.value=F+D.YR_MAJOR_INC;B=true;break;case A.PAGE_DOWN:this.yearEl.value=Math.max(F-D.YR_MAJOR_INC,0);B=true;break;default:break;}if(B){G.preventDefault(H);try{this.yearEl.select();}catch(C){}}}},_handleTabKey:function(D){var C=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY;if(C.getCharCode(D)==A.TAB&&!D.shiftKey){try{C.preventDefault(D);this.firstCtrl.focus()!
 ;}catch(B){}}},_handleShiftTabKey:function(D){var C=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY;if(D.shiftKey&&C.getCharCode(D)==A.TAB){try{C.preventDefault(D);this.lastCtrl.focus();}catch(B){}}},__getCfg:function(D,B){var C=YAHOO.widget.CalendarNavigator._DEFAULT_CFG;var A=this.cal.cfg.getProperty("navigator");if(B){return(A!==true&&A.strings&&A.strings[D])?A.strings[D]:C.strings[D];}else{return(A!==true&&A[D])?A[D]:C[D];}},__isMac:(navigator.userAgent.toLowerCase().indexOf("macintosh")!=-1)};YAHOO.register("calendar",YAHOO.widget.Calendar,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+}if(YAHOO.env.ua.gecko){this.firstCtrl=this.yearEl;this.lastCtrl=this.yearEl;}}},_handleEnterKey:function(B){var A=YAHOO.util.KeyListener.KEY;if(YAHOO.util.Event.getCharCode(B)==A.ENTER){YAHOO.util.Event.preventDefault(B);this.submit();}},_handleDirectionKeys:function(H){var G=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY,D=YAHOO.widget.CalendarNavigator;var F=(this.yearEl.value)?parseInt(this.yearEl.value,10):null;if(isFinite(F)){var B=false;switch(G.getCharCode(H)){case A.UP:this.yearEl.value=F+D.YR_MINOR_INC;B=true;break;case A.DOWN:this.yearEl.value=Math.max(F-D.YR_MINOR_INC,0);B=true;break;case A.PAGE_UP:this.yearEl.value=F+D.YR_MAJOR_INC;B=true;break;case A.PAGE_DOWN:this.yearEl.value=Math.max(F-D.YR_MAJOR_INC,0);B=true;break;default:break;}if(B){G.preventDefault(H);try{this.yearEl.select();}catch(C){}}}},_handleTabKey:function(D){var C=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY;if(C.getCharCode(D)==A.TAB&&!D.shiftKey){try{C.preventDefault(D);this.firstCtrl.focus()!
 ;}catch(B){}}},_handleShiftTabKey:function(D){var C=YAHOO.util.Event,A=YAHOO.util.KeyListener.KEY;if(D.shiftKey&&C.getCharCode(D)==A.TAB){try{C.preventDefault(D);this.lastCtrl.focus();}catch(B){}}},__getCfg:function(D,B){var C=YAHOO.widget.CalendarNavigator._DEFAULT_CFG;var A=this.cal.cfg.getProperty("navigator");if(B){return(A!==true&&A.strings&&A.strings[D])?A.strings[D]:C.strings[D];}else{return(A!==true&&A[D])?A[D]:C[D];}},__isMac:(navigator.userAgent.toLowerCase().indexOf("macintosh")!=-1)};YAHOO.register("calendar",YAHOO.widget.Calendar,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/calendar/calendar.js
===================================================================
--- trunk/root/static/yui/calendar/calendar.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/calendar/calendar.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -512,9 +512,14 @@
                     key = queueItem[0];
                     value = queueItem[1];
                     property = this.config[key];
-        
+
                     property.value = value;
-        
+
+                    // Clear out queue entry, to avoid it being 
+                    // re-added to the queue by any queueProperty/supercedes
+                    // calls which are invoked during fireEvent
+                    this.eventQueue[i] = null;
+
                     this.fireEvent(key,value);
                 }
             }
@@ -684,7 +689,6 @@
     YAHOO.lang.augmentProto(Config, YAHOO.util.EventProvider);
 
 }());
-
 /**
 * YAHOO.widget.DateMath is used for simple date manipulation. The class is a static utility
 * used for adding, subtracting, and comparing dates.
@@ -1714,26 +1718,26 @@
 			cal = this; // To help with minification
 
 		/**
-		* Fired before a selection is made
+		* Fired before a date selection is made
 		* @event beforeSelectEvent
 		*/
 		cal.beforeSelectEvent = new CE(defEvents.BEFORE_SELECT); 
 
 		/**
-		* Fired when a selection is made
+		* Fired when a date selection is made
 		* @event selectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
 		cal.selectEvent = new CE(defEvents.SELECT);
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date or set of dates is deselected
 		* @event beforeDeselectEvent
 		*/
 		cal.beforeDeselectEvent = new CE(defEvents.BEFORE_DESELECT);
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date or set of dates is deselected
 		* @event deselectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
@@ -3847,19 +3851,19 @@
 				}
 				selected.splice(cellDateIndex, 1);
 			}
-	
+
 			if (this.parent) {
 				this.parent.cfg.setProperty(DEF_CFG.SELECTED.key, selected);
 			} else {
 				this.cfg.setProperty(DEF_CFG.SELECTED.key, selected);
 			}
-	
-			this.deselectEvent.fire(selectDate);
+
+			this.deselectEvent.fire([selectDate]);
 		}
-	
+
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Deselects all dates on the current calendar.
 	* @method deselectAll
@@ -5029,33 +5033,33 @@
 				cal[this.type + strEvent].unsubscribe(fn, obj);
 			}
 		};
-		
+
 		var defEvents = Calendar._EVENT_TYPES;
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date selection is made
 		* @event beforeSelectEvent
 		*/
 		me.beforeSelectEvent = new CE(defEvents.BEFORE_SELECT);
 		me.beforeSelectEvent.subscribe = sub; me.beforeSelectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date selection is made
 		* @event selectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
 		me.selectEvent = new CE(defEvents.SELECT); 
 		me.selectEvent.subscribe = sub; me.selectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired before a selection is made
+		* Fired before a date or set of dates is deselected
 		* @event beforeDeselectEvent
 		*/
 		me.beforeDeselectEvent = new CE(defEvents.BEFORE_DESELECT); 
 		me.beforeDeselectEvent.subscribe = sub; me.beforeDeselectEvent.unsubscribe = unsub;
-	
+
 		/**
-		* Fired when a selection is made
+		* Fired when a date or set of dates has been deselected
 		* @event deselectEvent
 		* @param {Array}	Array of Date field arrays in the format [YYYY, MM, DD].
 		*/
@@ -5186,6 +5190,8 @@
 		var pageCount = args[0],
 			cfgPageDate = DEF_CFG.PAGEDATE.key,
 			sep = "_",
+			caldate,
+			firstPageDate = null,
 			groupCalClass = "groupcal",
 			firstClass = "first-of-type",
 			lastClass = "last-of-type";
@@ -5199,15 +5205,19 @@
 			childConfig.title = false;
 			childConfig.navigator = null;
 
+			if (p > 0) {
+				caldate = new Date(firstPageDate);
+				this._setMonthOnDate(caldate, caldate.getMonth() + p);
+				childConfig.pageDate = caldate;
+			}
+
 			var cal = this.constructChild(calId, calContainerId, childConfig);
-			var caldate = cal.cfg.getProperty(cfgPageDate);
-			this._setMonthOnDate(caldate, caldate.getMonth() + p);
-			cal.cfg.setProperty(cfgPageDate, caldate);
 
 			Dom.removeClass(cal.oDomContainer, this.Style.CSS_SINGLE);
 			Dom.addClass(cal.oDomContainer, groupCalClass);
 
 			if (p===0) {
+				firstPageDate = cal.cfg.getProperty(cfgPageDate);
 				Dom.addClass(cal.oDomContainer, firstClass);
 			}
 	
@@ -5302,7 +5312,7 @@
 	*/
 	callChildFunction : function(fnName, args) {
 		var pageCount = this.cfg.getProperty(DEF_CFG.PAGES.key);
-	
+
 		for (var p=0;p<pageCount;++p) {
 			var page = this.pages[p];
 			if (page[fnName]) {
@@ -5463,7 +5473,7 @@
 		}
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Deselects dates in the CalendarGroup based on the cell index provided. This method is used to select cells without having to do a full render. The selected style is applied to the cells directly.
 	* deselectCell will deselect the cell at the specified index on each displayed Calendar page.
@@ -5479,7 +5489,7 @@
 		}
 		return this.getSelectedDates();
 	},
-	
+
 	/**
 	* Resets the calendar widget to the originally selected month and year, and 
 	* sets the calendar to the initial selection(s).
@@ -6275,12 +6285,12 @@
 		this._doc = calBox.ownerDocument;
 
 		/**
-		 * Private flag, to identify IE6/IE7 Quirks
+		 * Private flag, to identify IE Quirks
 		 * @private
 		 * @property __isIEQuirks
 		 */
 		var ie = YAHOO.env.ua.ie;
-		this.__isIEQuirks = (ie && ((ie <= 6) || (ie === 7 && this._doc.compatMode == "BackCompat")));
+		this.__isIEQuirks = (ie && ((ie <= 6) || (this._doc.compatMode == "BackCompat")));
 	},
 
 	/**
@@ -6478,7 +6488,7 @@
 
 	/**
 	 * Used to set the width/height of the mask in pixels to match the Calendar Container.
-	 * Currently only used for IE6 and IE7 quirks mode. The other A-Grade browser are handled using CSS (width/height 100%).
+	 * Currently only used for IE6 or IE in quirks mode. The other A-Grade browser are handled using CSS (width/height 100%).
 	 * <p>
 	 * The method is also registered as an HTMLElement resize listener on the Calendars container element.
 	 * </p>
@@ -7135,4 +7145,4 @@
 
 };
 
-YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.6.0", build: "1321"});
+YAHOO.register("calendar", YAHOO.widget.Calendar, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/carousel/README
===================================================================
--- trunk/root/static/yui/carousel/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,5 +0,0 @@
-Carousel Release Notes
-
-*** version 2.6.0 ***
-
-* Initial release.

Modified: trunk/root/static/yui/carousel/assets/carousel-core.css
===================================================================
--- trunk/root/static/yui/carousel/assets/carousel-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/assets/carousel-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,13 +1,15 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-carousel {
     visibility: hidden;
     overflow: hidden;
     position: relative;
+    text-align: left;
+    zoom: 1;
 }
 
 .yui-carousel.yui-carousel-visible {
@@ -80,3 +82,7 @@
 .yui-carousel-button-focus {
     outline: 1px dotted #000;
 }
+
+.yui-carousel-min-width .yui-carousel-content {
+    margin: 0 auto;
+}

Added: trunk/root/static/yui/carousel/assets/skins/sam/ajax-loader.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/carousel/assets/skins/sam/ajax-loader.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/root/static/yui/carousel/assets/skins/sam/carousel-skin.css
===================================================================
--- trunk/root/static/yui/carousel/assets/skins/sam/carousel-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/assets/skins/sam/carousel-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-carousel,
 .yui-skin-sam .yui-carousel-vertical {
@@ -36,7 +36,8 @@
     background-position: 0 -2100px;
 }
 
-.yui-skin-sam .yui-carousel-button input {
+.yui-skin-sam .yui-carousel-button input,
+.yui-skin-sam .yui-carousel-button button {
     background-color: transparent;
     border: 0;
     cursor: pointer;
@@ -67,6 +68,7 @@
 
 .yui-skin-sam .yui-carousel-nav ul {
     float: right;
+    height: 19px;
     margin: 0;
     margin-left: -220px;
     margin-right: 100px;
@@ -75,6 +77,10 @@
     padding: 0;
 }
 
+.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul {
+    *margin-left: -170px;
+}
+
 .yui-skin-sam .yui-carousel-nav select {
     position: relative;
    *right: 50px;
@@ -89,9 +95,15 @@
 }
 
 .yui-skin-sam .yui-carousel-nav ul li {
+    background: url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -650px;
+    cursor: pointer;
     float: left;
-    height: 19px;
+    height: 9px;
     list-style: none;
+    margin: 10px 0 0 5px;
+    overflow: hidden;
+    padding: 0;
+    width: 9px;
 }
 
 .yui-skin-sam .yui-carousel-nav ul:after {
@@ -101,19 +113,20 @@
 }
 
 .yui-skin-sam .yui-carousel-nav ul li a {
-    background: url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -650px;
-    display: block;
-    height: 9px;
-    margin: 10px 0 0 5px;
-    overflow: hidden;
-    width: 9px;
-}
-
-.yui-skin-sam .yui-carousel-nav ul li a em {
     left: -10000px;
     position: absolute;
 }
 
-.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected a {
+.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus {
+    outline: 1px dotted #000;
+}
+
+.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected {
     background-position: 0 -700px;
 }
+
+.yui-skin-sam .yui-carousel-item-loading {
+    background: url(ajax-loader.gif) no-repeat 50% 50%;
+    position: relative;
+    text-indent: -150px;
+}

Modified: trunk/root/static/yui/carousel/assets/skins/sam/carousel.css
===================================================================
--- trunk/root/static/yui/carousel/assets/skins/sam/carousel.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/assets/skins/sam/carousel.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-carousel{visibility:hidden;overflow:hidden;position:relative;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{b!
 order:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0px -550px;margin-left:-100px;margin-right:50px;*margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button{background-position:0px -750p!
 x;}.yui-skin-sam span.yui-carousel-first-button-disabled{backg!
 round-po
sition:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{float:left;height:19px;list-style:none;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;content:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -650px;display:block;height:9px;margin:10px 0 0 5px;overflow:hidden;width:9px;}.yui-skin-sam .yui-carousel-nav ul li a em{left:-10000px;position:absolute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected a{backg!
 round-position:0 -700px;}
+.yui-carousel{visibility:hidden;overflow:hidden;position:relative;text-align:left;zoom:1;}.yui-carousel.yui-carousel-visible{visibility:visible;}.yui-carousel-content{overflow:hidden;position:relative;}.yui-carousel-element{margin:5px 0;overflow:hidden;padding:0;position:relative;width:32000px;z-index:1;}.yui-carousel-vertical .yui-carousel-element{margin:0 5px;}.yui-carousel-element li{border:1px solid #ccc;float:left;list-style:none;margin:1px;overflow:hidden;padding:0;text-align:center;*float:none;*display:inline-block;*zoom:1;*display:inline;}.yui-carousel .yui-carousel-item-selected{border:1px dashed #000;margin:1px;}.yui-carousel-vertical{height:32000px;margin:0 5px;width:auto;}.yui-carousel-vertical .yui-carousel-element li{display:block;float:none;}.yui-log .carousel{background:#f2e886;}.yui-carousel-nav{zoom:1;}.yui-carousel-nav:after{clear:both;content:"";display:block;}.yui-carousel-button-focus{outline:1px dotted #000;}.yui-carousel-min-width .yui-carousel-conte!
 nt{margin:0 auto;}.yui-skin-sam .yui-carousel,.yui-skin-sam .yui-carousel-vertical{border:1px solid #808080;}.yui-skin-sam .yui-carousel-nav{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;padding:3px;text-align:right;}.yui-skin-sam .yui-carousel-button{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -600px;float:right;height:19px;margin:5px;overflow:hidden;width:40px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button{background-position:0 -800px;}.yui-skin-sam .yui-carousel-button-disabled{background-position:0 -2000px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-button-disabled{background-position:0 -2100px;}.yui-skin-sam .yui-carousel-button input,.yui-skin-sam .yui-carousel-button button{background-color:transparent;border:0;cursor:pointer;display:block;height:44px;margin:-2px 0 0 -2px;padding:0 0 0 50px;}.yui-skin-sam span.yui-carousel-first-button{background-position:0 -550px;margin-left:-100px;margin-right:50px;!
 *margin:5px 5px 5px -90px;}.yui-skin-sam .yui-carousel-vertica!
 l span.y
ui-carousel-first-button{background-position:0 -750px;}.yui-skin-sam span.yui-carousel-first-button-disabled{background-position:0 -1950px;}.yui-skin-sam .yui-carousel-vertical span.yui-carousel-first-button-disabled{background-position:0 -2050px;}.yui-skin-sam .yui-carousel-nav ul{float:right;height:19px;margin:0;margin-left:-220px;margin-right:100px;*margin-left:-160px;*margin-right:0;padding:0;}.yui-skin-sam .yui-carousel-min-width .yui-carousel-nav ul{*margin-left:-170px;}.yui-skin-sam .yui-carousel-nav select{position:relative;*right:50px;top:4px;}.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav ul,.yui-skin-sam .yui-carousel-vertical .yui-carousel-nav select{float:none;margin:0;*zoom:1;}.yui-skin-sam .yui-carousel-nav ul li{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -650px;cursor:pointer;float:left;height:9px;list-style:none;margin:10px 0 0 5px;overflow:hidden;padding:0;width:9px;}.yui-skin-sam .yui-carousel-nav ul:after{clear:both;conten!
 t:"";display:block;}.yui-skin-sam .yui-carousel-nav ul li a{left:-10000px;position:absolute;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-focus{outline:1px dotted #000;}.yui-skin-sam .yui-carousel-nav ul li.yui-carousel-nav-page-selected{background-position:0 -700px;}.yui-skin-sam .yui-carousel-item-loading{background:url(ajax-loader.gif) no-repeat 50% 50%;position:relative;text-indent:-150px;}

Deleted: trunk/root/static/yui/carousel/carousel-beta-debug.js
===================================================================
--- trunk/root/static/yui/carousel/carousel-beta-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel-beta-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,2945 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * The Carousel module provides a widget for browsing among a set of like
- * objects represented pictorially.
- *
- * @module carousel
- * @requires yahoo, dom, event, element
- * @optional animation
- * @namespace YAHOO.widget
- * @title Carousel Widget
- */
-(function () {
-
-    var WidgetName;             // forward declaration
-
-    /**
-     * The Carousel widget.
-     *
-     * @class Carousel
-     * @extends YAHOO.util.Element
-     * @constructor
-     * @param el {HTMLElement | String} The HTML element that represents the
-     * the container that houses the Carousel.
-     * @param cfg {Object} (optional) The configuration values
-     */
-    YAHOO.widget.Carousel = function (el, cfg) {
-        YAHOO.log("Component creation", WidgetName);
-
-        this._navBtns = {};
-        this._pages = {};
-
-        YAHOO.widget.Carousel.superclass.constructor.call(this, el, cfg);
-    };
-
-    /*
-     * Private variables of the Carousel component
-     */
-
-    /* Some abbreviations to avoid lengthy typing and lookups. */
-    var Carousel    = YAHOO.widget.Carousel,
-        Dom         = YAHOO.util.Dom,
-        Event       = YAHOO.util.Event,
-        JS          = YAHOO.lang;
-
-    /**
-     * The widget name.
-     * @private
-     * @static
-     */
-    WidgetName = "Carousel";
-
-    /**
-     * The internal table of Carousel instances.
-     * @private
-     * @static
-     */
-    var instances = {};
-
-    /*
-     * Custom events of the Carousel component
-     */
-
-    /**
-     * @event afterScroll
-     * @description Fires when the Carousel has scrolled to the previous or
-     * next page.  Passes back the index of the first and last visible items in
-     * the Carousel.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var afterScrollEvent = "afterScroll";
-
-    /**
-     * @event beforeHide
-     * @description Fires before the Carousel is hidden.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeHideEvent = "beforeHide";
-
-    /**
-     * @event beforePageChange
-     * @description Fires when the Carousel is about to scroll to the previous
-     * or next page.  Passes back the page number of the current page.  Note
-     * that the first page number is zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforePageChangeEvent = "beforePageChange";
-
-    /**
-     * @event beforeScroll
-     * @description Fires when the Carousel is about to scroll to the previous
-     * or next page.  Passes back the index of the first and last visible items
-     * in the Carousel and the direction (backward/forward) of the scroll.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeScrollEvent = "beforeScroll";
-
-    /**
-     * @event beforeShow
-     * @description Fires when the Carousel is about to be shown.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeShowEvent = "beforeShow";
-
-    /**
-     * @event blur
-     * @description Fires when the Carousel loses focus.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var blurEvent = "blur";
-
-    /**
-     * @event focus
-     * @description Fires when the Carousel gains focus.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var focusEvent = "focus";
-
-    /**
-     * @event hide
-     * @description Fires when the Carousel is hidden.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var hideEvent = "hide";
-
-    /**
-     * @event itemAdded
-     * @description Fires when an item has been added to the Carousel.  Passes
-     * back the content of the item that would be added, the index at which the
-     * item would be added, and the event itself.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemAddedEvent = "itemAdded";
-
-    /**
-     * @event itemRemoved
-     * @description Fires when an item has been removed from the Carousel.
-     * Passes back the content of the item that would be removed, the index
-     * from which the item would be removed, and the event itself.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemRemovedEvent = "itemRemoved";
-
-    /**
-     * @event itemSelected
-     * @description Fires when an item has been selected in the Carousel.
-     * Passes back the index of the selected item in the Carousel.  Note, that
-     * the index begins from zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemSelectedEvent = "itemSelected";
-
-    /**
-     * @event loadItems
-     * @description Fires when the Carousel needs more items to be loaded for
-     * displaying them.  Passes back the first and last visible items in the
-     * Carousel, and the number of items needed to be loaded.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var loadItemsEvent = "loadItems";
-
-    /**
-     * @event navigationStateChange
-     * @description Fires when the state of either one of the navigation
-     * buttons are changed from enabled to disabled or vice versa.  Passes back
-     * the state (true/false) of the previous and next buttons.  The value true
-     * signifies the button is enabled, false signifies disabled.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var navigationStateChangeEvent = "navigationStateChange";
-
-    /**
-     * @event pageChange
-     * @description Fires after the Carousel has scrolled to the previous or
-     * next page.  Passes back the page number of the current page.  Note
-     * that the first page number is zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var pageChangeEvent = "pageChange";
-
-    /**
-     * @event render
-     * @description Fires when the Carousel is rendered.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var renderEvent = "render";
-
-    /**
-     * @event show
-     * @description Fires when the Carousel is shown.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var showEvent = "show";
-
-    /**
-     * @event startAutoPlay
-     * @description Fires when the auto play has started in the Carousel.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var startAutoPlayEvent = "startAutoPlay";
-
-    /**
-     * @event stopAutoPlay
-     * @description Fires when the auto play has been stopped in the Carousel.
-     * See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var stopAutoPlayEvent = "stopAutoPlay";
-
-    /*
-     * Private helper functions used by the Carousel component
-     */
-
-    /**
-     * Automatically scroll the contents of the Carousel.
-     * @method autoScroll
-     * @private
-     */
-    function autoScroll() {
-        var currIndex = this._firstItem,
-            index;
-
-        if (currIndex >= this.get("numItems") - 1) {
-            if (this.get("isCircular")) {
-                index = 0;
-            } else {
-                this.stopAutoPlay();
-            }
-        } else {
-            index = currIndex + this.get("numVisible");
-        }
-        this.scrollTo.call(this, index);
-    }
-
-    /**
-     * Create an element, set its class name and optionally install the element
-     * to its parent.
-     * @method createElement
-     * @param el {String} The element to be created
-     * @param attrs {Object} Configuration of parent, class and id attributes.
-     * If the content is specified, it is inserted after creation of the
-     * element. The content can also be an HTML element in which case it would
-     * be appended as a child node of the created element.
-     * @private
-     */
-    function createElement(el, attrs) {
-        var newEl = document.createElement(el);
-
-        attrs = attrs || {};
-        if (attrs.className) {
-            Dom.addClass(newEl, attrs.className);
-        }
-
-        if (attrs.parent) {
-            attrs.parent.appendChild(newEl);
-        }
-
-        if (attrs.id) {
-            newEl.setAttribute("id", attrs.id);
-        }
-
-        if (attrs.content) {
-            if (attrs.content.nodeName) {
-                newEl.appendChild(attrs.content);
-            } else {
-                newEl.innerHTML = attrs.content;
-            }
-        }
-
-        return newEl;
-    }
-
-    /**
-     * Get the computed style of an element.
-     *
-     * @method getStyle
-     * @param el {HTMLElement} The element for which the style needs to be
-     * returned.
-     * @param style {String} The style attribute
-     * @param type {String} "int", "float", etc. (defaults to int)
-     * @private
-     */
-    function getStyle(el, style, type) {
-        var value;
-
-        function getStyleIntVal(el, style) {
-            var val;
-
-            val = parseInt(Dom.getStyle(el, style), 10);
-            return JS.isNumber(val) ? val : 0;
-        }
-
-        function getStyleFloatVal(el, style) {
-            var val;
-
-            val = parseFloat(Dom.getStyle(el, style));
-            return JS.isNumber(val) ? val : 0;
-        }
-
-        if (typeof type == "undefined") {
-            type = "int";
-        }
-
-        switch (style) {
-        case "height":
-            value = el.offsetHeight;
-            if (value > 0) {
-                value += getStyleIntVal(el, "marginTop")        +
-                        getStyleIntVal(el, "marginBottom");
-            } else {
-                value = getStyleFloatVal(el, "height")          +
-                        getStyleIntVal(el, "marginTop")         +
-                        getStyleIntVal(el, "marginBottom")      +
-                        getStyleIntVal(el, "borderTopWidth")    +
-                        getStyleIntVal(el, "borderBottomWidth") +
-                        getStyleIntVal(el, "paddingTop")        +
-                        getStyleIntVal(el, "paddingBottom");
-            }
-            break;
-        case "width":
-            value = el.offsetWidth;
-            if (value > 0) {
-                value += getStyleIntVal(el, "marginLeft")       +
-                        getStyleIntVal(el, "marginRight");
-            } else {
-                value = getStyleFloatVal(el, "width")           +
-                        getStyleIntVal(el, "marginLeft")        +
-                        getStyleIntVal(el, "marginRight")       +
-                        getStyleIntVal(el, "borderLeftWidth")   +
-                        getStyleIntVal(el, "borderRightWidth")  +
-                        getStyleIntVal(el, "paddingLeft")       +
-                        getStyleIntVal(el, "paddingRight");
-            }
-            break;
-        default:
-            if (type == "int") {
-                value = getStyleIntVal(el, style);
-                // XXX: Safari calculates incorrect marginRight for an element
-                // which has its parent element style set to overflow: hidden
-                // https://bugs.webkit.org/show_bug.cgi?id=13343
-                // Let us assume marginLeft == marginRight
-                if (style == "marginRight" && YAHOO.env.ua.webkit) {
-                    value = getStyleIntVal(el, "marginLeft");
-                }
-            } else if (type == "float") {
-                value = getStyleFloatVal(el, style);
-            } else {
-                value = Dom.getStyle(el, style);
-            }
-            break;
-        }
-
-        return value;
-    }
-
-    /**
-     * Compute and return the height or width of a single Carousel item
-     * depending upon the orientation.
-     *
-     * @method getCarouselItemSize
-     * @param which {String} "height" or "width" to be returned.  If this is
-     * passed explicitly, the calculated size is not cached.
-     * @private
-     */
-    function getCarouselItemSize(which) {
-        var child,
-            size     = 0,
-            vertical = false;
-
-        if (this._itemsTable.numItems === 0) {
-            return 0;
-        }
-
-        if (typeof which == "undefined") {
-            if (this._itemsTable.size > 0) {
-                return this._itemsTable.size;
-            }
-        }
-
-        if (JS.isUndefined(this._itemsTable.items[0])) {
-            return 0;
-        }
-
-        child = Dom.get(this._itemsTable.items[0].id);
-
-        if (typeof which == "undefined") {
-            vertical = this.get("isVertical");
-        } else {
-            vertical = which == "height";
-        }
-
-        if (vertical) {
-            size = getStyle(child, "height");
-        } else {
-            size = getStyle(child, "width");
-        }
-
-        if (typeof which == "undefined") {
-            this._itemsTable.size = size; // save the size for later
-        }
-
-        return size;
-    }
-
-    /**
-     * Return the scrolling offset size given the number of elements to
-     * scroll.
-     *
-     * @method getScrollOffset
-     * @param delta {Number} The delta number of elements to scroll by.
-     * @private
-     */
-    function getScrollOffset(delta) {
-        var itemSize = 0,
-            size     = 0;
-
-        itemSize = getCarouselItemSize.call(this);
-        size     = itemSize * delta;
-
-        // XXX: really, when the orientation is vertical, the scrolling
-        // is not exactly the number of elements into element size.
-        if (this.get("isVertical")) {
-            size -= delta;
-        }
-
-        return size;
-    }
-
-    /**
-     * The load the required set of items that are needed for display.
-     *
-     * @method loadItems
-     * @private
-     */
-    function loadItems() {
-        var first      = this.get("firstVisible"),
-            last       = 0,
-            numItems   = this.get("numItems"),
-            numVisible = this.get("numVisible"),
-            reveal     = this.get("revealAmount");
-
-        last = first + numVisible - 1 + (reveal ? 1 : 0);
-        last = last > numItems - 1 ? numItems - 1 : last;
-
-        if (!this.getItem(first) || !this.getItem(last)) {
-            this.fireEvent(loadItemsEvent, {
-                    ev: loadItemsEvent,
-                    first: first, last: last,
-                    num: last - first
-            });
-        }
-    }
-
-    /**
-     * Scroll the Carousel by a page backward.
-     *
-     * @method scrollPageBackward
-     * @param {Event} ev The event object
-     * @param {Object} obj The context object
-     * @private
-     */
-    function scrollPageBackward(ev, obj) {
-        obj.scrollPageBackward();
-        Event.preventDefault(ev);
-    }
-
-    /**
-     * Scroll the Carousel by a page forward.
-     *
-     * @method scrollPageForward
-     * @param {Event} ev The event object
-     * @param {Object} obj The context object
-     * @private
-     */
-    function scrollPageForward(ev, obj) {
-        obj.scrollPageForward();
-        Event.preventDefault(ev);
-    }
-
-    /**
-     * Set the selected item.
-     *
-     * @method setItemSelection
-     * @param {Number} newposition The index of the new position
-     * @param {Number} oldposition The index of the previous position
-     * @private
-     */
-     function setItemSelection(newposition, oldposition) {
-        var backwards,
-            cssClass   = this.CLASSES,
-            el,
-            firstItem  = this._firstItem,
-            isCircular = this.get("isCircular"),
-            numItems   = this.get("numItems"),
-            numVisible = this.get("numVisible"),
-            position   = oldposition,
-            sentinel   = firstItem + numVisible - 1;
-
-        backwards = numVisible > 1 && !isCircular && position > newposition;
-
-        if (position >= 0 && position < numItems) {
-            if (!JS.isUndefined(this._itemsTable.items[position])) {
-                el = Dom.get(this._itemsTable.items[position].id);
-                if (el) {
-                    Dom.removeClass(el, cssClass.SELECTED_ITEM);
-                }
-            }
-        }
-
-        if (JS.isNumber(newposition)) {
-            newposition = parseInt(newposition, 10);
-            newposition = JS.isNumber(newposition) ? newposition : 0;
-        } else {
-            newposition = firstItem;
-        }
-
-        if (JS.isUndefined(this._itemsTable.items[newposition])) {
-            this.scrollTo(newposition); // still loading the item
-        }
-
-        if (!JS.isUndefined(this._itemsTable.items[newposition])) {
-            el = Dom.get(this._itemsTable.items[newposition].id);
-            if (el) {
-                Dom.addClass(el, cssClass.SELECTED_ITEM);
-            }
-        }
-
-        if (newposition < firstItem || newposition > sentinel) {
-            // out of focus
-            if (backwards) {
-                this.scrollTo(firstItem - numVisible, true);
-            } else {
-                this.scrollTo(newposition);
-            }
-        }
-    }
-
-    /**
-     * Fire custom events for enabling/disabling navigation elements.
-     *
-     * @method syncNavigation
-     * @private
-     */
-    function syncNavigation() {
-        var attach   = false,
-            cssClass = this.CLASSES,
-            i,
-            navigation,
-            sentinel;
-
-        navigation = this.get("navigation");
-        sentinel   = this._firstItem + this.get("numVisible");
-
-        if (navigation.prev) {
-            if (this._firstItem === 0) {
-                if (!this.get("isCircular")) {
-                    Event.removeListener(navigation.prev, "click",
-                            scrollPageBackward);
-                    Dom.addClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
-                    for (i = 0; i < this._navBtns.prev.length; i++) {
-                        this._navBtns.prev[i].setAttribute("disabled", "true");
-                    }
-                    this._prevEnabled = false;
-                } else {
-                    attach = !this._prevEnabled;
-                }
-            } else {
-                attach = !this._prevEnabled;
-            }
-
-            if (attach) {
-                Event.on(navigation.prev, "click", scrollPageBackward, this);
-                Dom.removeClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
-                for (i = 0; i < this._navBtns.prev.length; i++) {
-                    this._navBtns.prev[i].removeAttribute("disabled");
-                }
-                this._prevEnabled = true;
-            }
-        }
-
-        attach = false;
-        if (navigation.next) {
-            if (sentinel >= this.get("numItems")) {
-                if (!this.get("isCircular")) {
-                    Event.removeListener(navigation.next, "click",
-                            scrollPageForward);
-                    Dom.addClass(navigation.next, cssClass.DISABLED);
-                    for (i = 0; i < this._navBtns.next.length; i++) {
-                        this._navBtns.next[i].setAttribute("disabled", "true");
-                    }
-                    this._nextEnabled = false;
-                } else {
-                    attach = !this._nextEnabled;
-                }
-            } else {
-                attach = !this._nextEnabled;
-            }
-
-            if (attach) {
-                Event.on(navigation.next, "click", scrollPageForward, this);
-                Dom.removeClass(navigation.next, cssClass.DISABLED);
-                for (i = 0; i < this._navBtns.next.length; i++) {
-                    this._navBtns.next[i].removeAttribute("disabled");
-                }
-                this._nextEnabled = true;
-            }
-        }
-
-        this.fireEvent(navigationStateChangeEvent,
-                { next: this._nextEnabled, prev: this._prevEnabled });
-    }
-
-    /**
-     * Fire custom events for synchronizing the DOM.
-     *
-     * @method syncUI
-     * @param {Object} o The item that needs to be added or removed
-     * @private
-     */
-    function syncUI(o) {
-        var el, i, item, num, oel, pos, sibling;
-
-        if (!JS.isObject(o)) {
-            return;
-        }
-
-        switch (o.ev) {
-        case itemAddedEvent:
-            pos  = JS.isUndefined(o.pos) ? this._itemsTable.numItems-1 : o.pos;
-            if (!JS.isUndefined(this._itemsTable.items[pos])) {
-                item = this._itemsTable.items[pos];
-                if (item && !JS.isUndefined(item.id)) {
-                    oel  = Dom.get(item.id);
-                }
-            }
-            if (!oel) {
-                el = this._createCarouselItem({
-                        className : item.className,
-                        content   : item.item,
-                        id        : item.id
-                });
-                if (JS.isUndefined(o.pos)) {
-                    if (!JS.isUndefined(this._itemsTable.loading[pos])) {
-                        oel = this._itemsTable.loading[pos];
-                    }
-                    if (oel) {
-                        this._carouselEl.replaceChild(el, oel);
-                    } else {
-                        this._carouselEl.appendChild(el);
-                    }
-                } else {
-                    if (!JS.isUndefined(this._itemsTable.items[o.pos + 1])) {
-                        sibling = Dom.get(this._itemsTable.items[o.pos + 1].id);
-                    }
-                    if (sibling) {
-                        this._carouselEl.insertBefore(el, sibling);
-                    } else {
-                        YAHOO.log("Unable to find sibling","error",WidgetName);
-                    }
-                }
-            } else {
-                if (JS.isUndefined(o.pos)) {
-                    if (!Dom.isAncestor(this._carouselEl, oel)) {
-                        this._carouselEl.appendChild(oel);
-                    }
-                } else {
-                    if (!Dom.isAncestor(this._carouselEl, oel)) {
-                        if (!JS.isUndefined(this._itemsTable.items[o.pos+1])) {
-                            this._carouselEl.insertBefore(oel, Dom.get(
-                                    this._itemsTable.items[o.pos+1].id));
-                        }
-                    }
-                }
-            }
-
-            if (this._recomputeSize) {
-                this._setClipContainerSize();
-            }
-            break;
-        case itemRemovedEvent:
-            num  = this.get("numItems");
-            item = o.item;
-            pos  = o.pos;
-
-            if (item && (el = Dom.get(item.id))) {
-                if (el && Dom.isAncestor(this._carouselEl, el)) {
-                    Event.purgeElement(el, true);
-                    this._carouselEl.removeChild(el);
-                }
-
-                if (this.get("selectedItem") == pos) {
-                    pos = pos >= num ? num - 1 : pos;
-                    this.set("selectedItem", pos);
-                }
-            } else {
-                YAHOO.log("Unable to find item", "warn", WidgetName);
-            }
-            break;
-        case loadItemsEvent:
-            for (i = o.first; i <= o.last; i++) {
-                el = this._createCarouselItem({
-                        content : this.CONFIG.ITEM_LOADING,
-                        id      : Dom.generateId()
-                });
-                if (el) {
-                    if (!JS.isUndefined(this._itemsTable.items[o.last + 1])) {
-                        sibling = Dom.get(this._itemsTable.items[o.last+1].id);
-                        if (sibling) {
-                            this._carouselEl.insertBefore(el, sibling);
-                        } else {
-                            YAHOO.log("Unable to find sibling", "error",
-                                    WidgetName);
-                        }
-                    } else {
-                        this._carouselEl.appendChild(el);
-                    }
-                }
-                this._itemsTable.loading[i] = el;
-            }
-            break;
-        }
-    }
-
-    /*
-     * Static members and methods of the Carousel component
-     */
-
-    /**
-     * Return the appropriate Carousel object based on the id associated with
-     * the Carousel element or false if none match.
-     * @method getById
-     * @public
-     * @static
-     */
-    Carousel.getById = function (id) {
-        return instances[id] ? instances[id] : false;
-    };
-
-    YAHOO.extend(Carousel, YAHOO.util.Element, {
-
-        /*
-         * Internal variables used within the Carousel component
-         */
-
-        /**
-         * The Carousel element.
-         *
-         * @property _carouselEl
-         * @private
-         */
-        _carouselEl: null,
-
-        /**
-         * The Carousel clipping container element.
-         *
-         * @property _clipEl
-         * @private
-         */
-        _clipEl: null,
-
-        /**
-         * The current first index of the Carousel.
-         *
-         * @property _firstItem
-         * @private
-         */
-        _firstItem: 0,
-
-        /**
-         * Is the animation still in progress?
-         *
-         * @property _isAnimationInProgress
-         * @private
-         */
-        _isAnimationInProgress: false,
-
-        /**
-         * The table of items in the Carousel.
-         * The numItems is the number of items in the Carousel, items being the
-         * array of items in the Carousel.  The size is the size of a single
-         * item in the Carousel.  It is cached here for efficiency (to avoid
-         * computing the size multiple times).
-         *
-         * @property _itemsTable
-         * @private
-         */
-        _itemsTable: null,
-
-        /**
-         * The Carousel navigation buttons.
-         *
-         * @property _navBtns
-         * @private
-         */
-        _navBtns: null,
-
-        /**
-         * The Carousel navigation.
-         *
-         * @property _navEl
-         * @private
-         */
-        _navEl: null,
-
-        /**
-         * Status of the next navigation item.
-         *
-         * @property _nextEnabled
-         * @private
-         */
-        _nextEnabled: true,
-
-        /**
-         * The Carousel pages structure.
-         * This is an object of the total number of pages and the current page.
-         *
-         * @property _pages
-         * @private
-         */
-        _pages: null,
-
-        /**
-         * Status of the previous navigation item.
-         *
-         * @property _prevEnabled
-         * @private
-         */
-        _prevEnabled: true,
-
-        /**
-         * Whether the Carousel size needs to be recomputed or not?
-         *
-         * @property _recomputeSize
-         * @private
-         */
-        _recomputeSize: true,
-
-        /*
-         * CSS classes used by the Carousel component
-         */
-
-        CLASSES: {
-
-            /**
-             * The class name of the Carousel navigation buttons.
-             *
-             * @property BUTTON
-             * @default "yui-carousel-button"
-             */
-            BUTTON: "yui-carousel-button",
-
-            /**
-             * The class name of the Carousel element.
-             *
-             * @property CAROUSEL
-             * @default "yui-carousel"
-             */
-            CAROUSEL: "yui-carousel",
-
-            /**
-             * The class name of the container of the items in the Carousel.
-             *
-             * @property CAROUSEL_EL
-             * @default "yui-carousel-element"
-             */
-            CAROUSEL_EL: "yui-carousel-element",
-
-            /**
-             * The class name of the Carousel's container element.
-             *
-             * @property CONTAINER
-             * @default "yui-carousel-container"
-             */
-            CONTAINER: "yui-carousel-container",
-
-            /**
-             * The class name of the Carousel's container element.
-             *
-             * @property CONTENT
-             * @default "yui-carousel-content"
-             */
-            CONTENT: "yui-carousel-content",
-
-            /**
-             * The class name of a disabled navigation button.
-             *
-             * @property DISABLED
-             * @default "yui-carousel-button-disabled"
-             */
-            DISABLED: "yui-carousel-button-disabled",
-
-            /**
-             * The class name of the first Carousel navigation button.
-             *
-             * @property FIRST_NAV
-             * @default " yui-carousel-first-button"
-             */
-            FIRST_NAV: " yui-carousel-first-button",
-
-            /**
-             * The class name of a first disabled navigation button.
-             *
-             * @property FIRST_NAV_DISABLED
-             * @default "yui-carousel-first-button-disabled"
-             */
-            FIRST_NAV_DISABLED: "yui-carousel-first-button-disabled",
-
-            /**
-             * The class name of a first page element.
-             *
-             * @property FIRST_PAGE
-             * @default "yui-carousel-nav-first-page"
-             */
-            FIRST_PAGE: "yui-carousel-nav-first-page",
-
-            /**
-             * The class name of the Carousel navigation button that has focus.
-             *
-             * @property FOCUSSED_BUTTON
-             * @default "yui-carousel-button-focus"
-             */
-            FOCUSSED_BUTTON: "yui-carousel-button-focus",
-
-            /**
-             * The class name of a horizontally oriented Carousel.
-             *
-             * @property HORIZONTAL
-             * @default "yui-carousel-horizontal"
-             */
-            HORIZONTAL: "yui-carousel-horizontal",
-
-            /**
-             * The navigation element container class name.
-             *
-             * @property NAVIGATION
-             * @default "yui-carousel-nav"
-             */
-            NAVIGATION: "yui-carousel-nav",
-
-            /**
-             * The class name of the next navigation link. This variable is not
-             * only used for styling, but also for identifying the link within
-             * the Carousel container.
-             *
-             * @property NEXT_PAGE
-             * @default "yui-carousel-next"
-             */
-            NEXT_PAGE: "yui-carousel-next",
-
-            /**
-             * The class name for the navigation container for prev/next.
-             *
-             * @property NAV_CONTAINER
-             * @default "yui-carousel-buttons"
-             */
-            NAV_CONTAINER: "yui-carousel-buttons",
-
-            /**
-             * The class name of the previous navigation link. This variable
-             * is not only used for styling, but also for identifying the link
-             * within the Carousel container.
-             *
-             * @property PREV_PAGE
-             * @default "yui-carousel-prev"
-             */
-            PREV_PAGE: "yui-carousel-prev",
-
-            /**
-             * The class name of the selected item.
-             *
-             * @property SELECTED_ITEM
-             * @default "yui-carousel-item-selected"
-             */
-            SELECTED_ITEM: "yui-carousel-item-selected",
-
-            /**
-             * The class name of the selected paging navigation.
-             *
-             * @property SELECTED_NAV
-             * @default "yui-carousel-nav-page-selected"
-             */
-            SELECTED_NAV: "yui-carousel-nav-page-selected",
-
-            /**
-             * The class name of a vertically oriented Carousel.
-             *
-             * @property VERTICAL
-             * @default "yui-carousel-vertical"
-             */
-            VERTICAL: "yui-carousel-vertical",
-
-            /**
-             * The class name of the (vertical) Carousel's container element.
-             *
-             * @property VERTICAL_CONTAINER
-             * @default "yui-carousel-vertical-container"
-             */
-            VERTICAL_CONTAINER: "yui-carousel-vertical-container",
-
-            /**
-             * The class name of a visible Carousel.
-             *
-             * @property VISIBLE
-             * @default "yui-carousel-visible"
-             */
-            VISIBLE: "yui-carousel-visible"
-
-        },
-
-        /*
-         * Configuration attributes for configuring the Carousel component
-         */
-
-        CONFIG: {
-
-            /**
-             * The offset of the first visible item in the Carousel.
-             *
-             * @property FIRST_VISIBLE
-             * @default 0
-             */
-            FIRST_VISIBLE: 0,
-
-            /**
-             * The element to be used as the progress indicator when the item
-             * is still being loaded.
-             *
-             * @property ITEM_LOADING
-             * @default The progress indicator (spinner) image
-             */
-            ITEM_LOADING: "<img " +
-                    "src=\"../../build/carousel/assets/ajax-loader.gif\" " +
-                    "alt=\"Loading\" " +
-                    "style=\"margin-top:-32px;position:relative;top:50%;\">",
-
-            /**
-             * The tag name of the Carousel item.
-             *
-             * @property ITEM_TAG_NAME
-             * @default "LI"
-             */
-            ITEM_TAG_NAME: "LI",
-
-            /**
-             * The maximum number of pager buttons allowed beyond which the UI
-             * of the pager would be a drop-down of pages instead of buttons.
-             *
-             * @property MAX_PAGER_BUTTONS
-             * @default 5
-             */
-            MAX_PAGER_BUTTONS: 5,
-
-            /**
-             * The minimum width of the Carousel container to support the
-             * navigation buttons.
-             *
-             * @property MIN_WIDTH
-             * @default 99
-             */
-            MIN_WIDTH: 99,
-
-            /**
-             * The number of visible items in the Carousel.
-             *
-             * @property NUM_VISIBLE
-             * @default 3
-             */
-            NUM_VISIBLE: 3,
-
-            /**
-             * The tag name of the Carousel.
-             *
-             * @property TAG_NAME
-             * @default "OL"
-             */
-            TAG_NAME: "OL"
-
-        },
-
-        /*
-         * Internationalizable strings in the Carousel component
-         */
-
-        STRINGS: {
-
-            /**
-             * The next navigation button name/text.
-             *
-             * @property NEXT_BUTTON_TEXT
-             * @default "Next Page"
-             */
-            NEXT_BUTTON_TEXT: "Next Page",
-
-            /**
-             * The prefix text for the pager in case the UI is a drop-down.
-             *
-             * @property PAGER_PREFIX_TEXT
-             * @default "Go to page "
-             */
-            PAGER_PREFIX_TEXT: "Go to page ",
-
-            /**
-             * The previous navigation button name/text.
-             *
-             * @property PREVIOUS_BUTTON_TEXT
-             * @default "Previous Page"
-             */
-            PREVIOUS_BUTTON_TEXT: "Previous Page"
-
-        },
-
-        /*
-         * Public methods of the Carousel component
-         */
-
-        /**
-         * Insert or append an item to the Carousel.
-         *
-         * @method addItem
-         * @public
-         * @param item {String | Object | HTMLElement} The item to be appended
-         * to the Carousel. If the parameter is a string, it is assumed to be
-         * the content of the newly created item. If the parameter is an
-         * object, it is assumed to supply the content and an optional class
-         * and an optional id of the newly created item.
-         * @param index {Number} optional The position to where in the list
-         * (starts from zero).
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        addItem: function (item, index) {
-            var className, content, el, elId, numItems = this.get("numItems");
-
-            if (!item) {
-                return false;
-            }
-
-            if (JS.isString(item) || item.nodeName) {
-                content = item.nodeName ? item.innerHTML : item;
-            } else if (JS.isObject(item)) {
-                content = item.content;
-            } else {
-                YAHOO.log("Invalid argument to addItem", "error", WidgetName);
-                return false;
-            }
-
-            className = item.className || "";
-            elId      = item.id ? item.id : Dom.generateId();
-
-            if (JS.isUndefined(index)) {
-                this._itemsTable.items.push({
-                        item      : content,
-                        className : className,
-                        id        : elId
-                });
-            } else {
-                if (index < 0 || index >= numItems) {
-                    YAHOO.log("Index out of bounds", "error", WidgetName);
-                    return false;
-                }
-                this._itemsTable.items.splice(index, 0, {
-                        item      : content,
-                        className : className,
-                        id        : elId
-                });
-            }
-            this._itemsTable.numItems++;
-
-            if (numItems < this._itemsTable.items.length) {
-                this.set("numItems", this._itemsTable.items.length);
-            }
-
-            this.fireEvent(itemAddedEvent, { pos: index, ev: itemAddedEvent });
-
-            return true;
-        },
-
-        /**
-         * Insert or append multiple items to the Carousel.
-         *
-         * @method addItems
-         * @public
-         * @param items {Array} An array of items to be added with each item
-         * representing an item, index pair [{item, index}, ...]
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        addItems: function (items) {
-            var i, n, rv = true;
-
-            if (!JS.isArray(items)) {
-                return false;
-            }
-
-            for (i = 0, n = items.length; i < n; i++) {
-                if (this.addItem(items[i][0], items[i][1]) === false) {
-                    rv = false;
-                }
-            }
-
-            return rv;
-        },
-
-        /**
-         * Remove focus from the Carousel.
-         *
-         * @method blur
-         * @public
-         */
-        blur: function () {
-            this._carouselEl.blur();
-            this.fireEvent(blurEvent);
-        },
-
-        /**
-         * Clears the items from Carousel.
-         *
-         * @method clearItems
-         * public
-         */
-        clearItems: function () {
-            var n = this.get("numItems");
-
-            while (n > 0) {
-                this.removeItem(0);
-                n--;
-            }
-        },
-
-        /**
-         * Set focus on the Carousel.
-         *
-         * @method focus
-         * @public
-         */
-        focus: function () {
-            var selItem,
-                numVisible,
-                selectOnScroll,
-                selected,
-                first,
-                last,
-                isSelectionInvisible,
-                focusEl,
-                itemsTable;
-
-            if (this._isAnimationInProgress) {
-                // this messes up real bad!
-                return;
-            }
-
-            selItem              = this.get("selectedItem");
-            numVisible           = this.get("numVisible");
-            selectOnScroll       = this.get("selectOnScroll");
-            selected             = this.getItem(selItem);
-            first                = this.get("firstVisible");
-            last                 = first + numVisible - 1;
-            isSelectionInvisible = (selItem < first || selItem > last);
-            focusEl              = (selected && selected.id) ?
-                                   Dom.get(selected.id) : null;
-            itemsTable           = this._itemsTable;
-
-            if (!selectOnScroll && isSelectionInvisible) {
-                focusEl = (itemsTable && itemsTable.items &&
-                           itemsTable.items[first]) ?
-                        Dom.get(itemsTable.items[first].id) : null;
-            }
-
-            if (focusEl) {
-                try {
-                    focusEl.focus();
-                } catch (ex) {
-                    // ignore focus errors
-                }
-            }
-
-            this.fireEvent(focusEvent);
-        },
-
-        /**
-         * Hide the Carousel.
-         *
-         * @method hide
-         * @public
-         */
-        hide: function () {
-            if (this.fireEvent(beforeHideEvent) !== false) {
-                this.removeClass(this.CLASSES.VISIBLE);
-                this.fireEvent(hideEvent);
-            }
-        },
-
-        /**
-         * Initialize the Carousel.
-         *
-         * @method init
-         * @public
-         * @param el {HTMLElement | String} The html element that represents
-         * the Carousel container.
-         * @param attrs {Object} The set of configuration attributes for
-         * creating the Carousel.
-         */
-        init: function (el, attrs) {
-            var elId  = el,     // save for a rainy day
-                parse = false;
-
-            if (!el) {
-                YAHOO.log(el + " is neither an HTML element, nor a string",
-                        "error", WidgetName);
-                return;
-            }
-
-            this._itemsTable = { loading: {}, numItems: 0, items: [], size: 0 };
-            YAHOO.log("Component initialization", WidgetName);
-
-            if (JS.isString(el)) {
-                el = Dom.get(el);
-            } else if (!el.nodeName) {
-                YAHOO.log(el + " is neither an HTML element, nor a string",
-                        "error", WidgetName);
-                return;
-            }
-
-            if (el) {
-                if (!el.id) {   // in case the HTML element is passed
-                    el.setAttribute("id", Dom.generateId());
-                }
-                this._parseCarousel(el);
-                parse = true;
-            } else {
-                el = this._createCarousel(elId);
-            }
-            elId = el.id;
-
-            Carousel.superclass.init.call(this, el, attrs);
-
-            this.initEvents();
-
-            if (parse) {
-                this._parseCarouselItems();
-            }
-
-            if (!attrs || typeof attrs.isVertical == "undefined") {
-                this.set("isVertical", false);
-            }
-
-            this._parseCarouselNavigation(el);
-            this._navEl = this._setupCarouselNavigation();
-
-            instances[elId] = this;
-
-            loadItems.call(this);
-        },
-
-        /**
-         * Initialize the configuration attributes used to create the Carousel.
-         *
-         * @method initAttributes
-         * @public
-         * @param attrs {Object} The set of configuration attributes for
-         * creating the Carousel.
-         */
-        initAttributes: function (attrs) {
-            attrs = attrs || {};
-            Carousel.superclass.initAttributes.call(this, attrs);
-
-            /**
-             * @attribute currentPage
-             * @description The current page number (read-only.)
-             * @type Number
-             */
-            this.setAttributeConfig("currentPage", {
-                    readOnly : true,
-                    value    : 0
-            });
-
-            /**
-             * @attribute firstVisible
-             * @description The index to start the Carousel from (indexes begin
-             * from zero)
-             * @default 0
-             * @type Number
-             */
-            this.setAttributeConfig("firstVisible", {
-                    method    : this._setFirstVisible,
-                    validator : this._validateFirstVisible,
-                    value     : attrs.firstVisible || this.CONFIG.FIRST_VISIBLE
-            });
-
-            /**
-             * @attribute selectOnScroll
-             * @description Set this to true to automatically set focus to
-             * follow scrolling in the Carousel.
-             * @default true
-             * @type Boolean
-             */
-            this.setAttributeConfig("selectOnScroll", {
-                    validator : JS.isBoolean,
-                    value     : attrs.selectOnScroll || true
-            });
-
-            /**
-             * @attribute numVisible
-             * @description The number of visible items in the Carousel's
-             * viewport.
-             * @default 3
-             * @type Number
-             */
-            this.setAttributeConfig("numVisible", {
-                    method    : this._setNumVisible,
-                    validator : this._validateNumVisible,
-                    value     : attrs.numVisible || this.CONFIG.NUM_VISIBLE
-            });
-
-            /**
-             * @attribute numItems
-             * @description The number of items in the Carousel.
-             * @type Number
-             */
-            this.setAttributeConfig("numItems", {
-                    method    : this._setNumItems,
-                    validator : this._validateNumItems,
-                    value     : this._itemsTable.numItems
-            });
-
-            /**
-             * @attribute scrollIncrement
-             * @description The number of items to scroll by for arrow keys.
-             * @default 1
-             * @type Number
-             */
-            this.setAttributeConfig("scrollIncrement", {
-                    validator : this._validateScrollIncrement,
-                    value     : attrs.scrollIncrement || 1
-            });
-
-            /**
-             * @attribute selectedItem
-             * @description The index of the selected item.
-             * @type Number
-             */
-            this.setAttributeConfig("selectedItem", {
-                    method    : this._setSelectedItem,
-                    validator : JS.isNumber,
-                    value     : 0
-            });
-
-            /**
-             * @attribute revealAmount
-             * @description The percentage of the item to be revealed on each
-             * side of the Carousel (before and after the first and last item
-             * in the Carousel's viewport.)
-             * @default 0
-             * @type Number
-             */
-            this.setAttributeConfig("revealAmount", {
-                    method    : this._setRevealAmount,
-                    validator : this._validateRevealAmount,
-                    value     : attrs.revealAmount || 0
-            });
-
-            /**
-             * @attribute isCircular
-             * @description Set this to true to wrap scrolling of the contents
-             * in the Carousel.
-             * @default false
-             * @type Boolean
-             */
-            this.setAttributeConfig("isCircular", {
-                    validator : JS.isBoolean,
-                    value     : attrs.isCircular || false
-            });
-
-            /**
-             * @attribute isVertical
-             * @description True if the orientation of the Carousel is vertical
-             * @default false
-             * @type Boolean
-             */
-            this.setAttributeConfig("isVertical", {
-                    method    : this._setOrientation,
-                    validator : JS.isBoolean,
-                    value     : attrs.isVertical || false
-            });
-
-            /**
-             * @attribute navigation
-             * @description The set of navigation controls for Carousel
-             * @default <br>
-             * { prev: null, // the previous navigation element<br>
-             *   next: null } // the next navigation element
-             * @type Object
-             */
-            this.setAttributeConfig("navigation", {
-                    method    : this._setNavigation,
-                    validator : this._validateNavigation,
-                    value     : attrs.navigation || {
-                                        prev: null, next: null, page: null }
-            });
-
-            /**
-             * @attribute animation
-             * @description The optional animation attributes for the Carousel.
-             * @default <br>
-             * { speed: 0, // the animation speed (in seconds)<br>
-             *   effect: null } // the animation effect (like
-             *   YAHOO.util.Easing.easeOut)
-             * @type Object
-             */
-            this.setAttributeConfig("animation", {
-                    validator : this._validateAnimation,
-                    value     : attrs.animation || { speed: 0, effect: null }
-            });
-
-            /**
-             * @attribute autoPlay
-             * @description Set this to time in milli-seconds to have the
-             * Carousel automatically scroll the contents.
-             * @type Number
-             */
-            this.setAttributeConfig("autoPlay", {
-                    validator : JS.isNumber,
-                    value     : attrs.autoPlay || 0
-            });
-        },
-
-        /**
-         * Initialize and bind the event handlers.
-         *
-         * @method initEvents
-         * @public
-         */
-        initEvents: function () {
-            var cssClass = this.CLASSES;
-
-            this.on("keydown", this._keyboardEventHandler);
-
-            this.subscribe(afterScrollEvent, syncNavigation);
-            this.on(afterScrollEvent, this.focus);
-
-            this.subscribe(itemAddedEvent, syncUI);
-            this.subscribe(itemAddedEvent, syncNavigation);
-
-            this.subscribe(itemRemovedEvent, syncUI);
-            this.subscribe(itemRemovedEvent, syncNavigation);
-
-            this.on(itemSelectedEvent, this.focus);
-
-            this.subscribe(loadItemsEvent, syncUI);
-
-            this.subscribe(pageChangeEvent, this._syncPagerUI);
-
-            this.subscribe(renderEvent, syncNavigation);
-            this.subscribe(renderEvent, this._syncPagerUI);
-
-            this.on("selectedItemChange", function (ev) {
-                setItemSelection.call(this, ev.newValue, ev.prevValue);
-                this._updateTabIndex(this.getElementForItem(ev.newValue));
-                this.fireEvent(itemSelectedEvent, ev.newValue);
-            });
-
-            this.on("firstVisibleChange", function (ev) {
-                if (!this.get("selectOnScroll")) {
-                    this._updateTabIndex(this.getElementForItem(ev.newValue));
-                }
-            });
-
-            // Handle item selection on mouse click
-            this.on("click", this._itemClickHandler);
-
-            // Handle page navigation
-            this.on("click", this._pagerClickHandler);
-
-            // Restore the focus on the navigation buttons
-            Event.onFocus(this.get("element"), function (ev, obj) {
-                obj._updateNavButtons(Event.getTarget(ev), true);
-            }, this);
-
-            Event.onBlur(this.get("element"), function (ev, obj) {
-                obj._updateNavButtons(Event.getTarget(ev), false);
-            }, this);
-
-        },
-
-        /**
-         * Return the ITEM_TAG_NAME at index or null if the index is not found.
-         *
-         * @method getElementForItem
-         * @param index {Number} The index of the item to be returned
-         * @return {Element} Return the item at index or null if not found
-         * @public
-         */
-        getElementForItem: function (index) {
-            if (index < 0 || index >= this.get("numItems")) {
-                YAHOO.log("Index out of bounds", "error", WidgetName);
-                return null;
-            }
-
-            // TODO: may be cache the item
-            if (this._itemsTable.numItems > index) {
-                if (!JS.isUndefined(this._itemsTable.items[index])) {
-                    return Dom.get(this._itemsTable.items[index].id);
-                }
-            }
-
-            return null;
-        },
-
-        /**
-         * Return the ITEM_TAG_NAME for all items in the Carousel.
-         *
-         * @method getElementForItems
-         * @return {Array} Return all the items
-         * @public
-         */
-        getElementForItems: function () {
-            var els = [], i;
-
-            for (i = 0; i < this._itemsTable.numItems; i++) {
-                els.push(this.getElementForItem(i));
-            }
-
-            return els;
-        },
-
-        /**
-         * Return the item at index or null if the index is not found.
-         *
-         * @method getItem
-         * @param index {Number} The index of the item to be returned
-         * @return {Object} Return the item at index or null if not found
-         * @public
-         */
-        getItem: function (index) {
-            if (index < 0 || index >= this.get("numItems")) {
-                YAHOO.log("Index out of bounds", "error", WidgetName);
-                return null;
-            }
-
-            if (this._itemsTable.numItems > index) {
-                if (!JS.isUndefined(this._itemsTable.items[index])) {
-                    return this._itemsTable.items[index];
-                }
-            }
-
-            return null;
-        },
-
-        /**
-         * Return all items as an array.
-         *
-         * @method getItems
-         * @return {Array} Return all items in the Carousel
-         * @public
-         */
-        getItems: function (index) {
-            return this._itemsTable.items;
-        },
-
-        /**
-         * Return the position of the Carousel item that has the id "id", or -1
-         * if the id is not found.
-         *
-         * @method getItemPositionById
-         * @param index {Number} The index of the item to be returned
-         * @public
-         */
-        getItemPositionById: function (id) {
-            var i = 0, n = this._itemsTable.numItems;
-
-            while (i < n) {
-                if (!JS.isUndefined(this._itemsTable.items[i])) {
-                    if (this._itemsTable.items[i].id == id) {
-                        return i;
-                    }
-                }
-                i++;
-            }
-
-            return -1;
-        },
-
-        /**
-         * Remove an item at index from the Carousel.
-         *
-         * @method removeItem
-         * @public
-         * @param index {Number} The position to where in the list (starts from
-         * zero).
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        removeItem: function (index) {
-            var item, num = this.get("numItems");
-
-            if (index < 0 || index >= num) {
-                YAHOO.log("Index out of bounds", "error", WidgetName);
-                return false;
-            }
-
-            item = this._itemsTable.items.splice(index, 1);
-            if (item && item.length == 1) {
-                this.set("numItems", num - 1);
-
-                this.fireEvent(itemRemovedEvent,
-                        { item: item[0], pos: index, ev: itemRemovedEvent });
-                return true;
-            }
-
-            return false;
-        },
-
-        /**
-         * Render the Carousel.
-         *
-         * @method render
-         * @public
-         * @param appendTo {HTMLElement | String} The element to which the
-         * Carousel should be appended prior to rendering.
-         * @return {Boolean} Status of the operation
-         */
-        render: function (appendTo) {
-            var config = this.CONFIG,
-                cssClass = this.CLASSES,
-                size;
-
-            this.addClass(cssClass.CAROUSEL);
-
-            if (!this._clipEl) {
-                this._clipEl = this._createCarouselClip();
-                this._clipEl.appendChild(this._carouselEl);
-            }
-
-            if (appendTo) {
-                this.appendChild(this._clipEl);
-                this.appendTo(appendTo);
-                this._setClipContainerSize();
-            } else {
-                if (!Dom.inDocument(this.get("element"))) {
-                    YAHOO.log("Nothing to render. The container should be " +
-                            "within the document if appendTo is not "       +
-                            "specified", "error", WidgetName);
-                    return false;
-                }
-                this.appendChild(this._clipEl);
-            }
-
-            if (this.get("isVertical")) {
-                size = getCarouselItemSize.call(this);
-                size = size < config.MIN_WIDTH ? config.MIN_WIDTH : size;
-                this.setStyle("width",  size + "px");
-                this.addClass(cssClass.VERTICAL);
-            } else {
-                this.addClass(cssClass.HORIZONTAL);
-            }
-
-            if (this.get("numItems") < 1) {
-                YAHOO.log("No items in the Carousel to render", "warn",
-                        WidgetName);
-                return false;
-            }
-
-            // Make sure at least one item is selected
-            this.set("selectedItem", this.get("firstVisible"));
-
-            this.fireEvent(renderEvent);
-
-            // By now, the navigation would have been rendered, so calculate
-            // the container height now.
-            this._setContainerSize();
-
-            return true;
-        },
-
-        /**
-         * Scroll the Carousel by an item backward.
-         *
-         * @method scrollBackward
-         * @public
-         */
-        scrollBackward: function () {
-            this.scrollTo(this._firstItem - this.get("scrollIncrement"));
-        },
-
-        /**
-         * Scroll the Carousel by an item forward.
-         *
-         * @method scrollForward
-         * @public
-         */
-        scrollForward: function () {
-            this.scrollTo(this._firstItem + this.get("scrollIncrement"));
-        },
-
-        /**
-         * Scroll the Carousel by a page backward.
-         *
-         * @method scrollPageBackward
-         * @public
-         */
-        scrollPageBackward: function () {
-            this.scrollTo(this._firstItem - this.get("numVisible"));
-        },
-
-        /**
-         * Scroll the Carousel by a page forward.
-         *
-         * @method scrollPageForward
-         * @public
-         */
-        scrollPageForward: function () {
-            this.scrollTo(this._firstItem + this.get("numVisible"));
-        },
-
-        /**
-         * Scroll the Carousel to make the item the first visible item.
-         *
-         * @method scrollTo
-         * @public
-         * @param item Number The index of the element to position at.
-         * @param dontSelect Boolean True if select should be avoided
-         */
-        scrollTo: function (item, dontSelect) {
-            var anim,
-                animate,
-                animAttrs,
-                animCfg    = this.get("animation"),
-                isCircular = this.get("isCircular"),
-                delta,
-                direction,
-                firstItem  = this._firstItem,
-                newPage,
-                numItems   = this.get("numItems"),
-                numPerPage = this.get("numVisible"),
-                offset,
-                page       = this.get("currentPage"),
-                rv,
-                sentinel,
-                which;
-
-            if (item == firstItem) {
-                return;         // nothing to do!
-            }
-
-            if (this._isAnimationInProgress) {
-                return;         // let it take its own sweet time to complete
-            }
-
-            if (item < 0) {
-                if (isCircular) {
-                    item = numItems + item;
-                } else {
-                    return;
-                }
-            } else if (item > numItems - 1) {
-                if (this.get("isCircular")) {
-                    item = numItems - item;
-                } else {
-                    return;
-                }
-            }
-
-            direction = (this._firstItem > item) ? "backward" : "forward";
-
-            sentinel  = firstItem + numPerPage;
-            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
-            rv = this.fireEvent(beforeScrollEvent,
-                    { dir: direction, first: firstItem, last: sentinel });
-            if (rv === false) { // scrolling is prevented
-                return;
-            }
-
-            this.fireEvent(beforePageChangeEvent, { page: page });
-
-            delta = firstItem - item; // yes, the delta is reverse
-            this._firstItem = item;
-            this.set("firstVisible", item);
-
-            YAHOO.log("Scrolling to " + item + " delta = " + delta, WidgetName);
-
-            loadItems.call(this); // do we have all the items to display?
-
-            sentinel  = item + numPerPage;
-            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
-
-            which     = this.get("isVertical") ? "top" : "left";
-            offset    = getScrollOffset.call(this, delta);
-            YAHOO.log("Scroll offset = " + offset, WidgetName);
-
-            animate   = animCfg.speed > 0;
-
-            if (animate) {
-                this._isAnimationInProgress = true;
-                if (this.get("isVertical")) {
-                    animAttrs = { points: { by: [0, offset] } };
-                } else {
-                    animAttrs = { points: { by: [offset, 0] } };
-                }
-                anim = new YAHOO.util.Motion(this._carouselEl, animAttrs,
-                        animCfg.speed, animCfg.effect);
-                anim.onComplete.subscribe(function (ev) {
-                    var first = this.get("firstVisible");
-
-                    this._isAnimationInProgress = false;
-                    this.fireEvent(afterScrollEvent,
-                            { first: first, last: sentinel });
-                }, null, this);
-                anim.animate();
-                anim = null;
-            } else {
-                offset += getStyle(this._carouselEl, which);
-                Dom.setStyle(this._carouselEl, which, offset + "px");
-            }
-
-            newPage = parseInt(this._firstItem / numPerPage, 10);
-            if (newPage != page) {
-                this.setAttributeConfig("currentPage", { value: newPage });
-                this.fireEvent(pageChangeEvent, newPage);
-            }
-
-            if (!dontSelect) {
-                if (this.get("selectOnScroll")) {
-                    if (item != this._selectedItem) { // out of sync
-                        this.set("selectedItem", this._getSelectedItem(item));
-                    }
-                }
-            }
-
-            delete this._autoPlayTimer;
-            if (this.get("autoPlay") > 0) {
-                this.startAutoPlay();
-            }
-
-            if (!animate) {
-                this.fireEvent(afterScrollEvent,
-                        { first: item, last: sentinel });
-            }
-        },
-
-        /**
-         * Display the Carousel.
-         *
-         * @method show
-         * @public
-         */
-        show: function () {
-            var cssClass = this.CLASSES;
-
-            if (this.fireEvent(beforeShowEvent) !== false) {
-                this.addClass(cssClass.VISIBLE);
-                this.fireEvent(showEvent);
-            }
-        },
-
-        /**
-         * Start auto-playing the Carousel.
-         *
-         * @method startAutoPlay
-         * @public
-         */
-        startAutoPlay: function () {
-            var self  = this,
-                timer = this.get("autoPlay");
-
-            if (timer > 0) {
-                if (!JS.isUndefined(this._autoPlayTimer)) {
-                    return;
-                }
-                this.fireEvent(startAutoPlayEvent);
-                this._autoPlayTimer = setTimeout(function () {
-                    autoScroll.call(self); }, timer);
-            }
-        },
-
-        /**
-         * Stop auto-playing the Carousel.
-         *
-         * @method stopAutoPlay
-         * @public
-         */
-        stopAutoPlay: function () {
-            if (!JS.isUndefined(this._autoPlayTimer)) {
-                clearTimeout(this._autoPlayTimer);
-                delete this._autoPlayTimer;
-                this.set("autoPlay", 0);
-                this.fireEvent(stopAutoPlayEvent);
-            }
-        },
-
-        /**
-         * Return the string representation of the Carousel.
-         *
-         * @method toString
-         * @public
-         * @return {String}
-         */
-        toString: function () {
-            return WidgetName + (this.get ? " (#" + this.get("id") + ")" : "");
-        },
-
-        /*
-         * Protected methods of the Carousel component
-         */
-
-        /**
-         * Create the Carousel.
-         *
-         * @method createCarousel
-         * @param elId {String} The id of the element to be created
-         * @protected
-         */
-        _createCarousel: function (elId) {
-            var cssClass = this.CLASSES;
-
-            var el = createElement("DIV", {
-                    className : cssClass.CAROUSEL,
-                    id        : elId
-            });
-
-            if (!this._carouselEl) {
-                this._carouselEl = createElement(this.CONFIG.TAG_NAME,
-                        { className: cssClass.CAROUSEL_EL });
-            }
-
-            return el;
-        },
-
-        /**
-         * Create the Carousel clip container.
-         *
-         * @method createCarouselClip
-         * @protected
-         */
-        _createCarouselClip: function () {
-            var el = createElement("DIV", { className: this.CLASSES.CONTENT });
-            this._setClipContainerSize(el);
-
-            return el;
-        },
-
-        /**
-         * Create the Carousel item.
-         *
-         * @method createCarouselItem
-         * @param obj {Object} The attributes of the element to be created
-         * @protected
-         */
-        _createCarouselItem: function (obj) {
-            return createElement(this.CONFIG.ITEM_TAG_NAME, {
-                    className : obj.className,
-                    content   : obj.content,
-                    id        : obj.id
-            });
-        },
-
-        /**
-         * Get the value for the selected item.
-         *
-         * @method _getSelectedItem
-         * @param val {Number} The new value for "selected" item
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _getSelectedItem: function (val) {
-            var isCircular = this.get("isCircular"),
-                numItems   = this.get("numItems"),
-                sentinel   = numItems - 1;
-
-            if (val < 0) {
-                if (isCircular) {
-                    val = numItems + val;
-                } else {
-                    val = this.get("selectedItem");
-                }
-            } else if (val > sentinel) {
-                if (isCircular) {
-                    val = val - numItems;
-                } else {
-                    val = this.get("selectedItem");
-                }
-            }
-
-            return val;
-        },
-
-        /**
-         * The "click" handler for the item.
-         *
-         * @method _itemClickHandler
-         * @param {Event} ev The event object
-         * @protected
-         */
-        _itemClickHandler: function (ev) {
-            var container = this.get("element"),
-                el,
-                item,
-                target = YAHOO.util.Event.getTarget(ev);
-
-            while (target && target != container &&
-                   target.id != this._carouselEl) {
-                el = target.nodeName;
-                if (el.toUpperCase() == this.CONFIG.ITEM_TAG_NAME) {
-                    break;
-                }
-                target = target.parentNode;
-            }
-
-            if ((item = this.getItemPositionById(target.id)) >= 0) {
-                YAHOO.log("Setting selection to " + item, WidgetName);
-                this.set("selectedItem", this._getSelectedItem(item));
-            }
-        },
-
-        /**
-         * The keyboard event handler for Carousel.
-         *
-         * @method _keyboardEventHandler
-         * @param ev {Event} The event that is being handled.
-         * @protected
-         */
-        _keyboardEventHandler: function (ev) {
-            var key      = Event.getCharCode(ev),
-                prevent  = false,
-                position = 0,
-                selItem;
-
-            if (this._isAnimationInProgress) {
-                return;         // do not mess while animation is in progress
-            }
-
-            switch (key) {
-            case 0x25:          // left arrow
-            case 0x26:          // up arrow
-                selItem = this.get("selectedItem");
-                if (selItem == this._firstItem) {
-                    position = selItem - this.get("numVisible");
-                    this.scrollTo(position);
-                    this.set("selectedItem", this._getSelectedItem(selItem-1));
-                } else {
-                    position = this.get("selectedItem") -
-                            this.get("scrollIncrement");
-                    this.set("selectedItem", this._getSelectedItem(position));
-                }
-                prevent = true;
-                break;
-            case 0x27:          // right arrow
-            case 0x28:          // down arrow
-                position = this.get("selectedItem")+this.get("scrollIncrement");
-                this.set("selectedItem", this._getSelectedItem(position));
-                prevent = true;
-                break;
-            case 0x21:          // page-up
-                this.scrollPageBackward();
-                prevent = true;
-                break;
-            case 0x22:          // page-down
-                this.scrollPageForward();
-                prevent = true;
-                break;
-            }
-
-            if (prevent) {
-                Event.preventDefault(ev);
-            }
-        },
-
-        /**
-         * The "click" handler for the pager navigation.
-         *
-         * @method _pagerClickHandler
-         * @param {Event} ev The event object
-         * @protected
-         */
-        _pagerClickHandler: function (ev) {
-            var pos, target, val;
-
-            target = Event.getTarget(ev);
-            val = target.href || target.value;
-            if (JS.isString(val) && val) {
-                pos = val.lastIndexOf("#");
-                if (pos != -1) {
-                    val = this.getItemPositionById(val.substring(pos + 1));
-                    this.scrollTo(val);
-                    Event.preventDefault(ev);
-                }
-            }
-        },
-
-        /**
-         * Find the Carousel within a container. The Carousel is identified by
-         * the first element that matches the carousel element tag or the
-         * element that has the Carousel class.
-         *
-         * @method parseCarousel
-         * @param parent {HTMLElement} The parent element to look under
-         * @return {Boolean} True if Carousel is found, false otherwise
-         * @protected
-         */
-        _parseCarousel: function (parent) {
-            var child, cssClass, found, node;
-
-            cssClass = this.CLASSES;
-            found    = false;
-
-            for (child = parent.firstChild; child; child = child.nextSibling) {
-                if (child.nodeType == 1) {
-                    node = child.nodeName;
-                    if (node.toUpperCase() == this.CONFIG.TAG_NAME) {
-                        this._carouselEl = child;
-                        Dom.addClass(this._carouselEl,this.CLASSES.CAROUSEL_EL);
-                        YAHOO.log("Found Carousel - " + node +
-                                (child.id ? " (#" + child.id + ")" : ""),
-                                WidgetName);
-                        found = true;
-                    }
-                }
-            }
-
-            return found;
-        },
-
-        /**
-         * Find the items within the Carousel and add them to the items table.
-         * A Carousel item is identified by elements that matches the carousel
-         * item element tag.
-         *
-         * @method parseCarouselItems
-         * @protected
-         */
-        _parseCarouselItems: function () {
-            var child,
-                elId,
-                node,
-                parent = this._carouselEl;
-
-            for (child = parent.firstChild; child; child = child.nextSibling) {
-                if (child.nodeType == 1) {
-                    node = child.nodeName;
-                    if (node.toUpperCase() == this.CONFIG.ITEM_TAG_NAME) {
-                        if (child.id) {
-                            elId = child.id;
-                        } else {
-                            elId = Dom.generateId();
-                            child.setAttribute("id", elId);
-                        }
-                        this.addItem(child);
-                    }
-                }
-            }
-        },
-
-        /**
-         * Find the Carousel navigation within a container. The navigation
-         * elements need to match the carousel navigation class names.
-         *
-         * @method parseCarouselNavigation
-         * @param parent {HTMLElement} The parent element to look under
-         * @return {Boolean} True if at least one is found, false otherwise
-         * @protected
-         */
-        _parseCarouselNavigation: function (parent) {
-            var cfg, cssClass = this.CLASSES, el, i, j, nav, rv = false;
-
-            nav = Dom.getElementsByClassName(cssClass.PREV_PAGE, "*", parent);
-            if (nav.length > 0) {
-                for (i in nav) {
-                    if (nav.hasOwnProperty(i)) {
-                        el = nav[i];
-                        YAHOO.log("Found Carousel previous page navigation - " +
-                                el + (el.id ? " (#" + el.id + ")" : ""),
-                                WidgetName);
-                        if (el.nodeName == "INPUT" ||
-                            el.nodeName == "BUTTON") {
-                            if (typeof this._navBtns.prev == "undefined") {
-                                this._navBtns.prev = [];
-                            }
-                            this._navBtns.prev.push(el);
-                        } else {
-                            j = el.getElementsByTagName("INPUT");
-                            if (JS.isArray(j) && j.length > 0) {
-                                this._navBtns.prev.push(j[0]);
-                            } else {
-                                j = el.getElementsByTagName("BUTTON");
-                                if (JS.isArray(j) && j.length > 0) {
-                                    this._navBtns.prev.push(j[0]);
-                                }
-                            }
-                        }
-                    }
-                }
-                cfg = { prev: nav };
-            }
-
-            nav = Dom.getElementsByClassName(cssClass.NEXT_PAGE, "*", parent);
-            if (nav.length > 0) {
-                for (i in nav) {
-                    if (nav.hasOwnProperty(i)) {
-                        el = nav[i];
-                        YAHOO.log("Found Carousel next page navigation - " +
-                                el + (el.id ? " (#" + el.id + ")" : ""),
-                                WidgetName);
-                        if (el.nodeName == "INPUT" ||
-                            el.nodeName == "BUTTON") {
-                            if (typeof this._navBtns.next == "undefined") {
-                                this._navBtns.next = [];
-                            }
-                            this._navBtns.next.push(el);
-                        } else {
-                            j = el.getElementsByTagName("INPUT");
-                            if (JS.isArray(j) && j.length > 0) {
-                                this._navBtns.next.push(j[0]);
-                            } else {
-                                j = el.getElementsByTagName("BUTTON");
-                                if (JS.isArray(j) && j.length > 0) {
-                                    this._navBtns.next.push(j[0]);
-                                }
-                            }
-                        }
-                    }
-                }
-                if (cfg) {
-                    cfg.next = nav;
-                } else {
-                    cfg = { next: nav };
-                }
-            }
-
-            if (cfg) {
-                this.set("navigation", cfg);
-                rv = true;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Setup/Create the Carousel navigation element (if needed).
-         *
-         * @method _setupCarouselNavigation
-         * @protected
-         */
-        _setupCarouselNavigation: function () {
-            var btn, cfg, cssClass, nav, navContainer, nextButton, pageEl,
-                prevButton;
-
-            cssClass = this.CLASSES;
-
-            navContainer = Dom.getElementsByClassName(cssClass.NAVIGATION,
-                    "DIV", this.get("element"));
-
-            if (navContainer.length === 0) {
-                navContainer = createElement("DIV",
-                        { className: cssClass.NAVIGATION });
-                this.insertBefore(navContainer,
-                        Dom.getFirstChild(this.get("element")));
-            } else {
-                navContainer = navContainer[0];
-            }
-
-            this._pages.el = createElement("UL");
-            navContainer.appendChild(this._pages.el);
-
-            nav = this.get("navigation");
-            if (nav.prev && nav.prev.length > 0) {
-                navContainer.appendChild(nav.prev[0]);
-            } else {
-                // TODO: separate method for creating a navigation button
-                prevButton = createElement("SPAN",
-                        { className: cssClass.BUTTON + cssClass.FIRST_NAV });
-                // XXX: for IE 6.x
-                Dom.setStyle(prevButton, "visibility", "visible");
-                btn = Dom.generateId();
-                prevButton.innerHTML = "<input type=\"button\" " +
-                        "id=\"" + btn + "\" " +
-                        "value=\"" + this.STRINGS.PREVIOUS_BUTTON_TEXT + "\" " +
-                        "name=\"" + this.STRINGS.PREVIOUS_BUTTON_TEXT + "\">";
-                navContainer.appendChild(prevButton);
-                btn = Dom.get(btn);
-                this._navBtns.prev = [btn];
-                cfg = { prev: [prevButton] };
-            }
-
-            if (nav.next && nav.next.length > 0) {
-                navContainer.appendChild(nav.next[0]);
-            } else {
-                // TODO: separate method for creating a navigation button
-                nextButton = createElement("SPAN",
-                        { className: cssClass.BUTTON });
-                // XXX: for IE 6.x
-                Dom.setStyle(nextButton, "visibility", "visible");
-                btn = Dom.generateId();
-                nextButton.innerHTML = "<input type=\"button\" " +
-                        "id=\"" + btn + "\" " +
-                        "value=\"" + this.STRINGS.NEXT_BUTTON_TEXT + "\" " +
-                        "name=\"" + this.STRINGS.NEXT_BUTTON_TEXT + "\">";
-                navContainer.appendChild(nextButton);
-                btn = Dom.get(btn);
-                this._navBtns.next = [btn];
-                if (cfg) {
-                    cfg.next = [nextButton];
-                } else {
-                    cfg = { next: [nextButton] };
-                }
-            }
-
-            if (cfg) {
-                this.set("navigation", cfg);
-            }
-
-            return navContainer;
-        },
-
-        /**
-         * Set the clip container size (based on the new numVisible value).
-         *
-         * @method _setClipContainerSize
-         * @param clip {HTMLElement} The clip container element.
-         * @param num {Number} optional The number of items per page.
-         * @protected
-         */
-        _setClipContainerSize: function (clip, num) {
-            var attr, currVal, isVertical, itemSize, reveal, size, which;
-
-            isVertical = this.get("isVertical");
-            reveal     = this.get("revealAmount");
-            which      = isVertical ? "height" : "width";
-            attr       = isVertical ? "top" : "left";
-
-            clip       = clip || this._clipEl;
-            if (!clip) {
-                return;
-            }
-
-            num        = num  || this.get("numVisible");
-            itemSize   = getCarouselItemSize.call(this, which);
-            size       = itemSize * num;
-
-            this._recomputeSize = (size === 0); // bleh!
-            if (this._recomputeSize) {
-                return;             // no use going further, bail out!
-            }
-
-            if (reveal > 0) {
-                reveal = itemSize * (reveal / 100) * 2;
-                size += reveal;
-                // TODO: set the Carousel's initial offset somwehere
-                currVal = parseFloat(Dom.getStyle(this._carouselEl, attr));
-                currVal = JS.isNumber(currVal) ? currVal : 0;
-                Dom.setStyle(this._carouselEl, attr, currVal+(reveal/2)+"px");
-            }
-
-            if (isVertical) {
-                size += getStyle(this._carouselEl, "marginTop")     +
-                        getStyle(this._carouselEl, "marginBottom")  +
-                        getStyle(this._carouselEl, "paddingTop")    +
-                        getStyle(this._carouselEl, "paddingBottom") +
-                        getStyle(this._carouselEl, "borderTop")     +
-                        getStyle(this._carouselEl, "borderBottom");
-                // XXX: for vertical Carousel
-                Dom.setStyle(clip, which, (size - (num - 1)) + "px");
-            } else {
-                size += getStyle(this._carouselEl, "marginLeft")    +
-                        getStyle(this._carouselEl, "marginRight")   +
-                        getStyle(this._carouselEl, "paddingLeft")   +
-                        getStyle(this._carouselEl, "paddingRight")  +
-                        getStyle(this._carouselEl, "borderLeft")    +
-                        getStyle(this._carouselEl, "borderRight");
-                Dom.setStyle(clip, which, size + "px");
-            }
-
-            this._setContainerSize(clip); // adjust the container size too
-        },
-
-        /**
-         * Set the container size.
-         *
-         * @method _setContainerSize
-         * @param clip {HTMLElement} The clip container element.
-         * @param attr {String} Either set the height or width.
-         * @protected
-         */
-        _setContainerSize: function (clip, attr) {
-            var isVertical, size;
-
-            isVertical = this.get("isVertical");
-            clip       = clip || this._clipEl;
-            attr       = attr || (isVertical ? "height" : "width");
-            size       = parseFloat(Dom.getStyle(clip, attr), 10);
-
-            size = JS.isNumber(size) ? size : 0;
-
-            size += getStyle(clip, "marginLeft")   +
-                    getStyle(clip, "marginRight")  +
-                    getStyle(clip, "paddingLeft")  +
-                    getStyle(clip, "paddingRight") +
-                    getStyle(clip, "borderLeft")   +
-                    getStyle(clip, "borderRight");
-
-            if (isVertical) {
-                size += getStyle(this._navEl, "height");
-            }
-
-            this.setStyle(attr, size + "px");
-        },
-
-        /**
-         * Set the value for the Carousel's first visible item.
-         *
-         * @method _setFirstVisible
-         * @param val {Number} The new value for firstVisible
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setFirstVisible: function (val) {
-            if (val >= 0 && val < this.get("numItems")) {
-                this.scrollTo(val);
-            } else {
-                val = this.get("firstVisible");
-            }
-            return val;
-        },
-
-        /**
-         * Set the value for the Carousel's navigation.
-         *
-         * @method _setNavigation
-         * @param cfg {Object} The navigation configuration
-         * @return {Object} The new value that would be set
-         * @protected
-         */
-        _setNavigation: function (cfg) {
-            if (cfg.prev) {
-                Event.on(cfg.prev, "click", scrollPageBackward, this);
-            }
-            if (cfg.next) {
-                Event.on(cfg.next, "click", scrollPageForward, this);
-            }
-        },
-
-        /**
-         * Set the value for the number of visible items in the Carousel.
-         *
-         * @method _setNumVisible
-         * @param val {Number} The new value for numVisible
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setNumVisible: function (val) {
-            if (val > 1 && val < this.get("numItems")) {
-                this._setClipContainerSize(this._clipEl, val);
-            } else {
-                val = this.get("numVisible");
-            }
-            return val;
-        },
-
-        /**
-         * Set the number of items in the Carousel.
-         * Warning: Setting this to a lower number than the current removes
-         * items from the end.
-         *
-         * @method _setNumItems
-         * @param val {Number} The new value for numItems
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setNumItems: function (val) {
-            var num = this._itemsTable.numItems;
-
-            if (JS.isArray(this._itemsTable.items)) {
-                if (this._itemsTable.items.length != num) { // out of sync
-                    num = this._itemsTable.items.length;
-                    this._itemsTable.numItems = num;
-                }
-            }
-
-            if (val < num) {
-                while (num > val) {
-                    this.removeItem(num - 1);
-                    num--;
-                }
-            }
-
-            return val;
-        },
-
-        /**
-         * Set the orientation of the Carousel.
-         *
-         * @method _setOrientation
-         * @param val {Boolean} The new value for isVertical
-         * @return {Boolean} The new value that would be set
-         * @protected
-         */
-        _setOrientation: function (val) {
-            var cssClass = this.CLASSES;
-
-            if (val) {
-                this.replaceClass(cssClass.HORIZONTAL, cssClass.VERTICAL);
-            } else {
-                this.replaceClass(cssClass.VERTICAL, cssClass.HORIZONTAL);
-            }
-            this._itemsTable.size = 0; // invalidate our size computation cache
-            return val;
-        },
-
-        /**
-         * Set the value for the reveal amount percentage in the Carousel.
-         *
-         * @method _setRevealAmount
-         * @param val {Number} The new value for revealAmount
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setRevealAmount: function (val) {
-            if (val >= 0 && val <= 100) {
-                val = parseInt(val, 10);
-                val = JS.isNumber(val) ? val : 0;
-                this._setClipContainerSize();
-            } else {
-                val = this.get("revealAmount");
-            }
-            return val;
-        },
-
-        /**
-         * Set the value for the selected item.
-         *
-         * @method _setSelectedItem
-         * @param val {Number} The new value for "selected" item
-         * @protected
-         */
-        _setSelectedItem: function (val) {
-            this._selectedItem = val;
-        },
-
-        /**
-         * Synchronize and redraw the Pager UI if necessary.
-         *
-         * @method _syncPagerUI
-         * @protected
-         */
-        _syncPagerUI: function (page) {
-            var a,
-                cssClass = this.CLASSES,
-                i,
-                markup     = "",
-                numPages,
-                numVisible = this.get("numVisible");
-
-            page     = page || 0;
-            numPages = Math.ceil(this.get("numItems") / numVisible);
-
-            this._pages.num = numPages;
-            this._pages.cur = page;
-
-            if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                markup = "<form><select>";
-            } else {
-                markup = "";
-            }
-
-            for (i = 0; i < numPages; i++) {
-                if (JS.isUndefined(this._itemsTable.items[i * numVisible])) {
-                    break;
-                }
-                a = this._itemsTable.items[i * numVisible].id;
-                if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                    markup += "<option value=\"#" + a + "\" "            +
-                            (i == page ? " selected" : "") + ">"         +
-                            this.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1) +
-                            "</option>";
-                } else {
-                    markup += "<li class=\""                                   +
-                            (i === 0 ? cssClass.FIRST_PAGE : "")               +
-                            (i == page ? " " + cssClass.SELECTED_NAV : "")     +
-                            "\"><a href=\"#" + a + "\" tabindex=\"0\"><em>"    +
-                            this.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1)       +
-                            "</em></a></li>";
-                }
-            }
-
-            if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                markup += "</select></form>";
-            }
-
-            this._pages.el.innerHTML = markup;
-            markup = null;
-        },
-
-        /**
-         * Set the correct class for the navigation buttons.
-         *
-         * @method _updateNavButtons
-         * @param el {Object} The target button
-         * @param setFocus {Boolean} True to set focus ring, false otherwise.
-         * @protected
-         */
-        _updateNavButtons: function (el, setFocus) {
-            var children,
-                cssClass = this.CLASSES,
-                grandParent,
-                parent   = el.parentNode;
-
-            if (!parent) {
-                return;
-            }
-            grandParent = parent.parentNode;
-
-            if (el.nodeName.toUpperCase() == "INPUT" &&
-                Dom.hasClass(parent, cssClass.BUTTON)) {
-                if (setFocus) {
-                    if (grandParent) {
-                        children = Dom.getChildren(grandParent);
-                        if (children) {
-                            Dom.removeClass(children, cssClass.FOCUSSED_BUTTON);
-                        }
-                    }
-                    Dom.addClass(parent, cssClass.FOCUSSED_BUTTON);
-                } else {
-                    Dom.removeClass(parent, cssClass.FOCUSSED_BUTTON);
-                }
-            }
-        },
-
-        /**
-         * Set the correct tab index for the Carousel items.
-         *
-         * @method _updateTabIndex
-         * @param el {Object} The element to be focussed
-         * @protected
-         */
-        _updateTabIndex: function (el) {
-            if (el) {
-                if (this._focusableItemEl) {
-                    this._focusableItemEl.tabIndex = -1;
-                }
-                this._focusableItemEl = el;
-                el.tabIndex = 0;
-            }
-        },
-
-        /**
-         * Validate animation parameters.
-         *
-         * @method _validateAnimation
-         * @param cfg {Object} The animation configuration
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateAnimation: function (cfg) {
-            var rv = true;
-
-            if (JS.isObject(cfg)) {
-                if (cfg.speed) {
-                    rv = rv && JS.isNumber(cfg.speed);
-                }
-                if (cfg.effect) {
-                    rv = rv && JS.isFunction(cfg.effect);
-                } else if (!JS.isUndefined(YAHOO.util.Easing)) {
-                    cfg.effect = YAHOO.util.Easing.easeOut;
-                }
-            } else {
-                rv = false;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the firstVisible value.
-         *
-         * @method _validateFirstVisible
-         * @param val {Number} The first visible value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateFirstVisible: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = (val >= 0 && val < this.get("numItems"));
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate and navigation parameters.
-         *
-         * @method _validateNavigation
-         * @param cfg {Object} The navigation configuration
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNavigation : function (cfg) {
-            var i;
-
-            if (!JS.isObject(cfg)) {
-                return false;
-            }
-
-            if (cfg.prev) {
-                if (!JS.isArray(cfg.prev)) {
-                    return false;
-                }
-                for (i in cfg.prev) {
-                    if (cfg.prev.hasOwnProperty(i)) {
-                        if (!JS.isString(cfg.prev[i].nodeName)) {
-                            return false;
-                        }
-                    }
-                }
-            }
-
-            if (cfg.next) {
-                if (!JS.isArray(cfg.next)) {
-                    return false;
-                }
-                for (i in cfg.next) {
-                    if (cfg.next.hasOwnProperty(i)) {
-                        if (!JS.isString(cfg.next[i].nodeName)) {
-                            return false;
-                        }
-                    }
-                }
-            }
-
-            return true;
-        },
-
-        /**
-         * Validate the numItems value.
-         *
-         * @method _validateNumItems
-         * @param val {Number} The numItems value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNumItems: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val > 0;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the numVisible value.
-         *
-         * @method _validateNumVisible
-         * @param val {Number} The numVisible value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNumVisible: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val > 0 && val < this.get("numItems");
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the revealAmount value.
-         *
-         * @method _validateRevealAmount
-         * @param val {Number} The revealAmount value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateRevealAmount: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val >= 0 && val < 100;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the scrollIncrement value.
-         *
-         * @method _validateScrollIncrement
-         * @param val {Number} The scrollIncrement value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateScrollIncrement: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = (val > 0 && val < this.get("numItems"));
-            }
-
-            return rv;
-        }
-
-    });
-
-})();
-
-YAHOO.register("carousel", YAHOO.widget.Carousel, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/carousel/carousel-beta-min.js
===================================================================
--- trunk/root/static/yui/carousel/carousel-beta-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel-beta-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function(){var W;YAHOO.widget.Carousel=function(k,j){this._navBtns={};this._pages={};YAHOO.widget.Carousel.superclass.constructor.call(this,k,j);};var e=YAHOO.widget.Carousel,C=YAHOO.util.Dom,i=YAHOO.util.Event,R=YAHOO.lang;W="Carousel";var G={};var h="afterScroll";var F="beforeHide";var f="beforePageChange";var b="beforeScroll";var A="beforeShow";var V="blur";var D="focus";var O="hide";var Q="itemAdded";var J="itemRemoved";var d="itemSelected";var B="loadItems";var E="navigationStateChange";var U="pageChange";var T="render";var I="show";var c="startAutoPlay";var g="stopAutoPlay";function L(){var k=this._firstItem,j;if(k>=this.get("numItems")-1){if(this.get("isCircular")){j=0;}else{this.stopAutoPlay();}}else{j=k+this.get("numVisible");}this.scrollTo.call(this,j);}function a(k,j){var l=document.createElement(k);j=j||{};if(j.className){C.addClass(l,j.className);}if(j.parent){j.parent.appendChild(l);}if(j.id){l.setAttribute("id",j.id);}if(j.content){if(j.content.nodeName){l.a!
 ppendChild(j.content);}else{l.innerHTML=j.content;}}return l;}function K(l,k,j){var n;function m(q,p){var r;r=parseInt(C.getStyle(q,p),10);return R.isNumber(r)?r:0;}function o(q,p){var r;r=parseFloat(C.getStyle(q,p));return R.isNumber(r)?r:0;}if(typeof j=="undefined"){j="int";}switch(k){case"height":n=l.offsetHeight;if(n>0){n+=m(l,"marginTop")+m(l,"marginBottom");}else{n=o(l,"height")+m(l,"marginTop")+m(l,"marginBottom")+m(l,"borderTopWidth")+m(l,"borderBottomWidth")+m(l,"paddingTop")+m(l,"paddingBottom");}break;case"width":n=l.offsetWidth;if(n>0){n+=m(l,"marginLeft")+m(l,"marginRight");}else{n=o(l,"width")+m(l,"marginLeft")+m(l,"marginRight")+m(l,"borderLeftWidth")+m(l,"borderRightWidth")+m(l,"paddingLeft")+m(l,"paddingRight");}break;default:if(j=="int"){n=m(l,k);if(k=="marginRight"&&YAHOO.env.ua.webkit){n=m(l,"marginLeft");}}else{if(j=="float"){n=o(l,k);}else{n=C.getStyle(l,k);}}break;}return n;}function Y(l){var m,k=0,j=false;if(this._itemsTable.numItems===0){return 0;}i!
 f(typeof l=="undefined"){if(this._itemsTable.size>0){return th!
 is._item
sTable.size;}}if(R.isUndefined(this._itemsTable.items[0])){return 0;}m=C.get(this._itemsTable.items[0].id);if(typeof l=="undefined"){j=this.get("isVertical");}else{j=l=="height";}if(j){k=K(m,"height");}else{k=K(m,"width");}if(typeof l=="undefined"){this._itemsTable.size=k;}return k;}function S(l){var k=0,j=0;k=Y.call(this);j=k*l;if(this.get("isVertical")){j-=l;}return j;}function H(){var n=this.get("firstVisible"),k=0,j=this.get("numItems"),l=this.get("numVisible"),m=this.get("revealAmount");k=n+l-1+(m?1:0);k=k>j-1?j-1:k;if(!this.getItem(n)||!this.getItem(k)){this.fireEvent(B,{ev:B,first:n,last:k,num:k-n});}}function N(j,k){k.scrollPageBackward();i.preventDefault(j);}function X(j,k){k.scrollPageForward();i.preventDefault(j);}function P(o,j){var r,t=this.CLASSES,k,q=this._firstItem,l=this.get("isCircular"),p=this.get("numItems"),s=this.get("numVisible"),n=j,m=q+s-1;r=s>1&&!l&&n>o;if(n>=0&&n<p){if(!R.isUndefined(this._itemsTable.items[n])){k=C.get(this._itemsTable.items[n].id)!
 ;if(k){C.removeClass(k,t.SELECTED_ITEM);}}}if(R.isNumber(o)){o=parseInt(o,10);o=R.isNumber(o)?o:0;}else{o=q;}if(R.isUndefined(this._itemsTable.items[o])){this.scrollTo(o);}if(!R.isUndefined(this._itemsTable.items[o])){k=C.get(this._itemsTable.items[o].id);if(k){C.addClass(k,t.SELECTED_ITEM);}}if(o<q||o>m){if(r){this.scrollTo(q-s,true);}else{this.scrollTo(o);}}}function Z(){var l=false,k=this.CLASSES,n,j,m;j=this.get("navigation");m=this._firstItem+this.get("numVisible");if(j.prev){if(this._firstItem===0){if(!this.get("isCircular")){i.removeListener(j.prev,"click",N);C.addClass(j.prev,k.FIRST_NAV_DISABLED);for(n=0;n<this._navBtns.prev.length;n++){this._navBtns.prev[n].setAttribute("disabled","true");}this._prevEnabled=false;}else{l=!this._prevEnabled;}}else{l=!this._prevEnabled;}if(l){i.on(j.prev,"click",N,this);C.removeClass(j.prev,k.FIRST_NAV_DISABLED);for(n=0;n<this._navBtns.prev.length;n++){this._navBtns.prev[n].removeAttribute("disabled");}this._prevEnabled=true;}}l=fal!
 se;if(j.next){if(m>=this.get("numItems")){if(!this.get("isCirc!
 ular")){
i.removeListener(j.next,"click",X);C.addClass(j.next,k.DISABLED);for(n=0;n<this._navBtns.next.length;n++){this._navBtns.next[n].setAttribute("disabled","true");}this._nextEnabled=false;}else{l=!this._nextEnabled;}}else{l=!this._nextEnabled;}if(l){i.on(j.next,"click",X,this);C.removeClass(j.next,k.DISABLED);for(n=0;n<this._navBtns.next.length;n++){this._navBtns.next[n].removeAttribute("disabled");}this._nextEnabled=true;}}this.fireEvent(E,{next:this._nextEnabled,prev:this._prevEnabled});}function M(q){var n,l,p,k,j,r,m;if(!R.isObject(q)){return ;}switch(q.ev){case Q:r=R.isUndefined(q.pos)?this._itemsTable.numItems-1:q.pos;if(!R.isUndefined(this._itemsTable.items[r])){p=this._itemsTable.items[r];if(p&&!R.isUndefined(p.id)){j=C.get(p.id);}}if(!j){n=this._createCarouselItem({className:p.className,content:p.item,id:p.id});if(R.isUndefined(q.pos)){if(!R.isUndefined(this._itemsTable.loading[r])){j=this._itemsTable.loading[r];}if(j){this._carouselEl.replaceChild(n,j);}else{this._car!
 ouselEl.appendChild(n);}}else{if(!R.isUndefined(this._itemsTable.items[q.pos+1])){m=C.get(this._itemsTable.items[q.pos+1].id);}if(m){this._carouselEl.insertBefore(n,m);}else{}}}else{if(R.isUndefined(q.pos)){if(!C.isAncestor(this._carouselEl,j)){this._carouselEl.appendChild(j);}}else{if(!C.isAncestor(this._carouselEl,j)){if(!R.isUndefined(this._itemsTable.items[q.pos+1])){this._carouselEl.insertBefore(j,C.get(this._itemsTable.items[q.pos+1].id));}}}}if(this._recomputeSize){this._setClipContainerSize();}break;case J:k=this.get("numItems");p=q.item;r=q.pos;if(p&&(n=C.get(p.id))){if(n&&C.isAncestor(this._carouselEl,n)){i.purgeElement(n,true);this._carouselEl.removeChild(n);}if(this.get("selectedItem")==r){r=r>=k?k-1:r;this.set("selectedItem",r);}}else{}break;case B:for(l=q.first;l<=q.last;l++){n=this._createCarouselItem({content:this.CONFIG.ITEM_LOADING,id:C.generateId()});if(n){if(!R.isUndefined(this._itemsTable.items[q.last+1])){m=C.get(this._itemsTable.items[q.last+1].id);
-if(m){this._carouselEl.insertBefore(n,m);}else{}}else{this._carouselEl.appendChild(n);}}this._itemsTable.loading[l]=n;}break;}}e.getById=function(j){return G[j]?G[j]:false;};YAHOO.extend(e,YAHOO.util.Element,{_carouselEl:null,_clipEl:null,_firstItem:0,_isAnimationInProgress:false,_itemsTable:null,_navBtns:null,_navEl:null,_nextEnabled:true,_pages:null,_prevEnabled:true,_recomputeSize:true,CLASSES:{BUTTON:"yui-carousel-button",CAROUSEL:"yui-carousel",CAROUSEL_EL:"yui-carousel-element",CONTAINER:"yui-carousel-container",CONTENT:"yui-carousel-content",DISABLED:"yui-carousel-button-disabled",FIRST_NAV:" yui-carousel-first-button",FIRST_NAV_DISABLED:"yui-carousel-first-button-disabled",FIRST_PAGE:"yui-carousel-nav-first-page",FOCUSSED_BUTTON:"yui-carousel-button-focus",HORIZONTAL:"yui-carousel-horizontal",NAVIGATION:"yui-carousel-nav",NEXT_PAGE:"yui-carousel-next",NAV_CONTAINER:"yui-carousel-buttons",PREV_PAGE:"yui-carousel-prev",SELECTED_ITEM:"yui-carousel-item-selected",SELECT!
 ED_NAV:"yui-carousel-nav-page-selected",VERTICAL:"yui-carousel-vertical",VERTICAL_CONTAINER:"yui-carousel-vertical-container",VISIBLE:"yui-carousel-visible"},CONFIG:{FIRST_VISIBLE:0,ITEM_LOADING:"<img "+'src="../../build/carousel/assets/ajax-loader.gif" '+'alt="Loading" '+'style="margin-top:-32px;position:relative;top:50%;">',ITEM_TAG_NAME:"LI",MAX_PAGER_BUTTONS:5,MIN_WIDTH:99,NUM_VISIBLE:3,TAG_NAME:"OL"},STRINGS:{NEXT_BUTTON_TEXT:"Next Page",PAGER_PREFIX_TEXT:"Go to page ",PREVIOUS_BUTTON_TEXT:"Previous Page"},addItem:function(p,k){var n,o,m,j,l=this.get("numItems");if(!p){return false;}if(R.isString(p)||p.nodeName){o=p.nodeName?p.innerHTML:p;}else{if(R.isObject(p)){o=p.content;}else{return false;}}n=p.className||"";j=p.id?p.id:C.generateId();if(R.isUndefined(k)){this._itemsTable.items.push({item:o,className:n,id:j});}else{if(k<0||k>=l){return false;}this._itemsTable.items.splice(k,0,{item:o,className:n,id:j});}this._itemsTable.numItems++;if(l<this._itemsTable.items.length!
 ){this.set("numItems",this._itemsTable.items.length);}this.fir!
 eEvent(Q
,{pos:k,ev:Q});return true;},addItems:function(j){var k,m,l=true;if(!R.isArray(j)){return false;}for(k=0,m=j.length;k<m;k++){if(this.addItem(j[k][0],j[k][1])===false){l=false;}}return l;},blur:function(){this._carouselEl.blur();this.fireEvent(V);},clearItems:function(){var j=this.get("numItems");while(j>0){this.removeItem(0);j--;}},focus:function(){var j,s,k,m,n,r,p,o,l;if(this._isAnimationInProgress){return ;}j=this.get("selectedItem");s=this.get("numVisible");k=this.get("selectOnScroll");m=this.getItem(j);n=this.get("firstVisible");r=n+s-1;p=(j<n||j>r);o=(m&&m.id)?C.get(m.id):null;l=this._itemsTable;if(!k&&p){o=(l&&l.items&&l.items[n])?C.get(l.items[n].id):null;}if(o){try{o.focus();}catch(q){}}this.fireEvent(D);},hide:function(){if(this.fireEvent(F)!==false){this.removeClass(this.CLASSES.VISIBLE);this.fireEvent(O);}},init:function(l,k){var j=l,m=false;if(!l){return ;}this._itemsTable={loading:{},numItems:0,items:[],size:0};if(R.isString(l)){l=C.get(l);}else{if(!l.nodeName)!
 {return ;}}if(l){if(!l.id){l.setAttribute("id",C.generateId());}this._parseCarousel(l);m=true;}else{l=this._createCarousel(j);}j=l.id;e.superclass.init.call(this,l,k);this.initEvents();if(m){this._parseCarouselItems();}if(!k||typeof k.isVertical=="undefined"){this.set("isVertical",false);}this._parseCarouselNavigation(l);this._navEl=this._setupCarouselNavigation();G[j]=this;H.call(this);},initAttributes:function(j){j=j||{};e.superclass.initAttributes.call(this,j);this.setAttributeConfig("currentPage",{readOnly:true,value:0});this.setAttributeConfig("firstVisible",{method:this._setFirstVisible,validator:this._validateFirstVisible,value:j.firstVisible||this.CONFIG.FIRST_VISIBLE});this.setAttributeConfig("selectOnScroll",{validator:R.isBoolean,value:j.selectOnScroll||true});this.setAttributeConfig("numVisible",{method:this._setNumVisible,validator:this._validateNumVisible,value:j.numVisible||this.CONFIG.NUM_VISIBLE});this.setAttributeConfig("numItems",{method:this._setNumItems!
 ,validator:this._validateNumItems,value:this._itemsTable.numIt!
 ems});th
is.setAttributeConfig("scrollIncrement",{validator:this._validateScrollIncrement,value:j.scrollIncrement||1});this.setAttributeConfig("selectedItem",{method:this._setSelectedItem,validator:R.isNumber,value:0});this.setAttributeConfig("revealAmount",{method:this._setRevealAmount,validator:this._validateRevealAmount,value:j.revealAmount||0});this.setAttributeConfig("isCircular",{validator:R.isBoolean,value:j.isCircular||false});this.setAttributeConfig("isVertical",{method:this._setOrientation,validator:R.isBoolean,value:j.isVertical||false});this.setAttributeConfig("navigation",{method:this._setNavigation,validator:this._validateNavigation,value:j.navigation||{prev:null,next:null,page:null}});this.setAttributeConfig("animation",{validator:this._validateAnimation,value:j.animation||{speed:0,effect:null}});this.setAttributeConfig("autoPlay",{validator:R.isNumber,value:j.autoPlay||0});},initEvents:function(){var j=this.CLASSES;this.on("keydown",this._keyboardEventHandler);this.su!
 bscribe(h,Z);this.on(h,this.focus);this.subscribe(Q,M);this.subscribe(Q,Z);this.subscribe(J,M);this.subscribe(J,Z);this.on(d,this.focus);this.subscribe(B,M);this.subscribe(U,this._syncPagerUI);this.subscribe(T,Z);this.subscribe(T,this._syncPagerUI);this.on("selectedItemChange",function(k){P.call(this,k.newValue,k.prevValue);this._updateTabIndex(this.getElementForItem(k.newValue));this.fireEvent(d,k.newValue);});this.on("firstVisibleChange",function(k){if(!this.get("selectOnScroll")){this._updateTabIndex(this.getElementForItem(k.newValue));}});this.on("click",this._itemClickHandler);this.on("click",this._pagerClickHandler);i.onFocus(this.get("element"),function(k,l){l._updateNavButtons(i.getTarget(k),true);},this);i.onBlur(this.get("element"),function(k,l){l._updateNavButtons(i.getTarget(k),false);},this);},getElementForItem:function(j){if(j<0||j>=this.get("numItems")){return null;}if(this._itemsTable.numItems>j){if(!R.isUndefined(this._itemsTable.items[j])){return C.get(thi!
 s._itemsTable.items[j].id);
-}}return null;},getElementForItems:function(){var k=[],j;for(j=0;j<this._itemsTable.numItems;j++){k.push(this.getElementForItem(j));}return k;},getItem:function(j){if(j<0||j>=this.get("numItems")){return null;}if(this._itemsTable.numItems>j){if(!R.isUndefined(this._itemsTable.items[j])){return this._itemsTable.items[j];}}return null;},getItems:function(j){return this._itemsTable.items;},getItemPositionById:function(l){var j=0,k=this._itemsTable.numItems;while(j<k){if(!R.isUndefined(this._itemsTable.items[j])){if(this._itemsTable.items[j].id==l){return j;}}j++;}return -1;},removeItem:function(k){var l,j=this.get("numItems");if(k<0||k>=j){return false;}l=this._itemsTable.items.splice(k,1);if(l&&l.length==1){this.set("numItems",j-1);this.fireEvent(J,{item:l[0],pos:k,ev:J});return true;}return false;},render:function(l){var k=this.CONFIG,j=this.CLASSES,m;this.addClass(j.CAROUSEL);if(!this._clipEl){this._clipEl=this._createCarouselClip();this._clipEl.appendChild(this._carouselEl!
 );}if(l){this.appendChild(this._clipEl);this.appendTo(l);this._setClipContainerSize();}else{if(!C.inDocument(this.get("element"))){return false;}this.appendChild(this._clipEl);}if(this.get("isVertical")){m=Y.call(this);m=m<k.MIN_WIDTH?k.MIN_WIDTH:m;this.setStyle("width",m+"px");this.addClass(j.VERTICAL);}else{this.addClass(j.HORIZONTAL);}if(this.get("numItems")<1){return false;}this.set("selectedItem",this.get("firstVisible"));this.fireEvent(T);this._setContainerSize();return true;},scrollBackward:function(){this.scrollTo(this._firstItem-this.get("scrollIncrement"));},scrollForward:function(){this.scrollTo(this._firstItem+this.get("scrollIncrement"));},scrollPageBackward:function(){this.scrollTo(this._firstItem-this.get("numVisible"));},scrollPageForward:function(){this.scrollTo(this._firstItem+this.get("numVisible"));},scrollTo:function(x,v){var u,m,j,w=this.get("animation"),p=this.get("isCircular"),y,z,AA=this._firstItem,t,s=this.get("numItems"),k=this.get("numVisible"),n!
 ,l=this.get("currentPage"),o,r,q;if(x==AA){return ;}if(this._i!
 sAnimati
onInProgress){return ;}if(x<0){if(p){x=s+x;}else{return ;}}else{if(x>s-1){if(this.get("isCircular")){x=s-x;}else{return ;}}}z=(this._firstItem>x)?"backward":"forward";r=AA+k;r=(r>s-1)?s-1:r;o=this.fireEvent(b,{dir:z,first:AA,last:r});if(o===false){return ;}this.fireEvent(f,{page:l});y=AA-x;this._firstItem=x;this.set("firstVisible",x);H.call(this);r=x+k;r=(r>s-1)?s-1:r;q=this.get("isVertical")?"top":"left";n=S.call(this,y);m=w.speed>0;if(m){this._isAnimationInProgress=true;if(this.get("isVertical")){j={points:{by:[0,n]}};}else{j={points:{by:[n,0]}};}u=new YAHOO.util.Motion(this._carouselEl,j,w.speed,w.effect);u.onComplete.subscribe(function(AB){var AC=this.get("firstVisible");this._isAnimationInProgress=false;this.fireEvent(h,{first:AC,last:r});},null,this);u.animate();u=null;}else{n+=K(this._carouselEl,q);C.setStyle(this._carouselEl,q,n+"px");}t=parseInt(this._firstItem/k,10);if(t!=l){this.setAttributeConfig("currentPage",{value:t});this.fireEvent(U,t);}if(!v){if(this.get("s!
 electOnScroll")){if(x!=this._selectedItem){this.set("selectedItem",this._getSelectedItem(x));}}}delete this._autoPlayTimer;if(this.get("autoPlay")>0){this.startAutoPlay();}if(!m){this.fireEvent(h,{first:x,last:r});}},show:function(){var j=this.CLASSES;if(this.fireEvent(A)!==false){this.addClass(j.VISIBLE);this.fireEvent(I);}},startAutoPlay:function(){var j=this,k=this.get("autoPlay");if(k>0){if(!R.isUndefined(this._autoPlayTimer)){return ;}this.fireEvent(c);this._autoPlayTimer=setTimeout(function(){L.call(j);},k);}},stopAutoPlay:function(){if(!R.isUndefined(this._autoPlayTimer)){clearTimeout(this._autoPlayTimer);delete this._autoPlayTimer;this.set("autoPlay",0);this.fireEvent(g);}},toString:function(){return W+(this.get?" (#"+this.get("id")+")":"");},_createCarousel:function(k){var j=this.CLASSES;var l=a("DIV",{className:j.CAROUSEL,id:k});if(!this._carouselEl){this._carouselEl=a(this.CONFIG.TAG_NAME,{className:j.CAROUSEL_EL});}return l;},_createCarouselClip:function(){var j!
 =a("DIV",{className:this.CLASSES.CONTENT});this._setClipContai!
 nerSize(
j);return j;},_createCarouselItem:function(j){return a(this.CONFIG.ITEM_TAG_NAME,{className:j.className,content:j.content,id:j.id});},_getSelectedItem:function(m){var j=this.get("isCircular"),l=this.get("numItems"),k=l-1;if(m<0){if(j){m=l+m;}else{m=this.get("selectedItem");}}else{if(m>k){if(j){m=m-l;}else{m=this.get("selectedItem");}}}return m;},_itemClickHandler:function(m){var j=this.get("element"),k,l,n=YAHOO.util.Event.getTarget(m);while(n&&n!=j&&n.id!=this._carouselEl){k=n.nodeName;if(k.toUpperCase()==this.CONFIG.ITEM_TAG_NAME){break;}n=n.parentNode;}if((l=this.getItemPositionById(n.id))>=0){this.set("selectedItem",this._getSelectedItem(l));}},_keyboardEventHandler:function(m){var l=i.getCharCode(m),k=false,j=0,n;if(this._isAnimationInProgress){return ;}switch(l){case 37:case 38:n=this.get("selectedItem");if(n==this._firstItem){j=n-this.get("numVisible");this.scrollTo(j);this.set("selectedItem",this._getSelectedItem(n-1));}else{j=this.get("selectedItem")-this.get("scrol!
 lIncrement");this.set("selectedItem",this._getSelectedItem(j));}k=true;break;case 39:case 40:j=this.get("selectedItem")+this.get("scrollIncrement");this.set("selectedItem",this._getSelectedItem(j));k=true;break;case 33:this.scrollPageBackward();k=true;break;case 34:this.scrollPageForward();k=true;break;}if(k){i.preventDefault(m);}},_pagerClickHandler:function(j){var m,k,l;k=i.getTarget(j);l=k.href||k.value;if(R.isString(l)&&l){m=l.lastIndexOf("#");if(m!=-1){l=this.getItemPositionById(l.substring(m+1));this.scrollTo(l);i.preventDefault(j);}}},_parseCarousel:function(k){var n,j,m,l;j=this.CLASSES;m=false;for(n=k.firstChild;n;n=n.nextSibling){if(n.nodeType==1){l=n.nodeName;if(l.toUpperCase()==this.CONFIG.TAG_NAME){this._carouselEl=n;C.addClass(this._carouselEl,this.CLASSES.CAROUSEL_EL);m=true;}}}return m;},_parseCarouselItems:function(){var m,j,l,k=this._carouselEl;for(m=k.firstChild;m;m=m.nextSibling){if(m.nodeType==1){l=m.nodeName;
-if(l.toUpperCase()==this.CONFIG.ITEM_TAG_NAME){if(m.id){j=m.id;}else{j=C.generateId();m.setAttribute("id",j);}this.addItem(m);}}}},_parseCarouselNavigation:function(p){var l,k=this.CLASSES,o,n,m,q,r=false;q=C.getElementsByClassName(k.PREV_PAGE,"*",p);if(q.length>0){for(n in q){if(q.hasOwnProperty(n)){o=q[n];if(o.nodeName=="INPUT"||o.nodeName=="BUTTON"){if(typeof this._navBtns.prev=="undefined"){this._navBtns.prev=[];}this._navBtns.prev.push(o);}else{m=o.getElementsByTagName("INPUT");if(R.isArray(m)&&m.length>0){this._navBtns.prev.push(m[0]);}else{m=o.getElementsByTagName("BUTTON");if(R.isArray(m)&&m.length>0){this._navBtns.prev.push(m[0]);}}}}}l={prev:q};}q=C.getElementsByClassName(k.NEXT_PAGE,"*",p);if(q.length>0){for(n in q){if(q.hasOwnProperty(n)){o=q[n];if(o.nodeName=="INPUT"||o.nodeName=="BUTTON"){if(typeof this._navBtns.next=="undefined"){this._navBtns.next=[];}this._navBtns.next.push(o);}else{m=o.getElementsByTagName("INPUT");if(R.isArray(m)&&m.length>0){this._navBtn!
 s.next.push(m[0]);}else{m=o.getElementsByTagName("BUTTON");if(R.isArray(m)&&m.length>0){this._navBtns.next.push(m[0]);}}}}}if(l){l.next=q;}else{l={next:q};}}if(l){this.set("navigation",l);r=true;}return r;},_setupCarouselNavigation:function(){var m,k,j,q,n,p,o,l;j=this.CLASSES;n=C.getElementsByClassName(j.NAVIGATION,"DIV",this.get("element"));if(n.length===0){n=a("DIV",{className:j.NAVIGATION});this.insertBefore(n,C.getFirstChild(this.get("element")));}else{n=n[0];}this._pages.el=a("UL");n.appendChild(this._pages.el);q=this.get("navigation");if(q.prev&&q.prev.length>0){n.appendChild(q.prev[0]);}else{l=a("SPAN",{className:j.BUTTON+j.FIRST_NAV});C.setStyle(l,"visibility","visible");m=C.generateId();l.innerHTML='<input type="button" '+'id="'+m+'" '+'value="'+this.STRINGS.PREVIOUS_BUTTON_TEXT+'" '+'name="'+this.STRINGS.PREVIOUS_BUTTON_TEXT+'">';n.appendChild(l);m=C.get(m);this._navBtns.prev=[m];k={prev:[l]};}if(q.next&&q.next.length>0){n.appendChild(q.next[0]);}else{p=a("SPAN",!
 {className:j.BUTTON});C.setStyle(p,"visibility","visible");m=C!
 .generat
eId();p.innerHTML='<input type="button" '+'id="'+m+'" '+'value="'+this.STRINGS.NEXT_BUTTON_TEXT+'" '+'name="'+this.STRINGS.NEXT_BUTTON_TEXT+'">';n.appendChild(p);m=C.get(m);this._navBtns.next=[m];if(k){k.next=[p];}else{k={next:[p]};}}if(k){this.set("navigation",k);}return n;},_setClipContainerSize:function(k,m){var n,j,o,p,q,r,l;o=this.get("isVertical");q=this.get("revealAmount");l=o?"height":"width";n=o?"top":"left";k=k||this._clipEl;if(!k){return ;}m=m||this.get("numVisible");p=Y.call(this,l);r=p*m;this._recomputeSize=(r===0);if(this._recomputeSize){return ;}if(q>0){q=p*(q/100)*2;r+=q;j=parseFloat(C.getStyle(this._carouselEl,n));j=R.isNumber(j)?j:0;C.setStyle(this._carouselEl,n,j+(q/2)+"px");}if(o){r+=K(this._carouselEl,"marginTop")+K(this._carouselEl,"marginBottom")+K(this._carouselEl,"paddingTop")+K(this._carouselEl,"paddingBottom")+K(this._carouselEl,"borderTop")+K(this._carouselEl,"borderBottom");C.setStyle(k,l,(r-(m-1))+"px");}else{r+=K(this._carouselEl,"marginLeft")+!
 K(this._carouselEl,"marginRight")+K(this._carouselEl,"paddingLeft")+K(this._carouselEl,"paddingRight")+K(this._carouselEl,"borderLeft")+K(this._carouselEl,"borderRight");C.setStyle(k,l,r+"px");}this._setContainerSize(k);},_setContainerSize:function(l,j){var m,k;m=this.get("isVertical");l=l||this._clipEl;j=j||(m?"height":"width");k=parseFloat(C.getStyle(l,j),10);k=R.isNumber(k)?k:0;k+=K(l,"marginLeft")+K(l,"marginRight")+K(l,"paddingLeft")+K(l,"paddingRight")+K(l,"borderLeft")+K(l,"borderRight");if(m){k+=K(this._navEl,"height");}this.setStyle(j,k+"px");},_setFirstVisible:function(j){if(j>=0&&j<this.get("numItems")){this.scrollTo(j);}else{j=this.get("firstVisible");}return j;},_setNavigation:function(j){if(j.prev){i.on(j.prev,"click",N,this);}if(j.next){i.on(j.next,"click",X,this);}},_setNumVisible:function(j){if(j>1&&j<this.get("numItems")){this._setClipContainerSize(this._clipEl,j);}else{j=this.get("numVisible");}return j;},_setNumItems:function(k){var j=this._itemsTable.nu!
 mItems;if(R.isArray(this._itemsTable.items)){if(this._itemsTab!
 le.items
.length!=j){j=this._itemsTable.items.length;this._itemsTable.numItems=j;}}if(k<j){while(j>k){this.removeItem(j-1);j--;}}return k;},_setOrientation:function(k){var j=this.CLASSES;if(k){this.replaceClass(j.HORIZONTAL,j.VERTICAL);}else{this.replaceClass(j.VERTICAL,j.HORIZONTAL);}this._itemsTable.size=0;return k;},_setRevealAmount:function(j){if(j>=0&&j<=100){j=parseInt(j,10);j=R.isNumber(j)?j:0;this._setClipContainerSize();}else{j=this.get("revealAmount");}return j;},_setSelectedItem:function(j){this._selectedItem=j;},_syncPagerUI:function(p){var k,j=this.CLASSES,n,m="",l,o=this.get("numVisible");p=p||0;l=Math.ceil(this.get("numItems")/o);this._pages.num=l;this._pages.cur=p;if(l>this.CONFIG.MAX_PAGER_BUTTONS){m="<form><select>";}else{m="";}for(n=0;n<l;n++){if(R.isUndefined(this._itemsTable.items[n*o])){break;}k=this._itemsTable.items[n*o].id;if(l>this.CONFIG.MAX_PAGER_BUTTONS){m+='<option value="#'+k+'" '+(n==p?" selected":"")+">"+this.STRINGS.PAGER_PREFIX_TEXT+" "+(n+1)+"</opt!
 ion>";}else{m+='<li class="'+(n===0?j.FIRST_PAGE:"")+(n==p?" "+j.SELECTED_NAV:"")+'"><a href="#'+k+'" tabindex="0"><em>'+this.STRINGS.PAGER_PREFIX_TEXT+" "+(n+1)+"</em></a></li>";}}if(l>this.CONFIG.MAX_PAGER_BUTTONS){m+="</select></form>";}this._pages.el.innerHTML=m;m=null;},_updateNavButtons:function(n,k){var l,j=this.CLASSES,o,m=n.parentNode;if(!m){return ;}o=m.parentNode;if(n.nodeName.toUpperCase()=="INPUT"&&C.hasClass(m,j.BUTTON)){if(k){if(o){l=C.getChildren(o);if(l){C.removeClass(l,j.FOCUSSED_BUTTON);}}C.addClass(m,j.FOCUSSED_BUTTON);}else{C.removeClass(m,j.FOCUSSED_BUTTON);}}},_updateTabIndex:function(j){if(j){if(this._focusableItemEl){this._focusableItemEl.tabIndex=-1;}this._focusableItemEl=j;j.tabIndex=0;}},_validateAnimation:function(j){var k=true;if(R.isObject(j)){if(j.speed){k=k&&R.isNumber(j.speed);}if(j.effect){k=k&&R.isFunction(j.effect);}else{if(!R.isUndefined(YAHOO.util.Easing)){j.effect=YAHOO.util.Easing.easeOut;
-}}}else{k=false;}return k;},_validateFirstVisible:function(j){var k=false;if(R.isNumber(j)){k=(j>=0&&j<this.get("numItems"));}return k;},_validateNavigation:function(j){var k;if(!R.isObject(j)){return false;}if(j.prev){if(!R.isArray(j.prev)){return false;}for(k in j.prev){if(j.prev.hasOwnProperty(k)){if(!R.isString(j.prev[k].nodeName)){return false;}}}}if(j.next){if(!R.isArray(j.next)){return false;}for(k in j.next){if(j.next.hasOwnProperty(k)){if(!R.isString(j.next[k].nodeName)){return false;}}}}return true;},_validateNumItems:function(j){var k=false;if(R.isNumber(j)){k=j>0;}return k;},_validateNumVisible:function(j){var k=false;if(R.isNumber(j)){k=j>0&&j<this.get("numItems");}return k;},_validateRevealAmount:function(j){var k=false;if(R.isNumber(j)){k=j>=0&&j<100;}return k;},_validateScrollIncrement:function(j){var k=false;if(R.isNumber(j)){k=(j>0&&j<this.get("numItems"));}return k;}});})();YAHOO.register("carousel",YAHOO.widget.Carousel,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/carousel/carousel-beta.js
===================================================================
--- trunk/root/static/yui/carousel/carousel-beta.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel-beta.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,2913 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * The Carousel module provides a widget for browsing among a set of like
- * objects represented pictorially.
- *
- * @module carousel
- * @requires yahoo, dom, event, element
- * @optional animation
- * @namespace YAHOO.widget
- * @title Carousel Widget
- */
-(function () {
-
-    var WidgetName;             // forward declaration
-
-    /**
-     * The Carousel widget.
-     *
-     * @class Carousel
-     * @extends YAHOO.util.Element
-     * @constructor
-     * @param el {HTMLElement | String} The HTML element that represents the
-     * the container that houses the Carousel.
-     * @param cfg {Object} (optional) The configuration values
-     */
-    YAHOO.widget.Carousel = function (el, cfg) {
-
-        this._navBtns = {};
-        this._pages = {};
-
-        YAHOO.widget.Carousel.superclass.constructor.call(this, el, cfg);
-    };
-
-    /*
-     * Private variables of the Carousel component
-     */
-
-    /* Some abbreviations to avoid lengthy typing and lookups. */
-    var Carousel    = YAHOO.widget.Carousel,
-        Dom         = YAHOO.util.Dom,
-        Event       = YAHOO.util.Event,
-        JS          = YAHOO.lang;
-
-    /**
-     * The widget name.
-     * @private
-     * @static
-     */
-    WidgetName = "Carousel";
-
-    /**
-     * The internal table of Carousel instances.
-     * @private
-     * @static
-     */
-    var instances = {};
-
-    /*
-     * Custom events of the Carousel component
-     */
-
-    /**
-     * @event afterScroll
-     * @description Fires when the Carousel has scrolled to the previous or
-     * next page.  Passes back the index of the first and last visible items in
-     * the Carousel.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var afterScrollEvent = "afterScroll";
-
-    /**
-     * @event beforeHide
-     * @description Fires before the Carousel is hidden.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeHideEvent = "beforeHide";
-
-    /**
-     * @event beforePageChange
-     * @description Fires when the Carousel is about to scroll to the previous
-     * or next page.  Passes back the page number of the current page.  Note
-     * that the first page number is zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforePageChangeEvent = "beforePageChange";
-
-    /**
-     * @event beforeScroll
-     * @description Fires when the Carousel is about to scroll to the previous
-     * or next page.  Passes back the index of the first and last visible items
-     * in the Carousel and the direction (backward/forward) of the scroll.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeScrollEvent = "beforeScroll";
-
-    /**
-     * @event beforeShow
-     * @description Fires when the Carousel is about to be shown.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var beforeShowEvent = "beforeShow";
-
-    /**
-     * @event blur
-     * @description Fires when the Carousel loses focus.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var blurEvent = "blur";
-
-    /**
-     * @event focus
-     * @description Fires when the Carousel gains focus.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var focusEvent = "focus";
-
-    /**
-     * @event hide
-     * @description Fires when the Carousel is hidden.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var hideEvent = "hide";
-
-    /**
-     * @event itemAdded
-     * @description Fires when an item has been added to the Carousel.  Passes
-     * back the content of the item that would be added, the index at which the
-     * item would be added, and the event itself.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemAddedEvent = "itemAdded";
-
-    /**
-     * @event itemRemoved
-     * @description Fires when an item has been removed from the Carousel.
-     * Passes back the content of the item that would be removed, the index
-     * from which the item would be removed, and the event itself.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemRemovedEvent = "itemRemoved";
-
-    /**
-     * @event itemSelected
-     * @description Fires when an item has been selected in the Carousel.
-     * Passes back the index of the selected item in the Carousel.  Note, that
-     * the index begins from zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var itemSelectedEvent = "itemSelected";
-
-    /**
-     * @event loadItems
-     * @description Fires when the Carousel needs more items to be loaded for
-     * displaying them.  Passes back the first and last visible items in the
-     * Carousel, and the number of items needed to be loaded.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var loadItemsEvent = "loadItems";
-
-    /**
-     * @event navigationStateChange
-     * @description Fires when the state of either one of the navigation
-     * buttons are changed from enabled to disabled or vice versa.  Passes back
-     * the state (true/false) of the previous and next buttons.  The value true
-     * signifies the button is enabled, false signifies disabled.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var navigationStateChangeEvent = "navigationStateChange";
-
-    /**
-     * @event pageChange
-     * @description Fires after the Carousel has scrolled to the previous or
-     * next page.  Passes back the page number of the current page.  Note
-     * that the first page number is zero.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var pageChangeEvent = "pageChange";
-
-    /**
-     * @event render
-     * @description Fires when the Carousel is rendered.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var renderEvent = "render";
-
-    /**
-     * @event show
-     * @description Fires when the Carousel is shown.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var showEvent = "show";
-
-    /**
-     * @event startAutoPlay
-     * @description Fires when the auto play has started in the Carousel.  See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var startAutoPlayEvent = "startAutoPlay";
-
-    /**
-     * @event stopAutoPlay
-     * @description Fires when the auto play has been stopped in the Carousel.
-     * See
-     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
-     * for more information on listening for this event.
-     * @type YAHOO.util.CustomEvent
-     */
-    var stopAutoPlayEvent = "stopAutoPlay";
-
-    /*
-     * Private helper functions used by the Carousel component
-     */
-
-    /**
-     * Automatically scroll the contents of the Carousel.
-     * @method autoScroll
-     * @private
-     */
-    function autoScroll() {
-        var currIndex = this._firstItem,
-            index;
-
-        if (currIndex >= this.get("numItems") - 1) {
-            if (this.get("isCircular")) {
-                index = 0;
-            } else {
-                this.stopAutoPlay();
-            }
-        } else {
-            index = currIndex + this.get("numVisible");
-        }
-        this.scrollTo.call(this, index);
-    }
-
-    /**
-     * Create an element, set its class name and optionally install the element
-     * to its parent.
-     * @method createElement
-     * @param el {String} The element to be created
-     * @param attrs {Object} Configuration of parent, class and id attributes.
-     * If the content is specified, it is inserted after creation of the
-     * element. The content can also be an HTML element in which case it would
-     * be appended as a child node of the created element.
-     * @private
-     */
-    function createElement(el, attrs) {
-        var newEl = document.createElement(el);
-
-        attrs = attrs || {};
-        if (attrs.className) {
-            Dom.addClass(newEl, attrs.className);
-        }
-
-        if (attrs.parent) {
-            attrs.parent.appendChild(newEl);
-        }
-
-        if (attrs.id) {
-            newEl.setAttribute("id", attrs.id);
-        }
-
-        if (attrs.content) {
-            if (attrs.content.nodeName) {
-                newEl.appendChild(attrs.content);
-            } else {
-                newEl.innerHTML = attrs.content;
-            }
-        }
-
-        return newEl;
-    }
-
-    /**
-     * Get the computed style of an element.
-     *
-     * @method getStyle
-     * @param el {HTMLElement} The element for which the style needs to be
-     * returned.
-     * @param style {String} The style attribute
-     * @param type {String} "int", "float", etc. (defaults to int)
-     * @private
-     */
-    function getStyle(el, style, type) {
-        var value;
-
-        function getStyleIntVal(el, style) {
-            var val;
-
-            val = parseInt(Dom.getStyle(el, style), 10);
-            return JS.isNumber(val) ? val : 0;
-        }
-
-        function getStyleFloatVal(el, style) {
-            var val;
-
-            val = parseFloat(Dom.getStyle(el, style));
-            return JS.isNumber(val) ? val : 0;
-        }
-
-        if (typeof type == "undefined") {
-            type = "int";
-        }
-
-        switch (style) {
-        case "height":
-            value = el.offsetHeight;
-            if (value > 0) {
-                value += getStyleIntVal(el, "marginTop")        +
-                        getStyleIntVal(el, "marginBottom");
-            } else {
-                value = getStyleFloatVal(el, "height")          +
-                        getStyleIntVal(el, "marginTop")         +
-                        getStyleIntVal(el, "marginBottom")      +
-                        getStyleIntVal(el, "borderTopWidth")    +
-                        getStyleIntVal(el, "borderBottomWidth") +
-                        getStyleIntVal(el, "paddingTop")        +
-                        getStyleIntVal(el, "paddingBottom");
-            }
-            break;
-        case "width":
-            value = el.offsetWidth;
-            if (value > 0) {
-                value += getStyleIntVal(el, "marginLeft")       +
-                        getStyleIntVal(el, "marginRight");
-            } else {
-                value = getStyleFloatVal(el, "width")           +
-                        getStyleIntVal(el, "marginLeft")        +
-                        getStyleIntVal(el, "marginRight")       +
-                        getStyleIntVal(el, "borderLeftWidth")   +
-                        getStyleIntVal(el, "borderRightWidth")  +
-                        getStyleIntVal(el, "paddingLeft")       +
-                        getStyleIntVal(el, "paddingRight");
-            }
-            break;
-        default:
-            if (type == "int") {
-                value = getStyleIntVal(el, style);
-                // XXX: Safari calculates incorrect marginRight for an element
-                // which has its parent element style set to overflow: hidden
-                // https://bugs.webkit.org/show_bug.cgi?id=13343
-                // Let us assume marginLeft == marginRight
-                if (style == "marginRight" && YAHOO.env.ua.webkit) {
-                    value = getStyleIntVal(el, "marginLeft");
-                }
-            } else if (type == "float") {
-                value = getStyleFloatVal(el, style);
-            } else {
-                value = Dom.getStyle(el, style);
-            }
-            break;
-        }
-
-        return value;
-    }
-
-    /**
-     * Compute and return the height or width of a single Carousel item
-     * depending upon the orientation.
-     *
-     * @method getCarouselItemSize
-     * @param which {String} "height" or "width" to be returned.  If this is
-     * passed explicitly, the calculated size is not cached.
-     * @private
-     */
-    function getCarouselItemSize(which) {
-        var child,
-            size     = 0,
-            vertical = false;
-
-        if (this._itemsTable.numItems === 0) {
-            return 0;
-        }
-
-        if (typeof which == "undefined") {
-            if (this._itemsTable.size > 0) {
-                return this._itemsTable.size;
-            }
-        }
-
-        if (JS.isUndefined(this._itemsTable.items[0])) {
-            return 0;
-        }
-
-        child = Dom.get(this._itemsTable.items[0].id);
-
-        if (typeof which == "undefined") {
-            vertical = this.get("isVertical");
-        } else {
-            vertical = which == "height";
-        }
-
-        if (vertical) {
-            size = getStyle(child, "height");
-        } else {
-            size = getStyle(child, "width");
-        }
-
-        if (typeof which == "undefined") {
-            this._itemsTable.size = size; // save the size for later
-        }
-
-        return size;
-    }
-
-    /**
-     * Return the scrolling offset size given the number of elements to
-     * scroll.
-     *
-     * @method getScrollOffset
-     * @param delta {Number} The delta number of elements to scroll by.
-     * @private
-     */
-    function getScrollOffset(delta) {
-        var itemSize = 0,
-            size     = 0;
-
-        itemSize = getCarouselItemSize.call(this);
-        size     = itemSize * delta;
-
-        // XXX: really, when the orientation is vertical, the scrolling
-        // is not exactly the number of elements into element size.
-        if (this.get("isVertical")) {
-            size -= delta;
-        }
-
-        return size;
-    }
-
-    /**
-     * The load the required set of items that are needed for display.
-     *
-     * @method loadItems
-     * @private
-     */
-    function loadItems() {
-        var first      = this.get("firstVisible"),
-            last       = 0,
-            numItems   = this.get("numItems"),
-            numVisible = this.get("numVisible"),
-            reveal     = this.get("revealAmount");
-
-        last = first + numVisible - 1 + (reveal ? 1 : 0);
-        last = last > numItems - 1 ? numItems - 1 : last;
-
-        if (!this.getItem(first) || !this.getItem(last)) {
-            this.fireEvent(loadItemsEvent, {
-                    ev: loadItemsEvent,
-                    first: first, last: last,
-                    num: last - first
-            });
-        }
-    }
-
-    /**
-     * Scroll the Carousel by a page backward.
-     *
-     * @method scrollPageBackward
-     * @param {Event} ev The event object
-     * @param {Object} obj The context object
-     * @private
-     */
-    function scrollPageBackward(ev, obj) {
-        obj.scrollPageBackward();
-        Event.preventDefault(ev);
-    }
-
-    /**
-     * Scroll the Carousel by a page forward.
-     *
-     * @method scrollPageForward
-     * @param {Event} ev The event object
-     * @param {Object} obj The context object
-     * @private
-     */
-    function scrollPageForward(ev, obj) {
-        obj.scrollPageForward();
-        Event.preventDefault(ev);
-    }
-
-    /**
-     * Set the selected item.
-     *
-     * @method setItemSelection
-     * @param {Number} newposition The index of the new position
-     * @param {Number} oldposition The index of the previous position
-     * @private
-     */
-     function setItemSelection(newposition, oldposition) {
-        var backwards,
-            cssClass   = this.CLASSES,
-            el,
-            firstItem  = this._firstItem,
-            isCircular = this.get("isCircular"),
-            numItems   = this.get("numItems"),
-            numVisible = this.get("numVisible"),
-            position   = oldposition,
-            sentinel   = firstItem + numVisible - 1;
-
-        backwards = numVisible > 1 && !isCircular && position > newposition;
-
-        if (position >= 0 && position < numItems) {
-            if (!JS.isUndefined(this._itemsTable.items[position])) {
-                el = Dom.get(this._itemsTable.items[position].id);
-                if (el) {
-                    Dom.removeClass(el, cssClass.SELECTED_ITEM);
-                }
-            }
-        }
-
-        if (JS.isNumber(newposition)) {
-            newposition = parseInt(newposition, 10);
-            newposition = JS.isNumber(newposition) ? newposition : 0;
-        } else {
-            newposition = firstItem;
-        }
-
-        if (JS.isUndefined(this._itemsTable.items[newposition])) {
-            this.scrollTo(newposition); // still loading the item
-        }
-
-        if (!JS.isUndefined(this._itemsTable.items[newposition])) {
-            el = Dom.get(this._itemsTable.items[newposition].id);
-            if (el) {
-                Dom.addClass(el, cssClass.SELECTED_ITEM);
-            }
-        }
-
-        if (newposition < firstItem || newposition > sentinel) {
-            // out of focus
-            if (backwards) {
-                this.scrollTo(firstItem - numVisible, true);
-            } else {
-                this.scrollTo(newposition);
-            }
-        }
-    }
-
-    /**
-     * Fire custom events for enabling/disabling navigation elements.
-     *
-     * @method syncNavigation
-     * @private
-     */
-    function syncNavigation() {
-        var attach   = false,
-            cssClass = this.CLASSES,
-            i,
-            navigation,
-            sentinel;
-
-        navigation = this.get("navigation");
-        sentinel   = this._firstItem + this.get("numVisible");
-
-        if (navigation.prev) {
-            if (this._firstItem === 0) {
-                if (!this.get("isCircular")) {
-                    Event.removeListener(navigation.prev, "click",
-                            scrollPageBackward);
-                    Dom.addClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
-                    for (i = 0; i < this._navBtns.prev.length; i++) {
-                        this._navBtns.prev[i].setAttribute("disabled", "true");
-                    }
-                    this._prevEnabled = false;
-                } else {
-                    attach = !this._prevEnabled;
-                }
-            } else {
-                attach = !this._prevEnabled;
-            }
-
-            if (attach) {
-                Event.on(navigation.prev, "click", scrollPageBackward, this);
-                Dom.removeClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
-                for (i = 0; i < this._navBtns.prev.length; i++) {
-                    this._navBtns.prev[i].removeAttribute("disabled");
-                }
-                this._prevEnabled = true;
-            }
-        }
-
-        attach = false;
-        if (navigation.next) {
-            if (sentinel >= this.get("numItems")) {
-                if (!this.get("isCircular")) {
-                    Event.removeListener(navigation.next, "click",
-                            scrollPageForward);
-                    Dom.addClass(navigation.next, cssClass.DISABLED);
-                    for (i = 0; i < this._navBtns.next.length; i++) {
-                        this._navBtns.next[i].setAttribute("disabled", "true");
-                    }
-                    this._nextEnabled = false;
-                } else {
-                    attach = !this._nextEnabled;
-                }
-            } else {
-                attach = !this._nextEnabled;
-            }
-
-            if (attach) {
-                Event.on(navigation.next, "click", scrollPageForward, this);
-                Dom.removeClass(navigation.next, cssClass.DISABLED);
-                for (i = 0; i < this._navBtns.next.length; i++) {
-                    this._navBtns.next[i].removeAttribute("disabled");
-                }
-                this._nextEnabled = true;
-            }
-        }
-
-        this.fireEvent(navigationStateChangeEvent,
-                { next: this._nextEnabled, prev: this._prevEnabled });
-    }
-
-    /**
-     * Fire custom events for synchronizing the DOM.
-     *
-     * @method syncUI
-     * @param {Object} o The item that needs to be added or removed
-     * @private
-     */
-    function syncUI(o) {
-        var el, i, item, num, oel, pos, sibling;
-
-        if (!JS.isObject(o)) {
-            return;
-        }
-
-        switch (o.ev) {
-        case itemAddedEvent:
-            pos  = JS.isUndefined(o.pos) ? this._itemsTable.numItems-1 : o.pos;
-            if (!JS.isUndefined(this._itemsTable.items[pos])) {
-                item = this._itemsTable.items[pos];
-                if (item && !JS.isUndefined(item.id)) {
-                    oel  = Dom.get(item.id);
-                }
-            }
-            if (!oel) {
-                el = this._createCarouselItem({
-                        className : item.className,
-                        content   : item.item,
-                        id        : item.id
-                });
-                if (JS.isUndefined(o.pos)) {
-                    if (!JS.isUndefined(this._itemsTable.loading[pos])) {
-                        oel = this._itemsTable.loading[pos];
-                    }
-                    if (oel) {
-                        this._carouselEl.replaceChild(el, oel);
-                    } else {
-                        this._carouselEl.appendChild(el);
-                    }
-                } else {
-                    if (!JS.isUndefined(this._itemsTable.items[o.pos + 1])) {
-                        sibling = Dom.get(this._itemsTable.items[o.pos + 1].id);
-                    }
-                    if (sibling) {
-                        this._carouselEl.insertBefore(el, sibling);
-                    } else {
-                    }
-                }
-            } else {
-                if (JS.isUndefined(o.pos)) {
-                    if (!Dom.isAncestor(this._carouselEl, oel)) {
-                        this._carouselEl.appendChild(oel);
-                    }
-                } else {
-                    if (!Dom.isAncestor(this._carouselEl, oel)) {
-                        if (!JS.isUndefined(this._itemsTable.items[o.pos+1])) {
-                            this._carouselEl.insertBefore(oel, Dom.get(
-                                    this._itemsTable.items[o.pos+1].id));
-                        }
-                    }
-                }
-            }
-
-            if (this._recomputeSize) {
-                this._setClipContainerSize();
-            }
-            break;
-        case itemRemovedEvent:
-            num  = this.get("numItems");
-            item = o.item;
-            pos  = o.pos;
-
-            if (item && (el = Dom.get(item.id))) {
-                if (el && Dom.isAncestor(this._carouselEl, el)) {
-                    Event.purgeElement(el, true);
-                    this._carouselEl.removeChild(el);
-                }
-
-                if (this.get("selectedItem") == pos) {
-                    pos = pos >= num ? num - 1 : pos;
-                    this.set("selectedItem", pos);
-                }
-            } else {
-            }
-            break;
-        case loadItemsEvent:
-            for (i = o.first; i <= o.last; i++) {
-                el = this._createCarouselItem({
-                        content : this.CONFIG.ITEM_LOADING,
-                        id      : Dom.generateId()
-                });
-                if (el) {
-                    if (!JS.isUndefined(this._itemsTable.items[o.last + 1])) {
-                        sibling = Dom.get(this._itemsTable.items[o.last+1].id);
-                        if (sibling) {
-                            this._carouselEl.insertBefore(el, sibling);
-                        } else {
-                        }
-                    } else {
-                        this._carouselEl.appendChild(el);
-                    }
-                }
-                this._itemsTable.loading[i] = el;
-            }
-            break;
-        }
-    }
-
-    /*
-     * Static members and methods of the Carousel component
-     */
-
-    /**
-     * Return the appropriate Carousel object based on the id associated with
-     * the Carousel element or false if none match.
-     * @method getById
-     * @public
-     * @static
-     */
-    Carousel.getById = function (id) {
-        return instances[id] ? instances[id] : false;
-    };
-
-    YAHOO.extend(Carousel, YAHOO.util.Element, {
-
-        /*
-         * Internal variables used within the Carousel component
-         */
-
-        /**
-         * The Carousel element.
-         *
-         * @property _carouselEl
-         * @private
-         */
-        _carouselEl: null,
-
-        /**
-         * The Carousel clipping container element.
-         *
-         * @property _clipEl
-         * @private
-         */
-        _clipEl: null,
-
-        /**
-         * The current first index of the Carousel.
-         *
-         * @property _firstItem
-         * @private
-         */
-        _firstItem: 0,
-
-        /**
-         * Is the animation still in progress?
-         *
-         * @property _isAnimationInProgress
-         * @private
-         */
-        _isAnimationInProgress: false,
-
-        /**
-         * The table of items in the Carousel.
-         * The numItems is the number of items in the Carousel, items being the
-         * array of items in the Carousel.  The size is the size of a single
-         * item in the Carousel.  It is cached here for efficiency (to avoid
-         * computing the size multiple times).
-         *
-         * @property _itemsTable
-         * @private
-         */
-        _itemsTable: null,
-
-        /**
-         * The Carousel navigation buttons.
-         *
-         * @property _navBtns
-         * @private
-         */
-        _navBtns: null,
-
-        /**
-         * The Carousel navigation.
-         *
-         * @property _navEl
-         * @private
-         */
-        _navEl: null,
-
-        /**
-         * Status of the next navigation item.
-         *
-         * @property _nextEnabled
-         * @private
-         */
-        _nextEnabled: true,
-
-        /**
-         * The Carousel pages structure.
-         * This is an object of the total number of pages and the current page.
-         *
-         * @property _pages
-         * @private
-         */
-        _pages: null,
-
-        /**
-         * Status of the previous navigation item.
-         *
-         * @property _prevEnabled
-         * @private
-         */
-        _prevEnabled: true,
-
-        /**
-         * Whether the Carousel size needs to be recomputed or not?
-         *
-         * @property _recomputeSize
-         * @private
-         */
-        _recomputeSize: true,
-
-        /*
-         * CSS classes used by the Carousel component
-         */
-
-        CLASSES: {
-
-            /**
-             * The class name of the Carousel navigation buttons.
-             *
-             * @property BUTTON
-             * @default "yui-carousel-button"
-             */
-            BUTTON: "yui-carousel-button",
-
-            /**
-             * The class name of the Carousel element.
-             *
-             * @property CAROUSEL
-             * @default "yui-carousel"
-             */
-            CAROUSEL: "yui-carousel",
-
-            /**
-             * The class name of the container of the items in the Carousel.
-             *
-             * @property CAROUSEL_EL
-             * @default "yui-carousel-element"
-             */
-            CAROUSEL_EL: "yui-carousel-element",
-
-            /**
-             * The class name of the Carousel's container element.
-             *
-             * @property CONTAINER
-             * @default "yui-carousel-container"
-             */
-            CONTAINER: "yui-carousel-container",
-
-            /**
-             * The class name of the Carousel's container element.
-             *
-             * @property CONTENT
-             * @default "yui-carousel-content"
-             */
-            CONTENT: "yui-carousel-content",
-
-            /**
-             * The class name of a disabled navigation button.
-             *
-             * @property DISABLED
-             * @default "yui-carousel-button-disabled"
-             */
-            DISABLED: "yui-carousel-button-disabled",
-
-            /**
-             * The class name of the first Carousel navigation button.
-             *
-             * @property FIRST_NAV
-             * @default " yui-carousel-first-button"
-             */
-            FIRST_NAV: " yui-carousel-first-button",
-
-            /**
-             * The class name of a first disabled navigation button.
-             *
-             * @property FIRST_NAV_DISABLED
-             * @default "yui-carousel-first-button-disabled"
-             */
-            FIRST_NAV_DISABLED: "yui-carousel-first-button-disabled",
-
-            /**
-             * The class name of a first page element.
-             *
-             * @property FIRST_PAGE
-             * @default "yui-carousel-nav-first-page"
-             */
-            FIRST_PAGE: "yui-carousel-nav-first-page",
-
-            /**
-             * The class name of the Carousel navigation button that has focus.
-             *
-             * @property FOCUSSED_BUTTON
-             * @default "yui-carousel-button-focus"
-             */
-            FOCUSSED_BUTTON: "yui-carousel-button-focus",
-
-            /**
-             * The class name of a horizontally oriented Carousel.
-             *
-             * @property HORIZONTAL
-             * @default "yui-carousel-horizontal"
-             */
-            HORIZONTAL: "yui-carousel-horizontal",
-
-            /**
-             * The navigation element container class name.
-             *
-             * @property NAVIGATION
-             * @default "yui-carousel-nav"
-             */
-            NAVIGATION: "yui-carousel-nav",
-
-            /**
-             * The class name of the next navigation link. This variable is not
-             * only used for styling, but also for identifying the link within
-             * the Carousel container.
-             *
-             * @property NEXT_PAGE
-             * @default "yui-carousel-next"
-             */
-            NEXT_PAGE: "yui-carousel-next",
-
-            /**
-             * The class name for the navigation container for prev/next.
-             *
-             * @property NAV_CONTAINER
-             * @default "yui-carousel-buttons"
-             */
-            NAV_CONTAINER: "yui-carousel-buttons",
-
-            /**
-             * The class name of the previous navigation link. This variable
-             * is not only used for styling, but also for identifying the link
-             * within the Carousel container.
-             *
-             * @property PREV_PAGE
-             * @default "yui-carousel-prev"
-             */
-            PREV_PAGE: "yui-carousel-prev",
-
-            /**
-             * The class name of the selected item.
-             *
-             * @property SELECTED_ITEM
-             * @default "yui-carousel-item-selected"
-             */
-            SELECTED_ITEM: "yui-carousel-item-selected",
-
-            /**
-             * The class name of the selected paging navigation.
-             *
-             * @property SELECTED_NAV
-             * @default "yui-carousel-nav-page-selected"
-             */
-            SELECTED_NAV: "yui-carousel-nav-page-selected",
-
-            /**
-             * The class name of a vertically oriented Carousel.
-             *
-             * @property VERTICAL
-             * @default "yui-carousel-vertical"
-             */
-            VERTICAL: "yui-carousel-vertical",
-
-            /**
-             * The class name of the (vertical) Carousel's container element.
-             *
-             * @property VERTICAL_CONTAINER
-             * @default "yui-carousel-vertical-container"
-             */
-            VERTICAL_CONTAINER: "yui-carousel-vertical-container",
-
-            /**
-             * The class name of a visible Carousel.
-             *
-             * @property VISIBLE
-             * @default "yui-carousel-visible"
-             */
-            VISIBLE: "yui-carousel-visible"
-
-        },
-
-        /*
-         * Configuration attributes for configuring the Carousel component
-         */
-
-        CONFIG: {
-
-            /**
-             * The offset of the first visible item in the Carousel.
-             *
-             * @property FIRST_VISIBLE
-             * @default 0
-             */
-            FIRST_VISIBLE: 0,
-
-            /**
-             * The element to be used as the progress indicator when the item
-             * is still being loaded.
-             *
-             * @property ITEM_LOADING
-             * @default The progress indicator (spinner) image
-             */
-            ITEM_LOADING: "<img " +
-                    "src=\"../../build/carousel/assets/ajax-loader.gif\" " +
-                    "alt=\"Loading\" " +
-                    "style=\"margin-top:-32px;position:relative;top:50%;\">",
-
-            /**
-             * The tag name of the Carousel item.
-             *
-             * @property ITEM_TAG_NAME
-             * @default "LI"
-             */
-            ITEM_TAG_NAME: "LI",
-
-            /**
-             * The maximum number of pager buttons allowed beyond which the UI
-             * of the pager would be a drop-down of pages instead of buttons.
-             *
-             * @property MAX_PAGER_BUTTONS
-             * @default 5
-             */
-            MAX_PAGER_BUTTONS: 5,
-
-            /**
-             * The minimum width of the Carousel container to support the
-             * navigation buttons.
-             *
-             * @property MIN_WIDTH
-             * @default 99
-             */
-            MIN_WIDTH: 99,
-
-            /**
-             * The number of visible items in the Carousel.
-             *
-             * @property NUM_VISIBLE
-             * @default 3
-             */
-            NUM_VISIBLE: 3,
-
-            /**
-             * The tag name of the Carousel.
-             *
-             * @property TAG_NAME
-             * @default "OL"
-             */
-            TAG_NAME: "OL"
-
-        },
-
-        /*
-         * Internationalizable strings in the Carousel component
-         */
-
-        STRINGS: {
-
-            /**
-             * The next navigation button name/text.
-             *
-             * @property NEXT_BUTTON_TEXT
-             * @default "Next Page"
-             */
-            NEXT_BUTTON_TEXT: "Next Page",
-
-            /**
-             * The prefix text for the pager in case the UI is a drop-down.
-             *
-             * @property PAGER_PREFIX_TEXT
-             * @default "Go to page "
-             */
-            PAGER_PREFIX_TEXT: "Go to page ",
-
-            /**
-             * The previous navigation button name/text.
-             *
-             * @property PREVIOUS_BUTTON_TEXT
-             * @default "Previous Page"
-             */
-            PREVIOUS_BUTTON_TEXT: "Previous Page"
-
-        },
-
-        /*
-         * Public methods of the Carousel component
-         */
-
-        /**
-         * Insert or append an item to the Carousel.
-         *
-         * @method addItem
-         * @public
-         * @param item {String | Object | HTMLElement} The item to be appended
-         * to the Carousel. If the parameter is a string, it is assumed to be
-         * the content of the newly created item. If the parameter is an
-         * object, it is assumed to supply the content and an optional class
-         * and an optional id of the newly created item.
-         * @param index {Number} optional The position to where in the list
-         * (starts from zero).
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        addItem: function (item, index) {
-            var className, content, el, elId, numItems = this.get("numItems");
-
-            if (!item) {
-                return false;
-            }
-
-            if (JS.isString(item) || item.nodeName) {
-                content = item.nodeName ? item.innerHTML : item;
-            } else if (JS.isObject(item)) {
-                content = item.content;
-            } else {
-                return false;
-            }
-
-            className = item.className || "";
-            elId      = item.id ? item.id : Dom.generateId();
-
-            if (JS.isUndefined(index)) {
-                this._itemsTable.items.push({
-                        item      : content,
-                        className : className,
-                        id        : elId
-                });
-            } else {
-                if (index < 0 || index >= numItems) {
-                    return false;
-                }
-                this._itemsTable.items.splice(index, 0, {
-                        item      : content,
-                        className : className,
-                        id        : elId
-                });
-            }
-            this._itemsTable.numItems++;
-
-            if (numItems < this._itemsTable.items.length) {
-                this.set("numItems", this._itemsTable.items.length);
-            }
-
-            this.fireEvent(itemAddedEvent, { pos: index, ev: itemAddedEvent });
-
-            return true;
-        },
-
-        /**
-         * Insert or append multiple items to the Carousel.
-         *
-         * @method addItems
-         * @public
-         * @param items {Array} An array of items to be added with each item
-         * representing an item, index pair [{item, index}, ...]
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        addItems: function (items) {
-            var i, n, rv = true;
-
-            if (!JS.isArray(items)) {
-                return false;
-            }
-
-            for (i = 0, n = items.length; i < n; i++) {
-                if (this.addItem(items[i][0], items[i][1]) === false) {
-                    rv = false;
-                }
-            }
-
-            return rv;
-        },
-
-        /**
-         * Remove focus from the Carousel.
-         *
-         * @method blur
-         * @public
-         */
-        blur: function () {
-            this._carouselEl.blur();
-            this.fireEvent(blurEvent);
-        },
-
-        /**
-         * Clears the items from Carousel.
-         *
-         * @method clearItems
-         * public
-         */
-        clearItems: function () {
-            var n = this.get("numItems");
-
-            while (n > 0) {
-                this.removeItem(0);
-                n--;
-            }
-        },
-
-        /**
-         * Set focus on the Carousel.
-         *
-         * @method focus
-         * @public
-         */
-        focus: function () {
-            var selItem,
-                numVisible,
-                selectOnScroll,
-                selected,
-                first,
-                last,
-                isSelectionInvisible,
-                focusEl,
-                itemsTable;
-
-            if (this._isAnimationInProgress) {
-                // this messes up real bad!
-                return;
-            }
-
-            selItem              = this.get("selectedItem");
-            numVisible           = this.get("numVisible");
-            selectOnScroll       = this.get("selectOnScroll");
-            selected             = this.getItem(selItem);
-            first                = this.get("firstVisible");
-            last                 = first + numVisible - 1;
-            isSelectionInvisible = (selItem < first || selItem > last);
-            focusEl              = (selected && selected.id) ?
-                                   Dom.get(selected.id) : null;
-            itemsTable           = this._itemsTable;
-
-            if (!selectOnScroll && isSelectionInvisible) {
-                focusEl = (itemsTable && itemsTable.items &&
-                           itemsTable.items[first]) ?
-                        Dom.get(itemsTable.items[first].id) : null;
-            }
-
-            if (focusEl) {
-                try {
-                    focusEl.focus();
-                } catch (ex) {
-                    // ignore focus errors
-                }
-            }
-
-            this.fireEvent(focusEvent);
-        },
-
-        /**
-         * Hide the Carousel.
-         *
-         * @method hide
-         * @public
-         */
-        hide: function () {
-            if (this.fireEvent(beforeHideEvent) !== false) {
-                this.removeClass(this.CLASSES.VISIBLE);
-                this.fireEvent(hideEvent);
-            }
-        },
-
-        /**
-         * Initialize the Carousel.
-         *
-         * @method init
-         * @public
-         * @param el {HTMLElement | String} The html element that represents
-         * the Carousel container.
-         * @param attrs {Object} The set of configuration attributes for
-         * creating the Carousel.
-         */
-        init: function (el, attrs) {
-            var elId  = el,     // save for a rainy day
-                parse = false;
-
-            if (!el) {
-                return;
-            }
-
-            this._itemsTable = { loading: {}, numItems: 0, items: [], size: 0 };
-
-            if (JS.isString(el)) {
-                el = Dom.get(el);
-            } else if (!el.nodeName) {
-                return;
-            }
-
-            if (el) {
-                if (!el.id) {   // in case the HTML element is passed
-                    el.setAttribute("id", Dom.generateId());
-                }
-                this._parseCarousel(el);
-                parse = true;
-            } else {
-                el = this._createCarousel(elId);
-            }
-            elId = el.id;
-
-            Carousel.superclass.init.call(this, el, attrs);
-
-            this.initEvents();
-
-            if (parse) {
-                this._parseCarouselItems();
-            }
-
-            if (!attrs || typeof attrs.isVertical == "undefined") {
-                this.set("isVertical", false);
-            }
-
-            this._parseCarouselNavigation(el);
-            this._navEl = this._setupCarouselNavigation();
-
-            instances[elId] = this;
-
-            loadItems.call(this);
-        },
-
-        /**
-         * Initialize the configuration attributes used to create the Carousel.
-         *
-         * @method initAttributes
-         * @public
-         * @param attrs {Object} The set of configuration attributes for
-         * creating the Carousel.
-         */
-        initAttributes: function (attrs) {
-            attrs = attrs || {};
-            Carousel.superclass.initAttributes.call(this, attrs);
-
-            /**
-             * @attribute currentPage
-             * @description The current page number (read-only.)
-             * @type Number
-             */
-            this.setAttributeConfig("currentPage", {
-                    readOnly : true,
-                    value    : 0
-            });
-
-            /**
-             * @attribute firstVisible
-             * @description The index to start the Carousel from (indexes begin
-             * from zero)
-             * @default 0
-             * @type Number
-             */
-            this.setAttributeConfig("firstVisible", {
-                    method    : this._setFirstVisible,
-                    validator : this._validateFirstVisible,
-                    value     : attrs.firstVisible || this.CONFIG.FIRST_VISIBLE
-            });
-
-            /**
-             * @attribute selectOnScroll
-             * @description Set this to true to automatically set focus to
-             * follow scrolling in the Carousel.
-             * @default true
-             * @type Boolean
-             */
-            this.setAttributeConfig("selectOnScroll", {
-                    validator : JS.isBoolean,
-                    value     : attrs.selectOnScroll || true
-            });
-
-            /**
-             * @attribute numVisible
-             * @description The number of visible items in the Carousel's
-             * viewport.
-             * @default 3
-             * @type Number
-             */
-            this.setAttributeConfig("numVisible", {
-                    method    : this._setNumVisible,
-                    validator : this._validateNumVisible,
-                    value     : attrs.numVisible || this.CONFIG.NUM_VISIBLE
-            });
-
-            /**
-             * @attribute numItems
-             * @description The number of items in the Carousel.
-             * @type Number
-             */
-            this.setAttributeConfig("numItems", {
-                    method    : this._setNumItems,
-                    validator : this._validateNumItems,
-                    value     : this._itemsTable.numItems
-            });
-
-            /**
-             * @attribute scrollIncrement
-             * @description The number of items to scroll by for arrow keys.
-             * @default 1
-             * @type Number
-             */
-            this.setAttributeConfig("scrollIncrement", {
-                    validator : this._validateScrollIncrement,
-                    value     : attrs.scrollIncrement || 1
-            });
-
-            /**
-             * @attribute selectedItem
-             * @description The index of the selected item.
-             * @type Number
-             */
-            this.setAttributeConfig("selectedItem", {
-                    method    : this._setSelectedItem,
-                    validator : JS.isNumber,
-                    value     : 0
-            });
-
-            /**
-             * @attribute revealAmount
-             * @description The percentage of the item to be revealed on each
-             * side of the Carousel (before and after the first and last item
-             * in the Carousel's viewport.)
-             * @default 0
-             * @type Number
-             */
-            this.setAttributeConfig("revealAmount", {
-                    method    : this._setRevealAmount,
-                    validator : this._validateRevealAmount,
-                    value     : attrs.revealAmount || 0
-            });
-
-            /**
-             * @attribute isCircular
-             * @description Set this to true to wrap scrolling of the contents
-             * in the Carousel.
-             * @default false
-             * @type Boolean
-             */
-            this.setAttributeConfig("isCircular", {
-                    validator : JS.isBoolean,
-                    value     : attrs.isCircular || false
-            });
-
-            /**
-             * @attribute isVertical
-             * @description True if the orientation of the Carousel is vertical
-             * @default false
-             * @type Boolean
-             */
-            this.setAttributeConfig("isVertical", {
-                    method    : this._setOrientation,
-                    validator : JS.isBoolean,
-                    value     : attrs.isVertical || false
-            });
-
-            /**
-             * @attribute navigation
-             * @description The set of navigation controls for Carousel
-             * @default <br>
-             * { prev: null, // the previous navigation element<br>
-             *   next: null } // the next navigation element
-             * @type Object
-             */
-            this.setAttributeConfig("navigation", {
-                    method    : this._setNavigation,
-                    validator : this._validateNavigation,
-                    value     : attrs.navigation || {
-                                        prev: null, next: null, page: null }
-            });
-
-            /**
-             * @attribute animation
-             * @description The optional animation attributes for the Carousel.
-             * @default <br>
-             * { speed: 0, // the animation speed (in seconds)<br>
-             *   effect: null } // the animation effect (like
-             *   YAHOO.util.Easing.easeOut)
-             * @type Object
-             */
-            this.setAttributeConfig("animation", {
-                    validator : this._validateAnimation,
-                    value     : attrs.animation || { speed: 0, effect: null }
-            });
-
-            /**
-             * @attribute autoPlay
-             * @description Set this to time in milli-seconds to have the
-             * Carousel automatically scroll the contents.
-             * @type Number
-             */
-            this.setAttributeConfig("autoPlay", {
-                    validator : JS.isNumber,
-                    value     : attrs.autoPlay || 0
-            });
-        },
-
-        /**
-         * Initialize and bind the event handlers.
-         *
-         * @method initEvents
-         * @public
-         */
-        initEvents: function () {
-            var cssClass = this.CLASSES;
-
-            this.on("keydown", this._keyboardEventHandler);
-
-            this.subscribe(afterScrollEvent, syncNavigation);
-            this.on(afterScrollEvent, this.focus);
-
-            this.subscribe(itemAddedEvent, syncUI);
-            this.subscribe(itemAddedEvent, syncNavigation);
-
-            this.subscribe(itemRemovedEvent, syncUI);
-            this.subscribe(itemRemovedEvent, syncNavigation);
-
-            this.on(itemSelectedEvent, this.focus);
-
-            this.subscribe(loadItemsEvent, syncUI);
-
-            this.subscribe(pageChangeEvent, this._syncPagerUI);
-
-            this.subscribe(renderEvent, syncNavigation);
-            this.subscribe(renderEvent, this._syncPagerUI);
-
-            this.on("selectedItemChange", function (ev) {
-                setItemSelection.call(this, ev.newValue, ev.prevValue);
-                this._updateTabIndex(this.getElementForItem(ev.newValue));
-                this.fireEvent(itemSelectedEvent, ev.newValue);
-            });
-
-            this.on("firstVisibleChange", function (ev) {
-                if (!this.get("selectOnScroll")) {
-                    this._updateTabIndex(this.getElementForItem(ev.newValue));
-                }
-            });
-
-            // Handle item selection on mouse click
-            this.on("click", this._itemClickHandler);
-
-            // Handle page navigation
-            this.on("click", this._pagerClickHandler);
-
-            // Restore the focus on the navigation buttons
-            Event.onFocus(this.get("element"), function (ev, obj) {
-                obj._updateNavButtons(Event.getTarget(ev), true);
-            }, this);
-
-            Event.onBlur(this.get("element"), function (ev, obj) {
-                obj._updateNavButtons(Event.getTarget(ev), false);
-            }, this);
-
-        },
-
-        /**
-         * Return the ITEM_TAG_NAME at index or null if the index is not found.
-         *
-         * @method getElementForItem
-         * @param index {Number} The index of the item to be returned
-         * @return {Element} Return the item at index or null if not found
-         * @public
-         */
-        getElementForItem: function (index) {
-            if (index < 0 || index >= this.get("numItems")) {
-                return null;
-            }
-
-            // TODO: may be cache the item
-            if (this._itemsTable.numItems > index) {
-                if (!JS.isUndefined(this._itemsTable.items[index])) {
-                    return Dom.get(this._itemsTable.items[index].id);
-                }
-            }
-
-            return null;
-        },
-
-        /**
-         * Return the ITEM_TAG_NAME for all items in the Carousel.
-         *
-         * @method getElementForItems
-         * @return {Array} Return all the items
-         * @public
-         */
-        getElementForItems: function () {
-            var els = [], i;
-
-            for (i = 0; i < this._itemsTable.numItems; i++) {
-                els.push(this.getElementForItem(i));
-            }
-
-            return els;
-        },
-
-        /**
-         * Return the item at index or null if the index is not found.
-         *
-         * @method getItem
-         * @param index {Number} The index of the item to be returned
-         * @return {Object} Return the item at index or null if not found
-         * @public
-         */
-        getItem: function (index) {
-            if (index < 0 || index >= this.get("numItems")) {
-                return null;
-            }
-
-            if (this._itemsTable.numItems > index) {
-                if (!JS.isUndefined(this._itemsTable.items[index])) {
-                    return this._itemsTable.items[index];
-                }
-            }
-
-            return null;
-        },
-
-        /**
-         * Return all items as an array.
-         *
-         * @method getItems
-         * @return {Array} Return all items in the Carousel
-         * @public
-         */
-        getItems: function (index) {
-            return this._itemsTable.items;
-        },
-
-        /**
-         * Return the position of the Carousel item that has the id "id", or -1
-         * if the id is not found.
-         *
-         * @method getItemPositionById
-         * @param index {Number} The index of the item to be returned
-         * @public
-         */
-        getItemPositionById: function (id) {
-            var i = 0, n = this._itemsTable.numItems;
-
-            while (i < n) {
-                if (!JS.isUndefined(this._itemsTable.items[i])) {
-                    if (this._itemsTable.items[i].id == id) {
-                        return i;
-                    }
-                }
-                i++;
-            }
-
-            return -1;
-        },
-
-        /**
-         * Remove an item at index from the Carousel.
-         *
-         * @method removeItem
-         * @public
-         * @param index {Number} The position to where in the list (starts from
-         * zero).
-         * @return {Boolean} Return true on success, false otherwise
-         */
-        removeItem: function (index) {
-            var item, num = this.get("numItems");
-
-            if (index < 0 || index >= num) {
-                return false;
-            }
-
-            item = this._itemsTable.items.splice(index, 1);
-            if (item && item.length == 1) {
-                this.set("numItems", num - 1);
-
-                this.fireEvent(itemRemovedEvent,
-                        { item: item[0], pos: index, ev: itemRemovedEvent });
-                return true;
-            }
-
-            return false;
-        },
-
-        /**
-         * Render the Carousel.
-         *
-         * @method render
-         * @public
-         * @param appendTo {HTMLElement | String} The element to which the
-         * Carousel should be appended prior to rendering.
-         * @return {Boolean} Status of the operation
-         */
-        render: function (appendTo) {
-            var config = this.CONFIG,
-                cssClass = this.CLASSES,
-                size;
-
-            this.addClass(cssClass.CAROUSEL);
-
-            if (!this._clipEl) {
-                this._clipEl = this._createCarouselClip();
-                this._clipEl.appendChild(this._carouselEl);
-            }
-
-            if (appendTo) {
-                this.appendChild(this._clipEl);
-                this.appendTo(appendTo);
-                this._setClipContainerSize();
-            } else {
-                if (!Dom.inDocument(this.get("element"))) {
-                    return false;
-                }
-                this.appendChild(this._clipEl);
-            }
-
-            if (this.get("isVertical")) {
-                size = getCarouselItemSize.call(this);
-                size = size < config.MIN_WIDTH ? config.MIN_WIDTH : size;
-                this.setStyle("width",  size + "px");
-                this.addClass(cssClass.VERTICAL);
-            } else {
-                this.addClass(cssClass.HORIZONTAL);
-            }
-
-            if (this.get("numItems") < 1) {
-                return false;
-            }
-
-            // Make sure at least one item is selected
-            this.set("selectedItem", this.get("firstVisible"));
-
-            this.fireEvent(renderEvent);
-
-            // By now, the navigation would have been rendered, so calculate
-            // the container height now.
-            this._setContainerSize();
-
-            return true;
-        },
-
-        /**
-         * Scroll the Carousel by an item backward.
-         *
-         * @method scrollBackward
-         * @public
-         */
-        scrollBackward: function () {
-            this.scrollTo(this._firstItem - this.get("scrollIncrement"));
-        },
-
-        /**
-         * Scroll the Carousel by an item forward.
-         *
-         * @method scrollForward
-         * @public
-         */
-        scrollForward: function () {
-            this.scrollTo(this._firstItem + this.get("scrollIncrement"));
-        },
-
-        /**
-         * Scroll the Carousel by a page backward.
-         *
-         * @method scrollPageBackward
-         * @public
-         */
-        scrollPageBackward: function () {
-            this.scrollTo(this._firstItem - this.get("numVisible"));
-        },
-
-        /**
-         * Scroll the Carousel by a page forward.
-         *
-         * @method scrollPageForward
-         * @public
-         */
-        scrollPageForward: function () {
-            this.scrollTo(this._firstItem + this.get("numVisible"));
-        },
-
-        /**
-         * Scroll the Carousel to make the item the first visible item.
-         *
-         * @method scrollTo
-         * @public
-         * @param item Number The index of the element to position at.
-         * @param dontSelect Boolean True if select should be avoided
-         */
-        scrollTo: function (item, dontSelect) {
-            var anim,
-                animate,
-                animAttrs,
-                animCfg    = this.get("animation"),
-                isCircular = this.get("isCircular"),
-                delta,
-                direction,
-                firstItem  = this._firstItem,
-                newPage,
-                numItems   = this.get("numItems"),
-                numPerPage = this.get("numVisible"),
-                offset,
-                page       = this.get("currentPage"),
-                rv,
-                sentinel,
-                which;
-
-            if (item == firstItem) {
-                return;         // nothing to do!
-            }
-
-            if (this._isAnimationInProgress) {
-                return;         // let it take its own sweet time to complete
-            }
-
-            if (item < 0) {
-                if (isCircular) {
-                    item = numItems + item;
-                } else {
-                    return;
-                }
-            } else if (item > numItems - 1) {
-                if (this.get("isCircular")) {
-                    item = numItems - item;
-                } else {
-                    return;
-                }
-            }
-
-            direction = (this._firstItem > item) ? "backward" : "forward";
-
-            sentinel  = firstItem + numPerPage;
-            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
-            rv = this.fireEvent(beforeScrollEvent,
-                    { dir: direction, first: firstItem, last: sentinel });
-            if (rv === false) { // scrolling is prevented
-                return;
-            }
-
-            this.fireEvent(beforePageChangeEvent, { page: page });
-
-            delta = firstItem - item; // yes, the delta is reverse
-            this._firstItem = item;
-            this.set("firstVisible", item);
-
-
-            loadItems.call(this); // do we have all the items to display?
-
-            sentinel  = item + numPerPage;
-            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
-
-            which     = this.get("isVertical") ? "top" : "left";
-            offset    = getScrollOffset.call(this, delta);
-
-            animate   = animCfg.speed > 0;
-
-            if (animate) {
-                this._isAnimationInProgress = true;
-                if (this.get("isVertical")) {
-                    animAttrs = { points: { by: [0, offset] } };
-                } else {
-                    animAttrs = { points: { by: [offset, 0] } };
-                }
-                anim = new YAHOO.util.Motion(this._carouselEl, animAttrs,
-                        animCfg.speed, animCfg.effect);
-                anim.onComplete.subscribe(function (ev) {
-                    var first = this.get("firstVisible");
-
-                    this._isAnimationInProgress = false;
-                    this.fireEvent(afterScrollEvent,
-                            { first: first, last: sentinel });
-                }, null, this);
-                anim.animate();
-                anim = null;
-            } else {
-                offset += getStyle(this._carouselEl, which);
-                Dom.setStyle(this._carouselEl, which, offset + "px");
-            }
-
-            newPage = parseInt(this._firstItem / numPerPage, 10);
-            if (newPage != page) {
-                this.setAttributeConfig("currentPage", { value: newPage });
-                this.fireEvent(pageChangeEvent, newPage);
-            }
-
-            if (!dontSelect) {
-                if (this.get("selectOnScroll")) {
-                    if (item != this._selectedItem) { // out of sync
-                        this.set("selectedItem", this._getSelectedItem(item));
-                    }
-                }
-            }
-
-            delete this._autoPlayTimer;
-            if (this.get("autoPlay") > 0) {
-                this.startAutoPlay();
-            }
-
-            if (!animate) {
-                this.fireEvent(afterScrollEvent,
-                        { first: item, last: sentinel });
-            }
-        },
-
-        /**
-         * Display the Carousel.
-         *
-         * @method show
-         * @public
-         */
-        show: function () {
-            var cssClass = this.CLASSES;
-
-            if (this.fireEvent(beforeShowEvent) !== false) {
-                this.addClass(cssClass.VISIBLE);
-                this.fireEvent(showEvent);
-            }
-        },
-
-        /**
-         * Start auto-playing the Carousel.
-         *
-         * @method startAutoPlay
-         * @public
-         */
-        startAutoPlay: function () {
-            var self  = this,
-                timer = this.get("autoPlay");
-
-            if (timer > 0) {
-                if (!JS.isUndefined(this._autoPlayTimer)) {
-                    return;
-                }
-                this.fireEvent(startAutoPlayEvent);
-                this._autoPlayTimer = setTimeout(function () {
-                    autoScroll.call(self); }, timer);
-            }
-        },
-
-        /**
-         * Stop auto-playing the Carousel.
-         *
-         * @method stopAutoPlay
-         * @public
-         */
-        stopAutoPlay: function () {
-            if (!JS.isUndefined(this._autoPlayTimer)) {
-                clearTimeout(this._autoPlayTimer);
-                delete this._autoPlayTimer;
-                this.set("autoPlay", 0);
-                this.fireEvent(stopAutoPlayEvent);
-            }
-        },
-
-        /**
-         * Return the string representation of the Carousel.
-         *
-         * @method toString
-         * @public
-         * @return {String}
-         */
-        toString: function () {
-            return WidgetName + (this.get ? " (#" + this.get("id") + ")" : "");
-        },
-
-        /*
-         * Protected methods of the Carousel component
-         */
-
-        /**
-         * Create the Carousel.
-         *
-         * @method createCarousel
-         * @param elId {String} The id of the element to be created
-         * @protected
-         */
-        _createCarousel: function (elId) {
-            var cssClass = this.CLASSES;
-
-            var el = createElement("DIV", {
-                    className : cssClass.CAROUSEL,
-                    id        : elId
-            });
-
-            if (!this._carouselEl) {
-                this._carouselEl = createElement(this.CONFIG.TAG_NAME,
-                        { className: cssClass.CAROUSEL_EL });
-            }
-
-            return el;
-        },
-
-        /**
-         * Create the Carousel clip container.
-         *
-         * @method createCarouselClip
-         * @protected
-         */
-        _createCarouselClip: function () {
-            var el = createElement("DIV", { className: this.CLASSES.CONTENT });
-            this._setClipContainerSize(el);
-
-            return el;
-        },
-
-        /**
-         * Create the Carousel item.
-         *
-         * @method createCarouselItem
-         * @param obj {Object} The attributes of the element to be created
-         * @protected
-         */
-        _createCarouselItem: function (obj) {
-            return createElement(this.CONFIG.ITEM_TAG_NAME, {
-                    className : obj.className,
-                    content   : obj.content,
-                    id        : obj.id
-            });
-        },
-
-        /**
-         * Get the value for the selected item.
-         *
-         * @method _getSelectedItem
-         * @param val {Number} The new value for "selected" item
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _getSelectedItem: function (val) {
-            var isCircular = this.get("isCircular"),
-                numItems   = this.get("numItems"),
-                sentinel   = numItems - 1;
-
-            if (val < 0) {
-                if (isCircular) {
-                    val = numItems + val;
-                } else {
-                    val = this.get("selectedItem");
-                }
-            } else if (val > sentinel) {
-                if (isCircular) {
-                    val = val - numItems;
-                } else {
-                    val = this.get("selectedItem");
-                }
-            }
-
-            return val;
-        },
-
-        /**
-         * The "click" handler for the item.
-         *
-         * @method _itemClickHandler
-         * @param {Event} ev The event object
-         * @protected
-         */
-        _itemClickHandler: function (ev) {
-            var container = this.get("element"),
-                el,
-                item,
-                target = YAHOO.util.Event.getTarget(ev);
-
-            while (target && target != container &&
-                   target.id != this._carouselEl) {
-                el = target.nodeName;
-                if (el.toUpperCase() == this.CONFIG.ITEM_TAG_NAME) {
-                    break;
-                }
-                target = target.parentNode;
-            }
-
-            if ((item = this.getItemPositionById(target.id)) >= 0) {
-                this.set("selectedItem", this._getSelectedItem(item));
-            }
-        },
-
-        /**
-         * The keyboard event handler for Carousel.
-         *
-         * @method _keyboardEventHandler
-         * @param ev {Event} The event that is being handled.
-         * @protected
-         */
-        _keyboardEventHandler: function (ev) {
-            var key      = Event.getCharCode(ev),
-                prevent  = false,
-                position = 0,
-                selItem;
-
-            if (this._isAnimationInProgress) {
-                return;         // do not mess while animation is in progress
-            }
-
-            switch (key) {
-            case 0x25:          // left arrow
-            case 0x26:          // up arrow
-                selItem = this.get("selectedItem");
-                if (selItem == this._firstItem) {
-                    position = selItem - this.get("numVisible");
-                    this.scrollTo(position);
-                    this.set("selectedItem", this._getSelectedItem(selItem-1));
-                } else {
-                    position = this.get("selectedItem") -
-                            this.get("scrollIncrement");
-                    this.set("selectedItem", this._getSelectedItem(position));
-                }
-                prevent = true;
-                break;
-            case 0x27:          // right arrow
-            case 0x28:          // down arrow
-                position = this.get("selectedItem")+this.get("scrollIncrement");
-                this.set("selectedItem", this._getSelectedItem(position));
-                prevent = true;
-                break;
-            case 0x21:          // page-up
-                this.scrollPageBackward();
-                prevent = true;
-                break;
-            case 0x22:          // page-down
-                this.scrollPageForward();
-                prevent = true;
-                break;
-            }
-
-            if (prevent) {
-                Event.preventDefault(ev);
-            }
-        },
-
-        /**
-         * The "click" handler for the pager navigation.
-         *
-         * @method _pagerClickHandler
-         * @param {Event} ev The event object
-         * @protected
-         */
-        _pagerClickHandler: function (ev) {
-            var pos, target, val;
-
-            target = Event.getTarget(ev);
-            val = target.href || target.value;
-            if (JS.isString(val) && val) {
-                pos = val.lastIndexOf("#");
-                if (pos != -1) {
-                    val = this.getItemPositionById(val.substring(pos + 1));
-                    this.scrollTo(val);
-                    Event.preventDefault(ev);
-                }
-            }
-        },
-
-        /**
-         * Find the Carousel within a container. The Carousel is identified by
-         * the first element that matches the carousel element tag or the
-         * element that has the Carousel class.
-         *
-         * @method parseCarousel
-         * @param parent {HTMLElement} The parent element to look under
-         * @return {Boolean} True if Carousel is found, false otherwise
-         * @protected
-         */
-        _parseCarousel: function (parent) {
-            var child, cssClass, found, node;
-
-            cssClass = this.CLASSES;
-            found    = false;
-
-            for (child = parent.firstChild; child; child = child.nextSibling) {
-                if (child.nodeType == 1) {
-                    node = child.nodeName;
-                    if (node.toUpperCase() == this.CONFIG.TAG_NAME) {
-                        this._carouselEl = child;
-                        Dom.addClass(this._carouselEl,this.CLASSES.CAROUSEL_EL);
-                        found = true;
-                    }
-                }
-            }
-
-            return found;
-        },
-
-        /**
-         * Find the items within the Carousel and add them to the items table.
-         * A Carousel item is identified by elements that matches the carousel
-         * item element tag.
-         *
-         * @method parseCarouselItems
-         * @protected
-         */
-        _parseCarouselItems: function () {
-            var child,
-                elId,
-                node,
-                parent = this._carouselEl;
-
-            for (child = parent.firstChild; child; child = child.nextSibling) {
-                if (child.nodeType == 1) {
-                    node = child.nodeName;
-                    if (node.toUpperCase() == this.CONFIG.ITEM_TAG_NAME) {
-                        if (child.id) {
-                            elId = child.id;
-                        } else {
-                            elId = Dom.generateId();
-                            child.setAttribute("id", elId);
-                        }
-                        this.addItem(child);
-                    }
-                }
-            }
-        },
-
-        /**
-         * Find the Carousel navigation within a container. The navigation
-         * elements need to match the carousel navigation class names.
-         *
-         * @method parseCarouselNavigation
-         * @param parent {HTMLElement} The parent element to look under
-         * @return {Boolean} True if at least one is found, false otherwise
-         * @protected
-         */
-        _parseCarouselNavigation: function (parent) {
-            var cfg, cssClass = this.CLASSES, el, i, j, nav, rv = false;
-
-            nav = Dom.getElementsByClassName(cssClass.PREV_PAGE, "*", parent);
-            if (nav.length > 0) {
-                for (i in nav) {
-                    if (nav.hasOwnProperty(i)) {
-                        el = nav[i];
-                        if (el.nodeName == "INPUT" ||
-                            el.nodeName == "BUTTON") {
-                            if (typeof this._navBtns.prev == "undefined") {
-                                this._navBtns.prev = [];
-                            }
-                            this._navBtns.prev.push(el);
-                        } else {
-                            j = el.getElementsByTagName("INPUT");
-                            if (JS.isArray(j) && j.length > 0) {
-                                this._navBtns.prev.push(j[0]);
-                            } else {
-                                j = el.getElementsByTagName("BUTTON");
-                                if (JS.isArray(j) && j.length > 0) {
-                                    this._navBtns.prev.push(j[0]);
-                                }
-                            }
-                        }
-                    }
-                }
-                cfg = { prev: nav };
-            }
-
-            nav = Dom.getElementsByClassName(cssClass.NEXT_PAGE, "*", parent);
-            if (nav.length > 0) {
-                for (i in nav) {
-                    if (nav.hasOwnProperty(i)) {
-                        el = nav[i];
-                        if (el.nodeName == "INPUT" ||
-                            el.nodeName == "BUTTON") {
-                            if (typeof this._navBtns.next == "undefined") {
-                                this._navBtns.next = [];
-                            }
-                            this._navBtns.next.push(el);
-                        } else {
-                            j = el.getElementsByTagName("INPUT");
-                            if (JS.isArray(j) && j.length > 0) {
-                                this._navBtns.next.push(j[0]);
-                            } else {
-                                j = el.getElementsByTagName("BUTTON");
-                                if (JS.isArray(j) && j.length > 0) {
-                                    this._navBtns.next.push(j[0]);
-                                }
-                            }
-                        }
-                    }
-                }
-                if (cfg) {
-                    cfg.next = nav;
-                } else {
-                    cfg = { next: nav };
-                }
-            }
-
-            if (cfg) {
-                this.set("navigation", cfg);
-                rv = true;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Setup/Create the Carousel navigation element (if needed).
-         *
-         * @method _setupCarouselNavigation
-         * @protected
-         */
-        _setupCarouselNavigation: function () {
-            var btn, cfg, cssClass, nav, navContainer, nextButton, pageEl,
-                prevButton;
-
-            cssClass = this.CLASSES;
-
-            navContainer = Dom.getElementsByClassName(cssClass.NAVIGATION,
-                    "DIV", this.get("element"));
-
-            if (navContainer.length === 0) {
-                navContainer = createElement("DIV",
-                        { className: cssClass.NAVIGATION });
-                this.insertBefore(navContainer,
-                        Dom.getFirstChild(this.get("element")));
-            } else {
-                navContainer = navContainer[0];
-            }
-
-            this._pages.el = createElement("UL");
-            navContainer.appendChild(this._pages.el);
-
-            nav = this.get("navigation");
-            if (nav.prev && nav.prev.length > 0) {
-                navContainer.appendChild(nav.prev[0]);
-            } else {
-                // TODO: separate method for creating a navigation button
-                prevButton = createElement("SPAN",
-                        { className: cssClass.BUTTON + cssClass.FIRST_NAV });
-                // XXX: for IE 6.x
-                Dom.setStyle(prevButton, "visibility", "visible");
-                btn = Dom.generateId();
-                prevButton.innerHTML = "<input type=\"button\" " +
-                        "id=\"" + btn + "\" " +
-                        "value=\"" + this.STRINGS.PREVIOUS_BUTTON_TEXT + "\" " +
-                        "name=\"" + this.STRINGS.PREVIOUS_BUTTON_TEXT + "\">";
-                navContainer.appendChild(prevButton);
-                btn = Dom.get(btn);
-                this._navBtns.prev = [btn];
-                cfg = { prev: [prevButton] };
-            }
-
-            if (nav.next && nav.next.length > 0) {
-                navContainer.appendChild(nav.next[0]);
-            } else {
-                // TODO: separate method for creating a navigation button
-                nextButton = createElement("SPAN",
-                        { className: cssClass.BUTTON });
-                // XXX: for IE 6.x
-                Dom.setStyle(nextButton, "visibility", "visible");
-                btn = Dom.generateId();
-                nextButton.innerHTML = "<input type=\"button\" " +
-                        "id=\"" + btn + "\" " +
-                        "value=\"" + this.STRINGS.NEXT_BUTTON_TEXT + "\" " +
-                        "name=\"" + this.STRINGS.NEXT_BUTTON_TEXT + "\">";
-                navContainer.appendChild(nextButton);
-                btn = Dom.get(btn);
-                this._navBtns.next = [btn];
-                if (cfg) {
-                    cfg.next = [nextButton];
-                } else {
-                    cfg = { next: [nextButton] };
-                }
-            }
-
-            if (cfg) {
-                this.set("navigation", cfg);
-            }
-
-            return navContainer;
-        },
-
-        /**
-         * Set the clip container size (based on the new numVisible value).
-         *
-         * @method _setClipContainerSize
-         * @param clip {HTMLElement} The clip container element.
-         * @param num {Number} optional The number of items per page.
-         * @protected
-         */
-        _setClipContainerSize: function (clip, num) {
-            var attr, currVal, isVertical, itemSize, reveal, size, which;
-
-            isVertical = this.get("isVertical");
-            reveal     = this.get("revealAmount");
-            which      = isVertical ? "height" : "width";
-            attr       = isVertical ? "top" : "left";
-
-            clip       = clip || this._clipEl;
-            if (!clip) {
-                return;
-            }
-
-            num        = num  || this.get("numVisible");
-            itemSize   = getCarouselItemSize.call(this, which);
-            size       = itemSize * num;
-
-            this._recomputeSize = (size === 0); // bleh!
-            if (this._recomputeSize) {
-                return;             // no use going further, bail out!
-            }
-
-            if (reveal > 0) {
-                reveal = itemSize * (reveal / 100) * 2;
-                size += reveal;
-                // TODO: set the Carousel's initial offset somwehere
-                currVal = parseFloat(Dom.getStyle(this._carouselEl, attr));
-                currVal = JS.isNumber(currVal) ? currVal : 0;
-                Dom.setStyle(this._carouselEl, attr, currVal+(reveal/2)+"px");
-            }
-
-            if (isVertical) {
-                size += getStyle(this._carouselEl, "marginTop")     +
-                        getStyle(this._carouselEl, "marginBottom")  +
-                        getStyle(this._carouselEl, "paddingTop")    +
-                        getStyle(this._carouselEl, "paddingBottom") +
-                        getStyle(this._carouselEl, "borderTop")     +
-                        getStyle(this._carouselEl, "borderBottom");
-                // XXX: for vertical Carousel
-                Dom.setStyle(clip, which, (size - (num - 1)) + "px");
-            } else {
-                size += getStyle(this._carouselEl, "marginLeft")    +
-                        getStyle(this._carouselEl, "marginRight")   +
-                        getStyle(this._carouselEl, "paddingLeft")   +
-                        getStyle(this._carouselEl, "paddingRight")  +
-                        getStyle(this._carouselEl, "borderLeft")    +
-                        getStyle(this._carouselEl, "borderRight");
-                Dom.setStyle(clip, which, size + "px");
-            }
-
-            this._setContainerSize(clip); // adjust the container size too
-        },
-
-        /**
-         * Set the container size.
-         *
-         * @method _setContainerSize
-         * @param clip {HTMLElement} The clip container element.
-         * @param attr {String} Either set the height or width.
-         * @protected
-         */
-        _setContainerSize: function (clip, attr) {
-            var isVertical, size;
-
-            isVertical = this.get("isVertical");
-            clip       = clip || this._clipEl;
-            attr       = attr || (isVertical ? "height" : "width");
-            size       = parseFloat(Dom.getStyle(clip, attr), 10);
-
-            size = JS.isNumber(size) ? size : 0;
-
-            size += getStyle(clip, "marginLeft")   +
-                    getStyle(clip, "marginRight")  +
-                    getStyle(clip, "paddingLeft")  +
-                    getStyle(clip, "paddingRight") +
-                    getStyle(clip, "borderLeft")   +
-                    getStyle(clip, "borderRight");
-
-            if (isVertical) {
-                size += getStyle(this._navEl, "height");
-            }
-
-            this.setStyle(attr, size + "px");
-        },
-
-        /**
-         * Set the value for the Carousel's first visible item.
-         *
-         * @method _setFirstVisible
-         * @param val {Number} The new value for firstVisible
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setFirstVisible: function (val) {
-            if (val >= 0 && val < this.get("numItems")) {
-                this.scrollTo(val);
-            } else {
-                val = this.get("firstVisible");
-            }
-            return val;
-        },
-
-        /**
-         * Set the value for the Carousel's navigation.
-         *
-         * @method _setNavigation
-         * @param cfg {Object} The navigation configuration
-         * @return {Object} The new value that would be set
-         * @protected
-         */
-        _setNavigation: function (cfg) {
-            if (cfg.prev) {
-                Event.on(cfg.prev, "click", scrollPageBackward, this);
-            }
-            if (cfg.next) {
-                Event.on(cfg.next, "click", scrollPageForward, this);
-            }
-        },
-
-        /**
-         * Set the value for the number of visible items in the Carousel.
-         *
-         * @method _setNumVisible
-         * @param val {Number} The new value for numVisible
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setNumVisible: function (val) {
-            if (val > 1 && val < this.get("numItems")) {
-                this._setClipContainerSize(this._clipEl, val);
-            } else {
-                val = this.get("numVisible");
-            }
-            return val;
-        },
-
-        /**
-         * Set the number of items in the Carousel.
-         * Warning: Setting this to a lower number than the current removes
-         * items from the end.
-         *
-         * @method _setNumItems
-         * @param val {Number} The new value for numItems
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setNumItems: function (val) {
-            var num = this._itemsTable.numItems;
-
-            if (JS.isArray(this._itemsTable.items)) {
-                if (this._itemsTable.items.length != num) { // out of sync
-                    num = this._itemsTable.items.length;
-                    this._itemsTable.numItems = num;
-                }
-            }
-
-            if (val < num) {
-                while (num > val) {
-                    this.removeItem(num - 1);
-                    num--;
-                }
-            }
-
-            return val;
-        },
-
-        /**
-         * Set the orientation of the Carousel.
-         *
-         * @method _setOrientation
-         * @param val {Boolean} The new value for isVertical
-         * @return {Boolean} The new value that would be set
-         * @protected
-         */
-        _setOrientation: function (val) {
-            var cssClass = this.CLASSES;
-
-            if (val) {
-                this.replaceClass(cssClass.HORIZONTAL, cssClass.VERTICAL);
-            } else {
-                this.replaceClass(cssClass.VERTICAL, cssClass.HORIZONTAL);
-            }
-            this._itemsTable.size = 0; // invalidate our size computation cache
-            return val;
-        },
-
-        /**
-         * Set the value for the reveal amount percentage in the Carousel.
-         *
-         * @method _setRevealAmount
-         * @param val {Number} The new value for revealAmount
-         * @return {Number} The new value that would be set
-         * @protected
-         */
-        _setRevealAmount: function (val) {
-            if (val >= 0 && val <= 100) {
-                val = parseInt(val, 10);
-                val = JS.isNumber(val) ? val : 0;
-                this._setClipContainerSize();
-            } else {
-                val = this.get("revealAmount");
-            }
-            return val;
-        },
-
-        /**
-         * Set the value for the selected item.
-         *
-         * @method _setSelectedItem
-         * @param val {Number} The new value for "selected" item
-         * @protected
-         */
-        _setSelectedItem: function (val) {
-            this._selectedItem = val;
-        },
-
-        /**
-         * Synchronize and redraw the Pager UI if necessary.
-         *
-         * @method _syncPagerUI
-         * @protected
-         */
-        _syncPagerUI: function (page) {
-            var a,
-                cssClass = this.CLASSES,
-                i,
-                markup     = "",
-                numPages,
-                numVisible = this.get("numVisible");
-
-            page     = page || 0;
-            numPages = Math.ceil(this.get("numItems") / numVisible);
-
-            this._pages.num = numPages;
-            this._pages.cur = page;
-
-            if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                markup = "<form><select>";
-            } else {
-                markup = "";
-            }
-
-            for (i = 0; i < numPages; i++) {
-                if (JS.isUndefined(this._itemsTable.items[i * numVisible])) {
-                    break;
-                }
-                a = this._itemsTable.items[i * numVisible].id;
-                if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                    markup += "<option value=\"#" + a + "\" "            +
-                            (i == page ? " selected" : "") + ">"         +
-                            this.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1) +
-                            "</option>";
-                } else {
-                    markup += "<li class=\""                                   +
-                            (i === 0 ? cssClass.FIRST_PAGE : "")               +
-                            (i == page ? " " + cssClass.SELECTED_NAV : "")     +
-                            "\"><a href=\"#" + a + "\" tabindex=\"0\"><em>"    +
-                            this.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1)       +
-                            "</em></a></li>";
-                }
-            }
-
-            if (numPages > this.CONFIG.MAX_PAGER_BUTTONS) {
-                markup += "</select></form>";
-            }
-
-            this._pages.el.innerHTML = markup;
-            markup = null;
-        },
-
-        /**
-         * Set the correct class for the navigation buttons.
-         *
-         * @method _updateNavButtons
-         * @param el {Object} The target button
-         * @param setFocus {Boolean} True to set focus ring, false otherwise.
-         * @protected
-         */
-        _updateNavButtons: function (el, setFocus) {
-            var children,
-                cssClass = this.CLASSES,
-                grandParent,
-                parent   = el.parentNode;
-
-            if (!parent) {
-                return;
-            }
-            grandParent = parent.parentNode;
-
-            if (el.nodeName.toUpperCase() == "INPUT" &&
-                Dom.hasClass(parent, cssClass.BUTTON)) {
-                if (setFocus) {
-                    if (grandParent) {
-                        children = Dom.getChildren(grandParent);
-                        if (children) {
-                            Dom.removeClass(children, cssClass.FOCUSSED_BUTTON);
-                        }
-                    }
-                    Dom.addClass(parent, cssClass.FOCUSSED_BUTTON);
-                } else {
-                    Dom.removeClass(parent, cssClass.FOCUSSED_BUTTON);
-                }
-            }
-        },
-
-        /**
-         * Set the correct tab index for the Carousel items.
-         *
-         * @method _updateTabIndex
-         * @param el {Object} The element to be focussed
-         * @protected
-         */
-        _updateTabIndex: function (el) {
-            if (el) {
-                if (this._focusableItemEl) {
-                    this._focusableItemEl.tabIndex = -1;
-                }
-                this._focusableItemEl = el;
-                el.tabIndex = 0;
-            }
-        },
-
-        /**
-         * Validate animation parameters.
-         *
-         * @method _validateAnimation
-         * @param cfg {Object} The animation configuration
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateAnimation: function (cfg) {
-            var rv = true;
-
-            if (JS.isObject(cfg)) {
-                if (cfg.speed) {
-                    rv = rv && JS.isNumber(cfg.speed);
-                }
-                if (cfg.effect) {
-                    rv = rv && JS.isFunction(cfg.effect);
-                } else if (!JS.isUndefined(YAHOO.util.Easing)) {
-                    cfg.effect = YAHOO.util.Easing.easeOut;
-                }
-            } else {
-                rv = false;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the firstVisible value.
-         *
-         * @method _validateFirstVisible
-         * @param val {Number} The first visible value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateFirstVisible: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = (val >= 0 && val < this.get("numItems"));
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate and navigation parameters.
-         *
-         * @method _validateNavigation
-         * @param cfg {Object} The navigation configuration
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNavigation : function (cfg) {
-            var i;
-
-            if (!JS.isObject(cfg)) {
-                return false;
-            }
-
-            if (cfg.prev) {
-                if (!JS.isArray(cfg.prev)) {
-                    return false;
-                }
-                for (i in cfg.prev) {
-                    if (cfg.prev.hasOwnProperty(i)) {
-                        if (!JS.isString(cfg.prev[i].nodeName)) {
-                            return false;
-                        }
-                    }
-                }
-            }
-
-            if (cfg.next) {
-                if (!JS.isArray(cfg.next)) {
-                    return false;
-                }
-                for (i in cfg.next) {
-                    if (cfg.next.hasOwnProperty(i)) {
-                        if (!JS.isString(cfg.next[i].nodeName)) {
-                            return false;
-                        }
-                    }
-                }
-            }
-
-            return true;
-        },
-
-        /**
-         * Validate the numItems value.
-         *
-         * @method _validateNumItems
-         * @param val {Number} The numItems value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNumItems: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val > 0;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the numVisible value.
-         *
-         * @method _validateNumVisible
-         * @param val {Number} The numVisible value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateNumVisible: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val > 0 && val < this.get("numItems");
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the revealAmount value.
-         *
-         * @method _validateRevealAmount
-         * @param val {Number} The revealAmount value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateRevealAmount: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = val >= 0 && val < 100;
-            }
-
-            return rv;
-        },
-
-        /**
-         * Validate the scrollIncrement value.
-         *
-         * @method _validateScrollIncrement
-         * @param val {Number} The scrollIncrement value
-         * @return {Boolean} The status of the validation
-         * @protected
-         */
-        _validateScrollIncrement: function (val) {
-            var rv = false;
-
-            if (JS.isNumber(val)) {
-                rv = (val > 0 && val < this.get("numItems"));
-            }
-
-            return rv;
-        }
-
-    });
-
-})();
-
-YAHOO.register("carousel", YAHOO.widget.Carousel, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/carousel/carousel-debug.js
===================================================================
--- trunk/root/static/yui/carousel/carousel-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,3658 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The Carousel module provides a widget for browsing among a set of like
+ * objects represented pictorially.
+ *
+ * @module carousel
+ * @requires yahoo, dom, event, element
+ * @optional animation
+ * @namespace YAHOO.widget
+ * @title Carousel Widget
+ * @beta
+ */
+(function () {
+
+    var WidgetName;             // forward declaration
+
+    /**
+     * The Carousel widget.
+     *
+     * @class Carousel
+     * @extends YAHOO.util.Element
+     * @constructor
+     * @param el {HTMLElement | String} The HTML element that represents the
+     * the container that houses the Carousel.
+     * @param cfg {Object} (optional) The configuration values
+     */
+    YAHOO.widget.Carousel = function (el, cfg) {
+        YAHOO.log("Component creation", WidgetName);
+
+        YAHOO.widget.Carousel.superclass.constructor.call(this, el, cfg);
+    };
+
+    /*
+     * Private variables of the Carousel component
+     */
+
+    /* Some abbreviations to avoid lengthy typing and lookups. */
+    var Carousel    = YAHOO.widget.Carousel,
+        Dom         = YAHOO.util.Dom,
+        Event       = YAHOO.util.Event,
+        JS          = YAHOO.lang;
+
+    /**
+     * The widget name.
+     * @private
+     * @static
+     */
+    WidgetName = "Carousel";
+
+    /**
+     * The internal table of Carousel instances.
+     * @private
+     * @static
+     */
+    var instances = {},
+
+    /*
+     * Custom events of the Carousel component
+     */
+
+    /**
+     * @event afterScroll
+     * @description Fires when the Carousel has scrolled to the previous or
+     * next page.  Passes back the index of the first and last visible items in
+     * the Carousel.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    afterScrollEvent = "afterScroll",
+
+    /**
+     * @event allItemsRemovedEvent
+     * @description Fires when all items have been removed from the Carousel.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    allItemsRemovedEvent = "allItemsRemoved",
+
+    /**
+     * @event beforeHide
+     * @description Fires before the Carousel is hidden.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeHideEvent = "beforeHide",
+
+    /**
+     * @event beforePageChange
+     * @description Fires when the Carousel is about to scroll to the previous
+     * or next page.  Passes back the page number of the current page.  Note
+     * that the first page number is zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforePageChangeEvent = "beforePageChange",
+
+    /**
+     * @event beforeScroll
+     * @description Fires when the Carousel is about to scroll to the previous
+     * or next page.  Passes back the index of the first and last visible items
+     * in the Carousel and the direction (backward/forward) of the scroll.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeScrollEvent = "beforeScroll",
+
+    /**
+     * @event beforeShow
+     * @description Fires when the Carousel is about to be shown.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeShowEvent = "beforeShow",
+
+    /**
+     * @event blur
+     * @description Fires when the Carousel loses focus.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    blurEvent = "blur",
+
+    /**
+     * @event focus
+     * @description Fires when the Carousel gains focus.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    focusEvent = "focus",
+
+    /**
+     * @event hide
+     * @description Fires when the Carousel is hidden.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    hideEvent = "hide",
+
+    /**
+     * @event itemAdded
+     * @description Fires when an item has been added to the Carousel.  Passes
+     * back the content of the item that would be added, the index at which the
+     * item would be added, and the event itself.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemAddedEvent = "itemAdded",
+
+    /**
+     * @event itemRemoved
+     * @description Fires when an item has been removed from the Carousel.
+     * Passes back the content of the item that would be removed, the index
+     * from which the item would be removed, and the event itself.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemRemovedEvent = "itemRemoved",
+
+    /**
+     * @event itemSelected
+     * @description Fires when an item has been selected in the Carousel.
+     * Passes back the index of the selected item in the Carousel.  Note, that
+     * the index begins from zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemSelectedEvent = "itemSelected",
+
+    /**
+     * @event loadItems
+     * @description Fires when the Carousel needs more items to be loaded for
+     * displaying them.  Passes back the first and last visible items in the
+     * Carousel, and the number of items needed to be loaded.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    loadItemsEvent = "loadItems",
+
+    /**
+     * @event navigationStateChange
+     * @description Fires when the state of either one of the navigation
+     * buttons are changed from enabled to disabled or vice versa.  Passes back
+     * the state (true/false) of the previous and next buttons.  The value true
+     * signifies the button is enabled, false signifies disabled.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    navigationStateChangeEvent = "navigationStateChange",
+
+    /**
+     * @event pageChange
+     * @description Fires after the Carousel has scrolled to the previous or
+     * next page.  Passes back the page number of the current page.  Note
+     * that the first page number is zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    pageChangeEvent = "pageChange",
+
+    /*
+     * Internal event.
+     * @event render
+     * @description Fires when the Carousel is rendered.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    renderEvent = "render",
+
+    /**
+     * @event show
+     * @description Fires when the Carousel is shown.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    showEvent = "show",
+
+    /**
+     * @event startAutoPlay
+     * @description Fires when the auto play has started in the Carousel.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    startAutoPlayEvent = "startAutoPlay",
+
+    /**
+     * @event stopAutoPlay
+     * @description Fires when the auto play has been stopped in the Carousel.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    stopAutoPlayEvent = "stopAutoPlay",
+
+    /*
+     * Internal event.
+     * @event uiUpdateEvent
+     * @description Fires when the UI has been updated.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    uiUpdateEvent = "uiUpdate";
+
+    /*
+     * Private helper functions used by the Carousel component
+     */
+
+    /**
+     * Create an element, set its class name and optionally install the element
+     * to its parent.
+     * @method createElement
+     * @param el {String} The element to be created
+     * @param attrs {Object} Configuration of parent, class and id attributes.
+     * If the content is specified, it is inserted after creation of the
+     * element. The content can also be an HTML element in which case it would
+     * be appended as a child node of the created element.
+     * @private
+     */
+    function createElement(el, attrs) {
+        var newEl = document.createElement(el);
+
+        attrs = attrs || {};
+        if (attrs.className) {
+            Dom.addClass(newEl, attrs.className);
+        }
+
+        if (attrs.parent) {
+            attrs.parent.appendChild(newEl);
+        }
+
+        if (attrs.id) {
+            newEl.setAttribute("id", attrs.id);
+        }
+
+        if (attrs.content) {
+            if (attrs.content.nodeName) {
+                newEl.appendChild(attrs.content);
+            } else {
+                newEl.innerHTML = attrs.content;
+            }
+        }
+
+        return newEl;
+    }
+
+    /**
+     * Get the computed style of an element.
+     *
+     * @method getStyle
+     * @param el {HTMLElement} The element for which the style needs to be
+     * returned.
+     * @param style {String} The style attribute
+     * @param type {String} "int", "float", etc. (defaults to int)
+     * @private
+     */
+    function getStyle(el, style, type) {
+        var value;
+
+        if (!el) {
+            return 0;
+        }
+
+        function getStyleIntVal(el, style) {
+            var val;
+
+            /*
+             * XXX: Safari calculates incorrect marginRight for an element
+             * which has its parent element style set to overflow: hidden
+             * https://bugs.webkit.org/show_bug.cgi?id=13343
+             * Let us assume marginLeft == marginRight
+             */
+            if (style == "marginRight" && YAHOO.env.ua.webkit) {
+                val = parseInt(Dom.getStyle(el, "marginLeft"), 10);
+            } else {
+                val = parseInt(Dom.getStyle(el, style), 10);
+            }
+
+            return JS.isNumber(val) ? val : 0;
+        }
+
+        function getStyleFloatVal(el, style) {
+            var val;
+
+            /*
+             * XXX: Safari calculates incorrect marginRight for an element
+             * which has its parent element style set to overflow: hidden
+             * https://bugs.webkit.org/show_bug.cgi?id=13343
+             * Let us assume marginLeft == marginRight
+             */
+            if (style == "marginRight" && YAHOO.env.ua.webkit) {
+                val = parseFloat(Dom.getStyle(el, "marginLeft"));
+            } else {
+                val = parseFloat(Dom.getStyle(el, style));
+            }
+
+            return JS.isNumber(val) ? val : 0;
+        }
+
+        if (typeof type == "undefined") {
+            type = "int";
+        }
+
+        switch (style) {
+        case "height":
+            value = el.offsetHeight;
+            if (value > 0) {
+                value += getStyleIntVal(el, "marginTop")        +
+                        getStyleIntVal(el, "marginBottom");
+            } else {
+                value = getStyleFloatVal(el, "height")          +
+                        getStyleIntVal(el, "marginTop")         +
+                        getStyleIntVal(el, "marginBottom")      +
+                        getStyleIntVal(el, "borderTopWidth")    +
+                        getStyleIntVal(el, "borderBottomWidth") +
+                        getStyleIntVal(el, "paddingTop")        +
+                        getStyleIntVal(el, "paddingBottom");
+            }
+            break;
+        case "width":
+            value = el.offsetWidth;
+            if (value > 0) {
+                value += getStyleIntVal(el, "marginLeft")       +
+                        getStyleIntVal(el, "marginRight");
+            } else {
+                value = getStyleFloatVal(el, "width")           +
+                        getStyleIntVal(el, "marginLeft")        +
+                        getStyleIntVal(el, "marginRight")       +
+                        getStyleIntVal(el, "borderLeftWidth")   +
+                        getStyleIntVal(el, "borderRightWidth")  +
+                        getStyleIntVal(el, "paddingLeft")       +
+                        getStyleIntVal(el, "paddingRight");
+            }
+            break;
+        default:
+            if (type == "int") {
+                value = getStyleIntVal(el, style);
+            } else if (type == "float") {
+                value = getStyleFloatVal(el, style);
+            } else {
+                value = Dom.getStyle(el, style);
+            }
+            break;
+        }
+
+        return value;
+    }
+
+    /**
+     * Compute and return the height or width of a single Carousel item
+     * depending upon the orientation.
+     *
+     * @method getCarouselItemSize
+     * @param which {String} "height" or "width" to be returned.  If this is
+     * passed explicitly, the calculated size is not cached.
+     * @private
+     */
+    function getCarouselItemSize(which) {
+        var carousel = this,
+            child,
+            size     = 0,
+            vertical = false;
+
+        if (carousel._itemsTable.numItems === 0) {
+            return 0;
+        }
+
+        if (typeof which == "undefined") {
+            if (carousel._itemsTable.size > 0) {
+                return carousel._itemsTable.size;
+            }
+        }
+
+        if (JS.isUndefined(carousel._itemsTable.items[0])) {
+            return 0;
+        }
+
+        child = Dom.get(carousel._itemsTable.items[0].id);
+
+        if (typeof which == "undefined") {
+            vertical = carousel.get("isVertical");
+        } else {
+            vertical = which == "height";
+        }
+
+        if (vertical) {
+            size = getStyle(child, "height");
+        } else {
+            size = getStyle(child, "width");
+        }
+
+        if (typeof which == "undefined") {
+            carousel._itemsTable.size = size; // save the size for later
+        }
+
+        return size;
+    }
+
+    /**
+     * Return the index of the first item in the view port for displaying item
+     * in "pos".
+     *
+     * @method getFirstVisibleForPosition
+     * @param pos {Number} The position of the item to be displayed
+     * @private
+     */
+    function getFirstVisibleForPosition(pos) {
+        var num = this.get("numVisible");
+
+        return Math.floor(pos / num) * num;
+    }
+
+    /**
+     * Return the scrolling offset size given the number of elements to
+     * scroll.
+     *
+     * @method getScrollOffset
+     * @param delta {Number} The delta number of elements to scroll by.
+     * @private
+     */
+    function getScrollOffset(delta) {
+        var itemSize = 0,
+            size     = 0;
+
+        itemSize = getCarouselItemSize.call(this);
+        size     = itemSize * delta;
+
+        // XXX: really, when the orientation is vertical, the scrolling
+        // is not exactly the number of elements into element size.
+        if (this.get("isVertical")) {
+            size -= delta;
+        }
+
+        return size;
+    }
+
+    /**
+     * Scroll the Carousel by a page backward.
+     *
+     * @method scrollPageBackward
+     * @param {Event} ev The event object
+     * @param {Object} obj The context object
+     * @private
+     */
+    function scrollPageBackward(ev, obj) {
+        obj.scrollPageBackward();
+        Event.preventDefault(ev);
+    }
+
+    /**
+     * Scroll the Carousel by a page forward.
+     *
+     * @method scrollPageForward
+     * @param {Event} ev The event object
+     * @param {Object} obj The context object
+     * @private
+     */
+    function scrollPageForward(ev, obj) {
+        obj.scrollPageForward();
+        Event.preventDefault(ev);
+    }
+
+    /**
+     * Set the selected item.
+     *
+     * @method setItemSelection
+     * @param {Number} newpos The index of the new position
+     * @param {Number} oldpos The index of the previous position
+     * @private
+     */
+     function setItemSelection(newpos, oldpos) {
+        var carousel = this,
+            cssClass   = carousel.CLASSES,
+            el,
+            firstItem  = carousel._firstItem,
+            isCircular = carousel.get("isCircular"),
+            numItems   = carousel.get("numItems"),
+            numVisible = carousel.get("numVisible"),
+            position   = oldpos,
+            sentinel   = firstItem + numVisible - 1;
+
+        if (position >= 0 && position < numItems) {
+            if (!JS.isUndefined(carousel._itemsTable.items[position])) {
+                el = Dom.get(carousel._itemsTable.items[position].id);
+                if (el) {
+                    Dom.removeClass(el, cssClass.SELECTED_ITEM);
+                }
+            }
+        }
+
+        if (JS.isNumber(newpos)) {
+            newpos = parseInt(newpos, 10);
+            newpos = JS.isNumber(newpos) ? newpos : 0;
+        } else {
+            newpos = firstItem;
+        }
+
+        if (JS.isUndefined(carousel._itemsTable.items[newpos])) {
+            newpos = getFirstVisibleForPosition.call(carousel, newpos);
+            carousel.scrollTo(newpos); // still loading the item
+        }
+
+        if (!JS.isUndefined(carousel._itemsTable.items[newpos])) {
+            el = Dom.get(carousel._itemsTable.items[newpos].id);
+            if (el) {
+                Dom.addClass(el, cssClass.SELECTED_ITEM);
+            }
+        }
+
+        if (newpos < firstItem || newpos > sentinel) { // out of focus
+            newpos = getFirstVisibleForPosition.call(carousel, newpos);
+            carousel.scrollTo(newpos);
+        }
+    }
+
+    /**
+     * Fire custom events for enabling/disabling navigation elements.
+     *
+     * @method syncNavigation
+     * @private
+     */
+    function syncNavigation() {
+        var attach   = false,
+            carousel = this,
+            cssClass = carousel.CLASSES,
+            i,
+            navigation,
+            sentinel;
+
+        // Don't do anything if the Carousel is not rendered
+        if (!carousel._hasRendered) {
+            return;
+        }
+
+        navigation = carousel.get("navigation");
+        sentinel   = carousel._firstItem + carousel.get("numVisible");
+
+        if (navigation.prev) {
+            if (carousel.get("numItems") === 0 || carousel._firstItem === 0) {
+                if (carousel.get("numItems") === 0 ||
+                   !carousel.get("isCircular")) {
+                    Event.removeListener(navigation.prev, "click",
+                            scrollPageBackward);
+                    Dom.addClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
+                    for (i = 0; i < carousel._navBtns.prev.length; i++) {
+                        carousel._navBtns.prev[i].setAttribute("disabled",
+                                "true");
+                    }
+                    carousel._prevEnabled = false;
+                } else {
+                    attach = !carousel._prevEnabled;
+                }
+            } else {
+                attach = !carousel._prevEnabled;
+            }
+
+            if (attach) {
+                Event.on(navigation.prev, "click", scrollPageBackward,
+                         carousel);
+                Dom.removeClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
+                for (i = 0; i < carousel._navBtns.prev.length; i++) {
+                    carousel._navBtns.prev[i].removeAttribute("disabled");
+                }
+                carousel._prevEnabled = true;
+            }
+        }
+
+        attach = false;
+        if (navigation.next) {
+            if (sentinel >= carousel.get("numItems")) {
+                if (!carousel.get("isCircular")) {
+                    Event.removeListener(navigation.next, "click",
+                            scrollPageForward);
+                    Dom.addClass(navigation.next, cssClass.DISABLED);
+                    for (i = 0; i < carousel._navBtns.next.length; i++) {
+                        carousel._navBtns.next[i].setAttribute("disabled",
+                                "true");
+                    }
+                    carousel._nextEnabled = false;
+                } else {
+                    attach = !carousel._nextEnabled;
+                }
+            } else {
+                attach = !carousel._nextEnabled;
+            }
+
+            if (attach) {
+                Event.on(navigation.next, "click", scrollPageForward,
+                         carousel);
+                Dom.removeClass(navigation.next, cssClass.DISABLED);
+                for (i = 0; i < carousel._navBtns.next.length; i++) {
+                    carousel._navBtns.next[i].removeAttribute("disabled");
+                }
+                carousel._nextEnabled = true;
+            }
+        }
+
+        carousel.fireEvent(navigationStateChangeEvent,
+                { next: carousel._nextEnabled, prev: carousel._prevEnabled });
+    }
+
+    /**
+     * Synchronize and redraw the Pager UI if necessary.
+     *
+     * @method syncPagerUi
+     * @private
+     */
+    function syncPagerUi(page) {
+        var carousel = this, numPages, numVisible;
+
+        // Don't do anything if the Carousel is not rendered
+        if (!carousel._hasRendered) {
+            return;
+        }
+
+        numVisible = carousel.get("numVisible");
+
+        if (!JS.isNumber(page)) {
+            page = Math.ceil(carousel.get("selectedItem") / numVisible);
+        }
+        numPages = Math.ceil(carousel.get("numItems") / numVisible);
+
+        carousel._pages.num = numPages;
+        carousel._pages.cur = page;
+
+        if (numPages > carousel.CONFIG.MAX_PAGER_BUTTONS) {
+            carousel._updatePagerMenu();
+        } else {
+            carousel._updatePagerButtons();
+        }
+    }
+
+    /**
+     * Handle UI update.
+     * Call the appropriate methods on events fired when an item is added, or
+     * removed for synchronizing the DOM.
+     *
+     * @method syncUi
+     * @param {Object} o The item that needs to be added or removed
+     * @private
+     */
+    function syncUi(o) {
+        var carousel = this;
+
+        if (!JS.isObject(o)) {
+            return;
+        }
+
+        switch (o.ev) {
+        case itemAddedEvent:
+            carousel._syncUiForItemAdd(o);
+            break;
+        case itemRemovedEvent:
+            carousel._syncUiForItemRemove(o);
+            break;
+        case loadItemsEvent:
+            carousel._syncUiForLazyLoading(o);
+            break;
+        }
+
+        carousel.fireEvent(uiUpdateEvent);
+    }
+
+    /**
+     * Update the state variables after scrolling the Carousel view port.
+     *
+     * @method updateStateAfterScroll
+     * @param {Integer} item The index to which the Carousel has scrolled to.
+     * @param {Integer} sentinel The last element in the view port.
+     * @private
+     */
+    function updateStateAfterScroll(item, sentinel) {
+        var carousel   = this,
+            page       = carousel.get("currentPage"),
+            newPage,
+            numPerPage = carousel.get("numVisible");
+
+        newPage = parseInt(carousel._firstItem / numPerPage, 10);
+        if (newPage != page) {
+            carousel.setAttributeConfig("currentPage", { value: newPage });
+            carousel.fireEvent(pageChangeEvent, newPage);
+        }
+
+        if (carousel.get("selectOnScroll")) {
+            if (carousel.get("selectedItem") != carousel._selectedItem) {
+                carousel.set("selectedItem", carousel._selectedItem);
+            }
+        }
+
+        clearTimeout(carousel._autoPlayTimer);
+        delete carousel._autoPlayTimer;
+        if (carousel.isAutoPlayOn()) {
+            carousel.startAutoPlay();
+        }
+
+        carousel.fireEvent(afterScrollEvent,
+                           { first: carousel._firstItem,
+                             last: sentinel },
+                           carousel);
+    }
+
+    /*
+     * Static members and methods of the Carousel component
+     */
+
+    /**
+     * Return the appropriate Carousel object based on the id associated with
+     * the Carousel element or false if none match.
+     * @method getById
+     * @public
+     * @static
+     */
+    Carousel.getById = function (id) {
+        return instances[id] ? instances[id].object : false;
+    };
+
+    YAHOO.extend(Carousel, YAHOO.util.Element, {
+
+        /*
+         * Internal variables used within the Carousel component
+         */
+
+        /**
+         * The Animation object.
+         *
+         * @property _animObj
+         * @private
+         */
+        _animObj: null,
+
+        /**
+         * The Carousel element.
+         *
+         * @property _carouselEl
+         * @private
+         */
+        _carouselEl: null,
+
+        /**
+         * The Carousel clipping container element.
+         *
+         * @property _clipEl
+         * @private
+         */
+        _clipEl: null,
+
+        /**
+         * The current first index of the Carousel.
+         *
+         * @property _firstItem
+         * @private
+         */
+        _firstItem: 0,
+
+        /**
+         * Does the Carousel element have focus?
+         *
+         * @property _hasFocus
+         * @private
+         */
+        _hasFocus: false,
+
+        /**
+         * Is the Carousel rendered already?
+         *
+         * @property _hasRendered
+         * @private
+         */
+        _hasRendered: false,
+
+        /**
+         * Is the animation still in progress?
+         *
+         * @property _isAnimationInProgress
+         * @private
+         */
+        _isAnimationInProgress: false,
+
+        /**
+         * Is the auto-scrolling of Carousel in progress?
+         *
+         * @property _isAutoPlayInProgress
+         * @private
+         */
+        _isAutoPlayInProgress: false,
+
+        /**
+         * The table of items in the Carousel.
+         * The numItems is the number of items in the Carousel, items being the
+         * array of items in the Carousel.  The size is the size of a single
+         * item in the Carousel.  It is cached here for efficiency (to avoid
+         * computing the size multiple times).
+         *
+         * @property _itemsTable
+         * @private
+         */
+        _itemsTable: null,
+
+        /**
+         * The Carousel navigation buttons.
+         *
+         * @property _navBtns
+         * @private
+         */
+        _navBtns: null,
+
+        /**
+         * The Carousel navigation.
+         *
+         * @property _navEl
+         * @private
+         */
+        _navEl: null,
+
+        /**
+         * Status of the next navigation item.
+         *
+         * @property _nextEnabled
+         * @private
+         */
+        _nextEnabled: true,
+
+        /**
+         * The Carousel pages structure.
+         * This is an object of the total number of pages and the current page.
+         *
+         * @property _pages
+         * @private
+         */
+        _pages: null,
+
+        /**
+         * Status of the previous navigation item.
+         *
+         * @property _prevEnabled
+         * @private
+         */
+        _prevEnabled: true,
+
+        /**
+         * Whether the Carousel size needs to be recomputed or not?
+         *
+         * @property _recomputeSize
+         * @private
+         */
+        _recomputeSize: true,
+
+        /*
+         * CSS classes used by the Carousel component
+         */
+
+        CLASSES: {
+
+            /**
+             * The class name of the Carousel navigation buttons.
+             *
+             * @property BUTTON
+             * @default "yui-carousel-button"
+             */
+            BUTTON: "yui-carousel-button",
+
+            /**
+             * The class name of the Carousel element.
+             *
+             * @property CAROUSEL
+             * @default "yui-carousel"
+             */
+            CAROUSEL: "yui-carousel",
+
+            /**
+             * The class name of the container of the items in the Carousel.
+             *
+             * @property CAROUSEL_EL
+             * @default "yui-carousel-element"
+             */
+            CAROUSEL_EL: "yui-carousel-element",
+
+            /**
+             * The class name of the Carousel's container element.
+             *
+             * @property CONTAINER
+             * @default "yui-carousel-container"
+             */
+            CONTAINER: "yui-carousel-container",
+
+            /**
+             * The class name of the Carousel's container element.
+             *
+             * @property CONTENT
+             * @default "yui-carousel-content"
+             */
+            CONTENT: "yui-carousel-content",
+
+            /**
+             * The class name of a disabled navigation button.
+             *
+             * @property DISABLED
+             * @default "yui-carousel-button-disabled"
+             */
+            DISABLED: "yui-carousel-button-disabled",
+
+            /**
+             * The class name of the first Carousel navigation button.
+             *
+             * @property FIRST_NAV
+             * @default " yui-carousel-first-button"
+             */
+            FIRST_NAV: " yui-carousel-first-button",
+
+            /**
+             * The class name of a first disabled navigation button.
+             *
+             * @property FIRST_NAV_DISABLED
+             * @default "yui-carousel-first-button-disabled"
+             */
+            FIRST_NAV_DISABLED: "yui-carousel-first-button-disabled",
+
+            /**
+             * The class name of a first page element.
+             *
+             * @property FIRST_PAGE
+             * @default "yui-carousel-nav-first-page"
+             */
+            FIRST_PAGE: "yui-carousel-nav-first-page",
+
+            /**
+             * The class name of the Carousel navigation button that has focus.
+             *
+             * @property FOCUSSED_BUTTON
+             * @default "yui-carousel-button-focus"
+             */
+            FOCUSSED_BUTTON: "yui-carousel-button-focus",
+
+            /**
+             * The class name of a horizontally oriented Carousel.
+             *
+             * @property HORIZONTAL
+             * @default "yui-carousel-horizontal"
+             */
+            HORIZONTAL: "yui-carousel-horizontal",
+
+            /**
+             * The element to be used as the progress indicator when the item
+             * is still being loaded.
+             *
+             * @property ITEM_LOADING
+             * @default The progress indicator (spinner) image CSS class
+             */
+            ITEM_LOADING: "yui-carousel-item-loading",
+
+            /**
+             * The class name that will be set if the Carousel adjusts itself
+             * for a minimum width.
+             *
+             * @property MIN_WIDTH
+             * @default "yui-carousel-min-width"
+             */
+            MIN_WIDTH: "yui-carousel-min-width",
+
+            /**
+             * The navigation element container class name.
+             *
+             * @property NAVIGATION
+             * @default "yui-carousel-nav"
+             */
+            NAVIGATION: "yui-carousel-nav",
+
+            /**
+             * The class name of the next Carousel navigation button.
+             *
+             * @property NEXT_NAV
+             * @default " yui-carousel-next-button"
+             */
+            NEXT_NAV: " yui-carousel-next-button",
+
+            /**
+             * The class name of the next navigation link. This variable is
+             * not only used for styling, but also for identifying the link
+             * within the Carousel container.
+             *
+             * @property NEXT_PAGE
+             * @default "yui-carousel-next"
+             */
+            NEXT_PAGE: "yui-carousel-next",
+
+            /**
+             * The class name for the navigation container for prev/next.
+             *
+             * @property NAV_CONTAINER
+             * @default "yui-carousel-buttons"
+             */
+            NAV_CONTAINER: "yui-carousel-buttons",
+
+            /**
+             * The class name of the focussed page navigation.  This class is
+             * specifically used for the ugly focus handling in Opera.
+             *
+             * @property PAGE_FOCUS
+             * @default "yui-carousel-nav-page-focus"
+             */
+            PAGE_FOCUS: "yui-carousel-nav-page-focus",
+
+            /**
+             * The class name of the previous navigation link. This variable
+             * is not only used for styling, but also for identifying the link
+             * within the Carousel container.
+             *
+             * @property PREV_PAGE
+             * @default "yui-carousel-prev"
+             */
+            PREV_PAGE: "yui-carousel-prev",
+
+            /**
+             * The class name of the selected item.
+             *
+             * @property SELECTED_ITEM
+             * @default "yui-carousel-item-selected"
+             */
+            SELECTED_ITEM: "yui-carousel-item-selected",
+
+            /**
+             * The class name of the selected paging navigation.
+             *
+             * @property SELECTED_NAV
+             * @default "yui-carousel-nav-page-selected"
+             */
+            SELECTED_NAV: "yui-carousel-nav-page-selected",
+
+            /**
+             * The class name of a vertically oriented Carousel.
+             *
+             * @property VERTICAL
+             * @default "yui-carousel-vertical"
+             */
+            VERTICAL: "yui-carousel-vertical",
+
+            /**
+             * The class name of the (vertical) Carousel's container element.
+             *
+             * @property VERTICAL_CONTAINER
+             * @default "yui-carousel-vertical-container"
+             */
+            VERTICAL_CONTAINER: "yui-carousel-vertical-container",
+
+            /**
+             * The class name of a visible Carousel.
+             *
+             * @property VISIBLE
+             * @default "yui-carousel-visible"
+             */
+            VISIBLE: "yui-carousel-visible"
+
+        },
+
+        /*
+         * Configuration attributes for configuring the Carousel component
+         */
+
+        CONFIG: {
+
+            /**
+             * The offset of the first visible item in the Carousel.
+             *
+             * @property FIRST_VISIBLE
+             * @default 0
+             */
+            FIRST_VISIBLE: 0,
+
+            /**
+             * The minimum width of the horizontal Carousel container to support
+             * the navigation buttons.
+             *
+             * @property HORZ_MIN_WIDTH
+             * @default 180
+             */
+            HORZ_MIN_WIDTH: 180,
+
+            /**
+             * The maximum number of pager buttons allowed beyond which the UI
+             * of the pager would be a drop-down of pages instead of buttons.
+             *
+             * @property MAX_PAGER_BUTTONS
+             * @default 5
+             */
+            MAX_PAGER_BUTTONS: 5,
+
+            /**
+             * The minimum width of the vertical Carousel container to support
+             * the navigation buttons.
+             *
+             * @property VERT_MIN_WIDTH
+             * @default 99
+             */
+            VERT_MIN_WIDTH: 99,
+
+            /**
+             * The number of visible items in the Carousel.
+             *
+             * @property NUM_VISIBLE
+             * @default 3
+             */
+            NUM_VISIBLE: 3
+
+        },
+
+        /*
+         * Internationalizable strings in the Carousel component
+         */
+
+        STRINGS: {
+
+            /**
+             * The content to be used as the progress indicator when the item
+             * is still being loaded.
+             *
+             * @property ITEM_LOADING_CONTENT
+             * @default "Loading"
+             */
+            ITEM_LOADING_CONTENT: "Loading",
+
+            /**
+             * The next navigation button name/text.
+             *
+             * @property NEXT_BUTTON_TEXT
+             * @default "Next Page"
+             */
+            NEXT_BUTTON_TEXT: "Next Page",
+
+            /**
+             * The prefix text for the pager in case the UI is a drop-down.
+             *
+             * @property PAGER_PREFIX_TEXT
+             * @default "Go to page "
+             */
+            PAGER_PREFIX_TEXT: "Go to page ",
+
+            /**
+             * The previous navigation button name/text.
+             *
+             * @property PREVIOUS_BUTTON_TEXT
+             * @default "Previous Page"
+             */
+            PREVIOUS_BUTTON_TEXT: "Previous Page"
+
+        },
+
+        /*
+         * Public methods of the Carousel component
+         */
+
+        /**
+         * Insert or append an item to the Carousel.
+         *
+         * @method addItem
+         * @public
+         * @param item {String | Object | HTMLElement} The item to be appended
+         * to the Carousel. If the parameter is a string, it is assumed to be
+         * the content of the newly created item. If the parameter is an
+         * object, it is assumed to supply the content and an optional class
+         * and an optional id of the newly created item.
+         * @param index {Number} optional The position to where in the list
+         * (starts from zero).
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        addItem: function (item, index) {
+            var carousel = this,
+                className,
+                content,
+                elId,
+                numItems = carousel.get("numItems");
+
+            if (!item) {
+                return false;
+            }
+
+            if (JS.isString(item) || item.nodeName) {
+                content = item.nodeName ? item.innerHTML : item;
+            } else if (JS.isObject(item)) {
+                content = item.content;
+            } else {
+                YAHOO.log("Invalid argument to addItem", "error", WidgetName);
+                return false;
+            }
+
+            className = item.className || "";
+            elId      = item.id ? item.id : Dom.generateId();
+
+            if (JS.isUndefined(index)) {
+                carousel._itemsTable.items.push({
+                        item      : content,
+                        className : className,
+                        id        : elId
+                });
+            } else {
+                if (index < 0 || index >= numItems) {
+                    YAHOO.log("Index out of bounds", "error", WidgetName);
+                    return false;
+                }
+                carousel._itemsTable.items.splice(index, 0, {
+                        item      : content,
+                        className : className,
+                        id        : elId
+                });
+            }
+            carousel._itemsTable.numItems++;
+
+            if (numItems < carousel._itemsTable.items.length) {
+                carousel.set("numItems", carousel._itemsTable.items.length);
+            }
+
+            carousel.fireEvent(itemAddedEvent, { pos: index, ev: itemAddedEvent });
+
+            return true;
+        },
+
+        /**
+         * Insert or append multiple items to the Carousel.
+         *
+         * @method addItems
+         * @public
+         * @param items {Array} An array of items to be added with each item
+         * representing an item, index pair [{item, index}, ...]
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        addItems: function (items) {
+            var i, n, rv = true;
+
+            if (!JS.isArray(items)) {
+                return false;
+            }
+
+            for (i = 0, n = items.length; i < n; i++) {
+                if (this.addItem(items[i][0], items[i][1]) === false) {
+                    rv = false;
+                }
+            }
+
+            return rv;
+        },
+
+        /**
+         * Remove focus from the Carousel.
+         *
+         * @method blur
+         * @public
+         */
+        blur: function () {
+            this._carouselEl.blur();
+            this.fireEvent(blurEvent);
+        },
+
+        /**
+         * Clears the items from Carousel.
+         *
+         * @method clearItems
+         * public
+         */
+        clearItems: function () {
+            var carousel = this, n = carousel.get("numItems");
+
+            while (n > 0) {
+                if (!carousel.removeItem(0)) {
+                    YAHOO.log("Item could not be removed - missing?",
+                              "warn", WidgetName);
+                }
+                /*
+                    For dynamic loading, the numItems may be much larger than
+                    the actual number of items in the table.  So, set the
+                    numItems to zero, and break out of the loop if the table
+                    is already empty.
+                 */
+                if (carousel._itemsTable.numItems === 0) {
+                    carousel.set("numItems", 0);
+                    break;
+                }
+                n--;
+            }
+
+            carousel.fireEvent(allItemsRemovedEvent);
+        },
+
+        /**
+         * Set focus on the Carousel.
+         *
+         * @method focus
+         * @public
+         */
+        focus: function () {
+            var carousel = this,
+                first,
+                focusEl,
+                isSelectionInvisible,
+                itemsTable,
+                last,
+                numVisible,
+                selectOnScroll,
+                selected,
+                selItem;
+
+            // Don't do anything if the Carousel is not rendered
+            if (!carousel._hasRendered) {
+                return;
+            }
+
+            if (carousel.isAnimating()) {
+                // this messes up real bad!
+                return;
+            }
+
+            selItem              = carousel.get("selectedItem");
+            numVisible           = carousel.get("numVisible");
+            selectOnScroll       = carousel.get("selectOnScroll");
+            selected             = (selItem >= 0) ?
+                                   carousel.getItem(selItem) : null;
+            first                = carousel.get("firstVisible");
+            last                 = first + numVisible - 1;
+            isSelectionInvisible = (selItem < first || selItem > last);
+            focusEl              = (selected && selected.id) ?
+                                   Dom.get(selected.id) : null;
+            itemsTable           = carousel._itemsTable;
+
+            if (!selectOnScroll && isSelectionInvisible) {
+                focusEl = (itemsTable && itemsTable.items &&
+                           itemsTable.items[first]) ?
+                        Dom.get(itemsTable.items[first].id) : null;
+            }
+
+            if (focusEl) {
+                try {
+                    focusEl.focus();
+                } catch (ex) {
+                    // ignore focus errors
+                }
+            }
+
+            carousel.fireEvent(focusEvent);
+        },
+
+        /**
+         * Hide the Carousel.
+         *
+         * @method hide
+         * @public
+         */
+        hide: function () {
+            var carousel = this;
+
+            if (carousel.fireEvent(beforeHideEvent) !== false) {
+                carousel.removeClass(carousel.CLASSES.VISIBLE);
+                carousel.fireEvent(hideEvent);
+            }
+        },
+
+        /**
+         * Initialize the Carousel.
+         *
+         * @method init
+         * @public
+         * @param el {HTMLElement | String} The html element that represents
+         * the Carousel container.
+         * @param attrs {Object} The set of configuration attributes for
+         * creating the Carousel.
+         */
+        init: function (el, attrs) {
+            var carousel = this,
+                elId     = el,  // save for a rainy day
+                parse    = false;
+
+            if (!el) {
+                YAHOO.log(el + " is neither an HTML element, nor a string",
+                        "error", WidgetName);
+                return;
+            }
+
+            carousel._hasRendered = false;
+            carousel._navBtns     = { prev: [], next: [] };
+            carousel._pages       = { el: null, num: 0, cur: 0 };
+            carousel._itemsTable  = { loading: {}, numItems: 0,
+                                      items: [], size: 0 };
+
+            YAHOO.log("Component initialization", WidgetName);
+
+            if (JS.isString(el)) {
+                el = Dom.get(el);
+            } else if (!el.nodeName) {
+                YAHOO.log(el + " is neither an HTML element, nor a string",
+                        "error", WidgetName);
+                return;
+            }
+
+            Carousel.superclass.init.call(carousel, el, attrs);
+
+            if (el) {
+                if (!el.id) {   // in case the HTML element is passed
+                    el.setAttribute("id", Dom.generateId());
+                }
+                parse = carousel._parseCarousel(el);
+                if (!parse) {
+                    carousel._createCarousel(elId);
+                }
+            } else {
+                el = carousel._createCarousel(elId);
+            }
+            elId = el.id;
+
+            carousel.initEvents();
+
+            if (parse) {
+                carousel._parseCarouselItems();
+            }
+
+            if (!attrs || typeof attrs.isVertical == "undefined") {
+                carousel.set("isVertical", false);
+            }
+
+            carousel._parseCarouselNavigation(el);
+            carousel._navEl = carousel._setupCarouselNavigation();
+
+            instances[elId] = { object: carousel };
+
+            carousel._loadItems();
+        },
+
+        /**
+         * Initialize the configuration attributes used to create the Carousel.
+         *
+         * @method initAttributes
+         * @public
+         * @param attrs {Object} The set of configuration attributes for
+         * creating the Carousel.
+         */
+        initAttributes: function (attrs) {
+            var carousel = this;
+
+            attrs = attrs || {};
+            Carousel.superclass.initAttributes.call(carousel, attrs);
+
+            /**
+             * @attribute carouselEl
+             * @description The type of the Carousel element.
+             * @default OL
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("carouselEl", {
+                    validator : JS.isString,
+                    value     : attrs.carouselEl || "OL"
+            });
+
+            /**
+             * @attribute carouselItemEl
+             * @description The type of the list of items within the Carousel.
+             * @default LI
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("carouselItemEl", {
+                    validator : JS.isString,
+                    value     : attrs.carouselItemEl || "LI"
+            });
+
+            /**
+             * @attribute currentPage
+             * @description The current page number (read-only.)
+             * @type Number
+             */
+            carousel.setAttributeConfig("currentPage", {
+                    readOnly : true,
+                    value    : 0
+            });
+
+            /**
+             * @attribute firstVisible
+             * @description The index to start the Carousel from (indexes begin
+             * from zero)
+             * @default 0
+             * @type Number
+             */
+            carousel.setAttributeConfig("firstVisible", {
+                    method    : carousel._setFirstVisible,
+                    validator : carousel._validateFirstVisible,
+                    value     :
+                        attrs.firstVisible || carousel.CONFIG.FIRST_VISIBLE
+            });
+
+            /**
+             * @attribute selectOnScroll
+             * @description Set this to true to automatically set focus to
+             * follow scrolling in the Carousel.
+             * @default true
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("selectOnScroll", {
+                    validator : JS.isBoolean,
+                    value     : attrs.selectOnScroll || true
+            });
+
+            /**
+             * @attribute numVisible
+             * @description The number of visible items in the Carousel's
+             * viewport.
+             * @default 3
+             * @type Number
+             */
+            carousel.setAttributeConfig("numVisible", {
+                    method    : carousel._setNumVisible,
+                    validator : carousel._validateNumVisible,
+                    value     : attrs.numVisible || carousel.CONFIG.NUM_VISIBLE
+            });
+
+            /**
+             * @attribute numItems
+             * @description The number of items in the Carousel.
+             * @type Number
+             */
+            carousel.setAttributeConfig("numItems", {
+                    method    : carousel._setNumItems,
+                    validator : carousel._validateNumItems,
+                    value     : carousel._itemsTable.numItems
+            });
+
+            /**
+             * @attribute scrollIncrement
+             * @description The number of items to scroll by for arrow keys.
+             * @default 1
+             * @type Number
+             */
+            carousel.setAttributeConfig("scrollIncrement", {
+                    validator : carousel._validateScrollIncrement,
+                    value     : attrs.scrollIncrement || 1
+            });
+
+            /**
+             * @attribute selectedItem
+             * @description The index of the selected item.
+             * @type Number
+             */
+            carousel.setAttributeConfig("selectedItem", {
+                    method    : carousel._setSelectedItem,
+                    validator : JS.isNumber,
+                    value     : -1
+            });
+
+            /**
+             * @attribute revealAmount
+             * @description The percentage of the item to be revealed on each
+             * side of the Carousel (before and after the first and last item
+             * in the Carousel's viewport.)
+             * @default 0
+             * @type Number
+             */
+            carousel.setAttributeConfig("revealAmount", {
+                    method    : carousel._setRevealAmount,
+                    validator : carousel._validateRevealAmount,
+                    value     : attrs.revealAmount || 0
+            });
+
+            /**
+             * @attribute isCircular
+             * @description Set this to true to wrap scrolling of the contents
+             * in the Carousel.
+             * @default false
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("isCircular", {
+                    validator : JS.isBoolean,
+                    value     : attrs.isCircular || false
+            });
+
+            /**
+             * @attribute isVertical
+             * @description True if the orientation of the Carousel is vertical
+             * @default false
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("isVertical", {
+                    method    : carousel._setOrientation,
+                    validator : JS.isBoolean,
+                    value     : attrs.isVertical || false
+            });
+
+            /**
+             * @attribute navigation
+             * @description The set of navigation controls for Carousel
+             * @default <br>
+             * { prev: null, // the previous navigation element<br>
+             *   next: null } // the next navigation element
+             * @type Object
+             */
+            carousel.setAttributeConfig("navigation", {
+                    method    : carousel._setNavigation,
+                    validator : carousel._validateNavigation,
+                    value     :
+                        attrs.navigation || {prev: null,next: null,page: null}
+            });
+
+            /**
+             * @attribute animation
+             * @description The optional animation attributes for the Carousel.
+             * @default <br>
+             * { speed: 0, // the animation speed (in seconds)<br>
+             *   effect: null } // the animation effect (like
+             *   YAHOO.util.Easing.easeOut)
+             * @type Object
+             */
+            carousel.setAttributeConfig("animation", {
+                    validator : carousel._validateAnimation,
+                    value     : attrs.animation || { speed: 0, effect: null }
+            });
+
+            /**
+             * @attribute autoPlay
+             * @description Set this to time in milli-seconds to have the
+             * Carousel automatically scroll the contents.
+             * @type Number
+             * @deprecated Use autoPlayInterval instead.
+             */
+            carousel.setAttributeConfig("autoPlay", {
+                    validator : JS.isNumber,
+                    value     : attrs.autoPlay || 0
+            });
+
+            /**
+             * @attribute autoPlayInterval
+             * @description The delay in milli-seconds for scrolling the
+             * Carousel during auto-play.
+             * Note: The startAutoPlay() method needs to be invoked to trigger
+             * automatic scrolling of Carousel.
+             * @type Number
+             */
+            carousel.setAttributeConfig("autoPlayInterval", {
+                    validator : JS.isNumber,
+                    value     : attrs.autoPlayInterval || 0
+            });
+        },
+
+        /**
+         * Initialize and bind the event handlers.
+         *
+         * @method initEvents
+         * @public
+         */
+        initEvents: function () {
+            var carousel = this,
+                cssClass = carousel.CLASSES,
+                focussedLi;
+
+            carousel.on("keydown", carousel._keyboardEventHandler);
+
+            carousel.on(afterScrollEvent, syncNavigation);
+
+            carousel.on(itemAddedEvent, syncUi);
+
+            carousel.on(itemRemovedEvent, syncUi);
+
+            carousel.on(itemSelectedEvent, function () {
+                if (carousel._hasFocus) {
+                    carousel.focus();
+                }
+            });
+
+            carousel.on(loadItemsEvent, syncUi);
+
+            carousel.on(allItemsRemovedEvent, function (ev) {
+                carousel.scrollTo(0);
+                syncNavigation.call(carousel);
+                syncPagerUi.call(carousel);
+            });
+
+            carousel.on(pageChangeEvent, syncPagerUi, carousel);
+
+            carousel.on(renderEvent, function (ev) {
+                carousel.set("selectedItem", carousel.get("firstVisible"));
+                syncNavigation.call(carousel, ev);
+                syncPagerUi.call(carousel, ev);
+                carousel._setClipContainerSize();
+            });
+
+            carousel.on("selectedItemChange", function (ev) {
+                setItemSelection.call(carousel, ev.newValue, ev.prevValue);
+                if (ev.newValue >= 0) {
+                    carousel._updateTabIndex(
+                            carousel.getElementForItem(ev.newValue));
+                }
+                carousel.fireEvent(itemSelectedEvent, ev.newValue);
+            });
+
+            carousel.on(uiUpdateEvent, function (ev) {
+                syncNavigation.call(carousel, ev);
+                syncPagerUi.call(carousel, ev);
+            });
+
+            carousel.on("firstVisibleChange", function (ev) {
+                if (!carousel.get("selectOnScroll")) {
+                    if (ev.newValue >= 0) {
+                        carousel._updateTabIndex(
+                                carousel.getElementForItem(ev.newValue));
+                    }
+                }
+            });
+
+            // Handle item selection on mouse click
+            carousel.on("click", function (ev) {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+                carousel._itemClickHandler(ev);
+                carousel._pagerClickHandler(ev);
+            });
+
+            // Restore the focus on the navigation buttons
+
+            Event.onFocus(carousel.get("element"), function (ev, obj) {
+                var target = Event.getTarget(ev);
+
+                if (target && target.nodeName.toUpperCase() == "A" &&
+                    Dom.getAncestorByClassName(target, cssClass.NAVIGATION)) {
+                    if (focussedLi) {
+                        Dom.removeClass(focussedLi, cssClass.PAGE_FOCUS);
+                    }
+                    focussedLi = target.parentNode;
+                    Dom.addClass(focussedLi, cssClass.PAGE_FOCUS);
+                } else {
+                    if (focussedLi) {
+                        Dom.removeClass(focussedLi, cssClass.PAGE_FOCUS);
+                    }
+                }
+
+                obj._hasFocus = true;
+                obj._updateNavButtons(Event.getTarget(ev), true);
+            }, carousel);
+
+            Event.onBlur(carousel.get("element"), function (ev, obj) {
+                obj._hasFocus = false;
+                obj._updateNavButtons(Event.getTarget(ev), false);
+            }, carousel);
+        },
+
+        /**
+         * Return true if the Carousel is still animating, or false otherwise.
+         *
+         * @method isAnimating
+         * @return {Boolean} Return true if animation is still in progress, or
+         * false otherwise.
+         * @public
+         */
+        isAnimating: function () {
+            return this._isAnimationInProgress;
+        },
+
+        /**
+         * Return true if the auto-scrolling of Carousel is "on", or false
+         * otherwise.
+         *
+         * @method isAutoPlayOn
+         * @return {Boolean} Return true if autoPlay is "on", or false
+         * otherwise.
+         * @public
+         */
+        isAutoPlayOn: function () {
+            return this._isAutoPlayInProgress;
+        },
+
+        /**
+         * Return the carouselItemEl at index or null if the index is not
+         * found.
+         *
+         * @method getElementForItem
+         * @param index {Number} The index of the item to be returned
+         * @return {Element} Return the item at index or null if not found
+         * @public
+         */
+        getElementForItem: function (index) {
+            var carousel = this;
+
+            if (index < 0 || index >= carousel.get("numItems")) {
+                YAHOO.log("Index out of bounds", "error", WidgetName);
+                return null;
+            }
+
+            // TODO: may be cache the item
+            if (carousel._itemsTable.numItems > index) {
+                if (!JS.isUndefined(carousel._itemsTable.items[index])) {
+                    return Dom.get(carousel._itemsTable.items[index].id);
+                }
+            }
+
+            return null;
+        },
+
+        /**
+         * Return the carouselItemEl for all items in the Carousel.
+         *
+         * @method getElementForItems
+         * @return {Array} Return all the items
+         * @public
+         */
+        getElementForItems: function () {
+            var carousel = this, els = [], i;
+
+            for (i = 0; i < carousel._itemsTable.numItems; i++) {
+                els.push(carousel.getElementForItem(i));
+            }
+
+            return els;
+        },
+
+        /**
+         * Return the item at index or null if the index is not found.
+         *
+         * @method getItem
+         * @param index {Number} The index of the item to be returned
+         * @return {Object} Return the item at index or null if not found
+         * @public
+         */
+        getItem: function (index) {
+            var carousel = this;
+
+            if (index < 0 || index >= carousel.get("numItems")) {
+                YAHOO.log("Index out of bounds", "error", WidgetName);
+                return null;
+            }
+
+            if (carousel._itemsTable.numItems > index) {
+                if (!JS.isUndefined(carousel._itemsTable.items[index])) {
+                    return carousel._itemsTable.items[index];
+                }
+            }
+
+            return null;
+        },
+
+        /**
+         * Return all items as an array.
+         *
+         * @method getItems
+         * @return {Array} Return all items in the Carousel
+         * @public
+         */
+        getItems: function (index) {
+            return this._itemsTable.items;
+        },
+
+        /**
+         * Return the position of the Carousel item that has the id "id", or -1
+         * if the id is not found.
+         *
+         * @method getItemPositionById
+         * @param index {Number} The index of the item to be returned
+         * @public
+         */
+        getItemPositionById: function (id) {
+            var carousel = this, i = 0, n = carousel._itemsTable.numItems;
+
+            while (i < n) {
+                if (!JS.isUndefined(carousel._itemsTable.items[i])) {
+                    if (carousel._itemsTable.items[i].id == id) {
+                        return i;
+                    }
+                }
+                i++;
+            }
+
+            return -1;
+        },
+
+        /**
+         * Return all visible items as an array.
+         *
+         * @method getVisibleItems
+         * @return {Array} The array of visible items
+         * @public
+         */
+        getVisibleItems: function () {
+            var carousel = this,
+                i        = carousel.get("firstVisible"),
+                n        = i + carousel.get("numVisible"),
+                r        = [];
+
+            while (i < n) {
+                r.push(carousel.getElementForItem(i));
+                i++;
+            }
+
+            return r;
+        },
+
+        /**
+         * Remove an item at index from the Carousel.
+         *
+         * @method removeItem
+         * @public
+         * @param index {Number} The position to where in the list (starts from
+         * zero).
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        removeItem: function (index) {
+            var carousel = this,
+                item,
+                num      = carousel.get("numItems");
+
+            if (index < 0 || index >= num) {
+                YAHOO.log("Index out of bounds", "error", WidgetName);
+                return false;
+            }
+
+            item = carousel._itemsTable.items.splice(index, 1);
+            if (item && item.length == 1) {
+                carousel._itemsTable.numItems--;
+                carousel.set("numItems", num - 1);
+
+                carousel.fireEvent(itemRemovedEvent,
+                        { item: item[0], pos: index, ev: itemRemovedEvent });
+                return true;
+            }
+
+            return false;
+        },
+
+        /**
+         * Render the Carousel.
+         *
+         * @method render
+         * @public
+         * @param appendTo {HTMLElement | String} The element to which the
+         * Carousel should be appended prior to rendering.
+         * @return {Boolean} Status of the operation
+         */
+        render: function (appendTo) {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            carousel.addClass(cssClass.CAROUSEL);
+
+            if (!carousel._clipEl) {
+                carousel._clipEl = carousel._createCarouselClip();
+                carousel._clipEl.appendChild(carousel._carouselEl);
+            }
+
+            if (appendTo) {
+                carousel.appendChild(carousel._clipEl);
+                carousel.appendTo(appendTo);
+            } else {
+                if (!Dom.inDocument(carousel.get("element"))) {
+                    YAHOO.log("Nothing to render. The container should be " +
+                            "within the document if appendTo is not "       +
+                            "specified", "error", WidgetName);
+                    return false;
+                }
+                carousel.appendChild(carousel._clipEl);
+            }
+
+            if (carousel.get("isVertical")) {
+                carousel.addClass(cssClass.VERTICAL);
+            } else {
+                carousel.addClass(cssClass.HORIZONTAL);
+            }
+
+            if (carousel.get("numItems") < 1) {
+                YAHOO.log("No items in the Carousel to render", "warn",
+                        WidgetName);
+                return false;
+            }
+
+            carousel._refreshUi();
+
+            return true;
+        },
+
+        /**
+         * Scroll the Carousel by an item backward.
+         *
+         * @method scrollBackward
+         * @public
+         */
+        scrollBackward: function () {
+            var carousel = this;
+
+            carousel.scrollTo(carousel._firstItem -
+                              carousel.get("scrollIncrement"));
+        },
+
+        /**
+         * Scroll the Carousel by an item forward.
+         *
+         * @method scrollForward
+         * @public
+         */
+        scrollForward: function () {
+            var carousel = this;
+
+            carousel.scrollTo(carousel._firstItem +
+                              carousel.get("scrollIncrement"));
+        },
+
+        /**
+         * Scroll the Carousel by a page backward.
+         *
+         * @method scrollPageBackward
+         * @public
+         */
+        scrollPageBackward: function () {
+            var carousel = this,
+                item     = carousel._firstItem - carousel.get("numVisible");
+
+            if (carousel.get("selectOnScroll")) {
+                carousel._selectedItem = carousel._getSelectedItem(item);
+            } else {
+                item = carousel._getValidIndex(item);
+            }
+            carousel.scrollTo(item);
+        },
+
+        /**
+         * Scroll the Carousel by a page forward.
+         *
+         * @method scrollPageForward
+         * @public
+         */
+        scrollPageForward: function () {
+            var carousel = this,
+                item     = carousel._firstItem + carousel.get("numVisible");
+
+            if (carousel.get("selectOnScroll")) {
+                carousel._selectedItem = carousel._getSelectedItem(item);
+            } else {
+                item = carousel._getValidIndex(item);
+            }
+            carousel.scrollTo(item);
+        },
+
+        /**
+         * Scroll the Carousel to make the item the first visible item.
+         *
+         * @method scrollTo
+         * @public
+         * @param item Number The index of the element to position at.
+         * @param dontSelect Boolean True if select should be avoided
+         */
+        scrollTo: function (item, dontSelect) {
+            var carousel   = this,
+                animate, animCfg, isCircular, delta, direction, firstItem,
+                numItems, numPerPage, offset, page, rv, sentinel,
+                stopAutoScroll;
+
+            if (JS.isUndefined(item) || item == carousel._firstItem ||
+                carousel.isAnimating()) {
+                return;         // nothing to do!
+            }
+
+            animCfg        = carousel.get("animation");
+            isCircular     = carousel.get("isCircular");
+            firstItem      = carousel._firstItem;
+            numItems       = carousel.get("numItems");
+            numPerPage     = carousel.get("numVisible");
+            page           = carousel.get("currentPage");
+            stopAutoScroll = function () {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+            };
+
+            if (item < 0) {
+                if (isCircular) {
+                    item = numItems + item;
+                } else {
+                    stopAutoScroll.call(carousel);
+                    return;
+                }
+            } else if (numItems > 0 && item > numItems - 1) {
+                if (carousel.get("isCircular")) {
+                    item = numItems - item;
+                } else {
+                    stopAutoScroll.call(carousel);
+                    return;
+                }
+            }
+
+            direction = (carousel._firstItem > item) ? "backward" : "forward";
+
+            sentinel  = firstItem + numPerPage;
+            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
+            rv = carousel.fireEvent(beforeScrollEvent,
+                    { dir: direction, first: firstItem, last: sentinel });
+            if (rv === false) { // scrolling is prevented
+                return;
+            }
+
+            carousel.fireEvent(beforePageChangeEvent, { page: page });
+
+            delta = firstItem - item; // yes, the delta is reverse
+            carousel._firstItem = item;
+            carousel.set("firstVisible", item);
+
+            YAHOO.log("Scrolling to " + item + " delta = " + delta,WidgetName);
+
+            carousel._loadItems(); // do we have all the items to display?
+
+            sentinel  = item + numPerPage;
+            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
+
+            offset    = getScrollOffset.call(carousel, delta);
+            YAHOO.log("Scroll offset = " + offset, WidgetName);
+
+            animate   = animCfg.speed > 0;
+
+            if (animate) {
+                carousel._animateAndSetCarouselOffset(offset, item, sentinel,
+                        dontSelect);
+            } else {
+                carousel._setCarouselOffset(offset);
+                updateStateAfterScroll.call(carousel, item, sentinel);
+            }
+        },
+
+        /**
+         * Select the previous item in the Carousel.
+         *
+         * @method selectPreviousItem
+         * @public
+         */
+        selectPreviousItem: function () {
+            var carousel = this,
+                newpos   = 0,
+                selected = carousel.get("selectedItem");
+
+            if (selected == this._firstItem) {
+                newpos = selected - carousel.get("numVisible");
+                carousel._selectedItem = carousel._getSelectedItem(selected-1);
+                carousel.scrollTo(newpos);
+            } else {
+                newpos = carousel.get("selectedItem") -
+                         carousel.get("scrollIncrement");
+                carousel.set("selectedItem",carousel._getSelectedItem(newpos));
+            }
+        },
+
+        /**
+         * Select the next item in the Carousel.
+         *
+         * @method selectNextItem
+         * @public
+         */
+        selectNextItem: function () {
+            var carousel = this, newpos = 0;
+
+            newpos = carousel.get("selectedItem") +
+                     carousel.get("scrollIncrement");
+            carousel.set("selectedItem", carousel._getSelectedItem(newpos));
+        },
+
+        /**
+         * Display the Carousel.
+         *
+         * @method show
+         * @public
+         */
+        show: function () {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            if (carousel.fireEvent(beforeShowEvent) !== false) {
+                carousel.addClass(cssClass.VISIBLE);
+                carousel.fireEvent(showEvent);
+            }
+        },
+
+        /**
+         * Start auto-playing the Carousel.
+         *
+         * @method startAutoPlay
+         * @public
+         */
+        startAutoPlay: function () {
+            var carousel = this, timer;
+
+            if (JS.isUndefined(carousel._autoPlayTimer)) {
+                timer = carousel.get("autoPlayInterval");
+                if (timer <= 0) {
+                    return;
+                }
+                carousel._isAutoPlayInProgress = true;
+                carousel.fireEvent(startAutoPlayEvent);
+                carousel._autoPlayTimer = setTimeout(function () {
+                    carousel._autoScroll();
+                }, timer);
+            }
+        },
+
+        /**
+         * Stop auto-playing the Carousel.
+         *
+         * @method stopAutoPlay
+         * @public
+         */
+        stopAutoPlay: function () {
+            var carousel = this;
+
+            if (!JS.isUndefined(carousel._autoPlayTimer)) {
+                clearTimeout(carousel._autoPlayTimer);
+                delete carousel._autoPlayTimer;
+                carousel._isAutoPlayInProgress = false;
+                carousel.fireEvent(stopAutoPlayEvent);
+            }
+        },
+
+        /**
+         * Return the string representation of the Carousel.
+         *
+         * @method toString
+         * @public
+         * @return {String}
+         */
+        toString: function () {
+            return WidgetName + (this.get ? " (#" + this.get("id") + ")" : "");
+        },
+
+        /*
+         * Protected methods of the Carousel component
+         */
+
+        /**
+         * Set the Carousel offset to the passed offset after animating.
+         *
+         * @method _animateAndSetCarouselOffset
+         * @param {Integer} offset The offset to which the Carousel has to be
+         * scrolled to.
+         * @param {Integer} item The index to which the Carousel will scroll.
+         * @param {Integer} sentinel The last element in the view port.
+         * @protected
+         */
+        _animateAndSetCarouselOffset: function (offset, item, sentinel) {
+            var carousel = this,
+                animCfg  = carousel.get("animation"),
+                animObj  = null;
+
+            if (carousel.get("isVertical")) {
+                animObj = new YAHOO.util.Motion(carousel._carouselEl,
+                        { points: { by: [0, offset] } },
+                        animCfg.speed, animCfg.effect);
+            } else {
+                animObj = new YAHOO.util.Motion(carousel._carouselEl,
+                        { points: { by: [offset, 0] } },
+                        animCfg.speed, animCfg.effect);
+            }
+
+            carousel._isAnimationInProgress = true;
+            animObj.onComplete.subscribe(carousel._animationCompleteHandler,
+                                         { scope: carousel, item: item,
+                                           last: sentinel });
+            animObj.animate();
+        },
+
+        /**
+         * Handle the animation complete event.
+         *
+         * @method _animationCompleteHandler
+         * @param {Event} ev The event.
+         * @param {Array} p The event parameters.
+         * @param {Object} o The object that has the state of the Carousel
+         * @protected
+         */
+        _animationCompleteHandler: function (ev, p, o) {
+            o.scope._isAnimationInProgress = false;
+            updateStateAfterScroll.call(o.scope, o.item, o.last);
+        },
+
+        /**
+         * Automatically scroll the contents of the Carousel.
+         * @method _autoScroll
+         * @protected
+         */
+        _autoScroll: function() {
+            var carousel  = this,
+                currIndex = carousel._firstItem,
+                index;
+
+            if (currIndex >= carousel.get("numItems") - 1) {
+                if (carousel.get("isCircular")) {
+                    index = 0;
+                } else {
+                    carousel.stopAutoPlay();
+                }
+            } else {
+                index = currIndex + carousel.get("numVisible");
+            }
+
+            carousel._selectedItem = carousel._getSelectedItem(index);
+            carousel.scrollTo.call(carousel, index);
+        },
+
+        /**
+         * Create the Carousel.
+         *
+         * @method createCarousel
+         * @param elId {String} The id of the element to be created
+         * @protected
+         */
+        _createCarousel: function (elId) {
+            var carousel = this,
+                cssClass = carousel.CLASSES,
+                el       = Dom.get(elId);
+
+            if (!el) {
+                el = createElement("DIV", {
+                        className : cssClass.CAROUSEL,
+                        id        : elId
+                });
+            }
+
+            if (!carousel._carouselEl) {
+                carousel._carouselEl=createElement(carousel.get("carouselEl"),
+                        { className: cssClass.CAROUSEL_EL });
+            }
+
+            return el;
+        },
+
+        /**
+         * Create the Carousel clip container.
+         *
+         * @method createCarouselClip
+         * @protected
+         */
+        _createCarouselClip: function () {
+            return createElement("DIV", { className: this.CLASSES.CONTENT });
+        },
+
+        /**
+         * Create the Carousel item.
+         *
+         * @method createCarouselItem
+         * @param obj {Object} The attributes of the element to be created
+         * @protected
+         */
+        _createCarouselItem: function (obj) {
+            return createElement(this.get("carouselItemEl"), {
+                    className : obj.className,
+                    content   : obj.content,
+                    id        : obj.id
+            });
+        },
+
+        /**
+         * Return a valid item for a possibly out of bounds index considering
+         * the isCircular property.
+         *
+         * @method _getValidIndex
+         * @param index {Number} The index of the item to be returned
+         * @return {Object} Return a valid item index
+         * @protected
+         */
+        _getValidIndex: function (index) {
+            var carousel   = this,
+                isCircular = carousel.get("isCircular"),
+                numItems   = carousel.get("numItems"),
+                sentinel   = numItems - 1;
+
+            if (index < 0) {
+                index = isCircular ? numItems + index : 0;
+            } else if (index > sentinel) {
+                index = isCircular ? index - numItems : sentinel;
+            }
+
+            return index;
+        },
+
+        /**
+         * Get the value for the selected item.
+         *
+         * @method _getSelectedItem
+         * @param val {Number} The new value for "selected" item
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _getSelectedItem: function (val) {
+            var carousel   = this,
+                isCircular = carousel.get("isCircular"),
+                numItems   = carousel.get("numItems"),
+                sentinel   = numItems - 1;
+
+            if (val < 0) {
+                if (isCircular) {
+                    val = numItems + val;
+                } else {
+                    val = carousel.get("selectedItem");
+                }
+            } else if (val > sentinel) {
+                if (isCircular) {
+                    val = val - numItems;
+                } else {
+                    val = carousel.get("selectedItem");
+                }
+            }
+
+            return val;
+        },
+
+        /**
+         * The "click" handler for the item.
+         *
+         * @method _itemClickHandler
+         * @param {Event} ev The event object
+         * @protected
+         */
+        _itemClickHandler: function (ev) {
+            var carousel  = this,
+                container = carousel.get("element"),
+                el,
+                item,
+                target    = YAHOO.util.Event.getTarget(ev);
+
+            while (target && target != container &&
+                   target.id != carousel._carouselEl) {
+                el = target.nodeName;
+                if (el.toUpperCase() == carousel.get("carouselItemEl")) {
+                    break;
+                }
+                target = target.parentNode;
+            }
+
+            if ((item = carousel.getItemPositionById(target.id)) >= 0) {
+                YAHOO.log("Setting selection to " + item, WidgetName);
+                carousel.set("selectedItem", carousel._getSelectedItem(item));
+                carousel.focus();
+            }
+        },
+
+        /**
+         * The keyboard event handler for Carousel.
+         *
+         * @method _keyboardEventHandler
+         * @param ev {Event} The event that is being handled.
+         * @protected
+         */
+        _keyboardEventHandler: function (ev) {
+            var carousel = this,
+                key      = Event.getCharCode(ev),
+                prevent  = false;
+
+            if (carousel.isAnimating()) {
+                return;         // do not mess while animation is in progress
+            }
+
+            switch (key) {
+            case 0x25:          // left arrow
+            case 0x26:          // up arrow
+                carousel.selectPreviousItem();
+                prevent = true;
+                break;
+            case 0x27:          // right arrow
+            case 0x28:          // down arrow
+                carousel.selectNextItem();
+                prevent = true;
+                break;
+            case 0x21:          // page-up
+                carousel.scrollPageBackward();
+                prevent = true;
+                break;
+            case 0x22:          // page-down
+                carousel.scrollPageForward();
+                prevent = true;
+                break;
+            }
+
+            if (prevent) {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+                Event.preventDefault(ev);
+            }
+        },
+
+        /**
+         * The load the required set of items that are needed for display.
+         *
+         * @method _loadItems
+         * @protected
+         */
+        _loadItems: function() {
+            var carousel   = this,
+                first      = carousel.get("firstVisible"),
+                last       = 0,
+                numItems   = carousel.get("numItems"),
+                numVisible = carousel.get("numVisible"),
+                reveal     = carousel.get("revealAmount");
+
+            last = first + numVisible - 1 + (reveal ? 1 : 0);
+            last = last > numItems - 1 ? numItems - 1 : last;
+
+            if (!carousel.getItem(first) || !carousel.getItem(last)) {
+                carousel.fireEvent(loadItemsEvent, {
+                        ev: loadItemsEvent, first: first, last: last,
+                        num: last - first
+                });
+            }
+        },
+
+        /**
+         * The "click" handler for the pager navigation.
+         *
+         * @method _pagerClickHandler
+         * @param {Event} ev The event object
+         * @protected
+         */
+        _pagerClickHandler: function (ev) {
+            var carousel = this,
+                pos,
+                target   = Event.getTarget(ev),
+                val;
+
+            function getPagerNode(el) {
+                var itemEl = carousel.get("carouselItemEl");
+
+                if (el.nodeName.toUpperCase() == itemEl.toUpperCase()) {
+                    el = Dom.getChildrenBy(el, function (node) {
+                        // either an anchor or select at least
+                        return node.href || node.value;
+                    });
+                    if (el && el[0]) {
+                        return el[0];
+                    }
+                } else if (el.href || el.value) {
+                    return el;
+                }
+
+                return null;
+            }
+
+            if (target) {
+                target = getPagerNode(target);
+                if (!target) {
+                    return;
+                }
+                val = target.href || target.value;
+                if (JS.isString(val) && val) {
+                    pos = val.lastIndexOf("#");
+                    if (pos != -1) {
+                        val = carousel.getItemPositionById(
+                                val.substring(pos + 1));
+                        carousel._selectedItem = val;
+                        carousel.scrollTo(val);
+                        if (!target.value) { // not a select element
+                            carousel.focus();
+                        }
+                        Event.preventDefault(ev);
+                    }
+                }
+            }
+        },
+
+        /**
+         * Find the Carousel within a container. The Carousel is identified by
+         * the first element that matches the carousel element tag or the
+         * element that has the Carousel class.
+         *
+         * @method parseCarousel
+         * @param parent {HTMLElement} The parent element to look under
+         * @return {Boolean} True if Carousel is found, false otherwise
+         * @protected
+         */
+        _parseCarousel: function (parent) {
+            var carousel = this, child, cssClass, domEl, found, node;
+
+            cssClass  = carousel.CLASSES;
+            domEl     = carousel.get("carouselEl");
+            found     = false;
+
+            for (child = parent.firstChild; child; child = child.nextSibling) {
+                if (child.nodeType == 1) {
+                    node = child.nodeName;
+                    if (node.toUpperCase() == domEl) {
+                        carousel._carouselEl = child;
+                        Dom.addClass(carousel._carouselEl,
+                                     carousel.CLASSES.CAROUSEL_EL);
+                        YAHOO.log("Found Carousel - " + node +
+                                (child.id ? " (#" + child.id + ")" : ""),
+                                WidgetName);
+                        found = true;
+                    }
+                }
+            }
+
+            return found;
+        },
+
+        /**
+         * Find the items within the Carousel and add them to the items table.
+         * A Carousel item is identified by elements that matches the carousel
+         * item element tag.
+         *
+         * @method parseCarouselItems
+         * @protected
+         */
+        _parseCarouselItems: function () {
+            var carousel = this,
+                child,
+                domItemEl,
+                elId,
+                node,
+                parent   = carousel._carouselEl;
+
+            domItemEl = carousel.get("carouselItemEl");
+
+            for (child = parent.firstChild; child; child = child.nextSibling) {
+                if (child.nodeType == 1) {
+                    node = child.nodeName;
+                    if (node.toUpperCase() == domItemEl) {
+                        if (child.id) {
+                            elId = child.id;
+                        } else {
+                            elId = Dom.generateId();
+                            child.setAttribute("id", elId);
+                        }
+                        carousel.addItem(child);
+                    }
+                }
+            }
+        },
+
+        /**
+         * Find the Carousel navigation within a container. The navigation
+         * elements need to match the carousel navigation class names.
+         *
+         * @method parseCarouselNavigation
+         * @param parent {HTMLElement} The parent element to look under
+         * @return {Boolean} True if at least one is found, false otherwise
+         * @protected
+         */
+        _parseCarouselNavigation: function (parent) {
+            var carousel = this,
+                cfg,
+                cssClass = carousel.CLASSES,
+                el,
+                i,
+                j,
+                nav,
+                rv       = false;
+
+            nav = Dom.getElementsByClassName(cssClass.PREV_PAGE, "*", parent);
+            if (nav.length > 0) {
+                for (i in nav) {
+                    if (nav.hasOwnProperty(i)) {
+                        el = nav[i];
+                        YAHOO.log("Found Carousel previous page navigation - " +
+                                el + (el.id ? " (#" + el.id + ")" : ""),
+                                WidgetName);
+                        if (el.nodeName == "INPUT" ||
+                            el.nodeName == "BUTTON") {
+                            carousel._navBtns.prev.push(el);
+                        } else {
+                            j = el.getElementsByTagName("INPUT");
+                            if (JS.isArray(j) && j.length > 0) {
+                                carousel._navBtns.prev.push(j[0]);
+                            } else {
+                                j = el.getElementsByTagName("BUTTON");
+                                if (JS.isArray(j) && j.length > 0) {
+                                    carousel._navBtns.prev.push(j[0]);
+                                }
+                            }
+                        }
+                    }
+                }
+                cfg = { prev: nav };
+            }
+
+            nav = Dom.getElementsByClassName(cssClass.NEXT_PAGE, "*", parent);
+            if (nav.length > 0) {
+                for (i in nav) {
+                    if (nav.hasOwnProperty(i)) {
+                        el = nav[i];
+                        YAHOO.log("Found Carousel next page navigation - " +
+                                el + (el.id ? " (#" + el.id + ")" : ""),
+                                WidgetName);
+                        if (el.nodeName == "INPUT" ||
+                            el.nodeName == "BUTTON") {
+                            carousel._navBtns.next.push(el);
+                        } else {
+                            j = el.getElementsByTagName("INPUT");
+                            if (JS.isArray(j) && j.length > 0) {
+                                carousel._navBtns.next.push(j[0]);
+                            } else {
+                                j = el.getElementsByTagName("BUTTON");
+                                if (JS.isArray(j) && j.length > 0) {
+                                    carousel._navBtns.next.push(j[0]);
+                                }
+                            }
+                        }
+                    }
+                }
+                if (cfg) {
+                    cfg.next = nav;
+                } else {
+                    cfg = { next: nav };
+                }
+            }
+
+            if (cfg) {
+                carousel.set("navigation", cfg);
+                rv = true;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Refresh the widget UI if it is not already rendered, on first item
+         * addition.
+         *
+         * @method _refreshUi
+         * @protected
+         */
+        _refreshUi: function () {
+            var carousel = this;
+
+            // Set the rendered state appropriately.
+            carousel._hasRendered = true;
+            carousel.fireEvent(renderEvent);
+        },
+
+        /**
+         * Set the Carousel offset to the passed offset.
+         *
+         * @method _setCarouselOffset
+         * @protected
+         */
+        _setCarouselOffset: function (offset) {
+            var carousel = this, which;
+
+            which   = carousel.get("isVertical") ? "top" : "left";
+            offset += offset !== 0 ? getStyle(carousel._carouselEl, which) : 0;
+            Dom.setStyle(carousel._carouselEl, which, offset + "px");
+        },
+
+        /**
+         * Setup/Create the Carousel navigation element (if needed).
+         *
+         * @method _setupCarouselNavigation
+         * @protected
+         */
+        _setupCarouselNavigation: function () {
+            var carousel = this,
+                btn, cfg, cssClass, nav, navContainer, nextButton, prevButton;
+
+            cssClass = carousel.CLASSES;
+
+            // TODO: can the _navBtns be tested against instead?
+            navContainer = Dom.getElementsByClassName(cssClass.NAVIGATION,
+                    "DIV", carousel.get("element"));
+
+            if (navContainer.length === 0) {
+                navContainer = createElement("DIV",
+                        { className: cssClass.NAVIGATION });
+                carousel.insertBefore(navContainer,
+                        Dom.getFirstChild(carousel.get("element")));
+            } else {
+                navContainer = navContainer[0];
+            }
+
+            carousel._pages.el = createElement("UL");
+            navContainer.appendChild(carousel._pages.el);
+
+            nav = carousel.get("navigation");
+            if (JS.isString(nav.prev) || JS.isArray(nav.prev)) {
+                if (JS.isString(nav.prev)) {
+                    nav.prev = [nav.prev];
+                }
+                for (btn in nav.prev) {
+                    if (nav.prev.hasOwnProperty(btn)) {
+                        carousel._navBtns.prev.push(Dom.get(nav.prev[btn]));
+                    }
+                }
+            } else {
+                // TODO: separate method for creating a navigation button
+                prevButton = createElement("SPAN",
+                        { className: cssClass.BUTTON + cssClass.FIRST_NAV });
+                // XXX: for IE 6.x
+                Dom.setStyle(prevButton, "visibility", "visible");
+                btn = Dom.generateId();
+                prevButton.innerHTML = "<button type=\"button\" "      +
+                        "id=\"" + btn + "\" name=\""                   +
+                        carousel.STRINGS.PREVIOUS_BUTTON_TEXT + "\">"  +
+                        carousel.STRINGS.PREVIOUS_BUTTON_TEXT + "</button>";
+                navContainer.appendChild(prevButton);
+                btn = Dom.get(btn);
+                carousel._navBtns.prev = [btn];
+                cfg = { prev: [prevButton] };
+            }
+
+            if (JS.isString(nav.next) || JS.isArray(nav.next)) {
+                if (JS.isString(nav.next)) {
+                    nav.next = [nav.next];
+                }
+                for (btn in nav.next) {
+                    if (nav.next.hasOwnProperty(btn)) {
+                        carousel._navBtns.next.push(Dom.get(nav.next[btn]));
+                    }
+                }
+            } else {
+                // TODO: separate method for creating a navigation button
+                nextButton = createElement("SPAN",
+                        { className: cssClass.BUTTON + cssClass.NEXT_NAV });
+                // XXX: for IE 6.x
+                Dom.setStyle(nextButton, "visibility", "visible");
+                btn = Dom.generateId();
+                nextButton.innerHTML = "<button type=\"button\" "      +
+                        "id=\"" + btn + "\" name=\""                   +
+                        carousel.STRINGS.NEXT_BUTTON_TEXT + "\">"      +
+                        carousel.STRINGS.NEXT_BUTTON_TEXT + "</button>";
+                navContainer.appendChild(nextButton);
+                btn = Dom.get(btn);
+                carousel._navBtns.next = [btn];
+                if (cfg) {
+                    cfg.next = [nextButton];
+                } else {
+                    cfg = { next: [nextButton] };
+                }
+            }
+
+            if (cfg) {
+                carousel.set("navigation", cfg);
+            }
+
+            return navContainer;
+        },
+
+        /**
+         * Set the clip container size (based on the new numVisible value).
+         *
+         * @method _setClipContainerSize
+         * @param clip {HTMLElement} The clip container element.
+         * @param num {Number} optional The number of items per page.
+         * @protected
+         */
+        _setClipContainerSize: function (clip, num) {
+            var carousel = this,
+                attr, currVal, isVertical, itemSize, reveal, size, which;
+
+            isVertical = carousel.get("isVertical");
+            reveal     = carousel.get("revealAmount");
+            which      = isVertical ? "height" : "width";
+            attr       = isVertical ? "top" : "left";
+
+            clip       = clip || carousel._clipEl;
+            if (!clip) {
+                return;
+            }
+
+            num        = num  || carousel.get("numVisible");
+            itemSize   = getCarouselItemSize.call(carousel, which);
+            size       = itemSize * num;
+
+            // TODO: try to re-use the _hasRendered indicator
+            carousel._recomputeSize = (size === 0); // bleh!
+            if (carousel._recomputeSize) {
+                carousel._hasRendered = false;
+                return;             // no use going further, bail out!
+            }
+
+            if (reveal > 0) {
+                reveal = itemSize * (reveal / 100) * 2;
+                size += reveal;
+                // TODO: set the Carousel's initial offset somwehere
+                currVal = parseFloat(Dom.getStyle(carousel._carouselEl, attr));
+                currVal = JS.isNumber(currVal) ? currVal : 0;
+                Dom.setStyle(carousel._carouselEl,
+                             attr, currVal + (reveal / 2) + "px");
+            }
+
+            if (isVertical) {
+                size += getStyle(carousel._carouselEl, "marginTop")        +
+                        getStyle(carousel._carouselEl, "marginBottom")     +
+                        getStyle(carousel._carouselEl, "paddingTop")       +
+                        getStyle(carousel._carouselEl, "paddingBottom")    +
+                        getStyle(carousel._carouselEl, "borderTopWidth")   +
+                        getStyle(carousel._carouselEl, "borderBottomWidth");
+                // XXX: for vertical Carousel
+                Dom.setStyle(clip, which, (size - (num - 1)) + "px");
+            } else {
+                size += getStyle(carousel._carouselEl, "marginLeft")      +
+                        getStyle(carousel._carouselEl, "marginRight")     +
+                        getStyle(carousel._carouselEl, "paddingLeft")     +
+                        getStyle(carousel._carouselEl, "paddingRight")    +
+                        getStyle(carousel._carouselEl, "borderLeftWidth") +
+                        getStyle(carousel._carouselEl, "borderRightWidth");
+                Dom.setStyle(clip, which, size + "px");
+            }
+
+            carousel._setContainerSize(clip); // adjust the container size too
+        },
+
+        /**
+         * Set the container size.
+         *
+         * @method _setContainerSize
+         * @param clip {HTMLElement} The clip container element.
+         * @param attr {String} Either set the height or width.
+         * @protected
+         */
+        _setContainerSize: function (clip, attr) {
+            var carousel = this,
+                config   = carousel.CONFIG,
+                cssClass = carousel.CLASSES,
+                isVertical,
+                size;
+
+            isVertical = carousel.get("isVertical");
+            clip       = clip || carousel._clipEl;
+            attr       = attr || (isVertical ? "height" : "width");
+            size       = parseFloat(Dom.getStyle(clip, attr), 10);
+
+            size = JS.isNumber(size) ? size : 0;
+
+            if (isVertical) {
+                size += getStyle(carousel._carouselEl, "marginTop")         +
+                        getStyle(carousel._carouselEl, "marginBottom")      +
+                        getStyle(carousel._carouselEl, "paddingTop")        +
+                        getStyle(carousel._carouselEl, "paddingBottom")     +
+                        getStyle(carousel._carouselEl, "borderTopWidth")    +
+                        getStyle(carousel._carouselEl, "borderBottomWidth") +
+                        getStyle(carousel._navEl, "height");
+            } else {
+                size += getStyle(clip, "marginLeft")                    +
+                        getStyle(clip, "marginRight")                   +
+                        getStyle(clip, "paddingLeft")                   +
+                        getStyle(clip, "paddingRight")                  +
+                        getStyle(clip, "borderLeftWidth")               +
+                        getStyle(clip, "borderRightWidth");
+            }
+
+            if (!isVertical) {
+                if (size < config.HORZ_MIN_WIDTH) {
+                    size = config.HORZ_MIN_WIDTH;
+                    carousel.addClass(cssClass.MIN_WIDTH);
+                }
+            }
+            carousel.setStyle(attr,  size + "px");
+
+            // Additionally the width of the container should be set for
+            // the vertical Carousel
+            if (isVertical) {
+                size = getCarouselItemSize.call(carousel, "width");
+                if (size < config.VERT_MIN_WIDTH) {
+                    size = config.VERT_MIN_WIDTH;
+                    carousel.addClass(cssClass.MIN_WIDTH);
+                }
+                carousel.setStyle("width",  size + "px");
+            }
+        },
+
+        /**
+         * Set the value for the Carousel's first visible item.
+         *
+         * @method _setFirstVisible
+         * @param val {Number} The new value for firstVisible
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setFirstVisible: function (val) {
+            var carousel = this;
+
+            if (val >= 0 && val < carousel.get("numItems")) {
+                carousel.scrollTo(val);
+            } else {
+                val = carousel.get("firstVisible");
+            }
+            return val;
+        },
+
+        /**
+         * Set the value for the Carousel's navigation.
+         *
+         * @method _setNavigation
+         * @param cfg {Object} The navigation configuration
+         * @return {Object} The new value that would be set
+         * @protected
+         */
+        _setNavigation: function (cfg) {
+            var carousel = this;
+
+            if (cfg.prev) {
+                Event.on(cfg.prev, "click", scrollPageBackward, carousel);
+            }
+            if (cfg.next) {
+                Event.on(cfg.next, "click", scrollPageForward, carousel);
+            }
+        },
+
+        /**
+         * Set the value for the number of visible items in the Carousel.
+         *
+         * @method _setNumVisible
+         * @param val {Number} The new value for numVisible
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setNumVisible: function (val) {
+            var carousel = this;
+
+            carousel._setClipContainerSize(carousel._clipEl, val);
+        },
+
+        /**
+         * Set the number of items in the Carousel.
+         * Warning: Setting this to a lower number than the current removes
+         * items from the end.
+         *
+         * @method _setNumItems
+         * @param val {Number} The new value for numItems
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setNumItems: function (val) {
+            var carousel = this,
+                num      = carousel._itemsTable.numItems;
+
+            if (JS.isArray(carousel._itemsTable.items)) {
+                if (carousel._itemsTable.items.length != num) { // out of sync
+                    num = carousel._itemsTable.items.length;
+                    carousel._itemsTable.numItems = num;
+                }
+            }
+
+            if (val < num) {
+                while (num > val) {
+                    carousel.removeItem(num - 1);
+                    num--;
+                }
+            }
+
+            return val;
+        },
+
+        /**
+         * Set the orientation of the Carousel.
+         *
+         * @method _setOrientation
+         * @param val {Boolean} The new value for isVertical
+         * @return {Boolean} The new value that would be set
+         * @protected
+         */
+        _setOrientation: function (val) {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            if (val) {
+                carousel.replaceClass(cssClass.HORIZONTAL, cssClass.VERTICAL);
+            } else {
+                carousel.replaceClass(cssClass.VERTICAL, cssClass.HORIZONTAL);
+            }
+            carousel._itemsTable.size = 0; // force recalculation next time
+            return val;
+        },
+
+        /**
+         * Set the value for the reveal amount percentage in the Carousel.
+         *
+         * @method _setRevealAmount
+         * @param val {Number} The new value for revealAmount
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setRevealAmount: function (val) {
+            var carousel = this;
+
+            if (val >= 0 && val <= 100) {
+                val = parseInt(val, 10);
+                val = JS.isNumber(val) ? val : 0;
+                carousel._setClipContainerSize();
+            } else {
+                val = carousel.get("revealAmount");
+            }
+            return val;
+        },
+
+        /**
+         * Set the value for the selected item.
+         *
+         * @method _setSelectedItem
+         * @param val {Number} The new value for "selected" item
+         * @protected
+         */
+        _setSelectedItem: function (val) {
+            this._selectedItem = val;
+        },
+
+        /**
+         * Synchronize and redraw the UI after an item is added.
+         *
+         * @method _syncUiForItemAdd
+         * @protected
+         */
+        _syncUiForItemAdd: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el,
+                item,
+                itemsTable = carousel._itemsTable,
+                oel,
+                pos,
+                sibling;
+
+            pos  = JS.isUndefined(obj.pos) ? itemsTable.numItems - 1 : obj.pos;
+            if (!JS.isUndefined(itemsTable.items[pos])) {
+                item = itemsTable.items[pos];
+                if (item && !JS.isUndefined(item.id)) {
+                    oel  = Dom.get(item.id);
+                }
+            }
+            if (!oel) {
+                el = carousel._createCarouselItem({
+                        className : item.className,
+                        content   : item.item,
+                        id        : item.id
+                });
+                if (JS.isUndefined(obj.pos)) {
+                    if (!JS.isUndefined(itemsTable.loading[pos])) {
+                        oel = itemsTable.loading[pos];
+                        // if oel is null, it is a problem ...
+                    }
+                    if (oel) {
+                        // replace the node
+                        carouselEl.replaceChild(el, oel);
+                        // ... and remove the item from the data structure
+                        delete itemsTable.loading[pos];
+                    } else {
+                        carouselEl.appendChild(el);
+                    }
+                } else {
+                    if (!JS.isUndefined(itemsTable.items[obj.pos + 1])) {
+                        sibling = Dom.get(itemsTable.items[obj.pos + 1].id);
+                    }
+                    if (sibling) {
+                        carouselEl.insertBefore(el, sibling);
+                    } else {
+                        YAHOO.log("Unable to find sibling","error",WidgetName);
+                    }
+                }
+            } else {
+                if (JS.isUndefined(obj.pos)) {
+                    if (!Dom.isAncestor(carousel._carouselEl, oel)) {
+                        carouselEl.appendChild(oel);
+                    }
+                } else {
+                    if (!Dom.isAncestor(carouselEl, oel)) {
+                        if (!JS.isUndefined(itemsTable.items[obj.pos + 1])) {
+                            carouselEl.insertBefore(oel,
+                                    Dom.get(itemsTable.items[obj.pos + 1].id));
+                        }
+                    }
+                }
+            }
+
+            if (!carousel._hasRendered) {
+                carousel._refreshUi();
+            }
+
+            if (carousel.get("selectedItem") < 0) {
+                carousel.set("selectedItem", carousel.get("firstVisible"));
+            }
+        },
+
+        /**
+         * Synchronize and redraw the UI after an item is removed.
+         *
+         * @method _syncUiForItemAdd
+         * @protected
+         */
+        _syncUiForItemRemove: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el, item, num, pos;
+
+            num  = carousel.get("numItems");
+            item = obj.item;
+            pos  = obj.pos;
+
+            if (item && (el = Dom.get(item.id))) {
+                if (el && Dom.isAncestor(carouselEl, el)) {
+                    Event.purgeElement(el, true);
+                    carouselEl.removeChild(el);
+                }
+
+                if (carousel.get("selectedItem") == pos) {
+                    pos = pos >= num ? num - 1 : pos;
+                    carousel.set("selectedItem", pos);
+                }
+            } else {
+                YAHOO.log("Unable to find item", "warn", WidgetName);
+            }
+        },
+
+        /**
+         * Synchronize and redraw the UI for lazy loading.
+         *
+         * @method _syncUiForLazyLoading
+         * @protected
+         */
+        _syncUiForLazyLoading: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el,
+                i,
+                itemsTable = carousel._itemsTable,
+                sibling;
+
+            for (i = obj.first; i <= obj.last; i++) {
+                el = carousel._createCarouselItem({
+                        className : carousel.CLASSES.ITEM_LOADING,
+                        content   : carousel.STRINGS.ITEM_LOADING_CONTENT,
+                        id        : Dom.generateId()
+                });
+                if (el) {
+                    if (!JS.isUndefined(itemsTable.items[obj.last + 1])) {
+                        sibling = Dom.get(itemsTable.items[obj.last + 1].id);
+                        if (sibling) {
+                            carouselEl.insertBefore(el, sibling);
+                        } else {
+                            YAHOO.log("Unable to find sibling", "error",
+                                    WidgetName);
+                        }
+                    } else {
+                        carouselEl.appendChild(el);
+                    }
+                }
+                itemsTable.loading[i] = el;
+            }
+        },
+
+        /**
+         * Set the correct class for the navigation buttons.
+         *
+         * @method _updateNavButtons
+         * @param el {Object} The target button
+         * @param setFocus {Boolean} True to set focus ring, false otherwise.
+         * @protected
+         */
+        _updateNavButtons: function (el, setFocus) {
+            var children,
+                cssClass = this.CLASSES,
+                grandParent,
+                parent   = el.parentNode;
+
+            if (!parent) {
+                return;
+            }
+            grandParent = parent.parentNode;
+
+            if (el.nodeName.toUpperCase() == "BUTTON" &&
+                Dom.hasClass(parent, cssClass.BUTTON)) {
+                if (setFocus) {
+                    if (grandParent) {
+                        children = Dom.getChildren(grandParent);
+                        if (children) {
+                            Dom.removeClass(children, cssClass.FOCUSSED_BUTTON);
+                        }
+                    }
+                    Dom.addClass(parent, cssClass.FOCUSSED_BUTTON);
+                } else {
+                    Dom.removeClass(parent, cssClass.FOCUSSED_BUTTON);
+                }
+            }
+        },
+
+        /**
+         * Update the UI for the pager buttons based on the current page and
+         * the number of pages.
+         *
+         * @method _updatePagerButtons
+         * @protected
+         */
+        _updatePagerButtons: function () {
+            var carousel = this,
+                css      = carousel.CLASSES,
+                cur      = carousel._pages.cur, // current page
+                el,
+                html,
+                i,
+                item,
+                n        = carousel.get("numVisible"),
+                num      = carousel._pages.num, // total pages
+                pager    = carousel._pages.el;  // the pager container element
+
+            if (num === 0 || !pager) {
+                return;         // don't do anything if number of pages is 0
+            }
+
+            // Hide the pager before redrawing it
+            Dom.setStyle(pager, "visibility", "hidden");
+
+            // Remove all nodes from the pager
+            while (pager.firstChild) {
+                pager.removeChild(pager.firstChild);
+            }
+
+            for (i = 0; i < num; i++) {
+                if (JS.isUndefined(carousel._itemsTable.items[i * n])) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                item = carousel._itemsTable.items[i * n].id;
+
+                el   = document.createElement("LI");
+                if (!el) {
+                    YAHOO.log("Unable to create an LI pager button", "error",
+                              WidgetName);
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+
+                if (i === 0) {
+                    Dom.addClass(el, css.FIRST_PAGE);
+                }
+                if (i == cur) {
+                    Dom.addClass(el, css.SELECTED_NAV);
+                }
+
+                // TODO: use a template string for i18N compliance
+                html = "<a href=\"#" + item + "\" tabindex=\"0\"><em>"   +
+                        carousel.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1) +
+                        "</em></a>";
+                el.innerHTML = html;
+
+                pager.appendChild(el);
+            }
+
+            // Show the pager now
+            Dom.setStyle(pager, "visibility", "visible");
+        },
+
+        /**
+         * Update the UI for the pager menu based on the current page and
+         * the number of pages.  If the number of pages is greater than
+         * MAX_PAGER_BUTTONS, then the selection of pages is provided by a drop
+         * down menu instead of a set of buttons.
+         *
+         * @method _updatePagerMenu
+         * @protected
+         */
+        _updatePagerMenu: function () {
+            var carousel = this,
+                cur      = carousel._pages.cur, // current page
+                el,
+                i,
+                item,
+                n        = carousel.get("numVisible"),
+                num      = carousel._pages.num, // total pages
+                pager    = carousel._pages.el,  // the pager container element
+                sel;
+
+            if (num === 0) {
+                return;         // don't do anything if number of pages is 0
+            }
+
+            sel = document.createElement("SELECT");
+            if (!sel) {
+                YAHOO.log("Unable to create the pager menu", "error",
+                          WidgetName);
+                return;
+            }
+
+            // Hide the pager before redrawing it
+            Dom.setStyle(pager, "visibility", "hidden");
+
+            // Remove all nodes from the pager
+            while (pager.firstChild) {
+                pager.removeChild(pager.firstChild);
+            }
+
+            for (i = 0; i < num; i++) {
+                if (JS.isUndefined(carousel._itemsTable.items[i * n])) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                item = carousel._itemsTable.items[i * n].id;
+
+                el   = document.createElement("OPTION");
+                if (!el) {
+                    YAHOO.log("Unable to create an OPTION pager menu", "error",
+                              WidgetName);
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                el.value     = "#" + item;
+                // TODO: use a template string for i18N compliance
+                el.innerHTML = carousel.STRINGS.PAGER_PREFIX_TEXT+" "+(i+1);
+
+                if (i == cur) {
+                    el.setAttribute("selected", "selected");
+                }
+
+                sel.appendChild(el);
+            }
+
+            el = document.createElement("FORM");
+            if (!el) {
+                YAHOO.log("Unable to create the pager menu", "error",
+                          WidgetName);
+            } else {
+                el.appendChild(sel);
+                pager.appendChild(el);
+            }
+
+            // Show the pager now
+            Dom.setStyle(pager, "visibility", "visible");
+        },
+
+        /**
+         * Set the correct tab index for the Carousel items.
+         *
+         * @method _updateTabIndex
+         * @param el {Object} The element to be focussed
+         * @protected
+         */
+        _updateTabIndex: function (el) {
+            var carousel = this;
+
+            if (el) {
+                if (carousel._focusableItemEl) {
+                    carousel._focusableItemEl.tabIndex = -1;
+                }
+                carousel._focusableItemEl = el;
+                el.tabIndex = 0;
+            }
+        },
+
+        /**
+         * Validate animation parameters.
+         *
+         * @method _validateAnimation
+         * @param cfg {Object} The animation configuration
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateAnimation: function (cfg) {
+            var rv = true;
+
+            if (JS.isObject(cfg)) {
+                if (cfg.speed) {
+                    rv = rv && JS.isNumber(cfg.speed);
+                }
+                if (cfg.effect) {
+                    rv = rv && JS.isFunction(cfg.effect);
+                } else if (!JS.isUndefined(YAHOO.util.Easing)) {
+                    cfg.effect = YAHOO.util.Easing.easeOut;
+                }
+            } else {
+                rv = false;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the firstVisible value.
+         *
+         * @method _validateFirstVisible
+         * @param val {Number} The first visible value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateFirstVisible: function (val) {
+            var carousel = this, numItems = carousel.get("numItems");
+
+            if (JS.isNumber(val)) {
+                if (numItems === 0 && val == numItems) {
+                    return true;
+                } else {
+                    return (val >= 0 && val < numItems);
+                }
+            }
+
+            return false;
+        },
+
+        /**
+         * Validate and navigation parameters.
+         *
+         * @method _validateNavigation
+         * @param cfg {Object} The navigation configuration
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNavigation : function (cfg) {
+            var i;
+
+            if (!JS.isObject(cfg)) {
+                return false;
+            }
+
+            if (cfg.prev) {
+                if (!JS.isArray(cfg.prev)) {
+                    return false;
+                }
+                for (i in cfg.prev) {
+                    if (cfg.prev.hasOwnProperty(i)) {
+                        if (!JS.isString(cfg.prev[i].nodeName)) {
+                            return false;
+                        }
+                    }
+                }
+            }
+
+            if (cfg.next) {
+                if (!JS.isArray(cfg.next)) {
+                    return false;
+                }
+                for (i in cfg.next) {
+                    if (cfg.next.hasOwnProperty(i)) {
+                        if (!JS.isString(cfg.next[i].nodeName)) {
+                            return false;
+                        }
+                    }
+                }
+            }
+
+            return true;
+        },
+
+        /**
+         * Validate the numItems value.
+         *
+         * @method _validateNumItems
+         * @param val {Number} The numItems value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNumItems: function (val) {
+            return JS.isNumber(val) && (val >= 0);
+        },
+
+        /**
+         * Validate the numVisible value.
+         *
+         * @method _validateNumVisible
+         * @param val {Number} The numVisible value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNumVisible: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = val > 0 && val <= this.get("numItems");
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the revealAmount value.
+         *
+         * @method _validateRevealAmount
+         * @param val {Number} The revealAmount value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateRevealAmount: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = val >= 0 && val < 100;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the scrollIncrement value.
+         *
+         * @method _validateScrollIncrement
+         * @param val {Number} The scrollIncrement value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateScrollIncrement: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = (val > 0 && val < this.get("numItems"));
+            }
+
+            return rv;
+        }
+
+    });
+
+})();
+/*
+;;  Local variables: **
+;;  mode: js2 **
+;;  indent-tabs-mode: nil **
+;;  End: **
+*/
+YAHOO.register("carousel", YAHOO.widget.Carousel, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/carousel/carousel-min.js
===================================================================
--- trunk/root/static/yui/carousel/carousel-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,11 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var M;YAHOO.widget.Carousel=function(n,m){YAHOO.widget.Carousel.superclass.constructor.call(this,n,m);};var Q=YAHOO.widget.Carousel,a=YAHOO.util.Dom,Y=YAHOO.util.Event,k=YAHOO.lang;M="Carousel";var P={},F="afterScroll",b="allItemsRemoved",X="beforeHide",I="beforePageChange",e="beforeScroll",U="beforeShow",B="blur",T="focus",W="hide",O="itemAdded",j="itemRemoved",C="itemSelected",K="loadItems",H="navigationStateChange",c="pageChange",G="render",R="show",V="startAutoPlay",l="stopAutoPlay",J="uiUpdate";function S(n,m){var o=document.createElement(n);m=m||{};if(m.className){a.addClass(o,m.className);}if(m.parent){m.parent.appendChild(o);}if(m.id){o.setAttribute("id",m.id);}if(m.content){if(m.content.nodeName){o.appendChild(m.content);}else{o.innerHTML=m.content;}}return o;}function Z(o,n,m){var q;if(!o){return 0;}function p(t,s){var u;if(s=="marginRight"&&YAHOO.env.ua.webkit){u=parseInt(a.getStyle(t,"marginLeft"),10);}else{u=parseInt(a.getStyle(t,s),10);}return k.is!
 Number(u)?u:0;}function r(t,s){var u;if(s=="marginRight"&&YAHOO.env.ua.webkit){u=parseFloat(a.getStyle(t,"marginLeft"));}else{u=parseFloat(a.getStyle(t,s));}return k.isNumber(u)?u:0;}if(typeof m=="undefined"){m="int";}switch(n){case"height":q=o.offsetHeight;if(q>0){q+=p(o,"marginTop")+p(o,"marginBottom");}else{q=r(o,"height")+p(o,"marginTop")+p(o,"marginBottom")+p(o,"borderTopWidth")+p(o,"borderBottomWidth")+p(o,"paddingTop")+p(o,"paddingBottom");}break;case"width":q=o.offsetWidth;if(q>0){q+=p(o,"marginLeft")+p(o,"marginRight");}else{q=r(o,"width")+p(o,"marginLeft")+p(o,"marginRight")+p(o,"borderLeftWidth")+p(o,"borderRightWidth")+p(o,"paddingLeft")+p(o,"paddingRight");}break;default:if(m=="int"){q=p(o,n);}else{if(m=="float"){q=r(o,n);}else{q=a.getStyle(o,n);}}break;}return q;}function L(p){var o=this,q,n=0,m=false;if(o._itemsTable.numItems===0){return 0;}if(typeof p=="undefined"){if(o._itemsTable.size>0){return o._itemsTable.size;}}if(k.isUndefined(o._itemsTable.items[0]))!
 {return 0;}q=a.get(o._itemsTable.items[0].id);if(typeof p=="un!
 defined"
){m=o.get("isVertical");}else{m=p=="height";}if(m){n=Z(q,"height");}else{n=Z(q,"width");}if(typeof p=="undefined"){o._itemsTable.size=n;}return n;}function D(n){var m=this.get("numVisible");return Math.floor(n/m)*m;}function f(o){var n=0,m=0;n=L.call(this);m=n*o;if(this.get("isVertical")){m-=o;}return m;}function d(m,n){n.scrollPageBackward();Y.preventDefault(m);}function g(m,n){n.scrollPageForward();Y.preventDefault(m);}function i(r,n){var v=this,w=v.CLASSES,m,t=v._firstItem,o=v.get("isCircular"),s=v.get("numItems"),u=v.get("numVisible"),q=n,p=t+u-1;if(q>=0&&q<s){if(!k.isUndefined(v._itemsTable.items[q])){m=a.get(v._itemsTable.items[q].id);if(m){a.removeClass(m,w.SELECTED_ITEM);}}}if(k.isNumber(r)){r=parseInt(r,10);r=k.isNumber(r)?r:0;}else{r=t;}if(k.isUndefined(v._itemsTable.items[r])){r=D.call(v,r);v.scrollTo(r);}if(!k.isUndefined(v._itemsTable.items[r])){m=a.get(v._itemsTable.items[r].id);if(m){a.addClass(m,w.SELECTED_ITEM);}}if(r<t||r>p){r=D.call(v,r);v.scrollTo(r);}}fu!
 nction h(){var o=false,r=this,n=r.CLASSES,q,m,p;if(!r._hasRendered){return;}m=r.get("navigation");p=r._firstItem+r.get("numVisible");if(m.prev){if(r.get("numItems")===0||r._firstItem===0){if(r.get("numItems")===0||!r.get("isCircular")){Y.removeListener(m.prev,"click",d);a.addClass(m.prev,n.FIRST_NAV_DISABLED);for(q=0;q<r._navBtns.prev.length;q++){r._navBtns.prev[q].setAttribute("disabled","true");}r._prevEnabled=false;}else{o=!r._prevEnabled;}}else{o=!r._prevEnabled;}if(o){Y.on(m.prev,"click",d,r);a.removeClass(m.prev,n.FIRST_NAV_DISABLED);for(q=0;q<r._navBtns.prev.length;q++){r._navBtns.prev[q].removeAttribute("disabled");}r._prevEnabled=true;}}o=false;if(m.next){if(p>=r.get("numItems")){if(!r.get("isCircular")){Y.removeListener(m.next,"click",g);a.addClass(m.next,n.DISABLED);for(q=0;q<r._navBtns.next.length;q++){r._navBtns.next[q].setAttribute("disabled","true");}r._nextEnabled=false;}else{o=!r._nextEnabled;}}else{o=!r._nextEnabled;}if(o){Y.on(m.next,"click",g,r);a.remove!
 Class(m.next,n.DISABLED);for(q=0;q<r._navBtns.next.length;q++)!
 {r._navB
tns.next[q].removeAttribute("disabled");}r._nextEnabled=true;}}r.fireEvent(H,{next:r._nextEnabled,prev:r._prevEnabled});}function N(o){var p=this,m,n;if(!p._hasRendered){return;}n=p.get("numVisible");if(!k.isNumber(o)){o=Math.ceil(p.get("selectedItem")/n);}m=Math.ceil(p.get("numItems")/n);p._pages.num=m;p._pages.cur=o;if(m>p.CONFIG.MAX_PAGER_BUTTONS){p._updatePagerMenu();}else{p._updatePagerButtons();}}function A(n){var m=this;if(!k.isObject(n)){return;}switch(n.ev){case O:m._syncUiForItemAdd(n);break;case j:m._syncUiForItemRemove(n);break;case K:m._syncUiForLazyLoading(n);break;}m.fireEvent(J);}function E(p,n){var r=this,q=r.get("currentPage"),o,m=r.get("numVisible");o=parseInt(r._firstItem/m,10);if(o!=q){r.setAttributeConfig("currentPage",{value:o});r.fireEvent(c,o);}if(r.get("selectOnScroll")){if(r.get("selectedItem")!=r._selectedItem){r.set("selectedItem",r._selectedItem);}}clearTimeout(r._autoPlayTimer);delete r._autoPlayTimer;if(r.isAutoPlayOn()){r.startAutoPlay();}r.f!
 ireEvent(F,{first:r._firstItem,last:n},r);}Q.getById=function(m){return P[m]?P[m].object:false;};YAHOO.extend(Q,YAHOO.util.Element,{_animObj:null,_carouselEl:null,_clipEl:null,_firstItem:0,_hasFocus:false,_hasRendered:false,_isAnimationInProgress:false,_isAutoPlayInProgress:false,_itemsTable:null,_navBtns:null,_navEl:null,_nextEnabled:true,_pages:null,_prevEnabled:true,_recomputeSize:true,CLASSES:{BUTTON:"yui-carousel-button",CAROUSEL:"yui-carousel",CAROUSEL_EL:"yui-carousel-element",CONTAINER:"yui-carousel-container",CONTENT:"yui-carousel-content",DISABLED:"yui-carousel-button-disabled",FIRST_NAV:" yui-carousel-first-button",FIRST_NAV_DISABLED:"yui-carousel-first-button-disabled",FIRST_PAGE:"yui-carousel-nav-first-page",FOCUSSED_BUTTON:"yui-carousel-button-focus",HORIZONTAL:"yui-carousel-horizontal",ITEM_LOADING:"yui-carousel-item-loading",MIN_WIDTH:"yui-carousel-min-width",NAVIGATION:"yui-carousel-nav",NEXT_NAV:" yui-carousel-next-button",NEXT_PAGE:"yui-carousel-next",NAV!
 _CONTAINER:"yui-carousel-buttons",PAGE_FOCUS:"yui-carousel-nav!
 -page-fo
cus",PREV_PAGE:"yui-carousel-prev",SELECTED_ITEM:"yui-carousel-item-selected",SELECTED_NAV:"yui-carousel-nav-page-selected",VERTICAL:"yui-carousel-vertical",VERTICAL_CONTAINER:"yui-carousel-vertical-container",VISIBLE:"yui-carousel-visible"},CONFIG:{FIRST_VISIBLE:0,HORZ_MIN_WIDTH:180,MAX_PAGER_BUTTONS:5,VERT_MIN_WIDTH:99,NUM_VISIBLE:3},STRINGS:{ITEM_LOADING_CONTENT:"Loading",NEXT_BUTTON_TEXT:"Next Page",PAGER_PREFIX_TEXT:"Go to page ",PREVIOUS_BUTTON_TEXT:"Previous Page"},addItem:function(r,n){var s=this,p,q,m,o=s.get("numItems");
+if(!r){return false;}if(k.isString(r)||r.nodeName){q=r.nodeName?r.innerHTML:r;}else{if(k.isObject(r)){q=r.content;}else{return false;}}p=r.className||"";m=r.id?r.id:a.generateId();if(k.isUndefined(n)){s._itemsTable.items.push({item:q,className:p,id:m});}else{if(n<0||n>=o){return false;}s._itemsTable.items.splice(n,0,{item:q,className:p,id:m});}s._itemsTable.numItems++;if(o<s._itemsTable.items.length){s.set("numItems",s._itemsTable.items.length);}s.fireEvent(O,{pos:n,ev:O});return true;},addItems:function(m){var o,q,p=true;if(!k.isArray(m)){return false;}for(o=0,q=m.length;o<q;o++){if(this.addItem(m[o][0],m[o][1])===false){p=false;}}return p;},blur:function(){this._carouselEl.blur();this.fireEvent(B);},clearItems:function(){var m=this,o=m.get("numItems");while(o>0){if(!m.removeItem(0)){}if(m._itemsTable.numItems===0){m.set("numItems",0);break;}o--;}m.fireEvent(b);},focus:function(){var v=this,q,r,s,p,u,w,n,o,m;if(!v._hasRendered){return;}if(v.isAnimating()){return;}m=v.get("!
 selectedItem");w=v.get("numVisible");n=v.get("selectOnScroll");o=(m>=0)?v.getItem(m):null;q=v.get("firstVisible");u=q+w-1;s=(m<q||m>u);r=(o&&o.id)?a.get(o.id):null;p=v._itemsTable;if(!n&&s){r=(p&&p.items&&p.items[q])?a.get(p.items[q].id):null;}if(r){try{r.focus();}catch(t){}}v.fireEvent(T);},hide:function(){var m=this;if(m.fireEvent(X)!==false){m.removeClass(m.CLASSES.VISIBLE);m.fireEvent(W);}},init:function(o,n){var p=this,m=o,q=false;if(!o){return;}p._hasRendered=false;p._navBtns={prev:[],next:[]};p._pages={el:null,num:0,cur:0};p._itemsTable={loading:{},numItems:0,items:[],size:0};if(k.isString(o)){o=a.get(o);}else{if(!o.nodeName){return;}}Q.superclass.init.call(p,o,n);if(o){if(!o.id){o.setAttribute("id",a.generateId());}q=p._parseCarousel(o);if(!q){p._createCarousel(m);}}else{o=p._createCarousel(m);}m=o.id;p.initEvents();if(q){p._parseCarouselItems();}if(!n||typeof n.isVertical=="undefined"){p.set("isVertical",false);}p._parseCarouselNavigation(o);p._navEl=p._setupCarous!
 elNavigation();P[m]={object:p};p._loadItems();},initAttributes!
 :functio
n(m){var n=this;m=m||{};Q.superclass.initAttributes.call(n,m);n.setAttributeConfig("carouselEl",{validator:k.isString,value:m.carouselEl||"OL"});n.setAttributeConfig("carouselItemEl",{validator:k.isString,value:m.carouselItemEl||"LI"});n.setAttributeConfig("currentPage",{readOnly:true,value:0});n.setAttributeConfig("firstVisible",{method:n._setFirstVisible,validator:n._validateFirstVisible,value:m.firstVisible||n.CONFIG.FIRST_VISIBLE});n.setAttributeConfig("selectOnScroll",{validator:k.isBoolean,value:m.selectOnScroll||true});n.setAttributeConfig("numVisible",{method:n._setNumVisible,validator:n._validateNumVisible,value:m.numVisible||n.CONFIG.NUM_VISIBLE});n.setAttributeConfig("numItems",{method:n._setNumItems,validator:n._validateNumItems,value:n._itemsTable.numItems});n.setAttributeConfig("scrollIncrement",{validator:n._validateScrollIncrement,value:m.scrollIncrement||1});n.setAttributeConfig("selectedItem",{method:n._setSelectedItem,validator:k.isNumber,value:-1});n.setA!
 ttributeConfig("revealAmount",{method:n._setRevealAmount,validator:n._validateRevealAmount,value:m.revealAmount||0});n.setAttributeConfig("isCircular",{validator:k.isBoolean,value:m.isCircular||false});n.setAttributeConfig("isVertical",{method:n._setOrientation,validator:k.isBoolean,value:m.isVertical||false});n.setAttributeConfig("navigation",{method:n._setNavigation,validator:n._validateNavigation,value:m.navigation||{prev:null,next:null,page:null}});n.setAttributeConfig("animation",{validator:n._validateAnimation,value:m.animation||{speed:0,effect:null}});n.setAttributeConfig("autoPlay",{validator:k.isNumber,value:m.autoPlay||0});n.setAttributeConfig("autoPlayInterval",{validator:k.isNumber,value:m.autoPlayInterval||0});},initEvents:function(){var o=this,n=o.CLASSES,m;o.on("keydown",o._keyboardEventHandler);o.on(F,h);o.on(O,A);o.on(j,A);o.on(C,function(){if(o._hasFocus){o.focus();}});o.on(K,A);o.on(b,function(p){o.scrollTo(0);h.call(o);N.call(o);});o.on(c,N,o);o.on(G,fun!
 ction(p){o.set("selectedItem",o.get("firstVisible"));h.call(o,!
 p);N.cal
l(o,p);o._setClipContainerSize();});o.on("selectedItemChange",function(p){i.call(o,p.newValue,p.prevValue);if(p.newValue>=0){o._updateTabIndex(o.getElementForItem(p.newValue));}o.fireEvent(C,p.newValue);});o.on(J,function(p){h.call(o,p);N.call(o,p);});o.on("firstVisibleChange",function(p){if(!o.get("selectOnScroll")){if(p.newValue>=0){o._updateTabIndex(o.getElementForItem(p.newValue));}}});o.on("click",function(p){if(o.isAutoPlayOn()){o.stopAutoPlay();}o._itemClickHandler(p);o._pagerClickHandler(p);});Y.onFocus(o.get("element"),function(p,r){var q=Y.getTarget(p);if(q&&q.nodeName.toUpperCase()=="A"&&a.getAncestorByClassName(q,n.NAVIGATION)){if(m){a.removeClass(m,n.PAGE_FOCUS);}m=q.parentNode;a.addClass(m,n.PAGE_FOCUS);}else{if(m){a.removeClass(m,n.PAGE_FOCUS);}}r._hasFocus=true;r._updateNavButtons(Y.getTarget(p),true);},o);Y.onBlur(o.get("element"),function(p,q){q._hasFocus=false;q._updateNavButtons(Y.getTarget(p),false);},o);},isAnimating:function(){return this._isAnimationI!
 nProgress;},isAutoPlayOn:function(){return this._isAutoPlayInProgress;},getElementForItem:function(m){var n=this;if(m<0||m>=n.get("numItems")){return null;}if(n._itemsTable.numItems>m){if(!k.isUndefined(n._itemsTable.items[m])){return a.get(n._itemsTable.items[m].id);}}return null;},getElementForItems:function(){var o=this,n=[],m;for(m=0;m<o._itemsTable.numItems;m++){n.push(o.getElementForItem(m));}return n;},getItem:function(m){var n=this;if(m<0||m>=n.get("numItems")){return null;}if(n._itemsTable.numItems>m){if(!k.isUndefined(n._itemsTable.items[m])){return n._itemsTable.items[m];}}return null;},getItems:function(m){return this._itemsTable.items;},getItemPositionById:function(q){var o=this,m=0,p=o._itemsTable.numItems;while(m<p){if(!k.isUndefined(o._itemsTable.items[m])){if(o._itemsTable.items[m].id==q){return m;}}m++;}return -1;},getVisibleItems:function(){var p=this,m=p.get("firstVisible"),q=m+p.get("numVisible"),o=[];
+while(m<q){o.push(p.getElementForItem(m));m++;}return o;},removeItem:function(n){var p=this,o,m=p.get("numItems");if(n<0||n>=m){return false;}o=p._itemsTable.items.splice(n,1);if(o&&o.length==1){p._itemsTable.numItems--;p.set("numItems",m-1);p.fireEvent(j,{item:o[0],pos:n,ev:j});return true;}return false;},render:function(n){var o=this,m=o.CLASSES;o.addClass(m.CAROUSEL);if(!o._clipEl){o._clipEl=o._createCarouselClip();o._clipEl.appendChild(o._carouselEl);}if(n){o.appendChild(o._clipEl);o.appendTo(n);}else{if(!a.inDocument(o.get("element"))){return false;}o.appendChild(o._clipEl);}if(o.get("isVertical")){o.addClass(m.VERTICAL);}else{o.addClass(m.HORIZONTAL);}if(o.get("numItems")<1){return false;}o._refreshUi();return true;},scrollBackward:function(){var m=this;m.scrollTo(m._firstItem-m.get("scrollIncrement"));},scrollForward:function(){var m=this;m.scrollTo(m._firstItem+m.get("scrollIncrement"));},scrollPageBackward:function(){var n=this,m=n._firstItem-n.get("numVisible");if!
 (n.get("selectOnScroll")){n._selectedItem=n._getSelectedItem(m);}else{m=n._getValidIndex(m);}n.scrollTo(m);},scrollPageForward:function(){var n=this,m=n._firstItem+n.get("numVisible");if(n.get("selectOnScroll")){n._selectedItem=n._getSelectedItem(m);}else{m=n._getValidIndex(m);}n.scrollTo(m);},scrollTo:function(AB,n){var AA=this,m,r,p,z,x,w,u,v,q,t,o,s,y;if(k.isUndefined(AB)||AB==AA._firstItem||AA.isAnimating()){return;}r=AA.get("animation");p=AA.get("isCircular");w=AA._firstItem;u=AA.get("numItems");v=AA.get("numVisible");t=AA.get("currentPage");y=function(){if(AA.isAutoPlayOn()){AA.stopAutoPlay();}};if(AB<0){if(p){AB=u+AB;}else{y.call(AA);return;}}else{if(u>0&&AB>u-1){if(AA.get("isCircular")){AB=u-AB;}else{y.call(AA);return;}}}x=(AA._firstItem>AB)?"backward":"forward";s=w+v;s=(s>u-1)?u-1:s;o=AA.fireEvent(e,{dir:x,first:w,last:s});if(o===false){return;}AA.fireEvent(I,{page:t});z=w-AB;AA._firstItem=AB;AA.set("firstVisible",AB);AA._loadItems();s=AB+v;s=(s>u-1)?u-1:s;q=f.call!
 (AA,z);m=r.speed>0;if(m){AA._animateAndSetCarouselOffset(q,AB,!
 s,n);}el
se{AA._setCarouselOffset(q);E.call(AA,AB,s);}},selectPreviousItem:function(){var o=this,n=0,m=o.get("selectedItem");if(m==this._firstItem){n=m-o.get("numVisible");o._selectedItem=o._getSelectedItem(m-1);o.scrollTo(n);}else{n=o.get("selectedItem")-o.get("scrollIncrement");o.set("selectedItem",o._getSelectedItem(n));}},selectNextItem:function(){var n=this,m=0;m=n.get("selectedItem")+n.get("scrollIncrement");n.set("selectedItem",n._getSelectedItem(m));},show:function(){var n=this,m=n.CLASSES;if(n.fireEvent(U)!==false){n.addClass(m.VISIBLE);n.fireEvent(R);}},startAutoPlay:function(){var m=this,n;if(k.isUndefined(m._autoPlayTimer)){n=m.get("autoPlayInterval");if(n<=0){return;}m._isAutoPlayInProgress=true;m.fireEvent(V);m._autoPlayTimer=setTimeout(function(){m._autoScroll();},n);}},stopAutoPlay:function(){var m=this;if(!k.isUndefined(m._autoPlayTimer)){clearTimeout(m._autoPlayTimer);delete m._autoPlayTimer;m._isAutoPlayInProgress=false;m.fireEvent(l);}},toString:function(){return !
 M+(this.get?" (#"+this.get("id")+")":"");},_animateAndSetCarouselOffset:function(r,p,n){var q=this,o=q.get("animation"),m=null;if(q.get("isVertical")){m=new YAHOO.util.Motion(q._carouselEl,{points:{by:[0,r]}},o.speed,o.effect);}else{m=new YAHOO.util.Motion(q._carouselEl,{points:{by:[r,0]}},o.speed,o.effect);}q._isAnimationInProgress=true;m.onComplete.subscribe(q._animationCompleteHandler,{scope:q,item:p,last:n});m.animate();},_animationCompleteHandler:function(m,n,q){q.scope._isAnimationInProgress=false;E.call(q.scope,q.item,q.last);},_autoScroll:function(){var n=this,o=n._firstItem,m;if(o>=n.get("numItems")-1){if(n.get("isCircular")){m=0;}else{n.stopAutoPlay();}}else{m=o+n.get("numVisible");}n._selectedItem=n._getSelectedItem(m);n.scrollTo.call(n,m);},_createCarousel:function(n){var p=this,m=p.CLASSES,o=a.get(n);if(!o){o=S("DIV",{className:m.CAROUSEL,id:n});}if(!p._carouselEl){p._carouselEl=S(p.get("carouselEl"),{className:m.CAROUSEL_EL});}return o;},_createCarouselClip:fu!
 nction(){return S("DIV",{className:this.CLASSES.CONTENT});},_c!
 reateCar
ouselItem:function(m){return S(this.get("carouselItemEl"),{className:m.className,content:m.content,id:m.id});},_getValidIndex:function(o){var q=this,m=q.get("isCircular"),p=q.get("numItems"),n=p-1;if(o<0){o=m?p+o:0;}else{if(o>n){o=m?o-p:n;}}return o;},_getSelectedItem:function(q){var p=this,m=p.get("isCircular"),o=p.get("numItems"),n=o-1;if(q<0){if(m){q=o+q;}else{q=p.get("selectedItem");}}else{if(q>n){if(m){q=q-o;}else{q=p.get("selectedItem");}}}return q;},_itemClickHandler:function(p){var r=this,m=r.get("element"),n,o,q=YAHOO.util.Event.getTarget(p);while(q&&q!=m&&q.id!=r._carouselEl){n=q.nodeName;if(n.toUpperCase()==r.get("carouselItemEl")){break;}q=q.parentNode;}if((o=r.getItemPositionById(q.id))>=0){r.set("selectedItem",r._getSelectedItem(o));r.focus();}},_keyboardEventHandler:function(o){var p=this,n=Y.getCharCode(o),m=false;if(p.isAnimating()){return;}switch(n){case 37:case 38:p.selectPreviousItem();m=true;break;case 39:case 40:p.selectNextItem();m=true;break;case 33:p!
 .scrollPageBackward();m=true;break;case 34:p.scrollPageForward();m=true;break;}if(m){if(p.isAutoPlayOn()){p.stopAutoPlay();}Y.preventDefault(o);}},_loadItems:function(){var q=this,r=q.get("firstVisible"),n=0,m=q.get("numItems"),o=q.get("numVisible"),p=q.get("revealAmount");n=r+o-1+(p?1:0);n=n>m-1?m-1:n;if(!q.getItem(r)||!q.getItem(n)){q.fireEvent(K,{ev:K,first:r,last:n,num:n-r});}},_pagerClickHandler:function(n){var p=this,r,o=Y.getTarget(n),q;function m(t){var s=p.get("carouselItemEl");if(t.nodeName.toUpperCase()==s.toUpperCase()){t=a.getChildrenBy(t,function(u){return u.href||u.value;});if(t&&t[0]){return t[0];}}else{if(t.href||t.value){return t;}}return null;}if(o){o=m(o);if(!o){return;}q=o.href||o.value;if(k.isString(q)&&q){r=q.lastIndexOf("#");if(r!=-1){q=p.getItemPositionById(q.substring(r+1));p._selectedItem=q;p.scrollTo(q);if(!o.value){p.focus();}Y.preventDefault(n);}}}},_parseCarousel:function(o){var r=this,s,m,n,q,p;
+m=r.CLASSES;n=r.get("carouselEl");q=false;for(s=o.firstChild;s;s=s.nextSibling){if(s.nodeType==1){p=s.nodeName;if(p.toUpperCase()==n){r._carouselEl=s;a.addClass(r._carouselEl,r.CLASSES.CAROUSEL_EL);q=true;}}}return q;},_parseCarouselItems:function(){var q=this,r,m,n,p,o=q._carouselEl;m=q.get("carouselItemEl");for(r=o.firstChild;r;r=r.nextSibling){if(r.nodeType==1){p=r.nodeName;if(p.toUpperCase()==m){if(r.id){n=r.id;}else{n=a.generateId();r.setAttribute("id",n);}q.addItem(r);}}}},_parseCarouselNavigation:function(s){var t=this,r,u=t.CLASSES,n,q,p,m,o=false;m=a.getElementsByClassName(u.PREV_PAGE,"*",s);if(m.length>0){for(q in m){if(m.hasOwnProperty(q)){n=m[q];if(n.nodeName=="INPUT"||n.nodeName=="BUTTON"){t._navBtns.prev.push(n);}else{p=n.getElementsByTagName("INPUT");if(k.isArray(p)&&p.length>0){t._navBtns.prev.push(p[0]);}else{p=n.getElementsByTagName("BUTTON");if(k.isArray(p)&&p.length>0){t._navBtns.prev.push(p[0]);}}}}}r={prev:m};}m=a.getElementsByClassName(u.NEXT_PAGE,"*"!
 ,s);if(m.length>0){for(q in m){if(m.hasOwnProperty(q)){n=m[q];if(n.nodeName=="INPUT"||n.nodeName=="BUTTON"){t._navBtns.next.push(n);}else{p=n.getElementsByTagName("INPUT");if(k.isArray(p)&&p.length>0){t._navBtns.next.push(p[0]);}else{p=n.getElementsByTagName("BUTTON");if(k.isArray(p)&&p.length>0){t._navBtns.next.push(p[0]);}}}}}if(r){r.next=m;}else{r={next:m};}}if(r){t.set("navigation",r);o=true;}return o;},_refreshUi:function(){var m=this;m._hasRendered=true;m.fireEvent(G);},_setCarouselOffset:function(o){var m=this,n;n=m.get("isVertical")?"top":"left";o+=o!==0?Z(m._carouselEl,n):0;a.setStyle(m._carouselEl,n,o+"px");},_setupCarouselNavigation:function(){var r=this,p,n,m,t,q,s,o;m=r.CLASSES;q=a.getElementsByClassName(m.NAVIGATION,"DIV",r.get("element"));if(q.length===0){q=S("DIV",{className:m.NAVIGATION});r.insertBefore(q,a.getFirstChild(r.get("element")));}else{q=q[0];}r._pages.el=S("UL");q.appendChild(r._pages.el);t=r.get("navigation");if(k.isString(t.prev)||k.isArray(t.p!
 rev)){if(k.isString(t.prev)){t.prev=[t.prev];}for(p in t.prev)!
 {if(t.pr
ev.hasOwnProperty(p)){r._navBtns.prev.push(a.get(t.prev[p]));}}}else{o=S("SPAN",{className:m.BUTTON+m.FIRST_NAV});a.setStyle(o,"visibility","visible");p=a.generateId();o.innerHTML='<button type="button" '+'id="'+p+'" name="'+r.STRINGS.PREVIOUS_BUTTON_TEXT+'">'+r.STRINGS.PREVIOUS_BUTTON_TEXT+"</button>";q.appendChild(o);p=a.get(p);r._navBtns.prev=[p];n={prev:[o]};}if(k.isString(t.next)||k.isArray(t.next)){if(k.isString(t.next)){t.next=[t.next];}for(p in t.next){if(t.next.hasOwnProperty(p)){r._navBtns.next.push(a.get(t.next[p]));}}}else{s=S("SPAN",{className:m.BUTTON+m.NEXT_NAV});a.setStyle(s,"visibility","visible");p=a.generateId();s.innerHTML='<button type="button" '+'id="'+p+'" name="'+r.STRINGS.NEXT_BUTTON_TEXT+'">'+r.STRINGS.NEXT_BUTTON_TEXT+"</button>";q.appendChild(s);p=a.get(p);r._navBtns.next=[p];if(n){n.next=[s];}else{n={next:[s]};}}if(n){r.set("navigation",n);}return q;},_setClipContainerSize:function(n,p){var u=this,q,m,r,s,t,v,o;r=u.get("isVertical");t=u.get("reve!
 alAmount");o=r?"height":"width";q=r?"top":"left";n=n||u._clipEl;if(!n){return;}p=p||u.get("numVisible");s=L.call(u,o);v=s*p;u._recomputeSize=(v===0);if(u._recomputeSize){u._hasRendered=false;return;}if(t>0){t=s*(t/100)*2;v+=t;m=parseFloat(a.getStyle(u._carouselEl,q));m=k.isNumber(m)?m:0;a.setStyle(u._carouselEl,q,m+(t/2)+"px");}if(r){v+=Z(u._carouselEl,"marginTop")+Z(u._carouselEl,"marginBottom")+Z(u._carouselEl,"paddingTop")+Z(u._carouselEl,"paddingBottom")+Z(u._carouselEl,"borderTopWidth")+Z(u._carouselEl,"borderBottomWidth");a.setStyle(n,o,(v-(p-1))+"px");}else{v+=Z(u._carouselEl,"marginLeft")+Z(u._carouselEl,"marginRight")+Z(u._carouselEl,"paddingLeft")+Z(u._carouselEl,"paddingRight")+Z(u._carouselEl,"borderLeftWidth")+Z(u._carouselEl,"borderRightWidth");a.setStyle(n,o,v+"px");}u._setContainerSize(n);},_setContainerSize:function(q,m){var r=this,o=r.CONFIG,n=r.CLASSES,s,p;s=r.get("isVertical");q=q||r._clipEl;m=m||(s?"height":"width");p=parseFloat(a.getStyle(q,m),10);p=k.!
 isNumber(p)?p:0;if(s){p+=Z(r._carouselEl,"marginTop")+Z(r._car!
 ouselEl,
"marginBottom")+Z(r._carouselEl,"paddingTop")+Z(r._carouselEl,"paddingBottom")+Z(r._carouselEl,"borderTopWidth")+Z(r._carouselEl,"borderBottomWidth")+Z(r._navEl,"height");}else{p+=Z(q,"marginLeft")+Z(q,"marginRight")+Z(q,"paddingLeft")+Z(q,"paddingRight")+Z(q,"borderLeftWidth")+Z(q,"borderRightWidth");}if(!s){if(p<o.HORZ_MIN_WIDTH){p=o.HORZ_MIN_WIDTH;r.addClass(n.MIN_WIDTH);}}r.setStyle(m,p+"px");if(s){p=L.call(r,"width");if(p<o.VERT_MIN_WIDTH){p=o.VERT_MIN_WIDTH;r.addClass(n.MIN_WIDTH);}r.setStyle("width",p+"px");}},_setFirstVisible:function(n){var m=this;if(n>=0&&n<m.get("numItems")){m.scrollTo(n);}else{n=m.get("firstVisible");}return n;},_setNavigation:function(m){var n=this;if(m.prev){Y.on(m.prev,"click",d,n);}if(m.next){Y.on(m.next,"click",g,n);}},_setNumVisible:function(n){var m=this;m._setClipContainerSize(m._clipEl,n);},_setNumItems:function(o){var n=this,m=n._itemsTable.numItems;if(k.isArray(n._itemsTable.items)){if(n._itemsTable.items.length!=m){m=n._itemsTable.ite!
 ms.length;n._itemsTable.numItems=m;}}if(o<m){while(m>o){n.removeItem(m-1);m--;}}return o;},_setOrientation:function(o){var n=this,m=n.CLASSES;if(o){n.replaceClass(m.HORIZONTAL,m.VERTICAL);}else{n.replaceClass(m.VERTICAL,m.HORIZONTAL);}n._itemsTable.size=0;return o;},_setRevealAmount:function(n){var m=this;if(n>=0&&n<=100){n=parseInt(n,10);n=k.isNumber(n)?n:0;m._setClipContainerSize();}else{n=m.get("revealAmount");}return n;},_setSelectedItem:function(m){this._selectedItem=m;},_syncUiForItemAdd:function(p){var t=this,r=t._carouselEl,m,u,o=t._itemsTable,n,q,s;q=k.isUndefined(p.pos)?o.numItems-1:p.pos;if(!k.isUndefined(o.items[q])){u=o.items[q];if(u&&!k.isUndefined(u.id)){n=a.get(u.id);}}if(!n){m=t._createCarouselItem({className:u.className,content:u.item,id:u.id});if(k.isUndefined(p.pos)){if(!k.isUndefined(o.loading[q])){n=o.loading[q];}if(n){r.replaceChild(m,n);delete o.loading[q];}else{r.appendChild(m);}}else{if(!k.isUndefined(o.items[p.pos+1])){s=a.get(o.items[p.pos+1].id);
+}if(s){r.insertBefore(m,s);}else{}}}else{if(k.isUndefined(p.pos)){if(!a.isAncestor(t._carouselEl,n)){r.appendChild(n);}}else{if(!a.isAncestor(r,n)){if(!k.isUndefined(o.items[p.pos+1])){r.insertBefore(n,a.get(o.items[p.pos+1].id));}}}}if(!t._hasRendered){t._refreshUi();}if(t.get("selectedItem")<0){t.set("selectedItem",t.get("firstVisible"));}},_syncUiForItemRemove:function(r){var q=this,m=q._carouselEl,o,p,n,s;n=q.get("numItems");p=r.item;s=r.pos;if(p&&(o=a.get(p.id))){if(o&&a.isAncestor(m,o)){Y.purgeElement(o,true);m.removeChild(o);}if(q.get("selectedItem")==s){s=s>=n?n-1:s;q.set("selectedItem",s);}}else{}},_syncUiForLazyLoading:function(s){var r=this,n=r._carouselEl,q,o,m=r._itemsTable,p;for(o=s.first;o<=s.last;o++){q=r._createCarouselItem({className:r.CLASSES.ITEM_LOADING,content:r.STRINGS.ITEM_LOADING_CONTENT,id:a.generateId()});if(q){if(!k.isUndefined(m.items[s.last+1])){p=a.get(m.items[s.last+1].id);if(p){n.insertBefore(q,p);}else{}}else{n.appendChild(q);}}m.loading[o]!
 =q;}},_updateNavButtons:function(q,n){var o,m=this.CLASSES,r,p=q.parentNode;if(!p){return;}r=p.parentNode;if(q.nodeName.toUpperCase()=="BUTTON"&&a.hasClass(p,m.BUTTON)){if(n){if(r){o=a.getChildren(r);if(o){a.removeClass(o,m.FOCUSSED_BUTTON);}}a.addClass(p,m.FOCUSSED_BUTTON);}else{a.removeClass(p,m.FOCUSSED_BUTTON);}}},_updatePagerButtons:function(){var v=this,t=v.CLASSES,u=v._pages.cur,m,s,q,w,o=v.get("numVisible"),r=v._pages.num,p=v._pages.el;if(r===0||!p){return;}a.setStyle(p,"visibility","hidden");while(p.firstChild){p.removeChild(p.firstChild);}for(q=0;q<r;q++){if(k.isUndefined(v._itemsTable.items[q*o])){a.setStyle(p,"visibility","visible");break;}w=v._itemsTable.items[q*o].id;m=document.createElement("LI");if(!m){a.setStyle(p,"visibility","visible");break;}if(q===0){a.addClass(m,t.FIRST_PAGE);}if(q==u){a.addClass(m,t.SELECTED_NAV);}s='<a href="#'+w+'" tabindex="0"><em>'+v.STRINGS.PAGER_PREFIX_TEXT+" "+(q+1)+"</em></a>";m.innerHTML=s;p.appendChild(m);}a.setStyle(p,"visi!
 bility","visible");},_updatePagerMenu:function(){var u=this,t=!
 u._pages
.cur,o,r,v,p=u.get("numVisible"),s=u._pages.num,q=u._pages.el,m;if(s===0){return;}m=document.createElement("SELECT");if(!m){return;}a.setStyle(q,"visibility","hidden");while(q.firstChild){q.removeChild(q.firstChild);}for(r=0;r<s;r++){if(k.isUndefined(u._itemsTable.items[r*p])){a.setStyle(q,"visibility","visible");break;}v=u._itemsTable.items[r*p].id;o=document.createElement("OPTION");if(!o){a.setStyle(q,"visibility","visible");break;}o.value="#"+v;o.innerHTML=u.STRINGS.PAGER_PREFIX_TEXT+" "+(r+1);if(r==t){o.setAttribute("selected","selected");}m.appendChild(o);}o=document.createElement("FORM");if(!o){}else{o.appendChild(m);q.appendChild(o);}a.setStyle(q,"visibility","visible");},_updateTabIndex:function(m){var n=this;if(m){if(n._focusableItemEl){n._focusableItemEl.tabIndex=-1;}n._focusableItemEl=m;m.tabIndex=0;}},_validateAnimation:function(m){var n=true;if(k.isObject(m)){if(m.speed){n=n&&k.isNumber(m.speed);}if(m.effect){n=n&&k.isFunction(m.effect);}else{if(!k.isUndefined(Y!
 AHOO.util.Easing)){m.effect=YAHOO.util.Easing.easeOut;}}}else{n=false;}return n;},_validateFirstVisible:function(o){var n=this,m=n.get("numItems");if(k.isNumber(o)){if(m===0&&o==m){return true;}else{return(o>=0&&o<m);}}return false;},_validateNavigation:function(m){var n;if(!k.isObject(m)){return false;}if(m.prev){if(!k.isArray(m.prev)){return false;}for(n in m.prev){if(m.prev.hasOwnProperty(n)){if(!k.isString(m.prev[n].nodeName)){return false;}}}}if(m.next){if(!k.isArray(m.next)){return false;}for(n in m.next){if(m.next.hasOwnProperty(n)){if(!k.isString(m.next[n].nodeName)){return false;}}}}return true;},_validateNumItems:function(m){return k.isNumber(m)&&(m>=0);},_validateNumVisible:function(m){var n=false;if(k.isNumber(m)){n=m>0&&m<=this.get("numItems");}return n;},_validateRevealAmount:function(m){var n=false;if(k.isNumber(m)){n=m>=0&&m<100;}return n;},_validateScrollIncrement:function(m){var n=false;if(k.isNumber(m)){n=(m>0&&m<this.get("numItems"));}return n;}});})();Y!
 AHOO.register("carousel",YAHOO.widget.Carousel,{version:"2.7.0!
 ",build:
"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/carousel/carousel.js
===================================================================
--- trunk/root/static/yui/carousel/carousel.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/carousel/carousel.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,3616 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The Carousel module provides a widget for browsing among a set of like
+ * objects represented pictorially.
+ *
+ * @module carousel
+ * @requires yahoo, dom, event, element
+ * @optional animation
+ * @namespace YAHOO.widget
+ * @title Carousel Widget
+ * @beta
+ */
+(function () {
+
+    var WidgetName;             // forward declaration
+
+    /**
+     * The Carousel widget.
+     *
+     * @class Carousel
+     * @extends YAHOO.util.Element
+     * @constructor
+     * @param el {HTMLElement | String} The HTML element that represents the
+     * the container that houses the Carousel.
+     * @param cfg {Object} (optional) The configuration values
+     */
+    YAHOO.widget.Carousel = function (el, cfg) {
+
+        YAHOO.widget.Carousel.superclass.constructor.call(this, el, cfg);
+    };
+
+    /*
+     * Private variables of the Carousel component
+     */
+
+    /* Some abbreviations to avoid lengthy typing and lookups. */
+    var Carousel    = YAHOO.widget.Carousel,
+        Dom         = YAHOO.util.Dom,
+        Event       = YAHOO.util.Event,
+        JS          = YAHOO.lang;
+
+    /**
+     * The widget name.
+     * @private
+     * @static
+     */
+    WidgetName = "Carousel";
+
+    /**
+     * The internal table of Carousel instances.
+     * @private
+     * @static
+     */
+    var instances = {},
+
+    /*
+     * Custom events of the Carousel component
+     */
+
+    /**
+     * @event afterScroll
+     * @description Fires when the Carousel has scrolled to the previous or
+     * next page.  Passes back the index of the first and last visible items in
+     * the Carousel.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    afterScrollEvent = "afterScroll",
+
+    /**
+     * @event allItemsRemovedEvent
+     * @description Fires when all items have been removed from the Carousel.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    allItemsRemovedEvent = "allItemsRemoved",
+
+    /**
+     * @event beforeHide
+     * @description Fires before the Carousel is hidden.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeHideEvent = "beforeHide",
+
+    /**
+     * @event beforePageChange
+     * @description Fires when the Carousel is about to scroll to the previous
+     * or next page.  Passes back the page number of the current page.  Note
+     * that the first page number is zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforePageChangeEvent = "beforePageChange",
+
+    /**
+     * @event beforeScroll
+     * @description Fires when the Carousel is about to scroll to the previous
+     * or next page.  Passes back the index of the first and last visible items
+     * in the Carousel and the direction (backward/forward) of the scroll.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeScrollEvent = "beforeScroll",
+
+    /**
+     * @event beforeShow
+     * @description Fires when the Carousel is about to be shown.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    beforeShowEvent = "beforeShow",
+
+    /**
+     * @event blur
+     * @description Fires when the Carousel loses focus.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    blurEvent = "blur",
+
+    /**
+     * @event focus
+     * @description Fires when the Carousel gains focus.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    focusEvent = "focus",
+
+    /**
+     * @event hide
+     * @description Fires when the Carousel is hidden.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    hideEvent = "hide",
+
+    /**
+     * @event itemAdded
+     * @description Fires when an item has been added to the Carousel.  Passes
+     * back the content of the item that would be added, the index at which the
+     * item would be added, and the event itself.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemAddedEvent = "itemAdded",
+
+    /**
+     * @event itemRemoved
+     * @description Fires when an item has been removed from the Carousel.
+     * Passes back the content of the item that would be removed, the index
+     * from which the item would be removed, and the event itself.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemRemovedEvent = "itemRemoved",
+
+    /**
+     * @event itemSelected
+     * @description Fires when an item has been selected in the Carousel.
+     * Passes back the index of the selected item in the Carousel.  Note, that
+     * the index begins from zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    itemSelectedEvent = "itemSelected",
+
+    /**
+     * @event loadItems
+     * @description Fires when the Carousel needs more items to be loaded for
+     * displaying them.  Passes back the first and last visible items in the
+     * Carousel, and the number of items needed to be loaded.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    loadItemsEvent = "loadItems",
+
+    /**
+     * @event navigationStateChange
+     * @description Fires when the state of either one of the navigation
+     * buttons are changed from enabled to disabled or vice versa.  Passes back
+     * the state (true/false) of the previous and next buttons.  The value true
+     * signifies the button is enabled, false signifies disabled.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    navigationStateChangeEvent = "navigationStateChange",
+
+    /**
+     * @event pageChange
+     * @description Fires after the Carousel has scrolled to the previous or
+     * next page.  Passes back the page number of the current page.  Note
+     * that the first page number is zero.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    pageChangeEvent = "pageChange",
+
+    /*
+     * Internal event.
+     * @event render
+     * @description Fires when the Carousel is rendered.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    renderEvent = "render",
+
+    /**
+     * @event show
+     * @description Fires when the Carousel is shown.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    showEvent = "show",
+
+    /**
+     * @event startAutoPlay
+     * @description Fires when the auto play has started in the Carousel.  See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    startAutoPlayEvent = "startAutoPlay",
+
+    /**
+     * @event stopAutoPlay
+     * @description Fires when the auto play has been stopped in the Carousel.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    stopAutoPlayEvent = "stopAutoPlay",
+
+    /*
+     * Internal event.
+     * @event uiUpdateEvent
+     * @description Fires when the UI has been updated.
+     * See
+     * <a href="YAHOO.util.Element.html#addListener">Element.addListener</a>
+     * for more information on listening for this event.
+     * @type YAHOO.util.CustomEvent
+     */
+    uiUpdateEvent = "uiUpdate";
+
+    /*
+     * Private helper functions used by the Carousel component
+     */
+
+    /**
+     * Create an element, set its class name and optionally install the element
+     * to its parent.
+     * @method createElement
+     * @param el {String} The element to be created
+     * @param attrs {Object} Configuration of parent, class and id attributes.
+     * If the content is specified, it is inserted after creation of the
+     * element. The content can also be an HTML element in which case it would
+     * be appended as a child node of the created element.
+     * @private
+     */
+    function createElement(el, attrs) {
+        var newEl = document.createElement(el);
+
+        attrs = attrs || {};
+        if (attrs.className) {
+            Dom.addClass(newEl, attrs.className);
+        }
+
+        if (attrs.parent) {
+            attrs.parent.appendChild(newEl);
+        }
+
+        if (attrs.id) {
+            newEl.setAttribute("id", attrs.id);
+        }
+
+        if (attrs.content) {
+            if (attrs.content.nodeName) {
+                newEl.appendChild(attrs.content);
+            } else {
+                newEl.innerHTML = attrs.content;
+            }
+        }
+
+        return newEl;
+    }
+
+    /**
+     * Get the computed style of an element.
+     *
+     * @method getStyle
+     * @param el {HTMLElement} The element for which the style needs to be
+     * returned.
+     * @param style {String} The style attribute
+     * @param type {String} "int", "float", etc. (defaults to int)
+     * @private
+     */
+    function getStyle(el, style, type) {
+        var value;
+
+        if (!el) {
+            return 0;
+        }
+
+        function getStyleIntVal(el, style) {
+            var val;
+
+            /*
+             * XXX: Safari calculates incorrect marginRight for an element
+             * which has its parent element style set to overflow: hidden
+             * https://bugs.webkit.org/show_bug.cgi?id=13343
+             * Let us assume marginLeft == marginRight
+             */
+            if (style == "marginRight" && YAHOO.env.ua.webkit) {
+                val = parseInt(Dom.getStyle(el, "marginLeft"), 10);
+            } else {
+                val = parseInt(Dom.getStyle(el, style), 10);
+            }
+
+            return JS.isNumber(val) ? val : 0;
+        }
+
+        function getStyleFloatVal(el, style) {
+            var val;
+
+            /*
+             * XXX: Safari calculates incorrect marginRight for an element
+             * which has its parent element style set to overflow: hidden
+             * https://bugs.webkit.org/show_bug.cgi?id=13343
+             * Let us assume marginLeft == marginRight
+             */
+            if (style == "marginRight" && YAHOO.env.ua.webkit) {
+                val = parseFloat(Dom.getStyle(el, "marginLeft"));
+            } else {
+                val = parseFloat(Dom.getStyle(el, style));
+            }
+
+            return JS.isNumber(val) ? val : 0;
+        }
+
+        if (typeof type == "undefined") {
+            type = "int";
+        }
+
+        switch (style) {
+        case "height":
+            value = el.offsetHeight;
+            if (value > 0) {
+                value += getStyleIntVal(el, "marginTop")        +
+                        getStyleIntVal(el, "marginBottom");
+            } else {
+                value = getStyleFloatVal(el, "height")          +
+                        getStyleIntVal(el, "marginTop")         +
+                        getStyleIntVal(el, "marginBottom")      +
+                        getStyleIntVal(el, "borderTopWidth")    +
+                        getStyleIntVal(el, "borderBottomWidth") +
+                        getStyleIntVal(el, "paddingTop")        +
+                        getStyleIntVal(el, "paddingBottom");
+            }
+            break;
+        case "width":
+            value = el.offsetWidth;
+            if (value > 0) {
+                value += getStyleIntVal(el, "marginLeft")       +
+                        getStyleIntVal(el, "marginRight");
+            } else {
+                value = getStyleFloatVal(el, "width")           +
+                        getStyleIntVal(el, "marginLeft")        +
+                        getStyleIntVal(el, "marginRight")       +
+                        getStyleIntVal(el, "borderLeftWidth")   +
+                        getStyleIntVal(el, "borderRightWidth")  +
+                        getStyleIntVal(el, "paddingLeft")       +
+                        getStyleIntVal(el, "paddingRight");
+            }
+            break;
+        default:
+            if (type == "int") {
+                value = getStyleIntVal(el, style);
+            } else if (type == "float") {
+                value = getStyleFloatVal(el, style);
+            } else {
+                value = Dom.getStyle(el, style);
+            }
+            break;
+        }
+
+        return value;
+    }
+
+    /**
+     * Compute and return the height or width of a single Carousel item
+     * depending upon the orientation.
+     *
+     * @method getCarouselItemSize
+     * @param which {String} "height" or "width" to be returned.  If this is
+     * passed explicitly, the calculated size is not cached.
+     * @private
+     */
+    function getCarouselItemSize(which) {
+        var carousel = this,
+            child,
+            size     = 0,
+            vertical = false;
+
+        if (carousel._itemsTable.numItems === 0) {
+            return 0;
+        }
+
+        if (typeof which == "undefined") {
+            if (carousel._itemsTable.size > 0) {
+                return carousel._itemsTable.size;
+            }
+        }
+
+        if (JS.isUndefined(carousel._itemsTable.items[0])) {
+            return 0;
+        }
+
+        child = Dom.get(carousel._itemsTable.items[0].id);
+
+        if (typeof which == "undefined") {
+            vertical = carousel.get("isVertical");
+        } else {
+            vertical = which == "height";
+        }
+
+        if (vertical) {
+            size = getStyle(child, "height");
+        } else {
+            size = getStyle(child, "width");
+        }
+
+        if (typeof which == "undefined") {
+            carousel._itemsTable.size = size; // save the size for later
+        }
+
+        return size;
+    }
+
+    /**
+     * Return the index of the first item in the view port for displaying item
+     * in "pos".
+     *
+     * @method getFirstVisibleForPosition
+     * @param pos {Number} The position of the item to be displayed
+     * @private
+     */
+    function getFirstVisibleForPosition(pos) {
+        var num = this.get("numVisible");
+
+        return Math.floor(pos / num) * num;
+    }
+
+    /**
+     * Return the scrolling offset size given the number of elements to
+     * scroll.
+     *
+     * @method getScrollOffset
+     * @param delta {Number} The delta number of elements to scroll by.
+     * @private
+     */
+    function getScrollOffset(delta) {
+        var itemSize = 0,
+            size     = 0;
+
+        itemSize = getCarouselItemSize.call(this);
+        size     = itemSize * delta;
+
+        // XXX: really, when the orientation is vertical, the scrolling
+        // is not exactly the number of elements into element size.
+        if (this.get("isVertical")) {
+            size -= delta;
+        }
+
+        return size;
+    }
+
+    /**
+     * Scroll the Carousel by a page backward.
+     *
+     * @method scrollPageBackward
+     * @param {Event} ev The event object
+     * @param {Object} obj The context object
+     * @private
+     */
+    function scrollPageBackward(ev, obj) {
+        obj.scrollPageBackward();
+        Event.preventDefault(ev);
+    }
+
+    /**
+     * Scroll the Carousel by a page forward.
+     *
+     * @method scrollPageForward
+     * @param {Event} ev The event object
+     * @param {Object} obj The context object
+     * @private
+     */
+    function scrollPageForward(ev, obj) {
+        obj.scrollPageForward();
+        Event.preventDefault(ev);
+    }
+
+    /**
+     * Set the selected item.
+     *
+     * @method setItemSelection
+     * @param {Number} newpos The index of the new position
+     * @param {Number} oldpos The index of the previous position
+     * @private
+     */
+     function setItemSelection(newpos, oldpos) {
+        var carousel = this,
+            cssClass   = carousel.CLASSES,
+            el,
+            firstItem  = carousel._firstItem,
+            isCircular = carousel.get("isCircular"),
+            numItems   = carousel.get("numItems"),
+            numVisible = carousel.get("numVisible"),
+            position   = oldpos,
+            sentinel   = firstItem + numVisible - 1;
+
+        if (position >= 0 && position < numItems) {
+            if (!JS.isUndefined(carousel._itemsTable.items[position])) {
+                el = Dom.get(carousel._itemsTable.items[position].id);
+                if (el) {
+                    Dom.removeClass(el, cssClass.SELECTED_ITEM);
+                }
+            }
+        }
+
+        if (JS.isNumber(newpos)) {
+            newpos = parseInt(newpos, 10);
+            newpos = JS.isNumber(newpos) ? newpos : 0;
+        } else {
+            newpos = firstItem;
+        }
+
+        if (JS.isUndefined(carousel._itemsTable.items[newpos])) {
+            newpos = getFirstVisibleForPosition.call(carousel, newpos);
+            carousel.scrollTo(newpos); // still loading the item
+        }
+
+        if (!JS.isUndefined(carousel._itemsTable.items[newpos])) {
+            el = Dom.get(carousel._itemsTable.items[newpos].id);
+            if (el) {
+                Dom.addClass(el, cssClass.SELECTED_ITEM);
+            }
+        }
+
+        if (newpos < firstItem || newpos > sentinel) { // out of focus
+            newpos = getFirstVisibleForPosition.call(carousel, newpos);
+            carousel.scrollTo(newpos);
+        }
+    }
+
+    /**
+     * Fire custom events for enabling/disabling navigation elements.
+     *
+     * @method syncNavigation
+     * @private
+     */
+    function syncNavigation() {
+        var attach   = false,
+            carousel = this,
+            cssClass = carousel.CLASSES,
+            i,
+            navigation,
+            sentinel;
+
+        // Don't do anything if the Carousel is not rendered
+        if (!carousel._hasRendered) {
+            return;
+        }
+
+        navigation = carousel.get("navigation");
+        sentinel   = carousel._firstItem + carousel.get("numVisible");
+
+        if (navigation.prev) {
+            if (carousel.get("numItems") === 0 || carousel._firstItem === 0) {
+                if (carousel.get("numItems") === 0 ||
+                   !carousel.get("isCircular")) {
+                    Event.removeListener(navigation.prev, "click",
+                            scrollPageBackward);
+                    Dom.addClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
+                    for (i = 0; i < carousel._navBtns.prev.length; i++) {
+                        carousel._navBtns.prev[i].setAttribute("disabled",
+                                "true");
+                    }
+                    carousel._prevEnabled = false;
+                } else {
+                    attach = !carousel._prevEnabled;
+                }
+            } else {
+                attach = !carousel._prevEnabled;
+            }
+
+            if (attach) {
+                Event.on(navigation.prev, "click", scrollPageBackward,
+                         carousel);
+                Dom.removeClass(navigation.prev, cssClass.FIRST_NAV_DISABLED);
+                for (i = 0; i < carousel._navBtns.prev.length; i++) {
+                    carousel._navBtns.prev[i].removeAttribute("disabled");
+                }
+                carousel._prevEnabled = true;
+            }
+        }
+
+        attach = false;
+        if (navigation.next) {
+            if (sentinel >= carousel.get("numItems")) {
+                if (!carousel.get("isCircular")) {
+                    Event.removeListener(navigation.next, "click",
+                            scrollPageForward);
+                    Dom.addClass(navigation.next, cssClass.DISABLED);
+                    for (i = 0; i < carousel._navBtns.next.length; i++) {
+                        carousel._navBtns.next[i].setAttribute("disabled",
+                                "true");
+                    }
+                    carousel._nextEnabled = false;
+                } else {
+                    attach = !carousel._nextEnabled;
+                }
+            } else {
+                attach = !carousel._nextEnabled;
+            }
+
+            if (attach) {
+                Event.on(navigation.next, "click", scrollPageForward,
+                         carousel);
+                Dom.removeClass(navigation.next, cssClass.DISABLED);
+                for (i = 0; i < carousel._navBtns.next.length; i++) {
+                    carousel._navBtns.next[i].removeAttribute("disabled");
+                }
+                carousel._nextEnabled = true;
+            }
+        }
+
+        carousel.fireEvent(navigationStateChangeEvent,
+                { next: carousel._nextEnabled, prev: carousel._prevEnabled });
+    }
+
+    /**
+     * Synchronize and redraw the Pager UI if necessary.
+     *
+     * @method syncPagerUi
+     * @private
+     */
+    function syncPagerUi(page) {
+        var carousel = this, numPages, numVisible;
+
+        // Don't do anything if the Carousel is not rendered
+        if (!carousel._hasRendered) {
+            return;
+        }
+
+        numVisible = carousel.get("numVisible");
+
+        if (!JS.isNumber(page)) {
+            page = Math.ceil(carousel.get("selectedItem") / numVisible);
+        }
+        numPages = Math.ceil(carousel.get("numItems") / numVisible);
+
+        carousel._pages.num = numPages;
+        carousel._pages.cur = page;
+
+        if (numPages > carousel.CONFIG.MAX_PAGER_BUTTONS) {
+            carousel._updatePagerMenu();
+        } else {
+            carousel._updatePagerButtons();
+        }
+    }
+
+    /**
+     * Handle UI update.
+     * Call the appropriate methods on events fired when an item is added, or
+     * removed for synchronizing the DOM.
+     *
+     * @method syncUi
+     * @param {Object} o The item that needs to be added or removed
+     * @private
+     */
+    function syncUi(o) {
+        var carousel = this;
+
+        if (!JS.isObject(o)) {
+            return;
+        }
+
+        switch (o.ev) {
+        case itemAddedEvent:
+            carousel._syncUiForItemAdd(o);
+            break;
+        case itemRemovedEvent:
+            carousel._syncUiForItemRemove(o);
+            break;
+        case loadItemsEvent:
+            carousel._syncUiForLazyLoading(o);
+            break;
+        }
+
+        carousel.fireEvent(uiUpdateEvent);
+    }
+
+    /**
+     * Update the state variables after scrolling the Carousel view port.
+     *
+     * @method updateStateAfterScroll
+     * @param {Integer} item The index to which the Carousel has scrolled to.
+     * @param {Integer} sentinel The last element in the view port.
+     * @private
+     */
+    function updateStateAfterScroll(item, sentinel) {
+        var carousel   = this,
+            page       = carousel.get("currentPage"),
+            newPage,
+            numPerPage = carousel.get("numVisible");
+
+        newPage = parseInt(carousel._firstItem / numPerPage, 10);
+        if (newPage != page) {
+            carousel.setAttributeConfig("currentPage", { value: newPage });
+            carousel.fireEvent(pageChangeEvent, newPage);
+        }
+
+        if (carousel.get("selectOnScroll")) {
+            if (carousel.get("selectedItem") != carousel._selectedItem) {
+                carousel.set("selectedItem", carousel._selectedItem);
+            }
+        }
+
+        clearTimeout(carousel._autoPlayTimer);
+        delete carousel._autoPlayTimer;
+        if (carousel.isAutoPlayOn()) {
+            carousel.startAutoPlay();
+        }
+
+        carousel.fireEvent(afterScrollEvent,
+                           { first: carousel._firstItem,
+                             last: sentinel },
+                           carousel);
+    }
+
+    /*
+     * Static members and methods of the Carousel component
+     */
+
+    /**
+     * Return the appropriate Carousel object based on the id associated with
+     * the Carousel element or false if none match.
+     * @method getById
+     * @public
+     * @static
+     */
+    Carousel.getById = function (id) {
+        return instances[id] ? instances[id].object : false;
+    };
+
+    YAHOO.extend(Carousel, YAHOO.util.Element, {
+
+        /*
+         * Internal variables used within the Carousel component
+         */
+
+        /**
+         * The Animation object.
+         *
+         * @property _animObj
+         * @private
+         */
+        _animObj: null,
+
+        /**
+         * The Carousel element.
+         *
+         * @property _carouselEl
+         * @private
+         */
+        _carouselEl: null,
+
+        /**
+         * The Carousel clipping container element.
+         *
+         * @property _clipEl
+         * @private
+         */
+        _clipEl: null,
+
+        /**
+         * The current first index of the Carousel.
+         *
+         * @property _firstItem
+         * @private
+         */
+        _firstItem: 0,
+
+        /**
+         * Does the Carousel element have focus?
+         *
+         * @property _hasFocus
+         * @private
+         */
+        _hasFocus: false,
+
+        /**
+         * Is the Carousel rendered already?
+         *
+         * @property _hasRendered
+         * @private
+         */
+        _hasRendered: false,
+
+        /**
+         * Is the animation still in progress?
+         *
+         * @property _isAnimationInProgress
+         * @private
+         */
+        _isAnimationInProgress: false,
+
+        /**
+         * Is the auto-scrolling of Carousel in progress?
+         *
+         * @property _isAutoPlayInProgress
+         * @private
+         */
+        _isAutoPlayInProgress: false,
+
+        /**
+         * The table of items in the Carousel.
+         * The numItems is the number of items in the Carousel, items being the
+         * array of items in the Carousel.  The size is the size of a single
+         * item in the Carousel.  It is cached here for efficiency (to avoid
+         * computing the size multiple times).
+         *
+         * @property _itemsTable
+         * @private
+         */
+        _itemsTable: null,
+
+        /**
+         * The Carousel navigation buttons.
+         *
+         * @property _navBtns
+         * @private
+         */
+        _navBtns: null,
+
+        /**
+         * The Carousel navigation.
+         *
+         * @property _navEl
+         * @private
+         */
+        _navEl: null,
+
+        /**
+         * Status of the next navigation item.
+         *
+         * @property _nextEnabled
+         * @private
+         */
+        _nextEnabled: true,
+
+        /**
+         * The Carousel pages structure.
+         * This is an object of the total number of pages and the current page.
+         *
+         * @property _pages
+         * @private
+         */
+        _pages: null,
+
+        /**
+         * Status of the previous navigation item.
+         *
+         * @property _prevEnabled
+         * @private
+         */
+        _prevEnabled: true,
+
+        /**
+         * Whether the Carousel size needs to be recomputed or not?
+         *
+         * @property _recomputeSize
+         * @private
+         */
+        _recomputeSize: true,
+
+        /*
+         * CSS classes used by the Carousel component
+         */
+
+        CLASSES: {
+
+            /**
+             * The class name of the Carousel navigation buttons.
+             *
+             * @property BUTTON
+             * @default "yui-carousel-button"
+             */
+            BUTTON: "yui-carousel-button",
+
+            /**
+             * The class name of the Carousel element.
+             *
+             * @property CAROUSEL
+             * @default "yui-carousel"
+             */
+            CAROUSEL: "yui-carousel",
+
+            /**
+             * The class name of the container of the items in the Carousel.
+             *
+             * @property CAROUSEL_EL
+             * @default "yui-carousel-element"
+             */
+            CAROUSEL_EL: "yui-carousel-element",
+
+            /**
+             * The class name of the Carousel's container element.
+             *
+             * @property CONTAINER
+             * @default "yui-carousel-container"
+             */
+            CONTAINER: "yui-carousel-container",
+
+            /**
+             * The class name of the Carousel's container element.
+             *
+             * @property CONTENT
+             * @default "yui-carousel-content"
+             */
+            CONTENT: "yui-carousel-content",
+
+            /**
+             * The class name of a disabled navigation button.
+             *
+             * @property DISABLED
+             * @default "yui-carousel-button-disabled"
+             */
+            DISABLED: "yui-carousel-button-disabled",
+
+            /**
+             * The class name of the first Carousel navigation button.
+             *
+             * @property FIRST_NAV
+             * @default " yui-carousel-first-button"
+             */
+            FIRST_NAV: " yui-carousel-first-button",
+
+            /**
+             * The class name of a first disabled navigation button.
+             *
+             * @property FIRST_NAV_DISABLED
+             * @default "yui-carousel-first-button-disabled"
+             */
+            FIRST_NAV_DISABLED: "yui-carousel-first-button-disabled",
+
+            /**
+             * The class name of a first page element.
+             *
+             * @property FIRST_PAGE
+             * @default "yui-carousel-nav-first-page"
+             */
+            FIRST_PAGE: "yui-carousel-nav-first-page",
+
+            /**
+             * The class name of the Carousel navigation button that has focus.
+             *
+             * @property FOCUSSED_BUTTON
+             * @default "yui-carousel-button-focus"
+             */
+            FOCUSSED_BUTTON: "yui-carousel-button-focus",
+
+            /**
+             * The class name of a horizontally oriented Carousel.
+             *
+             * @property HORIZONTAL
+             * @default "yui-carousel-horizontal"
+             */
+            HORIZONTAL: "yui-carousel-horizontal",
+
+            /**
+             * The element to be used as the progress indicator when the item
+             * is still being loaded.
+             *
+             * @property ITEM_LOADING
+             * @default The progress indicator (spinner) image CSS class
+             */
+            ITEM_LOADING: "yui-carousel-item-loading",
+
+            /**
+             * The class name that will be set if the Carousel adjusts itself
+             * for a minimum width.
+             *
+             * @property MIN_WIDTH
+             * @default "yui-carousel-min-width"
+             */
+            MIN_WIDTH: "yui-carousel-min-width",
+
+            /**
+             * The navigation element container class name.
+             *
+             * @property NAVIGATION
+             * @default "yui-carousel-nav"
+             */
+            NAVIGATION: "yui-carousel-nav",
+
+            /**
+             * The class name of the next Carousel navigation button.
+             *
+             * @property NEXT_NAV
+             * @default " yui-carousel-next-button"
+             */
+            NEXT_NAV: " yui-carousel-next-button",
+
+            /**
+             * The class name of the next navigation link. This variable is
+             * not only used for styling, but also for identifying the link
+             * within the Carousel container.
+             *
+             * @property NEXT_PAGE
+             * @default "yui-carousel-next"
+             */
+            NEXT_PAGE: "yui-carousel-next",
+
+            /**
+             * The class name for the navigation container for prev/next.
+             *
+             * @property NAV_CONTAINER
+             * @default "yui-carousel-buttons"
+             */
+            NAV_CONTAINER: "yui-carousel-buttons",
+
+            /**
+             * The class name of the focussed page navigation.  This class is
+             * specifically used for the ugly focus handling in Opera.
+             *
+             * @property PAGE_FOCUS
+             * @default "yui-carousel-nav-page-focus"
+             */
+            PAGE_FOCUS: "yui-carousel-nav-page-focus",
+
+            /**
+             * The class name of the previous navigation link. This variable
+             * is not only used for styling, but also for identifying the link
+             * within the Carousel container.
+             *
+             * @property PREV_PAGE
+             * @default "yui-carousel-prev"
+             */
+            PREV_PAGE: "yui-carousel-prev",
+
+            /**
+             * The class name of the selected item.
+             *
+             * @property SELECTED_ITEM
+             * @default "yui-carousel-item-selected"
+             */
+            SELECTED_ITEM: "yui-carousel-item-selected",
+
+            /**
+             * The class name of the selected paging navigation.
+             *
+             * @property SELECTED_NAV
+             * @default "yui-carousel-nav-page-selected"
+             */
+            SELECTED_NAV: "yui-carousel-nav-page-selected",
+
+            /**
+             * The class name of a vertically oriented Carousel.
+             *
+             * @property VERTICAL
+             * @default "yui-carousel-vertical"
+             */
+            VERTICAL: "yui-carousel-vertical",
+
+            /**
+             * The class name of the (vertical) Carousel's container element.
+             *
+             * @property VERTICAL_CONTAINER
+             * @default "yui-carousel-vertical-container"
+             */
+            VERTICAL_CONTAINER: "yui-carousel-vertical-container",
+
+            /**
+             * The class name of a visible Carousel.
+             *
+             * @property VISIBLE
+             * @default "yui-carousel-visible"
+             */
+            VISIBLE: "yui-carousel-visible"
+
+        },
+
+        /*
+         * Configuration attributes for configuring the Carousel component
+         */
+
+        CONFIG: {
+
+            /**
+             * The offset of the first visible item in the Carousel.
+             *
+             * @property FIRST_VISIBLE
+             * @default 0
+             */
+            FIRST_VISIBLE: 0,
+
+            /**
+             * The minimum width of the horizontal Carousel container to support
+             * the navigation buttons.
+             *
+             * @property HORZ_MIN_WIDTH
+             * @default 180
+             */
+            HORZ_MIN_WIDTH: 180,
+
+            /**
+             * The maximum number of pager buttons allowed beyond which the UI
+             * of the pager would be a drop-down of pages instead of buttons.
+             *
+             * @property MAX_PAGER_BUTTONS
+             * @default 5
+             */
+            MAX_PAGER_BUTTONS: 5,
+
+            /**
+             * The minimum width of the vertical Carousel container to support
+             * the navigation buttons.
+             *
+             * @property VERT_MIN_WIDTH
+             * @default 99
+             */
+            VERT_MIN_WIDTH: 99,
+
+            /**
+             * The number of visible items in the Carousel.
+             *
+             * @property NUM_VISIBLE
+             * @default 3
+             */
+            NUM_VISIBLE: 3
+
+        },
+
+        /*
+         * Internationalizable strings in the Carousel component
+         */
+
+        STRINGS: {
+
+            /**
+             * The content to be used as the progress indicator when the item
+             * is still being loaded.
+             *
+             * @property ITEM_LOADING_CONTENT
+             * @default "Loading"
+             */
+            ITEM_LOADING_CONTENT: "Loading",
+
+            /**
+             * The next navigation button name/text.
+             *
+             * @property NEXT_BUTTON_TEXT
+             * @default "Next Page"
+             */
+            NEXT_BUTTON_TEXT: "Next Page",
+
+            /**
+             * The prefix text for the pager in case the UI is a drop-down.
+             *
+             * @property PAGER_PREFIX_TEXT
+             * @default "Go to page "
+             */
+            PAGER_PREFIX_TEXT: "Go to page ",
+
+            /**
+             * The previous navigation button name/text.
+             *
+             * @property PREVIOUS_BUTTON_TEXT
+             * @default "Previous Page"
+             */
+            PREVIOUS_BUTTON_TEXT: "Previous Page"
+
+        },
+
+        /*
+         * Public methods of the Carousel component
+         */
+
+        /**
+         * Insert or append an item to the Carousel.
+         *
+         * @method addItem
+         * @public
+         * @param item {String | Object | HTMLElement} The item to be appended
+         * to the Carousel. If the parameter is a string, it is assumed to be
+         * the content of the newly created item. If the parameter is an
+         * object, it is assumed to supply the content and an optional class
+         * and an optional id of the newly created item.
+         * @param index {Number} optional The position to where in the list
+         * (starts from zero).
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        addItem: function (item, index) {
+            var carousel = this,
+                className,
+                content,
+                elId,
+                numItems = carousel.get("numItems");
+
+            if (!item) {
+                return false;
+            }
+
+            if (JS.isString(item) || item.nodeName) {
+                content = item.nodeName ? item.innerHTML : item;
+            } else if (JS.isObject(item)) {
+                content = item.content;
+            } else {
+                return false;
+            }
+
+            className = item.className || "";
+            elId      = item.id ? item.id : Dom.generateId();
+
+            if (JS.isUndefined(index)) {
+                carousel._itemsTable.items.push({
+                        item      : content,
+                        className : className,
+                        id        : elId
+                });
+            } else {
+                if (index < 0 || index >= numItems) {
+                    return false;
+                }
+                carousel._itemsTable.items.splice(index, 0, {
+                        item      : content,
+                        className : className,
+                        id        : elId
+                });
+            }
+            carousel._itemsTable.numItems++;
+
+            if (numItems < carousel._itemsTable.items.length) {
+                carousel.set("numItems", carousel._itemsTable.items.length);
+            }
+
+            carousel.fireEvent(itemAddedEvent, { pos: index, ev: itemAddedEvent });
+
+            return true;
+        },
+
+        /**
+         * Insert or append multiple items to the Carousel.
+         *
+         * @method addItems
+         * @public
+         * @param items {Array} An array of items to be added with each item
+         * representing an item, index pair [{item, index}, ...]
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        addItems: function (items) {
+            var i, n, rv = true;
+
+            if (!JS.isArray(items)) {
+                return false;
+            }
+
+            for (i = 0, n = items.length; i < n; i++) {
+                if (this.addItem(items[i][0], items[i][1]) === false) {
+                    rv = false;
+                }
+            }
+
+            return rv;
+        },
+
+        /**
+         * Remove focus from the Carousel.
+         *
+         * @method blur
+         * @public
+         */
+        blur: function () {
+            this._carouselEl.blur();
+            this.fireEvent(blurEvent);
+        },
+
+        /**
+         * Clears the items from Carousel.
+         *
+         * @method clearItems
+         * public
+         */
+        clearItems: function () {
+            var carousel = this, n = carousel.get("numItems");
+
+            while (n > 0) {
+                if (!carousel.removeItem(0)) {
+                }
+                /*
+                    For dynamic loading, the numItems may be much larger than
+                    the actual number of items in the table.  So, set the
+                    numItems to zero, and break out of the loop if the table
+                    is already empty.
+                 */
+                if (carousel._itemsTable.numItems === 0) {
+                    carousel.set("numItems", 0);
+                    break;
+                }
+                n--;
+            }
+
+            carousel.fireEvent(allItemsRemovedEvent);
+        },
+
+        /**
+         * Set focus on the Carousel.
+         *
+         * @method focus
+         * @public
+         */
+        focus: function () {
+            var carousel = this,
+                first,
+                focusEl,
+                isSelectionInvisible,
+                itemsTable,
+                last,
+                numVisible,
+                selectOnScroll,
+                selected,
+                selItem;
+
+            // Don't do anything if the Carousel is not rendered
+            if (!carousel._hasRendered) {
+                return;
+            }
+
+            if (carousel.isAnimating()) {
+                // this messes up real bad!
+                return;
+            }
+
+            selItem              = carousel.get("selectedItem");
+            numVisible           = carousel.get("numVisible");
+            selectOnScroll       = carousel.get("selectOnScroll");
+            selected             = (selItem >= 0) ?
+                                   carousel.getItem(selItem) : null;
+            first                = carousel.get("firstVisible");
+            last                 = first + numVisible - 1;
+            isSelectionInvisible = (selItem < first || selItem > last);
+            focusEl              = (selected && selected.id) ?
+                                   Dom.get(selected.id) : null;
+            itemsTable           = carousel._itemsTable;
+
+            if (!selectOnScroll && isSelectionInvisible) {
+                focusEl = (itemsTable && itemsTable.items &&
+                           itemsTable.items[first]) ?
+                        Dom.get(itemsTable.items[first].id) : null;
+            }
+
+            if (focusEl) {
+                try {
+                    focusEl.focus();
+                } catch (ex) {
+                    // ignore focus errors
+                }
+            }
+
+            carousel.fireEvent(focusEvent);
+        },
+
+        /**
+         * Hide the Carousel.
+         *
+         * @method hide
+         * @public
+         */
+        hide: function () {
+            var carousel = this;
+
+            if (carousel.fireEvent(beforeHideEvent) !== false) {
+                carousel.removeClass(carousel.CLASSES.VISIBLE);
+                carousel.fireEvent(hideEvent);
+            }
+        },
+
+        /**
+         * Initialize the Carousel.
+         *
+         * @method init
+         * @public
+         * @param el {HTMLElement | String} The html element that represents
+         * the Carousel container.
+         * @param attrs {Object} The set of configuration attributes for
+         * creating the Carousel.
+         */
+        init: function (el, attrs) {
+            var carousel = this,
+                elId     = el,  // save for a rainy day
+                parse    = false;
+
+            if (!el) {
+                return;
+            }
+
+            carousel._hasRendered = false;
+            carousel._navBtns     = { prev: [], next: [] };
+            carousel._pages       = { el: null, num: 0, cur: 0 };
+            carousel._itemsTable  = { loading: {}, numItems: 0,
+                                      items: [], size: 0 };
+
+
+            if (JS.isString(el)) {
+                el = Dom.get(el);
+            } else if (!el.nodeName) {
+                return;
+            }
+
+            Carousel.superclass.init.call(carousel, el, attrs);
+
+            if (el) {
+                if (!el.id) {   // in case the HTML element is passed
+                    el.setAttribute("id", Dom.generateId());
+                }
+                parse = carousel._parseCarousel(el);
+                if (!parse) {
+                    carousel._createCarousel(elId);
+                }
+            } else {
+                el = carousel._createCarousel(elId);
+            }
+            elId = el.id;
+
+            carousel.initEvents();
+
+            if (parse) {
+                carousel._parseCarouselItems();
+            }
+
+            if (!attrs || typeof attrs.isVertical == "undefined") {
+                carousel.set("isVertical", false);
+            }
+
+            carousel._parseCarouselNavigation(el);
+            carousel._navEl = carousel._setupCarouselNavigation();
+
+            instances[elId] = { object: carousel };
+
+            carousel._loadItems();
+        },
+
+        /**
+         * Initialize the configuration attributes used to create the Carousel.
+         *
+         * @method initAttributes
+         * @public
+         * @param attrs {Object} The set of configuration attributes for
+         * creating the Carousel.
+         */
+        initAttributes: function (attrs) {
+            var carousel = this;
+
+            attrs = attrs || {};
+            Carousel.superclass.initAttributes.call(carousel, attrs);
+
+            /**
+             * @attribute carouselEl
+             * @description The type of the Carousel element.
+             * @default OL
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("carouselEl", {
+                    validator : JS.isString,
+                    value     : attrs.carouselEl || "OL"
+            });
+
+            /**
+             * @attribute carouselItemEl
+             * @description The type of the list of items within the Carousel.
+             * @default LI
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("carouselItemEl", {
+                    validator : JS.isString,
+                    value     : attrs.carouselItemEl || "LI"
+            });
+
+            /**
+             * @attribute currentPage
+             * @description The current page number (read-only.)
+             * @type Number
+             */
+            carousel.setAttributeConfig("currentPage", {
+                    readOnly : true,
+                    value    : 0
+            });
+
+            /**
+             * @attribute firstVisible
+             * @description The index to start the Carousel from (indexes begin
+             * from zero)
+             * @default 0
+             * @type Number
+             */
+            carousel.setAttributeConfig("firstVisible", {
+                    method    : carousel._setFirstVisible,
+                    validator : carousel._validateFirstVisible,
+                    value     :
+                        attrs.firstVisible || carousel.CONFIG.FIRST_VISIBLE
+            });
+
+            /**
+             * @attribute selectOnScroll
+             * @description Set this to true to automatically set focus to
+             * follow scrolling in the Carousel.
+             * @default true
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("selectOnScroll", {
+                    validator : JS.isBoolean,
+                    value     : attrs.selectOnScroll || true
+            });
+
+            /**
+             * @attribute numVisible
+             * @description The number of visible items in the Carousel's
+             * viewport.
+             * @default 3
+             * @type Number
+             */
+            carousel.setAttributeConfig("numVisible", {
+                    method    : carousel._setNumVisible,
+                    validator : carousel._validateNumVisible,
+                    value     : attrs.numVisible || carousel.CONFIG.NUM_VISIBLE
+            });
+
+            /**
+             * @attribute numItems
+             * @description The number of items in the Carousel.
+             * @type Number
+             */
+            carousel.setAttributeConfig("numItems", {
+                    method    : carousel._setNumItems,
+                    validator : carousel._validateNumItems,
+                    value     : carousel._itemsTable.numItems
+            });
+
+            /**
+             * @attribute scrollIncrement
+             * @description The number of items to scroll by for arrow keys.
+             * @default 1
+             * @type Number
+             */
+            carousel.setAttributeConfig("scrollIncrement", {
+                    validator : carousel._validateScrollIncrement,
+                    value     : attrs.scrollIncrement || 1
+            });
+
+            /**
+             * @attribute selectedItem
+             * @description The index of the selected item.
+             * @type Number
+             */
+            carousel.setAttributeConfig("selectedItem", {
+                    method    : carousel._setSelectedItem,
+                    validator : JS.isNumber,
+                    value     : -1
+            });
+
+            /**
+             * @attribute revealAmount
+             * @description The percentage of the item to be revealed on each
+             * side of the Carousel (before and after the first and last item
+             * in the Carousel's viewport.)
+             * @default 0
+             * @type Number
+             */
+            carousel.setAttributeConfig("revealAmount", {
+                    method    : carousel._setRevealAmount,
+                    validator : carousel._validateRevealAmount,
+                    value     : attrs.revealAmount || 0
+            });
+
+            /**
+             * @attribute isCircular
+             * @description Set this to true to wrap scrolling of the contents
+             * in the Carousel.
+             * @default false
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("isCircular", {
+                    validator : JS.isBoolean,
+                    value     : attrs.isCircular || false
+            });
+
+            /**
+             * @attribute isVertical
+             * @description True if the orientation of the Carousel is vertical
+             * @default false
+             * @type Boolean
+             */
+            carousel.setAttributeConfig("isVertical", {
+                    method    : carousel._setOrientation,
+                    validator : JS.isBoolean,
+                    value     : attrs.isVertical || false
+            });
+
+            /**
+             * @attribute navigation
+             * @description The set of navigation controls for Carousel
+             * @default <br>
+             * { prev: null, // the previous navigation element<br>
+             *   next: null } // the next navigation element
+             * @type Object
+             */
+            carousel.setAttributeConfig("navigation", {
+                    method    : carousel._setNavigation,
+                    validator : carousel._validateNavigation,
+                    value     :
+                        attrs.navigation || {prev: null,next: null,page: null}
+            });
+
+            /**
+             * @attribute animation
+             * @description The optional animation attributes for the Carousel.
+             * @default <br>
+             * { speed: 0, // the animation speed (in seconds)<br>
+             *   effect: null } // the animation effect (like
+             *   YAHOO.util.Easing.easeOut)
+             * @type Object
+             */
+            carousel.setAttributeConfig("animation", {
+                    validator : carousel._validateAnimation,
+                    value     : attrs.animation || { speed: 0, effect: null }
+            });
+
+            /**
+             * @attribute autoPlay
+             * @description Set this to time in milli-seconds to have the
+             * Carousel automatically scroll the contents.
+             * @type Number
+             * @deprecated Use autoPlayInterval instead.
+             */
+            carousel.setAttributeConfig("autoPlay", {
+                    validator : JS.isNumber,
+                    value     : attrs.autoPlay || 0
+            });
+
+            /**
+             * @attribute autoPlayInterval
+             * @description The delay in milli-seconds for scrolling the
+             * Carousel during auto-play.
+             * Note: The startAutoPlay() method needs to be invoked to trigger
+             * automatic scrolling of Carousel.
+             * @type Number
+             */
+            carousel.setAttributeConfig("autoPlayInterval", {
+                    validator : JS.isNumber,
+                    value     : attrs.autoPlayInterval || 0
+            });
+        },
+
+        /**
+         * Initialize and bind the event handlers.
+         *
+         * @method initEvents
+         * @public
+         */
+        initEvents: function () {
+            var carousel = this,
+                cssClass = carousel.CLASSES,
+                focussedLi;
+
+            carousel.on("keydown", carousel._keyboardEventHandler);
+
+            carousel.on(afterScrollEvent, syncNavigation);
+
+            carousel.on(itemAddedEvent, syncUi);
+
+            carousel.on(itemRemovedEvent, syncUi);
+
+            carousel.on(itemSelectedEvent, function () {
+                if (carousel._hasFocus) {
+                    carousel.focus();
+                }
+            });
+
+            carousel.on(loadItemsEvent, syncUi);
+
+            carousel.on(allItemsRemovedEvent, function (ev) {
+                carousel.scrollTo(0);
+                syncNavigation.call(carousel);
+                syncPagerUi.call(carousel);
+            });
+
+            carousel.on(pageChangeEvent, syncPagerUi, carousel);
+
+            carousel.on(renderEvent, function (ev) {
+                carousel.set("selectedItem", carousel.get("firstVisible"));
+                syncNavigation.call(carousel, ev);
+                syncPagerUi.call(carousel, ev);
+                carousel._setClipContainerSize();
+            });
+
+            carousel.on("selectedItemChange", function (ev) {
+                setItemSelection.call(carousel, ev.newValue, ev.prevValue);
+                if (ev.newValue >= 0) {
+                    carousel._updateTabIndex(
+                            carousel.getElementForItem(ev.newValue));
+                }
+                carousel.fireEvent(itemSelectedEvent, ev.newValue);
+            });
+
+            carousel.on(uiUpdateEvent, function (ev) {
+                syncNavigation.call(carousel, ev);
+                syncPagerUi.call(carousel, ev);
+            });
+
+            carousel.on("firstVisibleChange", function (ev) {
+                if (!carousel.get("selectOnScroll")) {
+                    if (ev.newValue >= 0) {
+                        carousel._updateTabIndex(
+                                carousel.getElementForItem(ev.newValue));
+                    }
+                }
+            });
+
+            // Handle item selection on mouse click
+            carousel.on("click", function (ev) {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+                carousel._itemClickHandler(ev);
+                carousel._pagerClickHandler(ev);
+            });
+
+            // Restore the focus on the navigation buttons
+
+            Event.onFocus(carousel.get("element"), function (ev, obj) {
+                var target = Event.getTarget(ev);
+
+                if (target && target.nodeName.toUpperCase() == "A" &&
+                    Dom.getAncestorByClassName(target, cssClass.NAVIGATION)) {
+                    if (focussedLi) {
+                        Dom.removeClass(focussedLi, cssClass.PAGE_FOCUS);
+                    }
+                    focussedLi = target.parentNode;
+                    Dom.addClass(focussedLi, cssClass.PAGE_FOCUS);
+                } else {
+                    if (focussedLi) {
+                        Dom.removeClass(focussedLi, cssClass.PAGE_FOCUS);
+                    }
+                }
+
+                obj._hasFocus = true;
+                obj._updateNavButtons(Event.getTarget(ev), true);
+            }, carousel);
+
+            Event.onBlur(carousel.get("element"), function (ev, obj) {
+                obj._hasFocus = false;
+                obj._updateNavButtons(Event.getTarget(ev), false);
+            }, carousel);
+        },
+
+        /**
+         * Return true if the Carousel is still animating, or false otherwise.
+         *
+         * @method isAnimating
+         * @return {Boolean} Return true if animation is still in progress, or
+         * false otherwise.
+         * @public
+         */
+        isAnimating: function () {
+            return this._isAnimationInProgress;
+        },
+
+        /**
+         * Return true if the auto-scrolling of Carousel is "on", or false
+         * otherwise.
+         *
+         * @method isAutoPlayOn
+         * @return {Boolean} Return true if autoPlay is "on", or false
+         * otherwise.
+         * @public
+         */
+        isAutoPlayOn: function () {
+            return this._isAutoPlayInProgress;
+        },
+
+        /**
+         * Return the carouselItemEl at index or null if the index is not
+         * found.
+         *
+         * @method getElementForItem
+         * @param index {Number} The index of the item to be returned
+         * @return {Element} Return the item at index or null if not found
+         * @public
+         */
+        getElementForItem: function (index) {
+            var carousel = this;
+
+            if (index < 0 || index >= carousel.get("numItems")) {
+                return null;
+            }
+
+            // TODO: may be cache the item
+            if (carousel._itemsTable.numItems > index) {
+                if (!JS.isUndefined(carousel._itemsTable.items[index])) {
+                    return Dom.get(carousel._itemsTable.items[index].id);
+                }
+            }
+
+            return null;
+        },
+
+        /**
+         * Return the carouselItemEl for all items in the Carousel.
+         *
+         * @method getElementForItems
+         * @return {Array} Return all the items
+         * @public
+         */
+        getElementForItems: function () {
+            var carousel = this, els = [], i;
+
+            for (i = 0; i < carousel._itemsTable.numItems; i++) {
+                els.push(carousel.getElementForItem(i));
+            }
+
+            return els;
+        },
+
+        /**
+         * Return the item at index or null if the index is not found.
+         *
+         * @method getItem
+         * @param index {Number} The index of the item to be returned
+         * @return {Object} Return the item at index or null if not found
+         * @public
+         */
+        getItem: function (index) {
+            var carousel = this;
+
+            if (index < 0 || index >= carousel.get("numItems")) {
+                return null;
+            }
+
+            if (carousel._itemsTable.numItems > index) {
+                if (!JS.isUndefined(carousel._itemsTable.items[index])) {
+                    return carousel._itemsTable.items[index];
+                }
+            }
+
+            return null;
+        },
+
+        /**
+         * Return all items as an array.
+         *
+         * @method getItems
+         * @return {Array} Return all items in the Carousel
+         * @public
+         */
+        getItems: function (index) {
+            return this._itemsTable.items;
+        },
+
+        /**
+         * Return the position of the Carousel item that has the id "id", or -1
+         * if the id is not found.
+         *
+         * @method getItemPositionById
+         * @param index {Number} The index of the item to be returned
+         * @public
+         */
+        getItemPositionById: function (id) {
+            var carousel = this, i = 0, n = carousel._itemsTable.numItems;
+
+            while (i < n) {
+                if (!JS.isUndefined(carousel._itemsTable.items[i])) {
+                    if (carousel._itemsTable.items[i].id == id) {
+                        return i;
+                    }
+                }
+                i++;
+            }
+
+            return -1;
+        },
+
+        /**
+         * Return all visible items as an array.
+         *
+         * @method getVisibleItems
+         * @return {Array} The array of visible items
+         * @public
+         */
+        getVisibleItems: function () {
+            var carousel = this,
+                i        = carousel.get("firstVisible"),
+                n        = i + carousel.get("numVisible"),
+                r        = [];
+
+            while (i < n) {
+                r.push(carousel.getElementForItem(i));
+                i++;
+            }
+
+            return r;
+        },
+
+        /**
+         * Remove an item at index from the Carousel.
+         *
+         * @method removeItem
+         * @public
+         * @param index {Number} The position to where in the list (starts from
+         * zero).
+         * @return {Boolean} Return true on success, false otherwise
+         */
+        removeItem: function (index) {
+            var carousel = this,
+                item,
+                num      = carousel.get("numItems");
+
+            if (index < 0 || index >= num) {
+                return false;
+            }
+
+            item = carousel._itemsTable.items.splice(index, 1);
+            if (item && item.length == 1) {
+                carousel._itemsTable.numItems--;
+                carousel.set("numItems", num - 1);
+
+                carousel.fireEvent(itemRemovedEvent,
+                        { item: item[0], pos: index, ev: itemRemovedEvent });
+                return true;
+            }
+
+            return false;
+        },
+
+        /**
+         * Render the Carousel.
+         *
+         * @method render
+         * @public
+         * @param appendTo {HTMLElement | String} The element to which the
+         * Carousel should be appended prior to rendering.
+         * @return {Boolean} Status of the operation
+         */
+        render: function (appendTo) {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            carousel.addClass(cssClass.CAROUSEL);
+
+            if (!carousel._clipEl) {
+                carousel._clipEl = carousel._createCarouselClip();
+                carousel._clipEl.appendChild(carousel._carouselEl);
+            }
+
+            if (appendTo) {
+                carousel.appendChild(carousel._clipEl);
+                carousel.appendTo(appendTo);
+            } else {
+                if (!Dom.inDocument(carousel.get("element"))) {
+                    return false;
+                }
+                carousel.appendChild(carousel._clipEl);
+            }
+
+            if (carousel.get("isVertical")) {
+                carousel.addClass(cssClass.VERTICAL);
+            } else {
+                carousel.addClass(cssClass.HORIZONTAL);
+            }
+
+            if (carousel.get("numItems") < 1) {
+                return false;
+            }
+
+            carousel._refreshUi();
+
+            return true;
+        },
+
+        /**
+         * Scroll the Carousel by an item backward.
+         *
+         * @method scrollBackward
+         * @public
+         */
+        scrollBackward: function () {
+            var carousel = this;
+
+            carousel.scrollTo(carousel._firstItem -
+                              carousel.get("scrollIncrement"));
+        },
+
+        /**
+         * Scroll the Carousel by an item forward.
+         *
+         * @method scrollForward
+         * @public
+         */
+        scrollForward: function () {
+            var carousel = this;
+
+            carousel.scrollTo(carousel._firstItem +
+                              carousel.get("scrollIncrement"));
+        },
+
+        /**
+         * Scroll the Carousel by a page backward.
+         *
+         * @method scrollPageBackward
+         * @public
+         */
+        scrollPageBackward: function () {
+            var carousel = this,
+                item     = carousel._firstItem - carousel.get("numVisible");
+
+            if (carousel.get("selectOnScroll")) {
+                carousel._selectedItem = carousel._getSelectedItem(item);
+            } else {
+                item = carousel._getValidIndex(item);
+            }
+            carousel.scrollTo(item);
+        },
+
+        /**
+         * Scroll the Carousel by a page forward.
+         *
+         * @method scrollPageForward
+         * @public
+         */
+        scrollPageForward: function () {
+            var carousel = this,
+                item     = carousel._firstItem + carousel.get("numVisible");
+
+            if (carousel.get("selectOnScroll")) {
+                carousel._selectedItem = carousel._getSelectedItem(item);
+            } else {
+                item = carousel._getValidIndex(item);
+            }
+            carousel.scrollTo(item);
+        },
+
+        /**
+         * Scroll the Carousel to make the item the first visible item.
+         *
+         * @method scrollTo
+         * @public
+         * @param item Number The index of the element to position at.
+         * @param dontSelect Boolean True if select should be avoided
+         */
+        scrollTo: function (item, dontSelect) {
+            var carousel   = this,
+                animate, animCfg, isCircular, delta, direction, firstItem,
+                numItems, numPerPage, offset, page, rv, sentinel,
+                stopAutoScroll;
+
+            if (JS.isUndefined(item) || item == carousel._firstItem ||
+                carousel.isAnimating()) {
+                return;         // nothing to do!
+            }
+
+            animCfg        = carousel.get("animation");
+            isCircular     = carousel.get("isCircular");
+            firstItem      = carousel._firstItem;
+            numItems       = carousel.get("numItems");
+            numPerPage     = carousel.get("numVisible");
+            page           = carousel.get("currentPage");
+            stopAutoScroll = function () {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+            };
+
+            if (item < 0) {
+                if (isCircular) {
+                    item = numItems + item;
+                } else {
+                    stopAutoScroll.call(carousel);
+                    return;
+                }
+            } else if (numItems > 0 && item > numItems - 1) {
+                if (carousel.get("isCircular")) {
+                    item = numItems - item;
+                } else {
+                    stopAutoScroll.call(carousel);
+                    return;
+                }
+            }
+
+            direction = (carousel._firstItem > item) ? "backward" : "forward";
+
+            sentinel  = firstItem + numPerPage;
+            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
+            rv = carousel.fireEvent(beforeScrollEvent,
+                    { dir: direction, first: firstItem, last: sentinel });
+            if (rv === false) { // scrolling is prevented
+                return;
+            }
+
+            carousel.fireEvent(beforePageChangeEvent, { page: page });
+
+            delta = firstItem - item; // yes, the delta is reverse
+            carousel._firstItem = item;
+            carousel.set("firstVisible", item);
+
+
+            carousel._loadItems(); // do we have all the items to display?
+
+            sentinel  = item + numPerPage;
+            sentinel  = (sentinel > numItems - 1) ? numItems - 1 : sentinel;
+
+            offset    = getScrollOffset.call(carousel, delta);
+
+            animate   = animCfg.speed > 0;
+
+            if (animate) {
+                carousel._animateAndSetCarouselOffset(offset, item, sentinel,
+                        dontSelect);
+            } else {
+                carousel._setCarouselOffset(offset);
+                updateStateAfterScroll.call(carousel, item, sentinel);
+            }
+        },
+
+        /**
+         * Select the previous item in the Carousel.
+         *
+         * @method selectPreviousItem
+         * @public
+         */
+        selectPreviousItem: function () {
+            var carousel = this,
+                newpos   = 0,
+                selected = carousel.get("selectedItem");
+
+            if (selected == this._firstItem) {
+                newpos = selected - carousel.get("numVisible");
+                carousel._selectedItem = carousel._getSelectedItem(selected-1);
+                carousel.scrollTo(newpos);
+            } else {
+                newpos = carousel.get("selectedItem") -
+                         carousel.get("scrollIncrement");
+                carousel.set("selectedItem",carousel._getSelectedItem(newpos));
+            }
+        },
+
+        /**
+         * Select the next item in the Carousel.
+         *
+         * @method selectNextItem
+         * @public
+         */
+        selectNextItem: function () {
+            var carousel = this, newpos = 0;
+
+            newpos = carousel.get("selectedItem") +
+                     carousel.get("scrollIncrement");
+            carousel.set("selectedItem", carousel._getSelectedItem(newpos));
+        },
+
+        /**
+         * Display the Carousel.
+         *
+         * @method show
+         * @public
+         */
+        show: function () {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            if (carousel.fireEvent(beforeShowEvent) !== false) {
+                carousel.addClass(cssClass.VISIBLE);
+                carousel.fireEvent(showEvent);
+            }
+        },
+
+        /**
+         * Start auto-playing the Carousel.
+         *
+         * @method startAutoPlay
+         * @public
+         */
+        startAutoPlay: function () {
+            var carousel = this, timer;
+
+            if (JS.isUndefined(carousel._autoPlayTimer)) {
+                timer = carousel.get("autoPlayInterval");
+                if (timer <= 0) {
+                    return;
+                }
+                carousel._isAutoPlayInProgress = true;
+                carousel.fireEvent(startAutoPlayEvent);
+                carousel._autoPlayTimer = setTimeout(function () {
+                    carousel._autoScroll();
+                }, timer);
+            }
+        },
+
+        /**
+         * Stop auto-playing the Carousel.
+         *
+         * @method stopAutoPlay
+         * @public
+         */
+        stopAutoPlay: function () {
+            var carousel = this;
+
+            if (!JS.isUndefined(carousel._autoPlayTimer)) {
+                clearTimeout(carousel._autoPlayTimer);
+                delete carousel._autoPlayTimer;
+                carousel._isAutoPlayInProgress = false;
+                carousel.fireEvent(stopAutoPlayEvent);
+            }
+        },
+
+        /**
+         * Return the string representation of the Carousel.
+         *
+         * @method toString
+         * @public
+         * @return {String}
+         */
+        toString: function () {
+            return WidgetName + (this.get ? " (#" + this.get("id") + ")" : "");
+        },
+
+        /*
+         * Protected methods of the Carousel component
+         */
+
+        /**
+         * Set the Carousel offset to the passed offset after animating.
+         *
+         * @method _animateAndSetCarouselOffset
+         * @param {Integer} offset The offset to which the Carousel has to be
+         * scrolled to.
+         * @param {Integer} item The index to which the Carousel will scroll.
+         * @param {Integer} sentinel The last element in the view port.
+         * @protected
+         */
+        _animateAndSetCarouselOffset: function (offset, item, sentinel) {
+            var carousel = this,
+                animCfg  = carousel.get("animation"),
+                animObj  = null;
+
+            if (carousel.get("isVertical")) {
+                animObj = new YAHOO.util.Motion(carousel._carouselEl,
+                        { points: { by: [0, offset] } },
+                        animCfg.speed, animCfg.effect);
+            } else {
+                animObj = new YAHOO.util.Motion(carousel._carouselEl,
+                        { points: { by: [offset, 0] } },
+                        animCfg.speed, animCfg.effect);
+            }
+
+            carousel._isAnimationInProgress = true;
+            animObj.onComplete.subscribe(carousel._animationCompleteHandler,
+                                         { scope: carousel, item: item,
+                                           last: sentinel });
+            animObj.animate();
+        },
+
+        /**
+         * Handle the animation complete event.
+         *
+         * @method _animationCompleteHandler
+         * @param {Event} ev The event.
+         * @param {Array} p The event parameters.
+         * @param {Object} o The object that has the state of the Carousel
+         * @protected
+         */
+        _animationCompleteHandler: function (ev, p, o) {
+            o.scope._isAnimationInProgress = false;
+            updateStateAfterScroll.call(o.scope, o.item, o.last);
+        },
+
+        /**
+         * Automatically scroll the contents of the Carousel.
+         * @method _autoScroll
+         * @protected
+         */
+        _autoScroll: function() {
+            var carousel  = this,
+                currIndex = carousel._firstItem,
+                index;
+
+            if (currIndex >= carousel.get("numItems") - 1) {
+                if (carousel.get("isCircular")) {
+                    index = 0;
+                } else {
+                    carousel.stopAutoPlay();
+                }
+            } else {
+                index = currIndex + carousel.get("numVisible");
+            }
+
+            carousel._selectedItem = carousel._getSelectedItem(index);
+            carousel.scrollTo.call(carousel, index);
+        },
+
+        /**
+         * Create the Carousel.
+         *
+         * @method createCarousel
+         * @param elId {String} The id of the element to be created
+         * @protected
+         */
+        _createCarousel: function (elId) {
+            var carousel = this,
+                cssClass = carousel.CLASSES,
+                el       = Dom.get(elId);
+
+            if (!el) {
+                el = createElement("DIV", {
+                        className : cssClass.CAROUSEL,
+                        id        : elId
+                });
+            }
+
+            if (!carousel._carouselEl) {
+                carousel._carouselEl=createElement(carousel.get("carouselEl"),
+                        { className: cssClass.CAROUSEL_EL });
+            }
+
+            return el;
+        },
+
+        /**
+         * Create the Carousel clip container.
+         *
+         * @method createCarouselClip
+         * @protected
+         */
+        _createCarouselClip: function () {
+            return createElement("DIV", { className: this.CLASSES.CONTENT });
+        },
+
+        /**
+         * Create the Carousel item.
+         *
+         * @method createCarouselItem
+         * @param obj {Object} The attributes of the element to be created
+         * @protected
+         */
+        _createCarouselItem: function (obj) {
+            return createElement(this.get("carouselItemEl"), {
+                    className : obj.className,
+                    content   : obj.content,
+                    id        : obj.id
+            });
+        },
+
+        /**
+         * Return a valid item for a possibly out of bounds index considering
+         * the isCircular property.
+         *
+         * @method _getValidIndex
+         * @param index {Number} The index of the item to be returned
+         * @return {Object} Return a valid item index
+         * @protected
+         */
+        _getValidIndex: function (index) {
+            var carousel   = this,
+                isCircular = carousel.get("isCircular"),
+                numItems   = carousel.get("numItems"),
+                sentinel   = numItems - 1;
+
+            if (index < 0) {
+                index = isCircular ? numItems + index : 0;
+            } else if (index > sentinel) {
+                index = isCircular ? index - numItems : sentinel;
+            }
+
+            return index;
+        },
+
+        /**
+         * Get the value for the selected item.
+         *
+         * @method _getSelectedItem
+         * @param val {Number} The new value for "selected" item
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _getSelectedItem: function (val) {
+            var carousel   = this,
+                isCircular = carousel.get("isCircular"),
+                numItems   = carousel.get("numItems"),
+                sentinel   = numItems - 1;
+
+            if (val < 0) {
+                if (isCircular) {
+                    val = numItems + val;
+                } else {
+                    val = carousel.get("selectedItem");
+                }
+            } else if (val > sentinel) {
+                if (isCircular) {
+                    val = val - numItems;
+                } else {
+                    val = carousel.get("selectedItem");
+                }
+            }
+
+            return val;
+        },
+
+        /**
+         * The "click" handler for the item.
+         *
+         * @method _itemClickHandler
+         * @param {Event} ev The event object
+         * @protected
+         */
+        _itemClickHandler: function (ev) {
+            var carousel  = this,
+                container = carousel.get("element"),
+                el,
+                item,
+                target    = YAHOO.util.Event.getTarget(ev);
+
+            while (target && target != container &&
+                   target.id != carousel._carouselEl) {
+                el = target.nodeName;
+                if (el.toUpperCase() == carousel.get("carouselItemEl")) {
+                    break;
+                }
+                target = target.parentNode;
+            }
+
+            if ((item = carousel.getItemPositionById(target.id)) >= 0) {
+                carousel.set("selectedItem", carousel._getSelectedItem(item));
+                carousel.focus();
+            }
+        },
+
+        /**
+         * The keyboard event handler for Carousel.
+         *
+         * @method _keyboardEventHandler
+         * @param ev {Event} The event that is being handled.
+         * @protected
+         */
+        _keyboardEventHandler: function (ev) {
+            var carousel = this,
+                key      = Event.getCharCode(ev),
+                prevent  = false;
+
+            if (carousel.isAnimating()) {
+                return;         // do not mess while animation is in progress
+            }
+
+            switch (key) {
+            case 0x25:          // left arrow
+            case 0x26:          // up arrow
+                carousel.selectPreviousItem();
+                prevent = true;
+                break;
+            case 0x27:          // right arrow
+            case 0x28:          // down arrow
+                carousel.selectNextItem();
+                prevent = true;
+                break;
+            case 0x21:          // page-up
+                carousel.scrollPageBackward();
+                prevent = true;
+                break;
+            case 0x22:          // page-down
+                carousel.scrollPageForward();
+                prevent = true;
+                break;
+            }
+
+            if (prevent) {
+                if (carousel.isAutoPlayOn()) {
+                    carousel.stopAutoPlay();
+                }
+                Event.preventDefault(ev);
+            }
+        },
+
+        /**
+         * The load the required set of items that are needed for display.
+         *
+         * @method _loadItems
+         * @protected
+         */
+        _loadItems: function() {
+            var carousel   = this,
+                first      = carousel.get("firstVisible"),
+                last       = 0,
+                numItems   = carousel.get("numItems"),
+                numVisible = carousel.get("numVisible"),
+                reveal     = carousel.get("revealAmount");
+
+            last = first + numVisible - 1 + (reveal ? 1 : 0);
+            last = last > numItems - 1 ? numItems - 1 : last;
+
+            if (!carousel.getItem(first) || !carousel.getItem(last)) {
+                carousel.fireEvent(loadItemsEvent, {
+                        ev: loadItemsEvent, first: first, last: last,
+                        num: last - first
+                });
+            }
+        },
+
+        /**
+         * The "click" handler for the pager navigation.
+         *
+         * @method _pagerClickHandler
+         * @param {Event} ev The event object
+         * @protected
+         */
+        _pagerClickHandler: function (ev) {
+            var carousel = this,
+                pos,
+                target   = Event.getTarget(ev),
+                val;
+
+            function getPagerNode(el) {
+                var itemEl = carousel.get("carouselItemEl");
+
+                if (el.nodeName.toUpperCase() == itemEl.toUpperCase()) {
+                    el = Dom.getChildrenBy(el, function (node) {
+                        // either an anchor or select at least
+                        return node.href || node.value;
+                    });
+                    if (el && el[0]) {
+                        return el[0];
+                    }
+                } else if (el.href || el.value) {
+                    return el;
+                }
+
+                return null;
+            }
+
+            if (target) {
+                target = getPagerNode(target);
+                if (!target) {
+                    return;
+                }
+                val = target.href || target.value;
+                if (JS.isString(val) && val) {
+                    pos = val.lastIndexOf("#");
+                    if (pos != -1) {
+                        val = carousel.getItemPositionById(
+                                val.substring(pos + 1));
+                        carousel._selectedItem = val;
+                        carousel.scrollTo(val);
+                        if (!target.value) { // not a select element
+                            carousel.focus();
+                        }
+                        Event.preventDefault(ev);
+                    }
+                }
+            }
+        },
+
+        /**
+         * Find the Carousel within a container. The Carousel is identified by
+         * the first element that matches the carousel element tag or the
+         * element that has the Carousel class.
+         *
+         * @method parseCarousel
+         * @param parent {HTMLElement} The parent element to look under
+         * @return {Boolean} True if Carousel is found, false otherwise
+         * @protected
+         */
+        _parseCarousel: function (parent) {
+            var carousel = this, child, cssClass, domEl, found, node;
+
+            cssClass  = carousel.CLASSES;
+            domEl     = carousel.get("carouselEl");
+            found     = false;
+
+            for (child = parent.firstChild; child; child = child.nextSibling) {
+                if (child.nodeType == 1) {
+                    node = child.nodeName;
+                    if (node.toUpperCase() == domEl) {
+                        carousel._carouselEl = child;
+                        Dom.addClass(carousel._carouselEl,
+                                     carousel.CLASSES.CAROUSEL_EL);
+                        found = true;
+                    }
+                }
+            }
+
+            return found;
+        },
+
+        /**
+         * Find the items within the Carousel and add them to the items table.
+         * A Carousel item is identified by elements that matches the carousel
+         * item element tag.
+         *
+         * @method parseCarouselItems
+         * @protected
+         */
+        _parseCarouselItems: function () {
+            var carousel = this,
+                child,
+                domItemEl,
+                elId,
+                node,
+                parent   = carousel._carouselEl;
+
+            domItemEl = carousel.get("carouselItemEl");
+
+            for (child = parent.firstChild; child; child = child.nextSibling) {
+                if (child.nodeType == 1) {
+                    node = child.nodeName;
+                    if (node.toUpperCase() == domItemEl) {
+                        if (child.id) {
+                            elId = child.id;
+                        } else {
+                            elId = Dom.generateId();
+                            child.setAttribute("id", elId);
+                        }
+                        carousel.addItem(child);
+                    }
+                }
+            }
+        },
+
+        /**
+         * Find the Carousel navigation within a container. The navigation
+         * elements need to match the carousel navigation class names.
+         *
+         * @method parseCarouselNavigation
+         * @param parent {HTMLElement} The parent element to look under
+         * @return {Boolean} True if at least one is found, false otherwise
+         * @protected
+         */
+        _parseCarouselNavigation: function (parent) {
+            var carousel = this,
+                cfg,
+                cssClass = carousel.CLASSES,
+                el,
+                i,
+                j,
+                nav,
+                rv       = false;
+
+            nav = Dom.getElementsByClassName(cssClass.PREV_PAGE, "*", parent);
+            if (nav.length > 0) {
+                for (i in nav) {
+                    if (nav.hasOwnProperty(i)) {
+                        el = nav[i];
+                        if (el.nodeName == "INPUT" ||
+                            el.nodeName == "BUTTON") {
+                            carousel._navBtns.prev.push(el);
+                        } else {
+                            j = el.getElementsByTagName("INPUT");
+                            if (JS.isArray(j) && j.length > 0) {
+                                carousel._navBtns.prev.push(j[0]);
+                            } else {
+                                j = el.getElementsByTagName("BUTTON");
+                                if (JS.isArray(j) && j.length > 0) {
+                                    carousel._navBtns.prev.push(j[0]);
+                                }
+                            }
+                        }
+                    }
+                }
+                cfg = { prev: nav };
+            }
+
+            nav = Dom.getElementsByClassName(cssClass.NEXT_PAGE, "*", parent);
+            if (nav.length > 0) {
+                for (i in nav) {
+                    if (nav.hasOwnProperty(i)) {
+                        el = nav[i];
+                        if (el.nodeName == "INPUT" ||
+                            el.nodeName == "BUTTON") {
+                            carousel._navBtns.next.push(el);
+                        } else {
+                            j = el.getElementsByTagName("INPUT");
+                            if (JS.isArray(j) && j.length > 0) {
+                                carousel._navBtns.next.push(j[0]);
+                            } else {
+                                j = el.getElementsByTagName("BUTTON");
+                                if (JS.isArray(j) && j.length > 0) {
+                                    carousel._navBtns.next.push(j[0]);
+                                }
+                            }
+                        }
+                    }
+                }
+                if (cfg) {
+                    cfg.next = nav;
+                } else {
+                    cfg = { next: nav };
+                }
+            }
+
+            if (cfg) {
+                carousel.set("navigation", cfg);
+                rv = true;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Refresh the widget UI if it is not already rendered, on first item
+         * addition.
+         *
+         * @method _refreshUi
+         * @protected
+         */
+        _refreshUi: function () {
+            var carousel = this;
+
+            // Set the rendered state appropriately.
+            carousel._hasRendered = true;
+            carousel.fireEvent(renderEvent);
+        },
+
+        /**
+         * Set the Carousel offset to the passed offset.
+         *
+         * @method _setCarouselOffset
+         * @protected
+         */
+        _setCarouselOffset: function (offset) {
+            var carousel = this, which;
+
+            which   = carousel.get("isVertical") ? "top" : "left";
+            offset += offset !== 0 ? getStyle(carousel._carouselEl, which) : 0;
+            Dom.setStyle(carousel._carouselEl, which, offset + "px");
+        },
+
+        /**
+         * Setup/Create the Carousel navigation element (if needed).
+         *
+         * @method _setupCarouselNavigation
+         * @protected
+         */
+        _setupCarouselNavigation: function () {
+            var carousel = this,
+                btn, cfg, cssClass, nav, navContainer, nextButton, prevButton;
+
+            cssClass = carousel.CLASSES;
+
+            // TODO: can the _navBtns be tested against instead?
+            navContainer = Dom.getElementsByClassName(cssClass.NAVIGATION,
+                    "DIV", carousel.get("element"));
+
+            if (navContainer.length === 0) {
+                navContainer = createElement("DIV",
+                        { className: cssClass.NAVIGATION });
+                carousel.insertBefore(navContainer,
+                        Dom.getFirstChild(carousel.get("element")));
+            } else {
+                navContainer = navContainer[0];
+            }
+
+            carousel._pages.el = createElement("UL");
+            navContainer.appendChild(carousel._pages.el);
+
+            nav = carousel.get("navigation");
+            if (JS.isString(nav.prev) || JS.isArray(nav.prev)) {
+                if (JS.isString(nav.prev)) {
+                    nav.prev = [nav.prev];
+                }
+                for (btn in nav.prev) {
+                    if (nav.prev.hasOwnProperty(btn)) {
+                        carousel._navBtns.prev.push(Dom.get(nav.prev[btn]));
+                    }
+                }
+            } else {
+                // TODO: separate method for creating a navigation button
+                prevButton = createElement("SPAN",
+                        { className: cssClass.BUTTON + cssClass.FIRST_NAV });
+                // XXX: for IE 6.x
+                Dom.setStyle(prevButton, "visibility", "visible");
+                btn = Dom.generateId();
+                prevButton.innerHTML = "<button type=\"button\" "      +
+                        "id=\"" + btn + "\" name=\""                   +
+                        carousel.STRINGS.PREVIOUS_BUTTON_TEXT + "\">"  +
+                        carousel.STRINGS.PREVIOUS_BUTTON_TEXT + "</button>";
+                navContainer.appendChild(prevButton);
+                btn = Dom.get(btn);
+                carousel._navBtns.prev = [btn];
+                cfg = { prev: [prevButton] };
+            }
+
+            if (JS.isString(nav.next) || JS.isArray(nav.next)) {
+                if (JS.isString(nav.next)) {
+                    nav.next = [nav.next];
+                }
+                for (btn in nav.next) {
+                    if (nav.next.hasOwnProperty(btn)) {
+                        carousel._navBtns.next.push(Dom.get(nav.next[btn]));
+                    }
+                }
+            } else {
+                // TODO: separate method for creating a navigation button
+                nextButton = createElement("SPAN",
+                        { className: cssClass.BUTTON + cssClass.NEXT_NAV });
+                // XXX: for IE 6.x
+                Dom.setStyle(nextButton, "visibility", "visible");
+                btn = Dom.generateId();
+                nextButton.innerHTML = "<button type=\"button\" "      +
+                        "id=\"" + btn + "\" name=\""                   +
+                        carousel.STRINGS.NEXT_BUTTON_TEXT + "\">"      +
+                        carousel.STRINGS.NEXT_BUTTON_TEXT + "</button>";
+                navContainer.appendChild(nextButton);
+                btn = Dom.get(btn);
+                carousel._navBtns.next = [btn];
+                if (cfg) {
+                    cfg.next = [nextButton];
+                } else {
+                    cfg = { next: [nextButton] };
+                }
+            }
+
+            if (cfg) {
+                carousel.set("navigation", cfg);
+            }
+
+            return navContainer;
+        },
+
+        /**
+         * Set the clip container size (based on the new numVisible value).
+         *
+         * @method _setClipContainerSize
+         * @param clip {HTMLElement} The clip container element.
+         * @param num {Number} optional The number of items per page.
+         * @protected
+         */
+        _setClipContainerSize: function (clip, num) {
+            var carousel = this,
+                attr, currVal, isVertical, itemSize, reveal, size, which;
+
+            isVertical = carousel.get("isVertical");
+            reveal     = carousel.get("revealAmount");
+            which      = isVertical ? "height" : "width";
+            attr       = isVertical ? "top" : "left";
+
+            clip       = clip || carousel._clipEl;
+            if (!clip) {
+                return;
+            }
+
+            num        = num  || carousel.get("numVisible");
+            itemSize   = getCarouselItemSize.call(carousel, which);
+            size       = itemSize * num;
+
+            // TODO: try to re-use the _hasRendered indicator
+            carousel._recomputeSize = (size === 0); // bleh!
+            if (carousel._recomputeSize) {
+                carousel._hasRendered = false;
+                return;             // no use going further, bail out!
+            }
+
+            if (reveal > 0) {
+                reveal = itemSize * (reveal / 100) * 2;
+                size += reveal;
+                // TODO: set the Carousel's initial offset somwehere
+                currVal = parseFloat(Dom.getStyle(carousel._carouselEl, attr));
+                currVal = JS.isNumber(currVal) ? currVal : 0;
+                Dom.setStyle(carousel._carouselEl,
+                             attr, currVal + (reveal / 2) + "px");
+            }
+
+            if (isVertical) {
+                size += getStyle(carousel._carouselEl, "marginTop")        +
+                        getStyle(carousel._carouselEl, "marginBottom")     +
+                        getStyle(carousel._carouselEl, "paddingTop")       +
+                        getStyle(carousel._carouselEl, "paddingBottom")    +
+                        getStyle(carousel._carouselEl, "borderTopWidth")   +
+                        getStyle(carousel._carouselEl, "borderBottomWidth");
+                // XXX: for vertical Carousel
+                Dom.setStyle(clip, which, (size - (num - 1)) + "px");
+            } else {
+                size += getStyle(carousel._carouselEl, "marginLeft")      +
+                        getStyle(carousel._carouselEl, "marginRight")     +
+                        getStyle(carousel._carouselEl, "paddingLeft")     +
+                        getStyle(carousel._carouselEl, "paddingRight")    +
+                        getStyle(carousel._carouselEl, "borderLeftWidth") +
+                        getStyle(carousel._carouselEl, "borderRightWidth");
+                Dom.setStyle(clip, which, size + "px");
+            }
+
+            carousel._setContainerSize(clip); // adjust the container size too
+        },
+
+        /**
+         * Set the container size.
+         *
+         * @method _setContainerSize
+         * @param clip {HTMLElement} The clip container element.
+         * @param attr {String} Either set the height or width.
+         * @protected
+         */
+        _setContainerSize: function (clip, attr) {
+            var carousel = this,
+                config   = carousel.CONFIG,
+                cssClass = carousel.CLASSES,
+                isVertical,
+                size;
+
+            isVertical = carousel.get("isVertical");
+            clip       = clip || carousel._clipEl;
+            attr       = attr || (isVertical ? "height" : "width");
+            size       = parseFloat(Dom.getStyle(clip, attr), 10);
+
+            size = JS.isNumber(size) ? size : 0;
+
+            if (isVertical) {
+                size += getStyle(carousel._carouselEl, "marginTop")         +
+                        getStyle(carousel._carouselEl, "marginBottom")      +
+                        getStyle(carousel._carouselEl, "paddingTop")        +
+                        getStyle(carousel._carouselEl, "paddingBottom")     +
+                        getStyle(carousel._carouselEl, "borderTopWidth")    +
+                        getStyle(carousel._carouselEl, "borderBottomWidth") +
+                        getStyle(carousel._navEl, "height");
+            } else {
+                size += getStyle(clip, "marginLeft")                    +
+                        getStyle(clip, "marginRight")                   +
+                        getStyle(clip, "paddingLeft")                   +
+                        getStyle(clip, "paddingRight")                  +
+                        getStyle(clip, "borderLeftWidth")               +
+                        getStyle(clip, "borderRightWidth");
+            }
+
+            if (!isVertical) {
+                if (size < config.HORZ_MIN_WIDTH) {
+                    size = config.HORZ_MIN_WIDTH;
+                    carousel.addClass(cssClass.MIN_WIDTH);
+                }
+            }
+            carousel.setStyle(attr,  size + "px");
+
+            // Additionally the width of the container should be set for
+            // the vertical Carousel
+            if (isVertical) {
+                size = getCarouselItemSize.call(carousel, "width");
+                if (size < config.VERT_MIN_WIDTH) {
+                    size = config.VERT_MIN_WIDTH;
+                    carousel.addClass(cssClass.MIN_WIDTH);
+                }
+                carousel.setStyle("width",  size + "px");
+            }
+        },
+
+        /**
+         * Set the value for the Carousel's first visible item.
+         *
+         * @method _setFirstVisible
+         * @param val {Number} The new value for firstVisible
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setFirstVisible: function (val) {
+            var carousel = this;
+
+            if (val >= 0 && val < carousel.get("numItems")) {
+                carousel.scrollTo(val);
+            } else {
+                val = carousel.get("firstVisible");
+            }
+            return val;
+        },
+
+        /**
+         * Set the value for the Carousel's navigation.
+         *
+         * @method _setNavigation
+         * @param cfg {Object} The navigation configuration
+         * @return {Object} The new value that would be set
+         * @protected
+         */
+        _setNavigation: function (cfg) {
+            var carousel = this;
+
+            if (cfg.prev) {
+                Event.on(cfg.prev, "click", scrollPageBackward, carousel);
+            }
+            if (cfg.next) {
+                Event.on(cfg.next, "click", scrollPageForward, carousel);
+            }
+        },
+
+        /**
+         * Set the value for the number of visible items in the Carousel.
+         *
+         * @method _setNumVisible
+         * @param val {Number} The new value for numVisible
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setNumVisible: function (val) {
+            var carousel = this;
+
+            carousel._setClipContainerSize(carousel._clipEl, val);
+        },
+
+        /**
+         * Set the number of items in the Carousel.
+         * Warning: Setting this to a lower number than the current removes
+         * items from the end.
+         *
+         * @method _setNumItems
+         * @param val {Number} The new value for numItems
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setNumItems: function (val) {
+            var carousel = this,
+                num      = carousel._itemsTable.numItems;
+
+            if (JS.isArray(carousel._itemsTable.items)) {
+                if (carousel._itemsTable.items.length != num) { // out of sync
+                    num = carousel._itemsTable.items.length;
+                    carousel._itemsTable.numItems = num;
+                }
+            }
+
+            if (val < num) {
+                while (num > val) {
+                    carousel.removeItem(num - 1);
+                    num--;
+                }
+            }
+
+            return val;
+        },
+
+        /**
+         * Set the orientation of the Carousel.
+         *
+         * @method _setOrientation
+         * @param val {Boolean} The new value for isVertical
+         * @return {Boolean} The new value that would be set
+         * @protected
+         */
+        _setOrientation: function (val) {
+            var carousel = this,
+                cssClass = carousel.CLASSES;
+
+            if (val) {
+                carousel.replaceClass(cssClass.HORIZONTAL, cssClass.VERTICAL);
+            } else {
+                carousel.replaceClass(cssClass.VERTICAL, cssClass.HORIZONTAL);
+            }
+            carousel._itemsTable.size = 0; // force recalculation next time
+            return val;
+        },
+
+        /**
+         * Set the value for the reveal amount percentage in the Carousel.
+         *
+         * @method _setRevealAmount
+         * @param val {Number} The new value for revealAmount
+         * @return {Number} The new value that would be set
+         * @protected
+         */
+        _setRevealAmount: function (val) {
+            var carousel = this;
+
+            if (val >= 0 && val <= 100) {
+                val = parseInt(val, 10);
+                val = JS.isNumber(val) ? val : 0;
+                carousel._setClipContainerSize();
+            } else {
+                val = carousel.get("revealAmount");
+            }
+            return val;
+        },
+
+        /**
+         * Set the value for the selected item.
+         *
+         * @method _setSelectedItem
+         * @param val {Number} The new value for "selected" item
+         * @protected
+         */
+        _setSelectedItem: function (val) {
+            this._selectedItem = val;
+        },
+
+        /**
+         * Synchronize and redraw the UI after an item is added.
+         *
+         * @method _syncUiForItemAdd
+         * @protected
+         */
+        _syncUiForItemAdd: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el,
+                item,
+                itemsTable = carousel._itemsTable,
+                oel,
+                pos,
+                sibling;
+
+            pos  = JS.isUndefined(obj.pos) ? itemsTable.numItems - 1 : obj.pos;
+            if (!JS.isUndefined(itemsTable.items[pos])) {
+                item = itemsTable.items[pos];
+                if (item && !JS.isUndefined(item.id)) {
+                    oel  = Dom.get(item.id);
+                }
+            }
+            if (!oel) {
+                el = carousel._createCarouselItem({
+                        className : item.className,
+                        content   : item.item,
+                        id        : item.id
+                });
+                if (JS.isUndefined(obj.pos)) {
+                    if (!JS.isUndefined(itemsTable.loading[pos])) {
+                        oel = itemsTable.loading[pos];
+                        // if oel is null, it is a problem ...
+                    }
+                    if (oel) {
+                        // replace the node
+                        carouselEl.replaceChild(el, oel);
+                        // ... and remove the item from the data structure
+                        delete itemsTable.loading[pos];
+                    } else {
+                        carouselEl.appendChild(el);
+                    }
+                } else {
+                    if (!JS.isUndefined(itemsTable.items[obj.pos + 1])) {
+                        sibling = Dom.get(itemsTable.items[obj.pos + 1].id);
+                    }
+                    if (sibling) {
+                        carouselEl.insertBefore(el, sibling);
+                    } else {
+                    }
+                }
+            } else {
+                if (JS.isUndefined(obj.pos)) {
+                    if (!Dom.isAncestor(carousel._carouselEl, oel)) {
+                        carouselEl.appendChild(oel);
+                    }
+                } else {
+                    if (!Dom.isAncestor(carouselEl, oel)) {
+                        if (!JS.isUndefined(itemsTable.items[obj.pos + 1])) {
+                            carouselEl.insertBefore(oel,
+                                    Dom.get(itemsTable.items[obj.pos + 1].id));
+                        }
+                    }
+                }
+            }
+
+            if (!carousel._hasRendered) {
+                carousel._refreshUi();
+            }
+
+            if (carousel.get("selectedItem") < 0) {
+                carousel.set("selectedItem", carousel.get("firstVisible"));
+            }
+        },
+
+        /**
+         * Synchronize and redraw the UI after an item is removed.
+         *
+         * @method _syncUiForItemAdd
+         * @protected
+         */
+        _syncUiForItemRemove: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el, item, num, pos;
+
+            num  = carousel.get("numItems");
+            item = obj.item;
+            pos  = obj.pos;
+
+            if (item && (el = Dom.get(item.id))) {
+                if (el && Dom.isAncestor(carouselEl, el)) {
+                    Event.purgeElement(el, true);
+                    carouselEl.removeChild(el);
+                }
+
+                if (carousel.get("selectedItem") == pos) {
+                    pos = pos >= num ? num - 1 : pos;
+                    carousel.set("selectedItem", pos);
+                }
+            } else {
+            }
+        },
+
+        /**
+         * Synchronize and redraw the UI for lazy loading.
+         *
+         * @method _syncUiForLazyLoading
+         * @protected
+         */
+        _syncUiForLazyLoading: function (obj) {
+            var carousel   = this,
+                carouselEl = carousel._carouselEl,
+                el,
+                i,
+                itemsTable = carousel._itemsTable,
+                sibling;
+
+            for (i = obj.first; i <= obj.last; i++) {
+                el = carousel._createCarouselItem({
+                        className : carousel.CLASSES.ITEM_LOADING,
+                        content   : carousel.STRINGS.ITEM_LOADING_CONTENT,
+                        id        : Dom.generateId()
+                });
+                if (el) {
+                    if (!JS.isUndefined(itemsTable.items[obj.last + 1])) {
+                        sibling = Dom.get(itemsTable.items[obj.last + 1].id);
+                        if (sibling) {
+                            carouselEl.insertBefore(el, sibling);
+                        } else {
+                        }
+                    } else {
+                        carouselEl.appendChild(el);
+                    }
+                }
+                itemsTable.loading[i] = el;
+            }
+        },
+
+        /**
+         * Set the correct class for the navigation buttons.
+         *
+         * @method _updateNavButtons
+         * @param el {Object} The target button
+         * @param setFocus {Boolean} True to set focus ring, false otherwise.
+         * @protected
+         */
+        _updateNavButtons: function (el, setFocus) {
+            var children,
+                cssClass = this.CLASSES,
+                grandParent,
+                parent   = el.parentNode;
+
+            if (!parent) {
+                return;
+            }
+            grandParent = parent.parentNode;
+
+            if (el.nodeName.toUpperCase() == "BUTTON" &&
+                Dom.hasClass(parent, cssClass.BUTTON)) {
+                if (setFocus) {
+                    if (grandParent) {
+                        children = Dom.getChildren(grandParent);
+                        if (children) {
+                            Dom.removeClass(children, cssClass.FOCUSSED_BUTTON);
+                        }
+                    }
+                    Dom.addClass(parent, cssClass.FOCUSSED_BUTTON);
+                } else {
+                    Dom.removeClass(parent, cssClass.FOCUSSED_BUTTON);
+                }
+            }
+        },
+
+        /**
+         * Update the UI for the pager buttons based on the current page and
+         * the number of pages.
+         *
+         * @method _updatePagerButtons
+         * @protected
+         */
+        _updatePagerButtons: function () {
+            var carousel = this,
+                css      = carousel.CLASSES,
+                cur      = carousel._pages.cur, // current page
+                el,
+                html,
+                i,
+                item,
+                n        = carousel.get("numVisible"),
+                num      = carousel._pages.num, // total pages
+                pager    = carousel._pages.el;  // the pager container element
+
+            if (num === 0 || !pager) {
+                return;         // don't do anything if number of pages is 0
+            }
+
+            // Hide the pager before redrawing it
+            Dom.setStyle(pager, "visibility", "hidden");
+
+            // Remove all nodes from the pager
+            while (pager.firstChild) {
+                pager.removeChild(pager.firstChild);
+            }
+
+            for (i = 0; i < num; i++) {
+                if (JS.isUndefined(carousel._itemsTable.items[i * n])) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                item = carousel._itemsTable.items[i * n].id;
+
+                el   = document.createElement("LI");
+                if (!el) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+
+                if (i === 0) {
+                    Dom.addClass(el, css.FIRST_PAGE);
+                }
+                if (i == cur) {
+                    Dom.addClass(el, css.SELECTED_NAV);
+                }
+
+                // TODO: use a template string for i18N compliance
+                html = "<a href=\"#" + item + "\" tabindex=\"0\"><em>"   +
+                        carousel.STRINGS.PAGER_PREFIX_TEXT + " " + (i+1) +
+                        "</em></a>";
+                el.innerHTML = html;
+
+                pager.appendChild(el);
+            }
+
+            // Show the pager now
+            Dom.setStyle(pager, "visibility", "visible");
+        },
+
+        /**
+         * Update the UI for the pager menu based on the current page and
+         * the number of pages.  If the number of pages is greater than
+         * MAX_PAGER_BUTTONS, then the selection of pages is provided by a drop
+         * down menu instead of a set of buttons.
+         *
+         * @method _updatePagerMenu
+         * @protected
+         */
+        _updatePagerMenu: function () {
+            var carousel = this,
+                cur      = carousel._pages.cur, // current page
+                el,
+                i,
+                item,
+                n        = carousel.get("numVisible"),
+                num      = carousel._pages.num, // total pages
+                pager    = carousel._pages.el,  // the pager container element
+                sel;
+
+            if (num === 0) {
+                return;         // don't do anything if number of pages is 0
+            }
+
+            sel = document.createElement("SELECT");
+            if (!sel) {
+                return;
+            }
+
+            // Hide the pager before redrawing it
+            Dom.setStyle(pager, "visibility", "hidden");
+
+            // Remove all nodes from the pager
+            while (pager.firstChild) {
+                pager.removeChild(pager.firstChild);
+            }
+
+            for (i = 0; i < num; i++) {
+                if (JS.isUndefined(carousel._itemsTable.items[i * n])) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                item = carousel._itemsTable.items[i * n].id;
+
+                el   = document.createElement("OPTION");
+                if (!el) {
+                    Dom.setStyle(pager, "visibility", "visible");
+                    break;
+                }
+                el.value     = "#" + item;
+                // TODO: use a template string for i18N compliance
+                el.innerHTML = carousel.STRINGS.PAGER_PREFIX_TEXT+" "+(i+1);
+
+                if (i == cur) {
+                    el.setAttribute("selected", "selected");
+                }
+
+                sel.appendChild(el);
+            }
+
+            el = document.createElement("FORM");
+            if (!el) {
+            } else {
+                el.appendChild(sel);
+                pager.appendChild(el);
+            }
+
+            // Show the pager now
+            Dom.setStyle(pager, "visibility", "visible");
+        },
+
+        /**
+         * Set the correct tab index for the Carousel items.
+         *
+         * @method _updateTabIndex
+         * @param el {Object} The element to be focussed
+         * @protected
+         */
+        _updateTabIndex: function (el) {
+            var carousel = this;
+
+            if (el) {
+                if (carousel._focusableItemEl) {
+                    carousel._focusableItemEl.tabIndex = -1;
+                }
+                carousel._focusableItemEl = el;
+                el.tabIndex = 0;
+            }
+        },
+
+        /**
+         * Validate animation parameters.
+         *
+         * @method _validateAnimation
+         * @param cfg {Object} The animation configuration
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateAnimation: function (cfg) {
+            var rv = true;
+
+            if (JS.isObject(cfg)) {
+                if (cfg.speed) {
+                    rv = rv && JS.isNumber(cfg.speed);
+                }
+                if (cfg.effect) {
+                    rv = rv && JS.isFunction(cfg.effect);
+                } else if (!JS.isUndefined(YAHOO.util.Easing)) {
+                    cfg.effect = YAHOO.util.Easing.easeOut;
+                }
+            } else {
+                rv = false;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the firstVisible value.
+         *
+         * @method _validateFirstVisible
+         * @param val {Number} The first visible value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateFirstVisible: function (val) {
+            var carousel = this, numItems = carousel.get("numItems");
+
+            if (JS.isNumber(val)) {
+                if (numItems === 0 && val == numItems) {
+                    return true;
+                } else {
+                    return (val >= 0 && val < numItems);
+                }
+            }
+
+            return false;
+        },
+
+        /**
+         * Validate and navigation parameters.
+         *
+         * @method _validateNavigation
+         * @param cfg {Object} The navigation configuration
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNavigation : function (cfg) {
+            var i;
+
+            if (!JS.isObject(cfg)) {
+                return false;
+            }
+
+            if (cfg.prev) {
+                if (!JS.isArray(cfg.prev)) {
+                    return false;
+                }
+                for (i in cfg.prev) {
+                    if (cfg.prev.hasOwnProperty(i)) {
+                        if (!JS.isString(cfg.prev[i].nodeName)) {
+                            return false;
+                        }
+                    }
+                }
+            }
+
+            if (cfg.next) {
+                if (!JS.isArray(cfg.next)) {
+                    return false;
+                }
+                for (i in cfg.next) {
+                    if (cfg.next.hasOwnProperty(i)) {
+                        if (!JS.isString(cfg.next[i].nodeName)) {
+                            return false;
+                        }
+                    }
+                }
+            }
+
+            return true;
+        },
+
+        /**
+         * Validate the numItems value.
+         *
+         * @method _validateNumItems
+         * @param val {Number} The numItems value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNumItems: function (val) {
+            return JS.isNumber(val) && (val >= 0);
+        },
+
+        /**
+         * Validate the numVisible value.
+         *
+         * @method _validateNumVisible
+         * @param val {Number} The numVisible value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateNumVisible: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = val > 0 && val <= this.get("numItems");
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the revealAmount value.
+         *
+         * @method _validateRevealAmount
+         * @param val {Number} The revealAmount value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateRevealAmount: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = val >= 0 && val < 100;
+            }
+
+            return rv;
+        },
+
+        /**
+         * Validate the scrollIncrement value.
+         *
+         * @method _validateScrollIncrement
+         * @param val {Number} The scrollIncrement value
+         * @return {Boolean} The status of the validation
+         * @protected
+         */
+        _validateScrollIncrement: function (val) {
+            var rv = false;
+
+            if (JS.isNumber(val)) {
+                rv = (val > 0 && val < this.get("numItems"));
+            }
+
+            return rv;
+        }
+
+    });
+
+})();
+/*
+;;  Local variables: **
+;;  mode: js2 **
+;;  indent-tabs-mode: nil **
+;;  End: **
+*/
+YAHOO.register("carousel", YAHOO.widget.Carousel, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/charts/README
===================================================================
--- trunk/root/static/yui/charts/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,38 +0,0 @@
-YUI Library - Charts - Release Notes
-2.6.0
-  * Fixed bug in which an empty series definition caused charts to ignore styles.
-  * Fixed bug in which additions to Object.prototype cause SWFObject embed to fail
-  * refreshData is now a public method
-  * Fixed bug in which TimeAxis bounds calculation fails when polling. 
-  * Added new optional altText attribute.
-  * Moved _initialized flag from Charts to FlashAdapter.
-  * Fixed bug in which changes in the dom (e.g. display property of chart) would cause the chart to erase. New known issue added. (see known issues section)
-  * Added support for marker labels on PieSeries. Default is percentage values. May be customized with labelFunction property.
-  * New Chart Types: StackedColumnChart and StackedBarChart.
-  * Fixed bug in which charts delivered in an iframe from a different domain failed to render in Firefox.
-  * contentReady event now fires after the dataSource is available. In some rare cases it may not be backwards compatible. If you need the event to fire earlier, you can revert back to the previous code. (see version 2.5.2)
-  
-2.5.2
-  * Support for legends
-  * New series styles connectPoints, connectDiscontinuousPoints, and discontinuousDashLength
-  * dataTipFunction, xAxisLabelFunction, and yAxisLabelFunction attributes now support function references
-  * Added destroy() function.
-  * Changed majorTicks and minorTicks substyle "position" to "display". New option "none" will hide ticks.
-  * When polling is enabled, the chart now makes an immediate request instead of waiting for the first interval.
-  * Includes ActionScript source files and sample Ant build file.
-
-2.5.1
-  * No changes
-
-2.5.0
-  * Added lineSize style to series styles
-  * Added showLabels substyle to xAxis and yAxis styles
-  * Added more descriptive local content warning for ExternalInterface failure
-  * Improved minor unit calculation
-  * Fixed animation and marker positioning bugs
-  * Fixed bug that caused series definition update to fail
-  * Fixed bug that caused setting hex color values with # symbol to fail
-  * Added initialization flag to ensure DataSource doesn't receive multiple requests during initialization.
-
-2.4.0
-  * Experimental release
\ No newline at end of file

Modified: trunk/root/static/yui/charts/assets/charts.swf
===================================================================
(Binary files differ)

Added: trunk/root/static/yui/charts/charts-debug.js
===================================================================
--- trunk/root/static/yui/charts/charts-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,2326 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
+/*!
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+
+YAHOO.namespace("deconcept"); 
+	
+YAHOO.deconcept = YAHOO.deconcept || {};
+
+if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
+{
+	YAHOO.deconcept.util = {};
+}
+
+if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
+{
+	YAHOO.deconcept.SWFObjectUtil = {};
+}
+
+YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
+{
+	if(!document.getElementById) { return; }
+	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
+	this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
+	this.params = {};
+	this.variables = {};
+	this.attributes = [];
+	if(swf) { this.setAttribute('swf', swf); }
+	if(id) { this.setAttribute('id', id); }
+	if(w) { this.setAttribute('width', w); }
+	if(h) { this.setAttribute('height', h); }
+	if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
+	this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
+	if (!window.opera && document.all && this.installedVer.major > 7)
+	{
+		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
+		YAHOO.deconcept.SWFObject.doPrepUnload = true;
+	}
+	if(c)
+	{
+		this.addParam('bgcolor', c);
+	}
+	var q = quality ? quality : 'high';
+	this.addParam('quality', q);
+	this.setAttribute('useExpressInstall', false);
+	this.setAttribute('doExpressInstall', false);
+	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
+	this.setAttribute('xiRedirectUrl', xir);
+	this.setAttribute('redirectUrl', '');
+	if(redirectUrl)
+	{
+		this.setAttribute('redirectUrl', redirectUrl);
+	}
+};
+
+YAHOO.deconcept.SWFObject.prototype =
+{
+	useExpressInstall: function(path)
+	{
+		this.xiSWFPath = !path ? "expressinstall.swf" : path;
+		this.setAttribute('useExpressInstall', true);
+	},
+	setAttribute: function(name, value){
+		this.attributes[name] = value;
+	},
+	getAttribute: function(name){
+		return this.attributes[name];
+	},
+	addParam: function(name, value){
+		this.params[name] = value;
+	},
+	getParams: function(){
+		return this.params;
+	},
+	addVariable: function(name, value){
+		this.variables[name] = value;
+	},
+	getVariable: function(name){
+		return this.variables[name];
+	},
+	getVariables: function(){
+		return this.variables;
+	},
+	getVariablePairs: function(){
+		var variablePairs = [];
+		var key;
+		var variables = this.getVariables();
+		for(key in variables)
+		{
+			if(variables.hasOwnProperty(key))
+			{
+				variablePairs[variablePairs.length] = key +"="+ variables[key];
+			}
+		}
+		return variablePairs;
+	},
+	getSWFHTML: function() {
+		var swfNode = "";
+		var params = {};
+		var key = "";
+		var pairs = "";
+		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "PlugIn");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
+			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += [key] +'="'+ params[key] +'" ';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
+			swfNode += '/>';
+		} else { // PC IE
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "ActiveX");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
+			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
+			swfNode += "</object>";
+		}
+		return swfNode;
+	},
+	write: function(elementId)
+	{
+		if(this.getAttribute('useExpressInstall')) {
+			// check to see if we need to do an express install
+			var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
+			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
+				this.setAttribute('doExpressInstall', true);
+				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
+				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+				this.addVariable("MMdoctitle", document.title);
+			}
+		}
+		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
+		{
+			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
+			n.innerHTML = this.getSWFHTML();
+			return true;
+		}
+		else
+		{
+			if(this.getAttribute('redirectUrl') !== "")
+			{
+				document.location.replace(this.getAttribute('redirectUrl'));
+			}
+		}
+		return false;
+	}
+};
+
+/* ---- detection functions ---- */
+YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
+{
+	var axo = null;
+	var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
+	if(navigator.plugins && navigator.mimeTypes.length)
+	{
+		var x = navigator.plugins["Shockwave Flash"];
+		if(x && x.description)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+		}
+	}
+	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
+	{ // if Windows CE
+		var counter = 3;
+		while(axo)
+		{
+			try
+			{
+				counter++;
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
+//				document.write("player v: "+ counter);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
+			}
+			catch(e)
+			{
+				axo = null;
+			}
+		}
+	}
+	else
+	{ // Win IE (non mobile)
+		// do minor version lookup in IE, but avoid fp6 crashing issues
+		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+		try
+		{
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+		}
+		catch(e)
+		{
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
+				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
+			}
+			catch(e)
+			{
+				if(PlayerVersion.major == 6)
+				{
+					return PlayerVersion;
+				}
+			}
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+			}
+			catch(e) {}
+		}
+		
+		if(axo !== null)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+		}
+	}
+	return PlayerVersion;
+};
+
+YAHOO.deconcept.PlayerVersion = function(arrVersion)
+{
+	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
+	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
+	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
+};
+
+YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
+{
+	if(this.major < fv.major)
+	{
+		return false;
+	}
+	if(this.major > fv.major)
+	{
+		return true;
+	}
+	if(this.minor < fv.minor)
+	{
+		return false;
+	}
+	if(this.minor > fv.minor)
+	{
+		return true;
+	}
+	if(this.rev < fv.rev)
+	{
+		return false;
+	}
+	return true;
+};
+
+/* ---- get value of query string param ---- */
+YAHOO.deconcept.util =
+{
+	getRequestParameter: function(param)
+	{
+		var q = document.location.search || document.location.hash;
+		if(param === null) { return q; }
+		if(q)
+		{
+			var pairs = q.substring(1).split("&");
+			for(var i=0; i < pairs.length; i++)
+			{
+				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
+				{
+					return pairs[i].substring((pairs[i].indexOf("=") + 1));
+				}
+			}
+		}
+		return "";
+	}
+};
+
+/* fix for video streaming bug */
+YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
+{
+	var objects = document.getElementsByTagName("OBJECT");
+	for(var i = objects.length - 1; i >= 0; i--)
+	{
+		objects[i].style.display = 'none';
+		for(var x in objects[i])
+		{
+			if(typeof objects[i][x] == 'function')
+			{
+				objects[i][x] = function(){};
+			}
+		}
+	}
+};
+
+// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
+if(YAHOO.deconcept.SWFObject.doPrepUnload)
+{
+	if(!YAHOO.deconcept.unloadSet)
+	{
+		YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
+		{
+			__flash_unloadHandler = function(){};
+			__flash_savedUnloadHandler = function(){};
+			window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
+		};
+		window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
+		YAHOO.deconcept.unloadSet = true;
+	}
+}
+
+/* add document.getElementById if needed (mobile IE < 5) */
+if(!document.getElementById && document.all)
+{
+	document.getElementById = function(id) { return document.all[id]; };
+}
+
+
+/**
+ * Wraps Flash embedding functionality and allows communication with SWF through
+ * attributes.
+ *
+ * @namespace YAHOO.widget
+ * @class FlashAdapter
+ * @uses YAHOO.util.AttributeProvider
+ */
+YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes)
+{
+	// set up the initial events and attributes stuff
+	this._queue = this._queue || [];
+	this._events = this._events || {};
+	this._configs = this._configs || {};
+	attributes = attributes || {};
+	
+	//the Flash Player external interface code from Adobe doesn't play nicely
+	//with the default value, yui-gen, in IE
+	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
+	attributes.version = attributes.version || "9.0.45";
+	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
+	
+	//we can't use the initial attributes right away
+	//so save them for once the SWF finishes loading
+	this._attributes = attributes;
+	
+	this._swfURL = swfURL;
+	this._containerID = containerID;
+	
+	//embed the SWF file in the page
+	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
+		attributes.backgroundColor, attributes.expressInstall, attributes.wmode);
+	
+	/**
+	 * Fires when the SWF is initialized and communication is possible.
+	 * @event contentReady
+	 */
+	//Fix for iframe cross-domain issue with FF2x 
+	try
+	{
+		this.createEvent("contentReady");
+	}
+	catch(e){}
+};
+
+YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
+{
+	/**
+	 * The URL of the SWF file.
+	 * @property _swfURL
+	 * @type String
+	 * @private
+	 */
+	_swfURL: null,
+
+	/**
+	 * The ID of the containing DIV.
+	 * @property _containerID
+	 * @type String
+	 * @private
+	 */
+	_containerID: null,
+
+	/**
+	 * A reference to the embedded SWF file.
+	 * @property _swf
+	 * @private
+	 */
+	_swf: null,
+
+	/**
+	 * The id of this instance.
+	 * @property _id
+	 * @type String
+	 * @private
+	 */
+	_id: null,
+
+	/**
+	 * Indicates whether the SWF has been initialized and is ready
+	 * to communicate with JavaScript
+	 * @property _initialized
+	 * @type Boolean
+	 * @private
+	 */
+	_initialized: false,
+	
+	/**
+	 * The initializing attributes are stored here until the SWF is ready.
+	 * @property _attributes
+	 * @type Object
+	 * @private
+	 */
+	_attributes: null, //the intializing attributes
+
+	/**
+	 * Public accessor to the unique name of the FlashAdapter instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the FlashAdapter instance.
+	 */
+	toString: function()
+	{
+		return "FlashAdapter " + this._id;
+	},
+
+	/**
+	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
+	 * event listeners and clears out DOM elements inside the container. After calling
+	 * this method, the instance reference should be expliclitly nulled by implementer,
+	 * as in myChart = null. Use with caution!
+	 *
+	 * @method destroy
+	 */
+	destroy: function()
+	{
+		//kill the Flash Player instance
+		if(this._swf)
+		{
+			var container = YAHOO.util.Dom.get(this._containerID);
+			container.removeChild(this._swf);
+		}
+		
+		var instanceName = this._id;
+		
+		//null out properties
+		for(var prop in this)
+		{
+			if(YAHOO.lang.hasOwnProperty(this, prop))
+			{
+				this[prop] = null;
+			}
+		}
+		
+		YAHOO.log("FlashAdapter instance destroyed: " + instanceName);
+	},
+
+	/**
+	 * Embeds the SWF in the page and associates it with this instance.
+	 *
+	 * @method _embedSWF
+	 * @private
+	 */
+	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode)
+	{
+		//standard SWFObject embed
+		var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
+
+		if(expressInstall)
+		{
+			swfObj.useExpressInstall(expressInstall);
+		}
+
+		//make sure we can communicate with ExternalInterface
+		swfObj.addParam("allowScriptAccess", "always");
+		
+		if(wmode)
+		{
+			swfObj.addParam("wmode", wmode);
+		}
+		
+		//again, a useful ExternalInterface trick
+		swfObj.addVariable("allowedDomain", document.location.hostname);
+
+		//tell the SWF which HTML element it is in
+		swfObj.addVariable("elementID", swfID);
+
+		// set the name of the function to call when the swf has an event
+		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
+
+		var container = YAHOO.util.Dom.get(containerID);
+		var result = swfObj.write(container);
+		if(result)
+		{
+			this._swf = YAHOO.util.Dom.get(swfID);
+			//if successful, let's add an owner property to the SWF reference
+			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
+			this._swf.owner = this;
+		}
+		else
+		{
+			YAHOO.log("Unable to load SWF " + swfURL);
+		}
+	},
+
+	/**
+	 * Handles or re-dispatches events received from the SWF.
+	 *
+	 * @method _eventHandler
+	 * @private
+	 */
+	_eventHandler: function(event)
+	{
+		var type = event.type;
+		switch(type)
+		{
+			case "swfReady":
+   				this._loadHandler();
+   				this.fireEvent("contentReady");
+				return;
+			case "log":
+				YAHOO.log(event.message, event.category, this.toString());
+				return;
+		}
+		
+		//be sure to return after your case or the event will automatically fire!
+		this.fireEvent(type, event);
+	},
+
+	/**
+	 * Called when the SWF has been initialized.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		this._initialized = false;
+		this._initAttributes(this._attributes);
+		this.setAttributes(this._attributes, true);
+		
+		this._initialized = true;
+	},
+	
+	set: function(name, value)
+	{
+		//save all the attributes in case the swf reloads
+		//so that we can pass them in again
+		this._attributes[name] = value;
+		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		//should be overridden if other attributes need to be set up
+
+		/**
+		 * @attribute wmode
+		 * @description Sets the window mode of the Flash Player control. May be
+		 *		"window", "opaque", or "transparent". Only available in the constructor
+		 *		because it may not be set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute expressInstall
+		 * @description URL pointing to a SWF file that handles Flash Player's express
+		 *		install feature. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute version
+		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute backgroundColor
+		 * @description The background color of the SWF. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute altText
+		 * @description The alternative text to provide for screen readers and other assistive technology.
+		 * @type String
+		 */
+		this.getAttributeConfig("altText",
+		{
+			method: this._getAltText
+		});
+		this.setAttributeConfig("altText",
+		{
+			method: this._setAltText
+		});
+		
+		/**
+		 * @attribute swfURL
+		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		this.getAttributeConfig("swfURL",
+		{
+			method: this._getSWFURL
+		});
+	},
+	
+	/**
+	 * Getter for swfURL attribute.
+	 *
+	 * @method _getSWFURL
+	 * @private
+	 */
+	_getSWFURL: function()
+	{
+		return this._swfURL;
+	},
+	
+	/**
+	 * Getter for altText attribute.
+	 *
+	 * @method _getAltText
+	 * @private
+	 */
+	_getAltText: function()
+	{
+		return this._swf.getAltText();
+	},
+
+	/**
+	 * Setter for altText attribute.
+	 *
+	 * @method _setAltText
+	 * @private
+	 */
+	_setAltText: function(value)
+	{
+		return this._swf.setAltText(value);
+	}
+});
+
+/**
+ * Receives event messages from SWF and passes them to the correct instance
+ * of FlashAdapter.
+ *
+ * @method YAHOO.widget.FlashAdapter.eventHandler
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
+{
+	var loadedSWF = YAHOO.util.Dom.get(elementID);
+	if(!loadedSWF.owner)
+	{
+		//fix for ie: if owner doesn't exist yet, try again in a moment
+		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
+	}
+	else
+	{
+		loadedSWF.owner._eventHandler(event);
+	}
+};
+
+/**
+ * The number of proxy functions that have been created.
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
+
+/**
+ * Creates a globally accessible function that wraps a function reference.
+ * Returns the proxy function's name as a string for use by the SWF through
+ * ExternalInterface.
+ *
+ * @method YAHOO.widget.FlashAdapter.createProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
+{
+	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
+	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
+	{
+		return func.apply(null, arguments);
+	};
+	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
+	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
+};
+
+/**
+ * Removes a function created with createProxyFunction()
+ * 
+ * @method YAHOO.widget.FlashAdapter.removeProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
+{
+	//quick error check
+	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
+	{
+		return;
+	}
+	
+	funcName = funcName.substr(26);
+	YAHOO.widget.FlashAdapter[funcName] = null;
+};
+
+/**
+ * The Charts widget provides a Flash control for displaying data
+ * graphically by series across A-grade browsers with Flash Player installed.
+ *
+ * @module charts
+ * @requires yahoo, dom, event, datasource
+ * @title Charts Widget
+ * @experimental
+ */
+ 
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ * Chart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class Chart
+ * @uses YAHOO.widget.FlashAdapter
+ * @constructor
+ * @param type {String} The char type. May be "line", "column", "bar", or "pie"
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.Chart = function(type, containerId, dataSource, attributes)
+{
+	YAHOO.widget.Chart.superclass.constructor.call(this, YAHOO.widget.Chart.SWFURL, containerId, attributes);
+	
+	this._type = type;
+	this._dataSource = dataSource;
+	
+	/**
+	 * Fires when the user moves the mouse over the bounds of an item renderer in the chart.
+	 *
+	 * @event itemMouseOverEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemMouseOverEvent");
+	
+	/**
+	 * Fires when the user moves the mouse out of the bounds of an item renderer in the chart.
+	 *
+	 * @event itemMouseOutEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemMouseOutEvent");
+	
+	/**
+	 * Fires when the user clicks an item renderer in the chart with the mouse.
+	 *
+	 * @event itemClickEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemClickEvent");
+	
+	/**
+	 * Fires when the user double-clicks an item renderer in the chart with the mouse.
+	 *
+	 * @event itemDoubleClickEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDoubleClickEvent");
+	
+	/**
+	 * Fires when the user presses the mouse down on an item to initiate a drag action.
+	 *
+	 * @event itemDragStartEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragStartEvent");
+	
+	/**
+	 * Fires when the user moves the mouse during a drag action.
+	 *
+	 * @event itemDragEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragEvent");
+
+	/**
+	 * Fires when the user releases the mouse during a drag action.
+	 *
+	 * @event itemDragEndEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragEndEvent");
+};
+
+YAHOO.extend(YAHOO.widget.Chart, YAHOO.widget.FlashAdapter,
+{
+	/**
+	 * The type of this chart instance.
+	 * @property _type
+	 * @type String
+	 * @private
+	 */
+	_type: null,
+
+	/**
+	 * The id returned from the DataSource's setInterval function.
+	 * @property _pollingID
+	 * @type Number
+	 * @private
+	 */
+	_pollingID: null,
+
+	/**
+	 * The time, in ms, between requests for data.
+	 * @property _pollingInterval
+	 * @type Number
+	 * @private
+	 */
+	_pollingInterval: null,
+
+	/**
+	 * Stores a reference to the dataTipFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _dataTipFunction
+	 * @type String
+	 * @private
+	 */
+	_dataTipFunction: null,
+	
+	/**
+	 * Stores references to series labelFunction values created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _seriesLabelFunctions
+	 * @type Array
+	 * @private
+	 */
+	_seriesLabelFunctions: null,
+
+	/**
+	 * Public accessor to the unique name of the Chart instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the Chart instance.
+	 */
+	toString: function()
+	{
+		return "Chart " + this._id;
+	},
+	
+	/**
+	 * Sets a single style value on the Chart instance.
+	 *
+	 * @method setStyle
+	 * @param name {String} Name of the Chart style value to change.
+	 * @param value {Object} New value to pass to the Chart style.
+	 */
+	setStyle: function(name, value)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		value = YAHOO.lang.JSON.stringify(value);
+		this._swf.setStyle(name, value);
+	},
+	
+	/**
+	 * Resets all styles on the Chart instance.
+	 *
+	 * @method setStyles
+	 * @param styles {Object} Initializer for all Chart styles.
+	 */
+	setStyles: function(styles)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		styles = YAHOO.lang.JSON.stringify(styles);
+		this._swf.setStyles(styles);
+	},
+	
+	/**
+	 * Sets the styles on all series in the Chart.
+	 *
+	 * @method setSeriesStyles
+	 * @param styles {Array} Initializer for all Chart series styles.
+	 */
+	setSeriesStyles: function(styles)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		for(var i = 0; i < styles.length; i++)
+		{
+			styles[i] = YAHOO.lang.JSON.stringify(styles[i]);	
+		}
+		this._swf.setSeriesStyles(styles);
+	},
+	
+	destroy: function()
+	{
+		//stop polling if needed
+		if(this._dataSource !== null)
+		{
+			if(this._pollingID !== null)
+			{
+				this._dataSource.clearInterval(this._pollingID);
+				this._pollingID = null;
+			}
+		}
+		
+		//remove proxy functions
+		if(this._dataTipFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
+		}
+		
+		//call last
+		YAHOO.widget.Chart.superclass.destroy.call(this);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes);
+
+		/**
+		 * @attribute request
+		 * @description Request to be sent to the Chart's DataSource.
+		 * @type String
+		 */
+		this.getAttributeConfig("request",
+		{
+			method: this._getRequest
+		});
+		
+		this.setAttributeConfig("request",
+		{
+			method: this._setRequest
+		});
+		
+		/**
+		 * @attribute dataSource
+		 * @description The DataSource instance to display in the Chart.
+		 * @type DataSource
+		 */
+		this.getAttributeConfig("dataSource",
+		{
+			method: this._getDataSource
+		});
+		
+		this.setAttributeConfig("dataSource",
+		{
+			method: this._setDataSource
+		});
+		
+		/**
+		 * @attribute series
+		 * @description Defines the series to be displayed by the Chart.
+		 * @type Array
+		 */
+		this.getAttributeConfig("series",
+		{
+			method: this._getSeriesDefs
+		});
+		
+		this.setAttributeConfig("series",
+		{
+			method: this._setSeriesDefs
+		});
+		
+		/**
+		 * @attribute categoryNames
+		 * @description Defines the names of the categories to be displayed in the Chart..
+		 * @type Array
+		 */
+		this.getAttributeConfig("categoryNames",
+		{
+			method: this._getCategoryNames
+		});
+		
+		this.setAttributeConfig("categoryNames",
+		{
+			validator: YAHOO.lang.isArray,
+			method: this._setCategoryNames
+		});
+		
+		/**
+		 * @attribute dataTipFunction
+		 * @description The string representation of a globally-accessible function
+		 * that may be called by the SWF to generate the datatip text for a Chart's item.
+		 * @type String
+		 */
+		this.getAttributeConfig("dataTipFunction",
+		{
+			method: this._getDataTipFunction
+		});
+		
+		this.setAttributeConfig("dataTipFunction",
+		{
+			method: this._setDataTipFunction
+		});
+
+		/**
+		 * @attribute polling
+		 * @description A numeric value indicating the number of milliseconds between
+		 * polling requests to the DataSource.
+		 * @type Number
+		 */
+		this.getAttributeConfig("polling",
+		{
+			method: this._getPolling
+		});
+
+		this.setAttributeConfig("polling",
+		{
+			method: this._setPolling
+		});
+	},
+	
+	/**
+	 * Called when the SWF is ready for communication. Sets the type, initializes
+	 * the styles, and sets the DataSource.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		//the type is set separately because it must be first!
+		this._swf.setType(this._type);
+		
+		//set initial styles
+		if(this._attributes.style)
+		{
+			var style = this._attributes.style;
+			this.setStyles(style);		
+		}
+		
+		YAHOO.widget.Chart.superclass._loadHandler.call(this);
+		
+		if(this._dataSource)
+		{
+			this.set("dataSource", this._dataSource);
+		}
+	},
+
+	/**
+	 * Sends (or resends) the request to the DataSource.
+	 *
+	 * @method refreshData
+	 */
+	refreshData: function()
+	{
+		if(!this._initialized)
+		{
+			return;
+		}
+		
+		if(this._dataSource !== null)
+		{
+			if(this._pollingID !== null)
+			{
+				this._dataSource.clearInterval(this._pollingID);
+				this._pollingID = null;
+			}
+			
+			if(this._pollingInterval > 0)
+			{
+				this._pollingID = this._dataSource.setInterval(this._pollingInterval, this._request, this._loadDataHandler, this);
+			}
+			this._dataSource.sendRequest(this._request, this._loadDataHandler, this);
+		}
+	},
+
+	/**
+	 * Called when the DataSource receives new data. The series definitions are used
+	 * to build a data provider for the SWF chart.
+	 *
+	 * @method _loadDataHandler
+	 * @private
+	 */
+	_loadDataHandler: function(request, response, error)
+	{
+		if(this._swf)
+		{
+			if(error)
+			{
+				YAHOO.log("Unable to load data.", "error");
+			}
+			else
+			{
+				var i;
+				if(this._seriesLabelFunctions)
+				{
+					var count = this._seriesLabelFunctions.length;
+					for(i = 0; i < count; i++)
+					{
+						YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[i]);
+					}
+					this._seriesLabelFunction = null;
+				}
+				this._seriesLabelFunctions = [];
+
+				//make a copy of the series definitions so that we aren't
+				//editing them directly.
+				var dataProvider = [];	
+				var seriesCount = 0;
+				var currentSeries = null;
+				if(this._seriesDefs !== null)
+				{
+					seriesCount = this._seriesDefs.length;
+					for(i = 0; i < seriesCount; i++)
+					{
+						currentSeries = this._seriesDefs[i];
+						var clonedSeries = {};
+						for(var prop in currentSeries)
+						{
+							if(YAHOO.lang.hasOwnProperty(currentSeries, prop))
+							{
+								if(prop == "style")
+								{
+									if(currentSeries.style !== null)
+									{
+										clonedSeries.style = YAHOO.lang.JSON.stringify(currentSeries.style);
+									}
+								}
+
+								else if(prop == "labelFunction")
+								{
+									if(currentSeries.labelFunction !== null &&
+										typeof currentSeries.labelFunction == "function")
+									{
+										clonedSeries.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(currentSeries.labelFunction);
+										this._seriesLabelFunctions.push(clonedSeries.labelFunction);
+									}
+								}
+
+								else
+								{
+									clonedSeries[prop] = currentSeries[prop];
+								}
+							}
+						}
+						dataProvider.push(clonedSeries);
+					}
+				}
+
+				if(seriesCount > 0)
+				{
+					for(i = 0; i < seriesCount; i++)
+					{
+						currentSeries = dataProvider[i];
+						if(!currentSeries.type)
+						{
+							currentSeries.type = this._type;
+						}
+						currentSeries.dataProvider = response.results;
+					}
+				}
+				else
+				{
+					var series = {type: this._type, dataProvider: response.results};
+					dataProvider.push(series);
+				}
+				this._swf.setDataProvider(dataProvider);
+			}
+		}
+	},
+
+	/**
+	 * Storage for the request attribute.
+	 * 
+	 * @property _request
+	 * @private
+	 */
+	_request: "",
+	
+	/**
+	 * Getter for the request attribute.
+	 *
+	 * @method _getRequest
+	 * @private
+	 */
+	_getRequest: function()
+	{
+		return this._request;
+	},
+	
+	/**
+	 * Setter for the request attribute.
+	 *
+	 * @method _setRequest
+	 * @private
+	 */
+	_setRequest: function(value)
+	{
+		this._request = value;
+		this.refreshData();
+	},
+
+	/**
+	 * Storage for the dataSource attribute.
+	 * 
+	 * @property _dataSource
+	 * @private
+	 */
+	_dataSource: null,
+	
+	/**
+	 * Getter for the dataSource attribute.
+	 *
+	 * @method _getDataSource
+	 * @private
+	 */
+	_getDataSource: function()
+	{
+		return this._dataSource;
+	},
+
+	/**
+	 * Setter for the dataSource attribute.
+	 *
+	 * @method _setDataSource
+	 * @private
+	 */
+	_setDataSource: function(value)
+	{	
+		this._dataSource = value;
+		this.refreshData();
+	},
+	
+	/**
+	 * Storage for the series attribute.
+	 * 
+	 * @property _seriesDefs
+	 * @private
+	 */
+	_seriesDefs: null,
+	
+	/**
+	 * Getter for the series attribute.
+	 *
+	 * @method _getSeriesDefs
+	 * @private
+	 */
+	_getSeriesDefs: function()
+	{
+		return this._seriesDefs;
+	},
+	
+	/**
+	 * Setter for the series attribute.
+	 *
+	 * @method _setSeriesDefs
+	 * @private
+	 */
+	_setSeriesDefs: function(value)
+	{
+		this._seriesDefs = value;
+		this.refreshData();
+	},
+
+	/**
+	 * Getter for the categoryNames attribute.
+	 *
+	 * @method _getCategoryNames
+	 * @private
+	 */
+	_getCategoryNames: function()
+	{
+		this._swf.getCategoryNames();
+	},
+
+	/**
+	 * Setter for the categoryNames attribute.
+	 *
+	 * @method _setCategoryNames
+	 * @private
+	 */
+	_setCategoryNames: function(value)
+	{
+		this._swf.setCategoryNames(value);
+	},
+	
+	/**
+	 * Setter for the dataTipFunction attribute.
+	 *
+	 * @method _setDataTipFunction
+	 * @private
+	 */
+	_setDataTipFunction: function(value)
+	{
+		if(this._dataTipFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
+		}
+		
+		if(value && typeof value == "function")
+		{
+			value = YAHOO.widget.FlashAdapter.createProxyFunction(value);
+			this._dataTipFunction = value;
+		}
+		this._swf.setDataTipFunction(value);
+	},
+
+	/**
+	 * Getter for the polling attribute.
+	 *
+	 * @method _getPolling
+	 * @private
+	 */
+	_getPolling: function()
+	{
+		return this._pollingInterval;
+	},
+
+	/**
+	 * Setter for the polling attribute.
+	 *
+	 * @method _setPolling
+	 * @private
+	 */
+	_setPolling: function(value)
+	{
+		this._pollingInterval = value;
+		this.refreshData();
+	}
+});
+
+/**
+ * Storage for the dataTipFunction attribute.
+ *
+ * @property Chart.SWFURL
+ * @private
+ * @static
+ * @final
+ * @default "assets/charts.swf"
+ */
+YAHOO.widget.Chart.SWFURL = "assets/charts.swf";
+
+/**
+ * PieChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class PieChart
+ * @uses YAHOO.widget.Chart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.PieChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.PieChart.superclass.constructor.call(this, "pie", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.PieChart, YAHOO.widget.Chart,
+{
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{	
+		YAHOO.widget.PieChart.superclass._initAttributes.call(this, attributes);
+		
+		/**
+		 * @attribute dataField
+		 * @description The field in each item that corresponds to the data value.
+		 * @type String
+		 */
+		this.getAttributeConfig("dataField",
+		{
+			method: this._getDataField
+		});
+   
+		this.setAttributeConfig("dataField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setDataField
+		});
+   
+		/**
+		 * @attribute categoryField
+		 * @description The field in each item that corresponds to the category value.
+		 * @type String
+		 */
+		this.getAttributeConfig("categoryField",
+		{
+			method: this._getCategoryField
+		});
+   
+		this.setAttributeConfig("categoryField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setCategoryField
+		});
+	},
+
+	/**
+	 * Getter for the dataField attribute.
+	 *
+	 * @method _getDataField
+	 * @private
+	 */
+	_getDataField: function()
+	{
+		return this._swf.getDataField();
+	},
+
+	/**
+	 * Setter for the dataField attribute.
+	 *
+	 * @method _setDataField
+	 * @private
+	 */
+	_setDataField: function(value)
+	{
+		this._swf.setDataField(value);
+	},
+
+	/**
+	 * Getter for the categoryField attribute.
+	 *
+	 * @method _getCategoryField
+	 * @private
+	 */
+	_getCategoryField: function()
+	{
+		return this._swf.getCategoryField();
+	},
+
+	/**
+	 * Setter for the categoryField attribute.
+	 *
+	 * @method _setCategoryField
+	 * @private
+	 */
+	_setCategoryField: function(value)
+	{
+		this._swf.setCategoryField(value);
+	}
+});
+
+/**
+ * CartesianChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class CartesianChart
+ * @uses YAHOO.widget.Chart
+ * @constructor
+ * @param type {String} The char type. May be "line", "column", or "bar"
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+ YAHOO.widget.CartesianChart = function(type, containerId, dataSource, attributes)
+{
+	YAHOO.widget.CartesianChart.superclass.constructor.call(this, type, containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CartesianChart, YAHOO.widget.Chart,
+{
+	/**
+	 * Stores a reference to the xAxis labelFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _xAxisLabelFunction
+	 * @type String
+	 * @private
+	 */
+	_xAxisLabelFunction: null,
+	
+	/**
+	 * Stores a reference to the yAxis labelFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _yAxisLabelFunction
+	 * @type String
+	 * @private
+	 */
+	_yAxisLabelFunction: null,
+	
+	destroy: function()
+	{
+		//remove proxy functions
+		if(this._xAxisLabelFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
+			this._xAxisLabelFunction = null;
+		}
+		
+		if(this._yAxisLabelFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
+			this._yAxisLabelFunction = null;
+		}
+	
+		//call last
+		YAHOO.widget.CartesianChart.superclass.destroy.call(this);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{	
+		YAHOO.widget.CartesianChart.superclass._initAttributes.call(this, attributes);
+
+		/**
+		 * @attribute xField
+		 * @description The field in each item that corresponds to a value on the x axis.
+		 * @type String
+		 */
+		this.getAttributeConfig("xField",
+		{
+			method: this._getXField
+		});
+
+		this.setAttributeConfig("xField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setXField
+		});
+
+		/**
+		 * @attribute yField
+		 * @description The field in each item that corresponds to a value on the x axis.
+		 * @type String
+		 */
+		this.getAttributeConfig("yField",
+		{
+			method: this._getYField
+		});
+
+		this.setAttributeConfig("yField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setYField
+		});
+
+		/**
+		 * @attribute xAxis
+		 * @description A custom configuration for the horizontal x axis.
+		 * @type Axis
+		 */
+		this.setAttributeConfig("xAxis",
+		{
+			method: this._setXAxis
+		});
+
+		/**
+		 * @attribute yAxis
+		 * @description A custom configuration for the vertical y axis.
+		 * @type Axis
+		 */
+		this.setAttributeConfig("yAxis",
+		{
+			method: this._setYAxis
+		});
+	},
+
+	/**
+	 * Getter for the xField attribute.
+	 *
+	 * @method _getXField
+	 * @private
+	 */
+	_getXField: function()
+	{
+		return this._swf.getHorizontalField();
+	},
+
+	/**
+	 * Setter for the xField attribute.
+	 *
+	 * @method _setXField
+	 * @private
+	 */
+	_setXField: function(value)
+	{
+		this._swf.setHorizontalField(value);
+	},
+
+	/**
+	 * Getter for the yField attribute.
+	 *
+	 * @method _getYField
+	 * @private
+	 */
+	_getYField: function()
+	{
+		return this._swf.getVerticalField();
+	},
+
+	/**
+	 * Setter for the yField attribute.
+	 *
+	 * @method _setYField
+	 * @private
+	 */
+	_setYField: function(value)
+	{
+		this._swf.setVerticalField(value);
+	},
+	
+	/**
+	 * Setter for the xAxis attribute.
+	 *
+	 * @method _setXAxis
+	 * @private
+	 */
+	_setXAxis: function(value)
+	{
+		if(this._xAxisLabelFunction !== null)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
+			this._xAxisLabelFunction = null;
+		}
+		
+		var clonedXAxis = {};
+		for(var prop in value)
+		{
+			if(prop == "labelFunction")
+			{
+				if(value.labelFunction !== null)
+				{
+					if(typeof value.labelFunction == "function")
+					{
+						clonedXAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
+					}
+					else
+					{
+						clonedXAxis.labelFunction = value.labelFunction;
+					}
+					this._xAxisLabelFunction = clonedXAxis.labelFunction;
+				}
+			}
+			else
+			{
+				clonedXAxis[prop] = value[prop];
+			}
+		}
+		this._swf.setHorizontalAxis(clonedXAxis);
+	},
+
+	/**
+	 * Getter for the yAxis attribute.
+	 *
+	 * @method _setYAxis
+	 * @private
+	 */
+	_setYAxis: function(value)
+	{
+		if(this._yAxisLabelFunction !== null)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
+			this._yAxisLabelFunction = null;
+		}
+
+		var clonedYAxis = {};
+		for(var prop in value)
+		{
+			if(prop == "labelFunction")
+			{
+				if(value.labelFunction !== null)
+				{
+					if(typeof value.labelFunction == "function")
+					{
+						clonedYAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
+					}
+					else
+					{
+						clonedYAxis.labelFunction = value.labelFunction;
+					}
+					this._yAxisLabelFunction = clonedYAxis.labelFunction;
+				}
+			}
+			else
+			{
+				clonedYAxis[prop] = value[prop];
+			}
+		}
+		this._swf.setVerticalAxis(clonedYAxis);
+	}
+});
+
+/**
+ * LineChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class LineChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.LineChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.LineChart.superclass.constructor.call(this, "line", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.LineChart, YAHOO.widget.CartesianChart);
+
+/**
+ * ColumnChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class ColumnChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.ColumnChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.ColumnChart.superclass.constructor.call(this, "column", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.ColumnChart, YAHOO.widget.CartesianChart);
+
+/**
+ * BarChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class BarChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.BarChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.BarChart.superclass.constructor.call(this, "bar", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.BarChart, YAHOO.widget.CartesianChart);
+
+/**
+ * StackedColumnChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedColumnChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.StackedColumnChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.StackedColumnChart.superclass.constructor.call(this, "stackcolumn", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedColumnChart, YAHOO.widget.CartesianChart);
+
+/**
+ * StackedBarChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedBarChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.StackedBarChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.StackedBarChart.superclass.constructor.call(this, "stackbar", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedBarChart, YAHOO.widget.CartesianChart);
+
+/**
+ * Defines a CartesianChart's vertical or horizontal axis.
+ *
+ * @namespace YAHOO.widget
+ * @class Axis
+ * @constructor
+ */
+YAHOO.widget.Axis = function()
+{
+};
+
+YAHOO.widget.Axis.prototype = 
+{
+	/**
+	 * The type of axis.
+	 *
+	 * @property type
+	 * @type String
+	 */
+	type: null,
+	
+	/**
+	 * If true, the items on the axis will be drawn in opposite direction.
+	 *
+	 * @property reverse
+	 * @type Boolean
+	 */
+	reverse: false,
+	
+	/**
+	 * A string reference to the globally-accessible function that may be called to
+	 * determine each of the label values for this axis. Also accepts function references.
+	 *
+	 * @property labelFunction
+	 * @type String
+	 */
+	labelFunction: null,
+	
+	/**
+	 * The space, in pixels, between labels on an axis.
+	 *
+	 * @property labelSpacing
+	 * @type Number
+	 */
+	labelSpacing: 2,
+	
+	/**
+	 * The text that will appear next to the axis to indicate information about the data that it displays.
+	 *
+	 * @property title
+	 * @type String
+	 */
+	title: null 
+};
+
+/**
+ * A type of axis whose units are measured in numeric values.
+ *
+ * @namespace YAHOO.widget
+ * @class NumericAxis
+ * @extends YAHOO.widget.Axis
+ * @constructor
+ */
+YAHOO.widget.NumericAxis = function()
+{
+	YAHOO.widget.NumericAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.NumericAxis, YAHOO.widget.Axis,
+{
+	type: "numeric",
+	
+	/**
+	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
+	 * will be calculated automatically.
+	 *
+	 * @property minimum
+	 * @type Number
+	 */
+	minimum: NaN,
+	
+	/**
+	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
+	 * will be calculated automatically.
+	 *
+	 * @property maximum
+	 * @type Number
+	 */
+	maximum: NaN,
+	
+	/**
+	 * The spacing between major intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	majorUnit: NaN,
+
+	/**
+	 * The spacing between minor intervals on this axis.
+	 *
+	 * @property minorUnit
+	 * @type Number
+	 */
+	minorUnit: NaN,
+	
+	/**
+	 * If true, the labels, ticks, gridlines, and other objects will snap to
+	 * the nearest major or minor unit. If false, their position will be based
+	 * on the minimum value.
+	 *
+	 * @property snapToUnits
+	 * @type Boolean
+	 */
+	snapToUnits: true,
+	
+	/**
+	 * Series that are stackable will only stack when this value is set to true.
+	 *
+	 * @property stackingEnabled
+	 * @type Boolean
+	 */
+	stackingEnabled: false,
+
+	/**
+	 * If true, and the bounds are calculated automatically, either the minimum or
+	 * maximum will be set to zero.
+	 *
+	 * @property alwaysShowZero
+	 * @type Boolean
+	 */
+	alwaysShowZero: true,
+
+	/**
+	 * The scaling algorithm to use on this axis. May be "linear" or "logarithmic".
+	 *
+	 * @property scale
+	 * @type String
+	 */
+	scale: "linear",
+	
+	/**
+	 * Indicates whether to round the major unit.
+	 * 
+	 * @property roundMajorUnit
+	 * @type Boolean
+	 */
+	roundMajorUnit: true 
+});
+
+/**
+ * A type of axis whose units are measured in time-based values.
+ *
+ * @namespace YAHOO.widget
+ * @class TimeAxis
+ * @constructor
+ */
+YAHOO.widget.TimeAxis = function()
+{
+	YAHOO.widget.TimeAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.TimeAxis, YAHOO.widget.Axis,
+{
+	type: "time",
+	
+	/**
+	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
+	 * will be calculated automatically.
+	 *
+	 * @property minimum
+	 * @type Date
+	 */
+	minimum: null,
+
+	/**
+	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
+	 * will be calculated automatically.
+	 *
+	 * @property maximum
+	 * @type Number
+	 */
+	maximum: null,
+	
+	/**
+	 * The spacing between major intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	majorUnit: NaN,
+	
+	/**
+	 * The time unit used by the majorUnit.
+	 *
+	 * @property majorTimeUnit
+	 * @type String
+	 */
+	majorTimeUnit: null,
+	
+	/**
+	 * The spacing between minor intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	minorUnit: NaN,
+	
+	/**
+	 * The time unit used by the minorUnit.
+	 *
+	 * @property majorTimeUnit
+	 * @type String
+	 */
+	minorTimeUnit: null,
+
+	/**
+	 * If true, the labels, ticks, gridlines, and other objects will snap to
+	 * the nearest major or minor unit. If false, their position will be based
+	 * on the minimum value.
+	 *
+	 * @property snapToUnits
+	 * @type Boolean
+	 */
+	snapToUnits: true,
+
+	/**
+	 * Series that are stackable will only stack when this value is set to true.
+	 *
+	 * @property stackingEnabled
+	 * @type Boolean
+	 */
+	stackingEnabled: false
+});
+
+/**
+ * A type of axis that displays items in categories.
+ *
+ * @namespace YAHOO.widget
+ * @class CategoryAxis
+ * @constructor
+ */
+YAHOO.widget.CategoryAxis = function()
+{
+	YAHOO.widget.CategoryAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CategoryAxis, YAHOO.widget.Axis,
+{
+	type: "category",
+	
+	/**
+	 * A list of category names to display along this axis.
+	 *
+	 * @property categoryNames
+	 * @type Array
+	 */
+	categoryNames: null,
+	
+	/**
+	 * Indicates whether or not to calculate the number of categories (ticks and labels)
+	 * when there is not enough room to display all labels on the axis. If set to true, the axis 
+	 * will determine the number of categories to plot. If not, all categories will be plotted.
+	 *
+	 * @property calcualateCategoryCount
+	 * @type Boolean
+	 */
+	calculateCategoryCount: false 
+});
+
+/**
+ * Functionality common to most series. Generally, a <code>Series</code> 
+ * object shouldn't be instantiated directly. Instead, a subclass with a 
+ * concrete implementation should be used.
+ *
+ * @namespace YAHOO.widget
+ * @class Series
+ * @constructor
+ */
+YAHOO.widget.Series = function() {};
+
+YAHOO.widget.Series.prototype = 
+{
+	/**
+	 * The type of series.
+	 *
+	 * @property type
+	 * @type String
+	 */
+	type: null,
+	
+	/**
+	 * The human-readable name of the series.
+	 *
+	 * @property displayName
+	 * @type String
+	 */
+	displayName: null
+};
+
+/**
+ * Functionality common to most series appearing in cartesian charts.
+ * Generally, a <code>CartesianSeries</code> object shouldn't be
+ * instantiated directly. Instead, a subclass with a concrete implementation
+ * should be used.
+ *
+ * @namespace YAHOO.widget
+ * @class CartesianSeries
+ * @uses YAHOO.widget.Series
+ * @constructor
+ */
+YAHOO.widget.CartesianSeries = function() 
+{
+	YAHOO.widget.CartesianSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CartesianSeries, YAHOO.widget.Series,
+{
+	/**
+	 * The field used to access the x-axis value from the items from the data source.
+	 *
+	 * @property xField
+	 * @type String
+	 */
+	xField: null,
+	
+	/**
+	 * The field used to access the y-axis value from the items from the data source.
+	 *
+	 * @property yField
+	 * @type String
+	 */
+	yField: null
+});
+
+/**
+ * ColumnSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class ColumnSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.ColumnSeries = function() 
+{
+	YAHOO.widget.ColumnSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.ColumnSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "column"
+});
+
+/**
+ * LineSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class LineSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.LineSeries = function() 
+{
+	YAHOO.widget.LineSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.LineSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "line"
+});
+
+
+/**
+ * BarSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class BarSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.BarSeries = function() 
+{
+	YAHOO.widget.BarSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.BarSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "bar"
+});
+
+
+/**
+ * PieSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class PieSeries
+ * @uses YAHOO.widget.Series
+ * @constructor
+ */
+YAHOO.widget.PieSeries = function() 
+{
+	YAHOO.widget.PieSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.PieSeries, YAHOO.widget.Series,
+{
+	type: "pie",
+	
+	/**
+	 * The field used to access the data value from the items from the data source.
+	 *
+	 * @property dataField
+	 * @type String
+	 */
+	dataField: null,
+	
+	/**
+	 * The field used to access the category value from the items from the data source.
+	 *
+	 * @property categoryField
+	 * @type String
+	 */
+	categoryField: null,
+
+	/**
+	 * A string reference to the globally-accessible function that may be called to
+	 * determine each of the label values for this series. Also accepts function references.
+	 *
+	 * @property labelFunction
+	 * @type String
+	 */
+	labelFunction: null
+});
+
+/**
+ * StackedBarSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedBarSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.StackedBarSeries = function() 
+{
+	YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedBarSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "stackbar"
+});
+
+/**
+ * StackedColumnSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedColumnSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.StackedColumnSeries = function() 
+{
+	YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "stackcolumn"
+});
+
+YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/charts/charts-experimental-debug.js
===================================================================
--- trunk/root/static/yui/charts/charts-experimental-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts-experimental-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,2291 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
-/*!
- * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
- *
- * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-var deconcept = deconcept || {};
-
-if(typeof deconcept.util == "undefined" || !deconcept.util)
-{
-	deconcept.util = {};
-}
-
-if(typeof deconcept.SWFObjectUtil == "undefined" || !deconcept.SWFObjectUtil)
-{
-	deconcept.SWFObjectUtil = {};
-}
-
-deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
-{
-	if(!document.getElementById) { return; }
-	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
-	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
-	this.params = {};
-	this.variables = {};
-	this.attributes = [];
-	if(swf) { this.setAttribute('swf', swf); }
-	if(id) { this.setAttribute('id', id); }
-	if(w) { this.setAttribute('width', w); }
-	if(h) { this.setAttribute('height', h); }
-	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
-	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
-	if (!window.opera && document.all && this.installedVer.major > 7)
-	{
-		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
-		deconcept.SWFObject.doPrepUnload = true;
-	}
-	if(c)
-	{
-		this.addParam('bgcolor', c);
-	}
-	var q = quality ? quality : 'high';
-	this.addParam('quality', q);
-	this.setAttribute('useExpressInstall', false);
-	this.setAttribute('doExpressInstall', false);
-	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
-	this.setAttribute('xiRedirectUrl', xir);
-	this.setAttribute('redirectUrl', '');
-	if(redirectUrl)
-	{
-		this.setAttribute('redirectUrl', redirectUrl);
-	}
-};
-
-deconcept.SWFObject.prototype =
-{
-	useExpressInstall: function(path)
-	{
-		this.xiSWFPath = !path ? "expressinstall.swf" : path;
-		this.setAttribute('useExpressInstall', true);
-	},
-	setAttribute: function(name, value){
-		this.attributes[name] = value;
-	},
-	getAttribute: function(name){
-		return this.attributes[name];
-	},
-	addParam: function(name, value){
-		this.params[name] = value;
-	},
-	getParams: function(){
-		return this.params;
-	},
-	addVariable: function(name, value){
-		this.variables[name] = value;
-	},
-	getVariable: function(name){
-		return this.variables[name];
-	},
-	getVariables: function(){
-		return this.variables;
-	},
-	getVariablePairs: function(){
-		var variablePairs = [];
-		var key;
-		var variables = this.getVariables();
-		for(key in variables)
-		{
-			if(variables.hasOwnProperty(key))
-			{
-				variablePairs[variablePairs.length] = key +"="+ variables[key];
-			}
-		}
-		return variablePairs;
-	},
-	getSWFHTML: function() {
-		var swfNode = "";
-		var params = {};
-		var key = "";
-		var pairs = "";
-		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "PlugIn");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
-			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += [key] +'="'+ params[key] +'" ';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
-			swfNode += '/>';
-		} else { // PC IE
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "ActiveX");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
-			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
-			swfNode += "</object>";
-		}
-		return swfNode;
-	},
-	write: function(elementId)
-	{
-		if(this.getAttribute('useExpressInstall')) {
-			// check to see if we need to do an express install
-			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
-			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
-				this.setAttribute('doExpressInstall', true);
-				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				this.addVariable("MMdoctitle", document.title);
-			}
-		}
-		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
-		{
-			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
-			n.innerHTML = this.getSWFHTML();
-			return true;
-		}
-		else
-		{
-			if(this.getAttribute('redirectUrl') !== "")
-			{
-				document.location.replace(this.getAttribute('redirectUrl'));
-			}
-		}
-		return false;
-	}
-};
-
-/* ---- detection functions ---- */
-deconcept.SWFObjectUtil.getPlayerVersion = function()
-{
-	var axo = null;
-	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
-	if(navigator.plugins && navigator.mimeTypes.length)
-	{
-		var x = navigator.plugins["Shockwave Flash"];
-		if(x && x.description)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
-		}
-	}
-	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
-	{ // if Windows CE
-		var counter = 3;
-		while(axo)
-		{
-			try
-			{
-				counter++;
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
-//				document.write("player v: "+ counter);
-				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
-			}
-			catch(e)
-			{
-				axo = null;
-			}
-		}
-	}
-	else
-	{ // Win IE (non mobile)
-		// do minor version lookup in IE, but avoid fp6 crashing issues
-		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
-		try
-		{
-			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
-		}
-		catch(e)
-		{
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
-				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
-			}
-			catch(e)
-			{
-				if(PlayerVersion.major == 6)
-				{
-					return PlayerVersion;
-				}
-			}
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
-			}
-			catch(e) {}
-		}
-		
-		if(axo !== null)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
-		}
-	}
-	return PlayerVersion;
-};
-
-deconcept.PlayerVersion = function(arrVersion)
-{
-	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
-	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
-	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
-};
-
-deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
-{
-	if(this.major < fv.major)
-	{
-		return false;
-	}
-	if(this.major > fv.major)
-	{
-		return true;
-	}
-	if(this.minor < fv.minor)
-	{
-		return false;
-	}
-	if(this.minor > fv.minor)
-	{
-		return true;
-	}
-	if(this.rev < fv.rev)
-	{
-		return false;
-	}
-	return true;
-};
-
-/* ---- get value of query string param ---- */
-deconcept.util =
-{
-	getRequestParameter: function(param)
-	{
-		var q = document.location.search || document.location.hash;
-		if(param === null) { return q; }
-		if(q)
-		{
-			var pairs = q.substring(1).split("&");
-			for(var i=0; i < pairs.length; i++)
-			{
-				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
-				{
-					return pairs[i].substring((pairs[i].indexOf("=") + 1));
-				}
-			}
-		}
-		return "";
-	}
-};
-
-/* fix for video streaming bug */
-deconcept.SWFObjectUtil.cleanupSWFs = function()
-{
-	var objects = document.getElementsByTagName("OBJECT");
-	for(var i = objects.length - 1; i >= 0; i--)
-	{
-		objects[i].style.display = 'none';
-		for(var x in objects[i])
-		{
-			if(typeof objects[i][x] == 'function')
-			{
-				objects[i][x] = function(){};
-			}
-		}
-	}
-};
-
-// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
-if(deconcept.SWFObject.doPrepUnload)
-{
-	if(!deconcept.unloadSet)
-	{
-		deconcept.SWFObjectUtil.prepUnload = function()
-		{
-			__flash_unloadHandler = function(){};
-			__flash_savedUnloadHandler = function(){};
-			window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
-		};
-		window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
-		deconcept.unloadSet = true;
-	}
-}
-
-/* add document.getElementById if needed (mobile IE < 5) */
-if(!document.getElementById && document.all)
-{
-	document.getElementById = function(id) { return document.all[id]; };
-}
-
-/* add some aliases for ease of use/backwards compatibility */
-var getQueryParamValue = deconcept.util.getRequestParameter;
-var FlashObject = deconcept.SWFObject; // for legacy support
-var SWFObject = deconcept.SWFObject;
-
-/**
- * Wraps Flash embedding functionality and allows communication with SWF through
- * attributes.
- *
- * @namespace YAHOO.widget
- * @class FlashAdapter
- * @uses YAHOO.util.AttributeProvider
- */
-YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes)
-{
-	// set up the initial events and attributes stuff
-	this._queue = this._queue || [];
-	this._events = this._events || {};
-	this._configs = this._configs || {};
-	attributes = attributes || {};
-	
-	//the Flash Player external interface code from Adobe doesn't play nicely
-	//with the default value, yui-gen, in IE
-	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
-	attributes.version = attributes.version || "9.0.45";
-	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
-	
-	//we can't use the initial attributes right away
-	//so save them for once the SWF finishes loading
-	this._attributes = attributes;
-	
-	this._swfURL = swfURL;
-	this._containerID = containerID;
-	
-	//embed the SWF file in the page
-	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
-		attributes.backgroundColor, attributes.expressInstall, attributes.wmode);
-	
-	/**
-	 * Fires when the SWF is initialized and communication is possible.
-	 * @event contentReady
-	 */
-	//Fix for iframe cross-domain issue with FF2x 
-	try
-	{
-		this.createEvent("contentReady");
-	}
-	catch(e){}
-};
-
-YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
-{
-	/**
-	 * The URL of the SWF file.
-	 * @property _swfURL
-	 * @type String
-	 * @private
-	 */
-	_swfURL: null,
-
-	/**
-	 * The ID of the containing DIV.
-	 * @property _containerID
-	 * @type String
-	 * @private
-	 */
-	_containerID: null,
-
-	/**
-	 * A reference to the embedded SWF file.
-	 * @property _swf
-	 * @private
-	 */
-	_swf: null,
-
-	/**
-	 * The id of this instance.
-	 * @property _id
-	 * @type String
-	 * @private
-	 */
-	_id: null,
-
-	/**
-	 * Indicates whether the SWF has been initialized and is ready
-	 * to communicate with JavaScript
-	 * @property _initialized
-	 * @type Boolean
-	 * @private
-	 */
-	_initialized: false,
-	
-	/**
-	 * The initializing attributes are stored here until the SWF is ready.
-	 * @property _attributes
-	 * @type Object
-	 * @private
-	 */
-	_attributes: null, //the intializing attributes
-
-	/**
-	 * Public accessor to the unique name of the FlashAdapter instance.
-	 *
-	 * @method toString
-	 * @return {String} Unique name of the FlashAdapter instance.
-	 */
-	toString: function()
-	{
-		return "FlashAdapter " + this._id;
-	},
-
-	/**
-	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
-	 * event listeners and clears out DOM elements inside the container. After calling
-	 * this method, the instance reference should be expliclitly nulled by implementer,
-	 * as in myChart = null. Use with caution!
-	 *
-	 * @method destroy
-	 */
-	destroy: function()
-	{
-		//kill the Flash Player instance
-		if(this._swf)
-		{
-			var container = YAHOO.util.Dom.get(this._containerID);
-			container.removeChild(this._swf);
-		}
-		
-		var instanceName = this._id;
-		
-		//null out properties
-		for(var prop in this)
-		{
-			if(YAHOO.lang.hasOwnProperty(this, prop))
-			{
-				this[prop] = null;
-			}
-		}
-		
-		YAHOO.log("FlashAdapter instance destroyed: " + instanceName);
-	},
-
-	/**
-	 * Embeds the SWF in the page and associates it with this instance.
-	 *
-	 * @method _embedSWF
-	 * @private
-	 */
-	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode)
-	{
-		//standard SWFObject embed
-		var swfObj = new deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
-
-		if(expressInstall)
-		{
-			swfObj.useExpressInstall(expressInstall);
-		}
-
-		//make sure we can communicate with ExternalInterface
-		swfObj.addParam("allowScriptAccess", "always");
-		
-		if(wmode)
-		{
-			swfObj.addParam("wmode", wmode);
-		}
-		
-		//again, a useful ExternalInterface trick
-		swfObj.addVariable("allowedDomain", document.location.hostname);
-
-		//tell the SWF which HTML element it is in
-		swfObj.addVariable("elementID", swfID);
-
-		// set the name of the function to call when the swf has an event
-		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
-
-		var container = YAHOO.util.Dom.get(containerID);
-		var result = swfObj.write(container);
-		if(result)
-		{
-			this._swf = YAHOO.util.Dom.get(swfID);
-			//if successful, let's add an owner property to the SWF reference
-			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
-			this._swf.owner = this;
-		}
-		else
-		{
-			YAHOO.log("Unable to load SWF " + swfURL);
-		}
-	},
-
-	/**
-	 * Handles or re-dispatches events received from the SWF.
-	 *
-	 * @method _eventHandler
-	 * @private
-	 */
-	_eventHandler: function(event)
-	{
-		var type = event.type;
-		switch(type)
-		{
-			case "swfReady":
-   				this._loadHandler();
-   				this.fireEvent("contentReady");
-				return;
-			case "log":
-				YAHOO.log(event.message, event.category, this.toString());
-				return;
-		}
-		
-		//be sure to return after your case or the event will automatically fire!
-		this.fireEvent(type, event);
-	},
-
-	/**
-	 * Called when the SWF has been initialized.
-	 *
-	 * @method _loadHandler
-	 * @private
-	 */
-	_loadHandler: function()
-	{
-		this._initialized = false;
-		this._initAttributes(this._attributes);
-		this.setAttributes(this._attributes, true);
-		
-		this._initialized = true;
-	},
-	
-	set: function(name, value)
-	{
-		//save all the attributes in case the swf reloads
-		//so that we can pass them in again
-		this._attributes[name] = value;
-		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{
-		//should be overridden if other attributes need to be set up
-
-		/**
-		 * @attribute wmode
-		 * @description Sets the window mode of the Flash Player control. May be
-		 *		"window", "opaque", or "transparent". Only available in the constructor
-		 *		because it may not be set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute expressInstall
-		 * @description URL pointing to a SWF file that handles Flash Player's express
-		 *		install feature. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute version
-		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute backgroundColor
-		 * @description The background color of the SWF. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute altText
-		 * @description The alternative text to provide for screen readers and other assistive technology.
-		 * @type String
-		 */
-		this.getAttributeConfig("altText",
-		{
-			method: this._getAltText
-		});
-		this.setAttributeConfig("altText",
-		{
-			method: this._setAltText
-		});
-		
-		/**
-		 * @attribute swfURL
-		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		this.getAttributeConfig("swfURL",
-		{
-			method: this._getSWFURL
-		});
-	},
-	
-	/**
-	 * Getter for swfURL attribute.
-	 *
-	 * @method _getSWFURL
-	 * @private
-	 */
-	_getSWFURL: function()
-	{
-		return this._swfURL;
-	},
-	
-	/**
-	 * Getter for altText attribute.
-	 *
-	 * @method _getAltText
-	 * @private
-	 */
-	_getAltText: function()
-	{
-		return this._swf.getAltText();
-	},
-
-	/**
-	 * Setter for altText attribute.
-	 *
-	 * @method _setAltText
-	 * @private
-	 */
-	_setAltText: function(value)
-	{
-		return this._swf.setAltText(value);
-	}
-});
-
-/**
- * Receives event messages from SWF and passes them to the correct instance
- * of FlashAdapter.
- *
- * @method YAHOO.widget.FlashAdapter.eventHandler
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
-{
-	var loadedSWF = YAHOO.util.Dom.get(elementID);
-	if(!loadedSWF.owner)
-	{
-		//fix for ie: if owner doesn't exist yet, try again in a moment
-		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
-	}
-	else
-	{
-		loadedSWF.owner._eventHandler(event);
-	}
-};
-
-/**
- * The number of proxy functions that have been created.
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
-
-/**
- * Creates a globally accessible function that wraps a function reference.
- * Returns the proxy function's name as a string for use by the SWF through
- * ExternalInterface.
- *
- * @method YAHOO.widget.FlashAdapter.createProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
-{
-	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
-	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
-	{
-		return func.apply(null, arguments);
-	};
-	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
-	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
-};
-
-/**
- * Removes a function created with createProxyFunction()
- * 
- * @method YAHOO.widget.FlashAdapter.removeProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
-{
-	//quick error check
-	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
-	{
-		return;
-	}
-	
-	funcName = funcName.substr(26);
-	YAHOO.widget.FlashAdapter[funcName] = null;
-};
-
-/**
- * The Charts widget provides a Flash control for displaying data
- * graphically by series across A-grade browsers with Flash Player installed.
- *
- * @module charts
- * @requires yahoo, dom, event, datasource
- * @title Charts Widget
- * @experimental
- */
- 
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Chart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class Chart
- * @uses YAHOO.widget.FlashAdapter
- * @constructor
- * @param type {String} The char type. May be "line", "column", "bar", or "pie"
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.Chart = function(type, containerId, dataSource, attributes)
-{
-	YAHOO.widget.Chart.superclass.constructor.call(this, YAHOO.widget.Chart.SWFURL, containerId, attributes);
-	
-	this._type = type;
-	this._dataSource = dataSource;
-	
-	/**
-	 * Fires when the user moves the mouse over the bounds of an item renderer in the chart.
-	 *
-	 * @event itemMouseOverEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemMouseOverEvent");
-	
-	/**
-	 * Fires when the user moves the mouse out of the bounds of an item renderer in the chart.
-	 *
-	 * @event itemMouseOutEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemMouseOutEvent");
-	
-	/**
-	 * Fires when the user clicks an item renderer in the chart with the mouse.
-	 *
-	 * @event itemClickEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemClickEvent");
-	
-	/**
-	 * Fires when the user double-clicks an item renderer in the chart with the mouse.
-	 *
-	 * @event itemDoubleClickEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDoubleClickEvent");
-	
-	/**
-	 * Fires when the user presses the mouse down on an item to initiate a drag action.
-	 *
-	 * @event itemDragStartEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragStartEvent");
-	
-	/**
-	 * Fires when the user moves the mouse during a drag action.
-	 *
-	 * @event itemDragEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragEvent");
-
-	/**
-	 * Fires when the user releases the mouse during a drag action.
-	 *
-	 * @event itemDragEndEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragEndEvent");
-};
-
-YAHOO.extend(YAHOO.widget.Chart, YAHOO.widget.FlashAdapter,
-{
-	/**
-	 * The type of this chart instance.
-	 * @property _type
-	 * @type String
-	 * @private
-	 */
-	_type: null,
-
-	/**
-	 * The id returned from the DataSource's setInterval function.
-	 * @property _pollingID
-	 * @type Number
-	 * @private
-	 */
-	_pollingID: null,
-
-	/**
-	 * The time, in ms, between requests for data.
-	 * @property _pollingInterval
-	 * @type Number
-	 * @private
-	 */
-	_pollingInterval: null,
-
-	/**
-	 * Stores a reference to the dataTipFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _dataTipFunction
-	 * @type String
-	 * @private
-	 */
-	_dataTipFunction: null,
-	
-	/**
-	 * Stores references to series labelFunction values created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _seriesLabelFunctions
-	 * @type Array
-	 * @private
-	 */
-	_seriesLabelFunctions: null,
-
-	/**
-	 * Public accessor to the unique name of the Chart instance.
-	 *
-	 * @method toString
-	 * @return {String} Unique name of the Chart instance.
-	 */
-	toString: function()
-	{
-		return "Chart " + this._id;
-	},
-	
-	/**
-	 * Sets a single style value on the Chart instance.
-	 *
-	 * @method setStyle
-	 * @param name {String} Name of the Chart style value to change.
-	 * @param value {Object} New value to pass to the Chart style.
-	 */
-	setStyle: function(name, value)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		value = YAHOO.lang.JSON.stringify(value);
-		this._swf.setStyle(name, value);
-	},
-	
-	/**
-	 * Resets all styles on the Chart instance.
-	 *
-	 * @method setStyles
-	 * @param styles {Object} Initializer for all Chart styles.
-	 */
-	setStyles: function(styles)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		styles = YAHOO.lang.JSON.stringify(styles);
-		this._swf.setStyles(styles);
-	},
-	
-	/**
-	 * Sets the styles on all series in the Chart.
-	 *
-	 * @method setSeriesStyles
-	 * @param styles {Array} Initializer for all Chart series styles.
-	 */
-	setSeriesStyles: function(styles)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		for(var i = 0; i < styles.length; i++)
-		{
-			styles[i] = YAHOO.lang.JSON.stringify(styles[i]);	
-		}
-		this._swf.setSeriesStyles(styles);
-	},
-	
-	destroy: function()
-	{
-		//stop polling if needed
-		if(this._dataSource !== null)
-		{
-			if(this._pollingID !== null)
-			{
-				this._dataSource.clearInterval(this._pollingID);
-				this._pollingID = null;
-			}
-		}
-		
-		//remove proxy functions
-		if(this._dataTipFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
-		}
-		
-		//call last
-		YAHOO.widget.Chart.superclass.destroy.call(this);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{
-		YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes);
-
-		/**
-		 * @attribute request
-		 * @description Request to be sent to the Chart's DataSource.
-		 * @type String
-		 */
-		this.getAttributeConfig("request",
-		{
-			method: this._getRequest
-		});
-		
-		this.setAttributeConfig("request",
-		{
-			method: this._setRequest
-		});
-		
-		/**
-		 * @attribute dataSource
-		 * @description The DataSource instance to display in the Chart.
-		 * @type DataSource
-		 */
-		this.getAttributeConfig("dataSource",
-		{
-			method: this._getDataSource
-		});
-		
-		this.setAttributeConfig("dataSource",
-		{
-			method: this._setDataSource
-		});
-		
-		/**
-		 * @attribute series
-		 * @description Defines the series to be displayed by the Chart.
-		 * @type Array
-		 */
-		this.getAttributeConfig("series",
-		{
-			method: this._getSeriesDefs
-		});
-		
-		this.setAttributeConfig("series",
-		{
-			method: this._setSeriesDefs
-		});
-		
-		/**
-		 * @attribute categoryNames
-		 * @description Defines the names of the categories to be displayed in the Chart..
-		 * @type Array
-		 */
-		this.getAttributeConfig("categoryNames",
-		{
-			method: this._getCategoryNames
-		});
-		
-		this.setAttributeConfig("categoryNames",
-		{
-			validator: YAHOO.lang.isArray,
-			method: this._setCategoryNames
-		});
-		
-		/**
-		 * @attribute dataTipFunction
-		 * @description The string representation of a globally-accessible function
-		 * that may be called by the SWF to generate the datatip text for a Chart's item.
-		 * @type String
-		 */
-		this.getAttributeConfig("dataTipFunction",
-		{
-			method: this._getDataTipFunction
-		});
-		
-		this.setAttributeConfig("dataTipFunction",
-		{
-			method: this._setDataTipFunction
-		});
-
-		/**
-		 * @attribute polling
-		 * @description A numeric value indicating the number of milliseconds between
-		 * polling requests to the DataSource.
-		 * @type Number
-		 */
-		this.getAttributeConfig("polling",
-		{
-			method: this._getPolling
-		});
-
-		this.setAttributeConfig("polling",
-		{
-			method: this._setPolling
-		});
-	},
-	
-	/**
-	 * Called when the SWF is ready for communication. Sets the type, initializes
-	 * the styles, and sets the DataSource.
-	 *
-	 * @method _loadHandler
-	 * @private
-	 */
-	_loadHandler: function()
-	{
-		//the type is set separately because it must be first!
-		this._swf.setType(this._type);
-		
-		//set initial styles
-		if(this._attributes.style)
-		{
-			var style = this._attributes.style;
-			this.setStyles(style);		
-		}
-		
-		YAHOO.widget.Chart.superclass._loadHandler.call(this);
-		
-		if(this._dataSource)
-		{
-			this.set("dataSource", this._dataSource);
-		}
-	},
-
-	/**
-	 * Sends (or resends) the request to the DataSource.
-	 *
-	 * @method refreshData
-	 */
-	refreshData: function()
-	{
-		if(!this._initialized)
-		{
-			return;
-		}
-		
-		if(this._dataSource !== null)
-		{
-			if(this._pollingID !== null)
-			{
-				this._dataSource.clearInterval(this._pollingID);
-				this._pollingID = null;
-			}
-			
-			if(this._pollingInterval > 0)
-			{
-				this._pollingID = this._dataSource.setInterval(this._pollingInterval, this._request, this._loadDataHandler, this);
-			}
-			this._dataSource.sendRequest(this._request, this._loadDataHandler, this);
-		}
-	},
-
-	/**
-	 * Called when the DataSource receives new data. The series definitions are used
-	 * to build a data provider for the SWF chart.
-	 *
-	 * @method _loadDataHandler
-	 * @private
-	 */
-	_loadDataHandler: function(request, response, error)
-	{
-		if(this._swf)
-		{
-			if(error)
-			{
-				YAHOO.log("Unable to load data.", "error");
-			}
-			else
-			{
-				var i;
-				if(this._seriesLabelFunctions)
-				{
-					var count = this._seriesLabelFunctions.length;
-					for(i = 0; i < count; i++)
-					{
-						YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[i]);
-					}
-					this._seriesLabelFunction = null;
-				}
-				this._seriesLabelFunctions = [];
-
-				//make a copy of the series definitions so that we aren't
-				//editing them directly.
-				var dataProvider = [];	
-				var seriesCount = 0;
-				var currentSeries = null;
-				if(this._seriesDefs !== null)
-				{
-					seriesCount = this._seriesDefs.length;
-					for(i = 0; i < seriesCount; i++)
-					{
-						currentSeries = this._seriesDefs[i];
-						var clonedSeries = {};
-						for(var prop in currentSeries)
-						{
-							if(YAHOO.lang.hasOwnProperty(currentSeries, prop))
-							{
-								if(prop == "style")
-								{
-									if(currentSeries.style !== null)
-									{
-										clonedSeries.style = YAHOO.lang.JSON.stringify(currentSeries.style);
-									}
-								}
-
-								else if(prop == "labelFunction")
-								{
-									if(currentSeries.labelFunction !== null &&
-										typeof currentSeries.labelFunction == "function")
-									{
-										clonedSeries.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(currentSeries.labelFunction);
-										this._seriesLabelFunctions.push(clonedSeries.labelFunction);
-									}
-								}
-
-								else
-								{
-									clonedSeries[prop] = currentSeries[prop];
-								}
-							}
-						}
-						dataProvider.push(clonedSeries);
-					}
-				}
-
-				if(seriesCount > 0)
-				{
-					for(i = 0; i < seriesCount; i++)
-					{
-						currentSeries = dataProvider[i];
-						if(!currentSeries.type)
-						{
-							currentSeries.type = this._type;
-						}
-						currentSeries.dataProvider = response.results;
-					}
-				}
-				else
-				{
-					var series = {type: this._type, dataProvider: response.results};
-					dataProvider.push(series);
-				}
-				this._swf.setDataProvider(dataProvider);
-			}
-		}
-	},
-
-	/**
-	 * Storage for the request attribute.
-	 * 
-	 * @property _request
-	 * @private
-	 */
-	_request: "",
-	
-	/**
-	 * Getter for the request attribute.
-	 *
-	 * @method _getRequest
-	 * @private
-	 */
-	_getRequest: function()
-	{
-		return this._request;
-	},
-	
-	/**
-	 * Setter for the request attribute.
-	 *
-	 * @method _setRequest
-	 * @private
-	 */
-	_setRequest: function(value)
-	{
-		this._request = value;
-		this.refreshData();
-	},
-
-	/**
-	 * Storage for the dataSource attribute.
-	 * 
-	 * @property _dataSource
-	 * @private
-	 */
-	_dataSource: null,
-	
-	/**
-	 * Getter for the dataSource attribute.
-	 *
-	 * @method _getDataSource
-	 * @private
-	 */
-	_getDataSource: function()
-	{
-		return this._dataSource;
-	},
-
-	/**
-	 * Setter for the dataSource attribute.
-	 *
-	 * @method _setDataSource
-	 * @private
-	 */
-	_setDataSource: function(value)
-	{	
-		this._dataSource = value;
-		this.refreshData();
-	},
-	
-	/**
-	 * Storage for the series attribute.
-	 * 
-	 * @property _seriesDefs
-	 * @private
-	 */
-	_seriesDefs: null,
-	
-	/**
-	 * Getter for the series attribute.
-	 *
-	 * @method _getSeriesDefs
-	 * @private
-	 */
-	_getSeriesDefs: function()
-	{
-		return this._seriesDefs;
-	},
-	
-	/**
-	 * Setter for the series attribute.
-	 *
-	 * @method _setSeriesDefs
-	 * @private
-	 */
-	_setSeriesDefs: function(value)
-	{
-		this._seriesDefs = value;
-		this.refreshData();
-	},
-
-	/**
-	 * Getter for the categoryNames attribute.
-	 *
-	 * @method _getCategoryNames
-	 * @private
-	 */
-	_getCategoryNames: function()
-	{
-		this._swf.getCategoryNames();
-	},
-
-	/**
-	 * Setter for the categoryNames attribute.
-	 *
-	 * @method _setCategoryNames
-	 * @private
-	 */
-	_setCategoryNames: function(value)
-	{
-		this._swf.setCategoryNames(value);
-	},
-	
-	/**
-	 * Setter for the dataTipFunction attribute.
-	 *
-	 * @method _setDataTipFunction
-	 * @private
-	 */
-	_setDataTipFunction: function(value)
-	{
-		if(this._dataTipFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
-		}
-		
-		if(value && typeof value == "function")
-		{
-			value = YAHOO.widget.FlashAdapter.createProxyFunction(value);
-			this._dataTipFunction = value;
-		}
-		this._swf.setDataTipFunction(value);
-	},
-
-	/**
-	 * Getter for the polling attribute.
-	 *
-	 * @method _getPolling
-	 * @private
-	 */
-	_getPolling: function()
-	{
-		return this._pollingInterval;
-	},
-
-	/**
-	 * Setter for the polling attribute.
-	 *
-	 * @method _setPolling
-	 * @private
-	 */
-	_setPolling: function(value)
-	{
-		this._pollingInterval = value;
-		this.refreshData();
-	}
-});
-
-/**
- * Storage for the dataTipFunction attribute.
- *
- * @property Chart.SWFURL
- * @private
- * @static
- * @final
- * @default "assets/charts.swf"
- */
-YAHOO.widget.Chart.SWFURL = "assets/charts.swf";
-
-/**
- * PieChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class PieChart
- * @uses YAHOO.widget.Chart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.PieChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.PieChart.superclass.constructor.call(this, "pie", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.PieChart, YAHOO.widget.Chart,
-{
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{	
-		YAHOO.widget.PieChart.superclass._initAttributes.call(this, attributes);
-		
-		/**
-		 * @attribute dataField
-		 * @description The field in each item that corresponds to the data value.
-		 * @type String
-		 */
-		this.getAttributeConfig("dataField",
-		{
-			method: this._getDataField
-		});
-   
-		this.setAttributeConfig("dataField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setDataField
-		});
-   
-		/**
-		 * @attribute categoryField
-		 * @description The field in each item that corresponds to the category value.
-		 * @type String
-		 */
-		this.getAttributeConfig("categoryField",
-		{
-			method: this._getCategoryField
-		});
-   
-		this.setAttributeConfig("categoryField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setCategoryField
-		});
-	},
-
-	/**
-	 * Getter for the dataField attribute.
-	 *
-	 * @method _getDataField
-	 * @private
-	 */
-	_getDataField: function()
-	{
-		return this._swf.getDataField();
-	},
-
-	/**
-	 * Setter for the dataField attribute.
-	 *
-	 * @method _setDataField
-	 * @private
-	 */
-	_setDataField: function(value)
-	{
-		this._swf.setDataField(value);
-	},
-
-	/**
-	 * Getter for the categoryField attribute.
-	 *
-	 * @method _getCategoryField
-	 * @private
-	 */
-	_getCategoryField: function()
-	{
-		return this._swf.getCategoryField();
-	},
-
-	/**
-	 * Setter for the categoryField attribute.
-	 *
-	 * @method _setCategoryField
-	 * @private
-	 */
-	_setCategoryField: function(value)
-	{
-		this._swf.setCategoryField(value);
-	}
-});
-
-/**
- * CartesianChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class CartesianChart
- * @uses YAHOO.widget.Chart
- * @constructor
- * @param type {String} The char type. May be "line", "column", or "bar"
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
- YAHOO.widget.CartesianChart = function(type, containerId, dataSource, attributes)
-{
-	YAHOO.widget.CartesianChart.superclass.constructor.call(this, type, containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CartesianChart, YAHOO.widget.Chart,
-{
-	/**
-	 * Stores a reference to the xAxis labelFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _xAxisLabelFunction
-	 * @type String
-	 * @private
-	 */
-	_xAxisLabelFunction: null,
-	
-	/**
-	 * Stores a reference to the yAxis labelFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _yAxisLabelFunction
-	 * @type String
-	 * @private
-	 */
-	_yAxisLabelFunction: null,
-	
-	destroy: function()
-	{
-		//remove proxy functions
-		if(this._xAxisLabelFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
-			this._xAxisLabelFunction = null;
-		}
-		
-		if(this._yAxisLabelFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
-			this._yAxisLabelFunction = null;
-		}
-	
-		//call last
-		YAHOO.widget.CartesianChart.superclass.destroy.call(this);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{	
-		YAHOO.widget.CartesianChart.superclass._initAttributes.call(this, attributes);
-
-		/**
-		 * @attribute xField
-		 * @description The field in each item that corresponds to a value on the x axis.
-		 * @type String
-		 */
-		this.getAttributeConfig("xField",
-		{
-			method: this._getXField
-		});
-
-		this.setAttributeConfig("xField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setXField
-		});
-
-		/**
-		 * @attribute yField
-		 * @description The field in each item that corresponds to a value on the x axis.
-		 * @type String
-		 */
-		this.getAttributeConfig("yField",
-		{
-			method: this._getYField
-		});
-
-		this.setAttributeConfig("yField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setYField
-		});
-
-		/**
-		 * @attribute xAxis
-		 * @description A custom configuration for the horizontal x axis.
-		 * @type Axis
-		 */
-		this.setAttributeConfig("xAxis",
-		{
-			method: this._setXAxis
-		});
-
-		/**
-		 * @attribute yAxis
-		 * @description A custom configuration for the vertical y axis.
-		 * @type Axis
-		 */
-		this.setAttributeConfig("yAxis",
-		{
-			method: this._setYAxis
-		});
-	},
-
-	/**
-	 * Getter for the xField attribute.
-	 *
-	 * @method _getXField
-	 * @private
-	 */
-	_getXField: function()
-	{
-		return this._swf.getHorizontalField();
-	},
-
-	/**
-	 * Setter for the xField attribute.
-	 *
-	 * @method _setXField
-	 * @private
-	 */
-	_setXField: function(value)
-	{
-		this._swf.setHorizontalField(value);
-	},
-
-	/**
-	 * Getter for the yField attribute.
-	 *
-	 * @method _getYField
-	 * @private
-	 */
-	_getYField: function()
-	{
-		return this._swf.getVerticalField();
-	},
-
-	/**
-	 * Setter for the yField attribute.
-	 *
-	 * @method _setYField
-	 * @private
-	 */
-	_setYField: function(value)
-	{
-		this._swf.setVerticalField(value);
-	},
-	
-	/**
-	 * Setter for the xAxis attribute.
-	 *
-	 * @method _setXAxis
-	 * @private
-	 */
-	_setXAxis: function(value)
-	{
-		if(this._xAxisLabelFunction !== null)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
-			this._xAxisLabelFunction = null;
-		}
-		
-		var clonedXAxis = {};
-		for(var prop in value)
-		{
-			if(prop == "labelFunction")
-			{
-				if(value.labelFunction !== null)
-				{
-					if(typeof value.labelFunction == "function")
-					{
-						clonedXAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
-					}
-					else
-					{
-						clonedXAxis.labelFunction = value.labelFunction;
-					}
-					this._xAxisLabelFunction = clonedXAxis.labelFunction;
-				}
-			}
-			else
-			{
-				clonedXAxis[prop] = value[prop];
-			}
-		}
-		this._swf.setHorizontalAxis(clonedXAxis);
-	},
-
-	/**
-	 * Getter for the yAxis attribute.
-	 *
-	 * @method _setYAxis
-	 * @private
-	 */
-	_setYAxis: function(value)
-	{
-		if(this._yAxisLabelFunction !== null)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
-			this._yAxisLabelFunction = null;
-		}
-
-		var clonedYAxis = {};
-		for(var prop in value)
-		{
-			if(prop == "labelFunction")
-			{
-				if(value.labelFunction !== null)
-				{
-					if(typeof value.labelFunction == "function")
-					{
-						clonedYAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
-					}
-					else
-					{
-						clonedYAxis.labelFunction = value.labelFunction;
-					}
-					this._yAxisLabelFunction = clonedYAxis.labelFunction;
-				}
-			}
-			else
-			{
-				clonedYAxis[prop] = value[prop];
-			}
-		}
-		this._swf.setVerticalAxis(clonedYAxis);
-	}
-});
-
-/**
- * LineChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class LineChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.LineChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.LineChart.superclass.constructor.call(this, "line", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.LineChart, YAHOO.widget.CartesianChart);
-
-/**
- * ColumnChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class ColumnChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.ColumnChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.ColumnChart.superclass.constructor.call(this, "column", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.ColumnChart, YAHOO.widget.CartesianChart);
-
-/**
- * BarChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class BarChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.BarChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.BarChart.superclass.constructor.call(this, "bar", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.BarChart, YAHOO.widget.CartesianChart);
-
-/**
- * StackedColumnChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedColumnChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.StackedColumnChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.StackedColumnChart.superclass.constructor.call(this, "stackcolumn", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedColumnChart, YAHOO.widget.CartesianChart);
-
-/**
- * StackedBarChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedBarChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.StackedBarChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.StackedBarChart.superclass.constructor.call(this, "stackbar", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedBarChart, YAHOO.widget.CartesianChart);
-
-/**
- * Defines a CartesianChart's vertical or horizontal axis.
- *
- * @namespace YAHOO.widget
- * @class Axis
- * @constructor
- */
-YAHOO.widget.Axis = function()
-{
-};
-
-YAHOO.widget.Axis.prototype = 
-{
-	/**
-	 * The type of axis.
-	 *
-	 * @property type
-	 * @type String
-	 */
-	type: null,
-	
-	/**
-	 * If true, the items on the axis will be drawn in opposite direction.
-	 *
-	 * @property reverse
-	 * @type Boolean
-	 */
-	reverse: false,
-	
-	/**
-	 * A string reference to the globally-accessible function that may be called to
-	 * determine each of the label values for this axis. Also accepts function references.
-	 *
-	 * @property labelFunction
-	 * @type String
-	 */
-	labelFunction: null
-};
-
-/**
- * A type of axis whose units are measured in numeric values.
- *
- * @namespace YAHOO.widget
- * @class NumericAxis
- * @constructor
- */
-YAHOO.widget.NumericAxis = function()
-{
-	YAHOO.widget.NumericAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.NumericAxis, YAHOO.widget.Axis,
-{
-	type: "numeric",
-	
-	/**
-	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
-	 * will be calculated automatically.
-	 *
-	 * @property minimum
-	 * @type Number
-	 */
-	minimum: NaN,
-	
-	/**
-	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
-	 * will be calculated automatically.
-	 *
-	 * @property maximum
-	 * @type Number
-	 */
-	maximum: NaN,
-	
-	/**
-	 * The spacing between major intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	majorUnit: NaN,
-
-	/**
-	 * The spacing between minor intervals on this axis.
-	 *
-	 * @property minorUnit
-	 * @type Number
-	 */
-	minorUnit: NaN,
-	
-	/**
-	 * If true, the labels, ticks, gridlines, and other objects will snap to
-	 * the nearest major or minor unit. If false, their position will be based
-	 * on the minimum value.
-	 *
-	 * @property snapToUnits
-	 * @type Boolean
-	 */
-	snapToUnits: true,
-	
-	/**
-	 * Series that are stackable will only stack when this value is set to true.
-	 *
-	 * @property stackingEnabled
-	 * @type Boolean
-	 */
-	stackingEnabled: false,
-
-	/**
-	 * If true, and the bounds are calculated automatically, either the minimum or
-	 * maximum will be set to zero.
-	 *
-	 * @property alwaysShowZero
-	 * @type Boolean
-	 */
-	alwaysShowZero: true,
-
-	/**
-	 * The scaling algorithm to use on this axis. May be "linear" or "logarithmic".
-	 *
-	 * @property scale
-	 * @type String
-	 */
-	scale: "linear"
-});
-
-/**
- * A type of axis whose units are measured in time-based values.
- *
- * @namespace YAHOO.widget
- * @class TimeAxis
- * @constructor
- */
-YAHOO.widget.TimeAxis = function()
-{
-	YAHOO.widget.TimeAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.TimeAxis, YAHOO.widget.Axis,
-{
-	type: "time",
-	
-	/**
-	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
-	 * will be calculated automatically.
-	 *
-	 * @property minimum
-	 * @type Date
-	 */
-	minimum: null,
-
-	/**
-	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
-	 * will be calculated automatically.
-	 *
-	 * @property maximum
-	 * @type Number
-	 */
-	maximum: null,
-	
-	/**
-	 * The spacing between major intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	majorUnit: NaN,
-	
-	/**
-	 * The time unit used by the majorUnit.
-	 *
-	 * @property majorTimeUnit
-	 * @type String
-	 */
-	majorTimeUnit: null,
-	
-	/**
-	 * The spacing between minor intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	minorUnit: NaN,
-	
-	/**
-	 * The time unit used by the minorUnit.
-	 *
-	 * @property majorTimeUnit
-	 * @type String
-	 */
-	minorTimeUnit: null,
-
-	/**
-	 * If true, the labels, ticks, gridlines, and other objects will snap to
-	 * the nearest major or minor unit. If false, their position will be based
-	 * on the minimum value.
-	 *
-	 * @property snapToUnits
-	 * @type Boolean
-	 */
-	snapToUnits: true,
-
-	/**
-	 * Series that are stackable will only stack when this value is set to true.
-	 *
-	 * @property stackingEnabled
-	 * @type Boolean
-	 */
-	stackingEnabled: false
-});
-
-/**
- * A type of axis that displays items in categories.
- *
- * @namespace YAHOO.widget
- * @class CategoryAxis
- * @constructor
- */
-YAHOO.widget.CategoryAxis = function()
-{
-	YAHOO.widget.CategoryAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CategoryAxis, YAHOO.widget.Axis,
-{
-	type: "category",
-	
-	/**
-	 * A list of category names to display along this axis.
-	 *
-	 * @property categoryNames
-	 * @type Array
-	 */
-	categoryNames: null
-});
-
-/**
- * Functionality common to most series. Generally, a <code>Series</code> 
- * object shouldn't be instantiated directly. Instead, a subclass with a 
- * concrete implementation should be used.
- *
- * @namespace YAHOO.widget
- * @class Series
- * @constructor
- */
-YAHOO.widget.Series = function() {};
-
-YAHOO.widget.Series.prototype = 
-{
-	/**
-	 * The type of series.
-	 *
-	 * @property type
-	 * @type String
-	 */
-	type: null,
-	
-	/**
-	 * The human-readable name of the series.
-	 *
-	 * @property displayName
-	 * @type String
-	 */
-	displayName: null
-};
-
-/**
- * Functionality common to most series appearing in cartesian charts.
- * Generally, a <code>CartesianSeries</code> object shouldn't be
- * instantiated directly. Instead, a subclass with a concrete implementation
- * should be used.
- *
- * @namespace YAHOO.widget
- * @class CartesianSeries
- * @uses YAHOO.widget.Series
- * @constructor
- */
-YAHOO.widget.CartesianSeries = function() 
-{
-	YAHOO.widget.CartesianSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CartesianSeries, YAHOO.widget.Series,
-{
-	/**
-	 * The field used to access the x-axis value from the items from the data source.
-	 *
-	 * @property xField
-	 * @type String
-	 */
-	xField: null,
-	
-	/**
-	 * The field used to access the y-axis value from the items from the data source.
-	 *
-	 * @property yField
-	 * @type String
-	 */
-	yField: null
-});
-
-/**
- * ColumnSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class ColumnSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.ColumnSeries = function() 
-{
-	YAHOO.widget.ColumnSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.ColumnSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "column"
-});
-
-/**
- * LineSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class LineSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.LineSeries = function() 
-{
-	YAHOO.widget.LineSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.LineSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "line"
-});
-
-
-/**
- * BarSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class BarSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.BarSeries = function() 
-{
-	YAHOO.widget.BarSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.BarSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "bar"
-});
-
-
-/**
- * PieSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class PieSeries
- * @uses YAHOO.widget.Series
- * @constructor
- */
-YAHOO.widget.PieSeries = function() 
-{
-	YAHOO.widget.PieSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.PieSeries, YAHOO.widget.Series,
-{
-	type: "pie",
-	
-	/**
-	 * The field used to access the data value from the items from the data source.
-	 *
-	 * @property dataField
-	 * @type String
-	 */
-	dataField: null,
-	
-	/**
-	 * The field used to access the category value from the items from the data source.
-	 *
-	 * @property categoryField
-	 * @type String
-	 */
-	categoryField: null,
-
-	/**
-	 * A string reference to the globally-accessible function that may be called to
-	 * determine each of the label values for this series. Also accepts function references.
-	 *
-	 * @property labelFunction
-	 * @type String
-	 */
-	labelFunction: null
-});
-
-/**
- * StackedBarSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedBarSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.StackedBarSeries = function() 
-{
-	YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedBarSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "stackbar"
-});
-
-/**
- * StackedColumnSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedColumnSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.StackedColumnSeries = function() 
-{
-	YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "stackcolumn"
-});
-
-YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/charts/charts-experimental-min.js
===================================================================
--- trunk/root/static/yui/charts/charts-experimental-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts-experimental-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,16 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/*
- * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
- *
- * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-var deconcept=deconcept||{};if(typeof deconcept.util=="undefined"||!deconcept.util){deconcept.util={};}if(typeof deconcept.SWFObjectUtil=="undefined"||!deconcept.SWFObjectUtil){deconcept.SWFObjectUtil={};}deconcept.SWFObject=function(E,C,K,F,H,J,L,G,A,D){if(!document.getElementById){return ;}this.DETECT_KEY=D?D:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params={};this.variables={};this.attributes=[];if(E){this.setAttribute("swf",E);}if(C){this.setAttribute("id",C);}if(K){this.setAttribute("width",K);}if(F){this.setAttribute("height",F);}if(H){this.setAttribute("version",new deconcept.PlayerVersion(H.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(J){this.addParam("bgcolor",J);}var B=L?L:"high";this.addParam("quality",B);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressIn!
 stall",false);var I=(G)?G:window.location;this.setAttribute("xiRedirectUrl",I);this.setAttribute("redirectUrl","");if(A){this.setAttribute("redirectUrl",A);}};deconcept.SWFObject.prototype={useExpressInstall:function(A){this.xiSWFPath=!A?"expressinstall.swf":A;this.setAttribute("useExpressInstall",true);},setAttribute:function(A,B){this.attributes[A]=B;},getAttribute:function(A){return this.attributes[A];},addParam:function(A,B){this.params[A]=B;},getParams:function(){return this.params;},addVariable:function(A,B){this.variables[A]=B;},getVariable:function(A){return this.variables[A];},getVariables:function(){return this.variables;},getVariablePairs:function(){var A=[];var B;var C=this.getVariables();for(B in C){if(C.hasOwnProperty(B)){A[A.length]=B+"="+C[B];}}return A;},getSWFHTML:function(){var D="";var C={};var A="";var B="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","Pl!
 ugIn");this.setAttribute("swf",this.xiSWFPath);}D='<embed type!
 ="applic
ation/x-shockwave-flash" src="'+this.getAttribute("swf")+'" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'"';D+=' id="'+this.getAttribute("id")+'" name="'+this.getAttribute("id")+'" ';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+=[A]+'="'+C[A]+'" ';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='flashvars="'+B+'"';}D+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}D='<object id="'+this.getAttribute("id")+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'">';D+='<param name="movie" value="'+this.getAttribute("swf")+'" />';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+='<param name="'+A+'" value="'+C[A]+'" />';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='!
 <param name="flashvars" value="'+B+'" />';}D+="</object>";}return D;},write:function(A){if(this.getAttribute("useExpressInstall")){var B=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(B)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var C=(typeof A=="string")?document.getElementById(A):A;C.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!==""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var D=null;var C=new deconcept.PlayerVersion([0,0,0]);if(navigator.p!
 lugins&&navigator.mimeTypes.length){var A=navigator.plugins["S!
 hockwave
 Flash"];if(A&&A.description){C=new deconcept.PlayerVersion(A.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var B=3;while(D){try{B++;D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+B);C=new deconcept.PlayerVersion([B,0,0]);}catch(E){D=null;}}}else{try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(E){try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");C=new deconcept.PlayerVersion([6,0,21]);D.AllowScriptAccess="always";}catch(E){if(C.major==6){return C;}}try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(E){}}if(D!==null){C=new deconcept.PlayerVersion(D.GetVariable("$version").split(" ")[1].split(","));}}}return C;};deconcept.PlayerVersion=function(A){this.major=A[0]!==null?parseInt(A[0],0):0;this.minor=A[1]!==null?parseInt(A[1],0):0;this.rev=A[2]!==null?parseInt(A[2],0):0;};deconcept.PlayerVersion.prototype.versionIsVal!
 id=function(A){if(this.major<A.major){return false;}if(this.major>A.major){return true;}if(this.minor<A.minor){return false;}if(this.minor>A.minor){return true;}if(this.rev<A.rev){return false;}return true;};deconcept.util={getRequestParameter:function(D){var C=document.location.search||document.location.hash;if(D===null){return C;}if(C){var B=C.substring(1).split("&");for(var A=0;A<B.length;A++){if(B[A].substring(0,B[A].indexOf("="))==D){return B[A].substring((B[A].indexOf("=")+1));}}}return"";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var C=document.getElementsByTagName("OBJECT");for(var B=C.length-1;B>=0;B--){C[B].style.display="none";for(var A in C[B]){if(typeof C[B][A]=="function"){C[B][A]=function(){};
-}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(A){return document.all[A];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;YAHOO.widget.FlashAdapter=function(D,A,B){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};B=B||{};this._id=B.id=B.id||YAHOO.util.Dom.generateId(null,"yuigen");B.version=B.version||"9.0.45";B.backgroundColor=B.backgroundColor||"#ffffff";this._attributes=B;this._swfURL=D;this._containerID=A;this._embedSWF(this._swfURL,this._containerID,B.id,B.version,B.back!
 groundColor,B.expressInstall,B.wmode);try{this.createEvent("contentReady");}catch(C){}};YAHOO.extend(YAHOO.widget.FlashAdapter,YAHOO.util.AttributeProvider,{_swfURL:null,_containerID:null,_swf:null,_id:null,_initialized:false,_attributes:null,toString:function(){return"FlashAdapter "+this._id;},destroy:function(){if(this._swf){var B=YAHOO.util.Dom.get(this._containerID);B.removeChild(this._swf);}var A=this._id;for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}},_embedSWF:function(I,H,D,C,F,G,B){var E=new deconcept.SWFObject(I,D,"100%","100%",C,F);if(G){E.useExpressInstall(G);}E.addParam("allowScriptAccess","always");if(B){E.addParam("wmode",B);}E.addVariable("allowedDomain",document.location.hostname);E.addVariable("elementID",D);E.addVariable("eventHandler","YAHOO.widget.FlashAdapter.eventHandler");var A=YAHOO.util.Dom.get(H);var J=E.write(A);if(J){this._swf=YAHOO.util.Dom.get(D);this._swf.owner=this;}else{}},_eventHandler:function(B){var A=B.type;swi!
 tch(A){case"swfReady":this._loadHandler();this.fireEvent("cont!
 entReady
");return ;case"log":return ;}this.fireEvent(A,B);},_loadHandler:function(){this._initialized=false;this._initAttributes(this._attributes);this.setAttributes(this._attributes,true);this._initialized=true;},set:function(A,B){this._attributes[A]=B;YAHOO.widget.FlashAdapter.superclass.set.call(this,A,B);},_initAttributes:function(A){this.getAttributeConfig("altText",{method:this._getAltText});this.setAttributeConfig("altText",{method:this._setAltText});this.getAttributeConfig("swfURL",{method:this._getSWFURL});},_getSWFURL:function(){return this._swfURL;},_getAltText:function(){return this._swf.getAltText();},_setAltText:function(A){return this._swf.setAltText(A);}});YAHOO.widget.FlashAdapter.eventHandler=function(A,C){var B=YAHOO.util.Dom.get(A);if(!B.owner){setTimeout(function(){YAHOO.widget.FlashAdapter.eventHandler(A,C);},0);}else{B.owner._eventHandler(C);}};YAHOO.widget.FlashAdapter.proxyFunctionCount=0;YAHOO.widget.FlashAdapter.createProxyFunction=function(B){var A=YAHOO.!
 widget.FlashAdapter.proxyFunctionCount;YAHOO.widget.FlashAdapter["proxyFunction"+A]=function(){return B.apply(null,arguments);};YAHOO.widget.FlashAdapter.proxyFunctionCount++;return"YAHOO.widget.FlashAdapter.proxyFunction"+A.toString();};YAHOO.widget.FlashAdapter.removeProxyFunction=function(A){if(!A||A.indexOf("YAHOO.widget.FlashAdapter.proxyFunction")<0){return ;}A=A.substr(26);YAHOO.widget.FlashAdapter[A]=null;};YAHOO.widget.Chart=function(C,A,D,B){YAHOO.widget.Chart.superclass.constructor.call(this,YAHOO.widget.Chart.SWFURL,A,B);this._type=C;this._dataSource=D;this.createEvent("itemMouseOverEvent");this.createEvent("itemMouseOutEvent");this.createEvent("itemClickEvent");this.createEvent("itemDoubleClickEvent");this.createEvent("itemDragStartEvent");this.createEvent("itemDragEvent");this.createEvent("itemDragEndEvent");};YAHOO.extend(YAHOO.widget.Chart,YAHOO.widget.FlashAdapter,{_type:null,_pollingID:null,_pollingInterval:null,_dataTipFunction:null,_seriesLabelFunctions:!
 null,toString:function(){return"Chart "+this._id;},setStyle:fu!
 nction(A
,B){B=YAHOO.lang.JSON.stringify(B);this._swf.setStyle(A,B);},setStyles:function(A){A=YAHOO.lang.JSON.stringify(A);this._swf.setStyles(A);},setSeriesStyles:function(B){for(var A=0;A<B.length;A++){B[A]=YAHOO.lang.JSON.stringify(B[A]);}this._swf.setSeriesStyles(B);},destroy:function(){if(this._dataSource!==null){if(this._pollingID!==null){this._dataSource.clearInterval(this._pollingID);this._pollingID=null;}}if(this._dataTipFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);}YAHOO.widget.Chart.superclass.destroy.call(this);},_initAttributes:function(A){YAHOO.widget.Chart.superclass._initAttributes.call(this,A);this.getAttributeConfig("request",{method:this._getRequest});this.setAttributeConfig("request",{method:this._setRequest});this.getAttributeConfig("dataSource",{method:this._getDataSource});this.setAttributeConfig("dataSource",{method:this._setDataSource});this.getAttributeConfig("series",{method:this._getSeriesDefs});this.setAttributeConfig("se!
 ries",{method:this._setSeriesDefs});this.getAttributeConfig("categoryNames",{method:this._getCategoryNames});this.setAttributeConfig("categoryNames",{validator:YAHOO.lang.isArray,method:this._setCategoryNames});this.getAttributeConfig("dataTipFunction",{method:this._getDataTipFunction});this.setAttributeConfig("dataTipFunction",{method:this._setDataTipFunction});this.getAttributeConfig("polling",{method:this._getPolling});this.setAttributeConfig("polling",{method:this._setPolling});},_loadHandler:function(){this._swf.setType(this._type);if(this._attributes.style){var A=this._attributes.style;this.setStyles(A);}YAHOO.widget.Chart.superclass._loadHandler.call(this);if(this._dataSource){this.set("dataSource",this._dataSource);}},refreshData:function(){if(!this._initialized){return ;}if(this._dataSource!==null){if(this._pollingID!==null){this._dataSource.clearInterval(this._pollingID);this._pollingID=null;}if(this._pollingInterval>0){this._pollingID=this._dataSource.setInterval!
 (this._pollingInterval,this._request,this._loadDataHandler,thi!
 s);
-}this._dataSource.sendRequest(this._request,this._loadDataHandler,this);}},_loadDataHandler:function(D,C,J){if(this._swf){if(J){}else{var H;if(this._seriesLabelFunctions){var I=this._seriesLabelFunctions.length;for(H=0;H<I;H++){YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[H]);}this._seriesLabelFunction=null;}this._seriesLabelFunctions=[];var F=[];var E=0;var K=null;if(this._seriesDefs!==null){E=this._seriesDefs.length;for(H=0;H<E;H++){K=this._seriesDefs[H];var B={};for(var A in K){if(YAHOO.lang.hasOwnProperty(K,A)){if(A=="style"){if(K.style!==null){B.style=YAHOO.lang.JSON.stringify(K.style);}}else{if(A=="labelFunction"){if(K.labelFunction!==null&&typeof K.labelFunction=="function"){B.labelFunction=YAHOO.widget.FlashAdapter.createProxyFunction(K.labelFunction);this._seriesLabelFunctions.push(B.labelFunction);}}else{B[A]=K[A];}}}}F.push(B);}}if(E>0){for(H=0;H<E;H++){K=F[H];if(!K.type){K.type=this._type;}K.dataProvider=C.results;}}else{var G={type:t!
 his._type,dataProvider:C.results};F.push(G);}this._swf.setDataProvider(F);}}},_request:"",_getRequest:function(){return this._request;},_setRequest:function(A){this._request=A;this.refreshData();},_dataSource:null,_getDataSource:function(){return this._dataSource;},_setDataSource:function(A){this._dataSource=A;this.refreshData();},_seriesDefs:null,_getSeriesDefs:function(){return this._seriesDefs;},_setSeriesDefs:function(A){this._seriesDefs=A;this.refreshData();},_getCategoryNames:function(){this._swf.getCategoryNames();},_setCategoryNames:function(A){this._swf.setCategoryNames(A);},_setDataTipFunction:function(A){if(this._dataTipFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);}if(A&&typeof A=="function"){A=YAHOO.widget.FlashAdapter.createProxyFunction(A);this._dataTipFunction=A;}this._swf.setDataTipFunction(A);},_getPolling:function(){return this._pollingInterval;},_setPolling:function(A){this._pollingInterval=A;this.refreshData();}});YAHOO.!
 widget.Chart.SWFURL="assets/charts.swf";YAHOO.widget.PieChart=!
 function
(A,C,B){YAHOO.widget.PieChart.superclass.constructor.call(this,"pie",A,C,B);};YAHOO.lang.extend(YAHOO.widget.PieChart,YAHOO.widget.Chart,{_initAttributes:function(A){YAHOO.widget.PieChart.superclass._initAttributes.call(this,A);this.getAttributeConfig("dataField",{method:this._getDataField});this.setAttributeConfig("dataField",{validator:YAHOO.lang.isString,method:this._setDataField});this.getAttributeConfig("categoryField",{method:this._getCategoryField});this.setAttributeConfig("categoryField",{validator:YAHOO.lang.isString,method:this._setCategoryField});},_getDataField:function(){return this._swf.getDataField();},_setDataField:function(A){this._swf.setDataField(A);},_getCategoryField:function(){return this._swf.getCategoryField();},_setCategoryField:function(A){this._swf.setCategoryField(A);}});YAHOO.widget.CartesianChart=function(C,A,D,B){YAHOO.widget.CartesianChart.superclass.constructor.call(this,C,A,D,B);};YAHOO.lang.extend(YAHOO.widget.CartesianChart,YAHOO.widget.Ch!
 art,{_xAxisLabelFunction:null,_yAxisLabelFunction:null,destroy:function(){if(this._xAxisLabelFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);this._xAxisLabelFunction=null;}if(this._yAxisLabelFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);this._yAxisLabelFunction=null;}YAHOO.widget.CartesianChart.superclass.destroy.call(this);},_initAttributes:function(A){YAHOO.widget.CartesianChart.superclass._initAttributes.call(this,A);this.getAttributeConfig("xField",{method:this._getXField});this.setAttributeConfig("xField",{validator:YAHOO.lang.isString,method:this._setXField});this.getAttributeConfig("yField",{method:this._getYField});this.setAttributeConfig("yField",{validator:YAHOO.lang.isString,method:this._setYField});this.setAttributeConfig("xAxis",{method:this._setXAxis});this.setAttributeConfig("yAxis",{method:this._setYAxis});},_getXField:function(){return this._swf.getHorizontalField();},_setXField:function(!
 A){this._swf.setHorizontalField(A);},_getYField:function(){ret!
 urn this
._swf.getVerticalField();},_setYField:function(A){this._swf.setVerticalField(A);},_setXAxis:function(B){if(this._xAxisLabelFunction!==null){YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);this._xAxisLabelFunction=null;}var A={};for(var C in B){if(C=="labelFunction"){if(B.labelFunction!==null){if(typeof B.labelFunction=="function"){A.labelFunction=YAHOO.widget.FlashAdapter.createProxyFunction(B.labelFunction);}else{A.labelFunction=B.labelFunction;}this._xAxisLabelFunction=A.labelFunction;}}else{A[C]=B[C];}}this._swf.setHorizontalAxis(A);},_setYAxis:function(B){if(this._yAxisLabelFunction!==null){YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);this._yAxisLabelFunction=null;}var A={};for(var C in B){if(C=="labelFunction"){if(B.labelFunction!==null){if(typeof B.labelFunction=="function"){A.labelFunction=YAHOO.widget.FlashAdapter.createProxyFunction(B.labelFunction);}else{A.labelFunction=B.labelFunction;}this._yAxisLabelFunction=A.l!
 abelFunction;}}else{A[C]=B[C];}}this._swf.setVerticalAxis(A);}});YAHOO.widget.LineChart=function(A,C,B){YAHOO.widget.LineChart.superclass.constructor.call(this,"line",A,C,B);};YAHOO.lang.extend(YAHOO.widget.LineChart,YAHOO.widget.CartesianChart);YAHOO.widget.ColumnChart=function(A,C,B){YAHOO.widget.ColumnChart.superclass.constructor.call(this,"column",A,C,B);};YAHOO.lang.extend(YAHOO.widget.ColumnChart,YAHOO.widget.CartesianChart);YAHOO.widget.BarChart=function(A,C,B){YAHOO.widget.BarChart.superclass.constructor.call(this,"bar",A,C,B);};YAHOO.lang.extend(YAHOO.widget.BarChart,YAHOO.widget.CartesianChart);YAHOO.widget.StackedColumnChart=function(A,C,B){YAHOO.widget.StackedColumnChart.superclass.constructor.call(this,"stackcolumn",A,C,B);};YAHOO.lang.extend(YAHOO.widget.StackedColumnChart,YAHOO.widget.CartesianChart);YAHOO.widget.StackedBarChart=function(A,C,B){YAHOO.widget.StackedBarChart.superclass.constructor.call(this,"stackbar",A,C,B);
-};YAHOO.lang.extend(YAHOO.widget.StackedBarChart,YAHOO.widget.CartesianChart);YAHOO.widget.Axis=function(){};YAHOO.widget.Axis.prototype={type:null,reverse:false,labelFunction:null};YAHOO.widget.NumericAxis=function(){YAHOO.widget.NumericAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.NumericAxis,YAHOO.widget.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,stackingEnabled:false,alwaysShowZero:true,scale:"linear"});YAHOO.widget.TimeAxis=function(){YAHOO.widget.TimeAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.TimeAxis,YAHOO.widget.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:null,snapToUnits:true,stackingEnabled:false});YAHOO.widget.CategoryAxis=function(){YAHOO.widget.CategoryAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.CategoryAxis,YAHOO.widget.Axis,{type:"category",categoryNames:null});YAHOO.widg!
 et.Series=function(){};YAHOO.widget.Series.prototype={type:null,displayName:null};YAHOO.widget.CartesianSeries=function(){YAHOO.widget.CartesianSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.CartesianSeries,YAHOO.widget.Series,{xField:null,yField:null});YAHOO.widget.ColumnSeries=function(){YAHOO.widget.ColumnSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.ColumnSeries,YAHOO.widget.CartesianSeries,{type:"column"});YAHOO.widget.LineSeries=function(){YAHOO.widget.LineSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.LineSeries,YAHOO.widget.CartesianSeries,{type:"line"});YAHOO.widget.BarSeries=function(){YAHOO.widget.BarSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.BarSeries,YAHOO.widget.CartesianSeries,{type:"bar"});YAHOO.widget.PieSeries=function(){YAHOO.widget.PieSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.PieSeries,YAHOO.widget.Series,{type:!
 "pie",dataField:null,categoryField:null,labelFunction:null});Y!
 AHOO.wid
get.StackedBarSeries=function(){YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.StackedBarSeries,YAHOO.widget.CartesianSeries,{type:"stackbar"});YAHOO.widget.StackedColumnSeries=function(){YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries,YAHOO.widget.CartesianSeries,{type:"stackcolumn"});YAHOO.register("charts",YAHOO.widget.Chart,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/charts/charts-experimental.js
===================================================================
--- trunk/root/static/yui/charts/charts-experimental.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts-experimental.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,2287 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
-/*!
- * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
- *
- * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-var deconcept = deconcept || {};
-
-if(typeof deconcept.util == "undefined" || !deconcept.util)
-{
-	deconcept.util = {};
-}
-
-if(typeof deconcept.SWFObjectUtil == "undefined" || !deconcept.SWFObjectUtil)
-{
-	deconcept.SWFObjectUtil = {};
-}
-
-deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
-{
-	if(!document.getElementById) { return; }
-	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
-	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
-	this.params = {};
-	this.variables = {};
-	this.attributes = [];
-	if(swf) { this.setAttribute('swf', swf); }
-	if(id) { this.setAttribute('id', id); }
-	if(w) { this.setAttribute('width', w); }
-	if(h) { this.setAttribute('height', h); }
-	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
-	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
-	if (!window.opera && document.all && this.installedVer.major > 7)
-	{
-		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
-		deconcept.SWFObject.doPrepUnload = true;
-	}
-	if(c)
-	{
-		this.addParam('bgcolor', c);
-	}
-	var q = quality ? quality : 'high';
-	this.addParam('quality', q);
-	this.setAttribute('useExpressInstall', false);
-	this.setAttribute('doExpressInstall', false);
-	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
-	this.setAttribute('xiRedirectUrl', xir);
-	this.setAttribute('redirectUrl', '');
-	if(redirectUrl)
-	{
-		this.setAttribute('redirectUrl', redirectUrl);
-	}
-};
-
-deconcept.SWFObject.prototype =
-{
-	useExpressInstall: function(path)
-	{
-		this.xiSWFPath = !path ? "expressinstall.swf" : path;
-		this.setAttribute('useExpressInstall', true);
-	},
-	setAttribute: function(name, value){
-		this.attributes[name] = value;
-	},
-	getAttribute: function(name){
-		return this.attributes[name];
-	},
-	addParam: function(name, value){
-		this.params[name] = value;
-	},
-	getParams: function(){
-		return this.params;
-	},
-	addVariable: function(name, value){
-		this.variables[name] = value;
-	},
-	getVariable: function(name){
-		return this.variables[name];
-	},
-	getVariables: function(){
-		return this.variables;
-	},
-	getVariablePairs: function(){
-		var variablePairs = [];
-		var key;
-		var variables = this.getVariables();
-		for(key in variables)
-		{
-			if(variables.hasOwnProperty(key))
-			{
-				variablePairs[variablePairs.length] = key +"="+ variables[key];
-			}
-		}
-		return variablePairs;
-	},
-	getSWFHTML: function() {
-		var swfNode = "";
-		var params = {};
-		var key = "";
-		var pairs = "";
-		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "PlugIn");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
-			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += [key] +'="'+ params[key] +'" ';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
-			swfNode += '/>';
-		} else { // PC IE
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "ActiveX");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
-			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
-			swfNode += "</object>";
-		}
-		return swfNode;
-	},
-	write: function(elementId)
-	{
-		if(this.getAttribute('useExpressInstall')) {
-			// check to see if we need to do an express install
-			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
-			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
-				this.setAttribute('doExpressInstall', true);
-				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				this.addVariable("MMdoctitle", document.title);
-			}
-		}
-		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
-		{
-			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
-			n.innerHTML = this.getSWFHTML();
-			return true;
-		}
-		else
-		{
-			if(this.getAttribute('redirectUrl') !== "")
-			{
-				document.location.replace(this.getAttribute('redirectUrl'));
-			}
-		}
-		return false;
-	}
-};
-
-/* ---- detection functions ---- */
-deconcept.SWFObjectUtil.getPlayerVersion = function()
-{
-	var axo = null;
-	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
-	if(navigator.plugins && navigator.mimeTypes.length)
-	{
-		var x = navigator.plugins["Shockwave Flash"];
-		if(x && x.description)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
-		}
-	}
-	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
-	{ // if Windows CE
-		var counter = 3;
-		while(axo)
-		{
-			try
-			{
-				counter++;
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
-//				document.write("player v: "+ counter);
-				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
-			}
-			catch(e)
-			{
-				axo = null;
-			}
-		}
-	}
-	else
-	{ // Win IE (non mobile)
-		// do minor version lookup in IE, but avoid fp6 crashing issues
-		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
-		try
-		{
-			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
-		}
-		catch(e)
-		{
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
-				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
-			}
-			catch(e)
-			{
-				if(PlayerVersion.major == 6)
-				{
-					return PlayerVersion;
-				}
-			}
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
-			}
-			catch(e) {}
-		}
-		
-		if(axo !== null)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
-		}
-	}
-	return PlayerVersion;
-};
-
-deconcept.PlayerVersion = function(arrVersion)
-{
-	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
-	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
-	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
-};
-
-deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
-{
-	if(this.major < fv.major)
-	{
-		return false;
-	}
-	if(this.major > fv.major)
-	{
-		return true;
-	}
-	if(this.minor < fv.minor)
-	{
-		return false;
-	}
-	if(this.minor > fv.minor)
-	{
-		return true;
-	}
-	if(this.rev < fv.rev)
-	{
-		return false;
-	}
-	return true;
-};
-
-/* ---- get value of query string param ---- */
-deconcept.util =
-{
-	getRequestParameter: function(param)
-	{
-		var q = document.location.search || document.location.hash;
-		if(param === null) { return q; }
-		if(q)
-		{
-			var pairs = q.substring(1).split("&");
-			for(var i=0; i < pairs.length; i++)
-			{
-				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
-				{
-					return pairs[i].substring((pairs[i].indexOf("=") + 1));
-				}
-			}
-		}
-		return "";
-	}
-};
-
-/* fix for video streaming bug */
-deconcept.SWFObjectUtil.cleanupSWFs = function()
-{
-	var objects = document.getElementsByTagName("OBJECT");
-	for(var i = objects.length - 1; i >= 0; i--)
-	{
-		objects[i].style.display = 'none';
-		for(var x in objects[i])
-		{
-			if(typeof objects[i][x] == 'function')
-			{
-				objects[i][x] = function(){};
-			}
-		}
-	}
-};
-
-// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
-if(deconcept.SWFObject.doPrepUnload)
-{
-	if(!deconcept.unloadSet)
-	{
-		deconcept.SWFObjectUtil.prepUnload = function()
-		{
-			__flash_unloadHandler = function(){};
-			__flash_savedUnloadHandler = function(){};
-			window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
-		};
-		window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
-		deconcept.unloadSet = true;
-	}
-}
-
-/* add document.getElementById if needed (mobile IE < 5) */
-if(!document.getElementById && document.all)
-{
-	document.getElementById = function(id) { return document.all[id]; };
-}
-
-/* add some aliases for ease of use/backwards compatibility */
-var getQueryParamValue = deconcept.util.getRequestParameter;
-var FlashObject = deconcept.SWFObject; // for legacy support
-var SWFObject = deconcept.SWFObject;
-
-/**
- * Wraps Flash embedding functionality and allows communication with SWF through
- * attributes.
- *
- * @namespace YAHOO.widget
- * @class FlashAdapter
- * @uses YAHOO.util.AttributeProvider
- */
-YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes)
-{
-	// set up the initial events and attributes stuff
-	this._queue = this._queue || [];
-	this._events = this._events || {};
-	this._configs = this._configs || {};
-	attributes = attributes || {};
-	
-	//the Flash Player external interface code from Adobe doesn't play nicely
-	//with the default value, yui-gen, in IE
-	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
-	attributes.version = attributes.version || "9.0.45";
-	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
-	
-	//we can't use the initial attributes right away
-	//so save them for once the SWF finishes loading
-	this._attributes = attributes;
-	
-	this._swfURL = swfURL;
-	this._containerID = containerID;
-	
-	//embed the SWF file in the page
-	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
-		attributes.backgroundColor, attributes.expressInstall, attributes.wmode);
-	
-	/**
-	 * Fires when the SWF is initialized and communication is possible.
-	 * @event contentReady
-	 */
-	//Fix for iframe cross-domain issue with FF2x 
-	try
-	{
-		this.createEvent("contentReady");
-	}
-	catch(e){}
-};
-
-YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
-{
-	/**
-	 * The URL of the SWF file.
-	 * @property _swfURL
-	 * @type String
-	 * @private
-	 */
-	_swfURL: null,
-
-	/**
-	 * The ID of the containing DIV.
-	 * @property _containerID
-	 * @type String
-	 * @private
-	 */
-	_containerID: null,
-
-	/**
-	 * A reference to the embedded SWF file.
-	 * @property _swf
-	 * @private
-	 */
-	_swf: null,
-
-	/**
-	 * The id of this instance.
-	 * @property _id
-	 * @type String
-	 * @private
-	 */
-	_id: null,
-
-	/**
-	 * Indicates whether the SWF has been initialized and is ready
-	 * to communicate with JavaScript
-	 * @property _initialized
-	 * @type Boolean
-	 * @private
-	 */
-	_initialized: false,
-	
-	/**
-	 * The initializing attributes are stored here until the SWF is ready.
-	 * @property _attributes
-	 * @type Object
-	 * @private
-	 */
-	_attributes: null, //the intializing attributes
-
-	/**
-	 * Public accessor to the unique name of the FlashAdapter instance.
-	 *
-	 * @method toString
-	 * @return {String} Unique name of the FlashAdapter instance.
-	 */
-	toString: function()
-	{
-		return "FlashAdapter " + this._id;
-	},
-
-	/**
-	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
-	 * event listeners and clears out DOM elements inside the container. After calling
-	 * this method, the instance reference should be expliclitly nulled by implementer,
-	 * as in myChart = null. Use with caution!
-	 *
-	 * @method destroy
-	 */
-	destroy: function()
-	{
-		//kill the Flash Player instance
-		if(this._swf)
-		{
-			var container = YAHOO.util.Dom.get(this._containerID);
-			container.removeChild(this._swf);
-		}
-		
-		var instanceName = this._id;
-		
-		//null out properties
-		for(var prop in this)
-		{
-			if(YAHOO.lang.hasOwnProperty(this, prop))
-			{
-				this[prop] = null;
-			}
-		}
-		
-	},
-
-	/**
-	 * Embeds the SWF in the page and associates it with this instance.
-	 *
-	 * @method _embedSWF
-	 * @private
-	 */
-	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode)
-	{
-		//standard SWFObject embed
-		var swfObj = new deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
-
-		if(expressInstall)
-		{
-			swfObj.useExpressInstall(expressInstall);
-		}
-
-		//make sure we can communicate with ExternalInterface
-		swfObj.addParam("allowScriptAccess", "always");
-		
-		if(wmode)
-		{
-			swfObj.addParam("wmode", wmode);
-		}
-		
-		//again, a useful ExternalInterface trick
-		swfObj.addVariable("allowedDomain", document.location.hostname);
-
-		//tell the SWF which HTML element it is in
-		swfObj.addVariable("elementID", swfID);
-
-		// set the name of the function to call when the swf has an event
-		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
-
-		var container = YAHOO.util.Dom.get(containerID);
-		var result = swfObj.write(container);
-		if(result)
-		{
-			this._swf = YAHOO.util.Dom.get(swfID);
-			//if successful, let's add an owner property to the SWF reference
-			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
-			this._swf.owner = this;
-		}
-		else
-		{
-		}
-	},
-
-	/**
-	 * Handles or re-dispatches events received from the SWF.
-	 *
-	 * @method _eventHandler
-	 * @private
-	 */
-	_eventHandler: function(event)
-	{
-		var type = event.type;
-		switch(type)
-		{
-			case "swfReady":
-   				this._loadHandler();
-   				this.fireEvent("contentReady");
-				return;
-			case "log":
-				return;
-		}
-		
-		//be sure to return after your case or the event will automatically fire!
-		this.fireEvent(type, event);
-	},
-
-	/**
-	 * Called when the SWF has been initialized.
-	 *
-	 * @method _loadHandler
-	 * @private
-	 */
-	_loadHandler: function()
-	{
-		this._initialized = false;
-		this._initAttributes(this._attributes);
-		this.setAttributes(this._attributes, true);
-		
-		this._initialized = true;
-	},
-	
-	set: function(name, value)
-	{
-		//save all the attributes in case the swf reloads
-		//so that we can pass them in again
-		this._attributes[name] = value;
-		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{
-		//should be overridden if other attributes need to be set up
-
-		/**
-		 * @attribute wmode
-		 * @description Sets the window mode of the Flash Player control. May be
-		 *		"window", "opaque", or "transparent". Only available in the constructor
-		 *		because it may not be set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute expressInstall
-		 * @description URL pointing to a SWF file that handles Flash Player's express
-		 *		install feature. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute version
-		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute backgroundColor
-		 * @description The background color of the SWF. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute altText
-		 * @description The alternative text to provide for screen readers and other assistive technology.
-		 * @type String
-		 */
-		this.getAttributeConfig("altText",
-		{
-			method: this._getAltText
-		});
-		this.setAttributeConfig("altText",
-		{
-			method: this._setAltText
-		});
-		
-		/**
-		 * @attribute swfURL
-		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		this.getAttributeConfig("swfURL",
-		{
-			method: this._getSWFURL
-		});
-	},
-	
-	/**
-	 * Getter for swfURL attribute.
-	 *
-	 * @method _getSWFURL
-	 * @private
-	 */
-	_getSWFURL: function()
-	{
-		return this._swfURL;
-	},
-	
-	/**
-	 * Getter for altText attribute.
-	 *
-	 * @method _getAltText
-	 * @private
-	 */
-	_getAltText: function()
-	{
-		return this._swf.getAltText();
-	},
-
-	/**
-	 * Setter for altText attribute.
-	 *
-	 * @method _setAltText
-	 * @private
-	 */
-	_setAltText: function(value)
-	{
-		return this._swf.setAltText(value);
-	}
-});
-
-/**
- * Receives event messages from SWF and passes them to the correct instance
- * of FlashAdapter.
- *
- * @method YAHOO.widget.FlashAdapter.eventHandler
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
-{
-	var loadedSWF = YAHOO.util.Dom.get(elementID);
-	if(!loadedSWF.owner)
-	{
-		//fix for ie: if owner doesn't exist yet, try again in a moment
-		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
-	}
-	else
-	{
-		loadedSWF.owner._eventHandler(event);
-	}
-};
-
-/**
- * The number of proxy functions that have been created.
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
-
-/**
- * Creates a globally accessible function that wraps a function reference.
- * Returns the proxy function's name as a string for use by the SWF through
- * ExternalInterface.
- *
- * @method YAHOO.widget.FlashAdapter.createProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
-{
-	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
-	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
-	{
-		return func.apply(null, arguments);
-	};
-	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
-	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
-};
-
-/**
- * Removes a function created with createProxyFunction()
- * 
- * @method YAHOO.widget.FlashAdapter.removeProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
-{
-	//quick error check
-	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
-	{
-		return;
-	}
-	
-	funcName = funcName.substr(26);
-	YAHOO.widget.FlashAdapter[funcName] = null;
-};
-
-/**
- * The Charts widget provides a Flash control for displaying data
- * graphically by series across A-grade browsers with Flash Player installed.
- *
- * @module charts
- * @requires yahoo, dom, event, datasource
- * @title Charts Widget
- * @experimental
- */
- 
-/****************************************************************************/
-/****************************************************************************/
-/****************************************************************************/
-
-/**
- * Chart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class Chart
- * @uses YAHOO.widget.FlashAdapter
- * @constructor
- * @param type {String} The char type. May be "line", "column", "bar", or "pie"
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.Chart = function(type, containerId, dataSource, attributes)
-{
-	YAHOO.widget.Chart.superclass.constructor.call(this, YAHOO.widget.Chart.SWFURL, containerId, attributes);
-	
-	this._type = type;
-	this._dataSource = dataSource;
-	
-	/**
-	 * Fires when the user moves the mouse over the bounds of an item renderer in the chart.
-	 *
-	 * @event itemMouseOverEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemMouseOverEvent");
-	
-	/**
-	 * Fires when the user moves the mouse out of the bounds of an item renderer in the chart.
-	 *
-	 * @event itemMouseOutEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemMouseOutEvent");
-	
-	/**
-	 * Fires when the user clicks an item renderer in the chart with the mouse.
-	 *
-	 * @event itemClickEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemClickEvent");
-	
-	/**
-	 * Fires when the user double-clicks an item renderer in the chart with the mouse.
-	 *
-	 * @event itemDoubleClickEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDoubleClickEvent");
-	
-	/**
-	 * Fires when the user presses the mouse down on an item to initiate a drag action.
-	 *
-	 * @event itemDragStartEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragStartEvent");
-	
-	/**
-	 * Fires when the user moves the mouse during a drag action.
-	 *
-	 * @event itemDragEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragEvent");
-
-	/**
-	 * Fires when the user releases the mouse during a drag action.
-	 *
-	 * @event itemDragEndEvent
-	 * @param event.type {String} The event type
-	 * @param event.item {Object} The data displayed by the renderer
-	 * @param event.index {Number} The position within the series that the item appears.
-	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
-	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
-	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
-	 */
-	this.createEvent("itemDragEndEvent");
-};
-
-YAHOO.extend(YAHOO.widget.Chart, YAHOO.widget.FlashAdapter,
-{
-	/**
-	 * The type of this chart instance.
-	 * @property _type
-	 * @type String
-	 * @private
-	 */
-	_type: null,
-
-	/**
-	 * The id returned from the DataSource's setInterval function.
-	 * @property _pollingID
-	 * @type Number
-	 * @private
-	 */
-	_pollingID: null,
-
-	/**
-	 * The time, in ms, between requests for data.
-	 * @property _pollingInterval
-	 * @type Number
-	 * @private
-	 */
-	_pollingInterval: null,
-
-	/**
-	 * Stores a reference to the dataTipFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _dataTipFunction
-	 * @type String
-	 * @private
-	 */
-	_dataTipFunction: null,
-	
-	/**
-	 * Stores references to series labelFunction values created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _seriesLabelFunctions
-	 * @type Array
-	 * @private
-	 */
-	_seriesLabelFunctions: null,
-
-	/**
-	 * Public accessor to the unique name of the Chart instance.
-	 *
-	 * @method toString
-	 * @return {String} Unique name of the Chart instance.
-	 */
-	toString: function()
-	{
-		return "Chart " + this._id;
-	},
-	
-	/**
-	 * Sets a single style value on the Chart instance.
-	 *
-	 * @method setStyle
-	 * @param name {String} Name of the Chart style value to change.
-	 * @param value {Object} New value to pass to the Chart style.
-	 */
-	setStyle: function(name, value)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		value = YAHOO.lang.JSON.stringify(value);
-		this._swf.setStyle(name, value);
-	},
-	
-	/**
-	 * Resets all styles on the Chart instance.
-	 *
-	 * @method setStyles
-	 * @param styles {Object} Initializer for all Chart styles.
-	 */
-	setStyles: function(styles)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		styles = YAHOO.lang.JSON.stringify(styles);
-		this._swf.setStyles(styles);
-	},
-	
-	/**
-	 * Sets the styles on all series in the Chart.
-	 *
-	 * @method setSeriesStyles
-	 * @param styles {Array} Initializer for all Chart series styles.
-	 */
-	setSeriesStyles: function(styles)
-	{
-		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
-		//complex ExternalInterface parsing correctly
-		for(var i = 0; i < styles.length; i++)
-		{
-			styles[i] = YAHOO.lang.JSON.stringify(styles[i]);	
-		}
-		this._swf.setSeriesStyles(styles);
-	},
-	
-	destroy: function()
-	{
-		//stop polling if needed
-		if(this._dataSource !== null)
-		{
-			if(this._pollingID !== null)
-			{
-				this._dataSource.clearInterval(this._pollingID);
-				this._pollingID = null;
-			}
-		}
-		
-		//remove proxy functions
-		if(this._dataTipFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
-		}
-		
-		//call last
-		YAHOO.widget.Chart.superclass.destroy.call(this);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{
-		YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes);
-
-		/**
-		 * @attribute request
-		 * @description Request to be sent to the Chart's DataSource.
-		 * @type String
-		 */
-		this.getAttributeConfig("request",
-		{
-			method: this._getRequest
-		});
-		
-		this.setAttributeConfig("request",
-		{
-			method: this._setRequest
-		});
-		
-		/**
-		 * @attribute dataSource
-		 * @description The DataSource instance to display in the Chart.
-		 * @type DataSource
-		 */
-		this.getAttributeConfig("dataSource",
-		{
-			method: this._getDataSource
-		});
-		
-		this.setAttributeConfig("dataSource",
-		{
-			method: this._setDataSource
-		});
-		
-		/**
-		 * @attribute series
-		 * @description Defines the series to be displayed by the Chart.
-		 * @type Array
-		 */
-		this.getAttributeConfig("series",
-		{
-			method: this._getSeriesDefs
-		});
-		
-		this.setAttributeConfig("series",
-		{
-			method: this._setSeriesDefs
-		});
-		
-		/**
-		 * @attribute categoryNames
-		 * @description Defines the names of the categories to be displayed in the Chart..
-		 * @type Array
-		 */
-		this.getAttributeConfig("categoryNames",
-		{
-			method: this._getCategoryNames
-		});
-		
-		this.setAttributeConfig("categoryNames",
-		{
-			validator: YAHOO.lang.isArray,
-			method: this._setCategoryNames
-		});
-		
-		/**
-		 * @attribute dataTipFunction
-		 * @description The string representation of a globally-accessible function
-		 * that may be called by the SWF to generate the datatip text for a Chart's item.
-		 * @type String
-		 */
-		this.getAttributeConfig("dataTipFunction",
-		{
-			method: this._getDataTipFunction
-		});
-		
-		this.setAttributeConfig("dataTipFunction",
-		{
-			method: this._setDataTipFunction
-		});
-
-		/**
-		 * @attribute polling
-		 * @description A numeric value indicating the number of milliseconds between
-		 * polling requests to the DataSource.
-		 * @type Number
-		 */
-		this.getAttributeConfig("polling",
-		{
-			method: this._getPolling
-		});
-
-		this.setAttributeConfig("polling",
-		{
-			method: this._setPolling
-		});
-	},
-	
-	/**
-	 * Called when the SWF is ready for communication. Sets the type, initializes
-	 * the styles, and sets the DataSource.
-	 *
-	 * @method _loadHandler
-	 * @private
-	 */
-	_loadHandler: function()
-	{
-		//the type is set separately because it must be first!
-		this._swf.setType(this._type);
-		
-		//set initial styles
-		if(this._attributes.style)
-		{
-			var style = this._attributes.style;
-			this.setStyles(style);		
-		}
-		
-		YAHOO.widget.Chart.superclass._loadHandler.call(this);
-		
-		if(this._dataSource)
-		{
-			this.set("dataSource", this._dataSource);
-		}
-	},
-
-	/**
-	 * Sends (or resends) the request to the DataSource.
-	 *
-	 * @method refreshData
-	 */
-	refreshData: function()
-	{
-		if(!this._initialized)
-		{
-			return;
-		}
-		
-		if(this._dataSource !== null)
-		{
-			if(this._pollingID !== null)
-			{
-				this._dataSource.clearInterval(this._pollingID);
-				this._pollingID = null;
-			}
-			
-			if(this._pollingInterval > 0)
-			{
-				this._pollingID = this._dataSource.setInterval(this._pollingInterval, this._request, this._loadDataHandler, this);
-			}
-			this._dataSource.sendRequest(this._request, this._loadDataHandler, this);
-		}
-	},
-
-	/**
-	 * Called when the DataSource receives new data. The series definitions are used
-	 * to build a data provider for the SWF chart.
-	 *
-	 * @method _loadDataHandler
-	 * @private
-	 */
-	_loadDataHandler: function(request, response, error)
-	{
-		if(this._swf)
-		{
-			if(error)
-			{
-			}
-			else
-			{
-				var i;
-				if(this._seriesLabelFunctions)
-				{
-					var count = this._seriesLabelFunctions.length;
-					for(i = 0; i < count; i++)
-					{
-						YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[i]);
-					}
-					this._seriesLabelFunction = null;
-				}
-				this._seriesLabelFunctions = [];
-
-				//make a copy of the series definitions so that we aren't
-				//editing them directly.
-				var dataProvider = [];	
-				var seriesCount = 0;
-				var currentSeries = null;
-				if(this._seriesDefs !== null)
-				{
-					seriesCount = this._seriesDefs.length;
-					for(i = 0; i < seriesCount; i++)
-					{
-						currentSeries = this._seriesDefs[i];
-						var clonedSeries = {};
-						for(var prop in currentSeries)
-						{
-							if(YAHOO.lang.hasOwnProperty(currentSeries, prop))
-							{
-								if(prop == "style")
-								{
-									if(currentSeries.style !== null)
-									{
-										clonedSeries.style = YAHOO.lang.JSON.stringify(currentSeries.style);
-									}
-								}
-
-								else if(prop == "labelFunction")
-								{
-									if(currentSeries.labelFunction !== null &&
-										typeof currentSeries.labelFunction == "function")
-									{
-										clonedSeries.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(currentSeries.labelFunction);
-										this._seriesLabelFunctions.push(clonedSeries.labelFunction);
-									}
-								}
-
-								else
-								{
-									clonedSeries[prop] = currentSeries[prop];
-								}
-							}
-						}
-						dataProvider.push(clonedSeries);
-					}
-				}
-
-				if(seriesCount > 0)
-				{
-					for(i = 0; i < seriesCount; i++)
-					{
-						currentSeries = dataProvider[i];
-						if(!currentSeries.type)
-						{
-							currentSeries.type = this._type;
-						}
-						currentSeries.dataProvider = response.results;
-					}
-				}
-				else
-				{
-					var series = {type: this._type, dataProvider: response.results};
-					dataProvider.push(series);
-				}
-				this._swf.setDataProvider(dataProvider);
-			}
-		}
-	},
-
-	/**
-	 * Storage for the request attribute.
-	 * 
-	 * @property _request
-	 * @private
-	 */
-	_request: "",
-	
-	/**
-	 * Getter for the request attribute.
-	 *
-	 * @method _getRequest
-	 * @private
-	 */
-	_getRequest: function()
-	{
-		return this._request;
-	},
-	
-	/**
-	 * Setter for the request attribute.
-	 *
-	 * @method _setRequest
-	 * @private
-	 */
-	_setRequest: function(value)
-	{
-		this._request = value;
-		this.refreshData();
-	},
-
-	/**
-	 * Storage for the dataSource attribute.
-	 * 
-	 * @property _dataSource
-	 * @private
-	 */
-	_dataSource: null,
-	
-	/**
-	 * Getter for the dataSource attribute.
-	 *
-	 * @method _getDataSource
-	 * @private
-	 */
-	_getDataSource: function()
-	{
-		return this._dataSource;
-	},
-
-	/**
-	 * Setter for the dataSource attribute.
-	 *
-	 * @method _setDataSource
-	 * @private
-	 */
-	_setDataSource: function(value)
-	{	
-		this._dataSource = value;
-		this.refreshData();
-	},
-	
-	/**
-	 * Storage for the series attribute.
-	 * 
-	 * @property _seriesDefs
-	 * @private
-	 */
-	_seriesDefs: null,
-	
-	/**
-	 * Getter for the series attribute.
-	 *
-	 * @method _getSeriesDefs
-	 * @private
-	 */
-	_getSeriesDefs: function()
-	{
-		return this._seriesDefs;
-	},
-	
-	/**
-	 * Setter for the series attribute.
-	 *
-	 * @method _setSeriesDefs
-	 * @private
-	 */
-	_setSeriesDefs: function(value)
-	{
-		this._seriesDefs = value;
-		this.refreshData();
-	},
-
-	/**
-	 * Getter for the categoryNames attribute.
-	 *
-	 * @method _getCategoryNames
-	 * @private
-	 */
-	_getCategoryNames: function()
-	{
-		this._swf.getCategoryNames();
-	},
-
-	/**
-	 * Setter for the categoryNames attribute.
-	 *
-	 * @method _setCategoryNames
-	 * @private
-	 */
-	_setCategoryNames: function(value)
-	{
-		this._swf.setCategoryNames(value);
-	},
-	
-	/**
-	 * Setter for the dataTipFunction attribute.
-	 *
-	 * @method _setDataTipFunction
-	 * @private
-	 */
-	_setDataTipFunction: function(value)
-	{
-		if(this._dataTipFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
-		}
-		
-		if(value && typeof value == "function")
-		{
-			value = YAHOO.widget.FlashAdapter.createProxyFunction(value);
-			this._dataTipFunction = value;
-		}
-		this._swf.setDataTipFunction(value);
-	},
-
-	/**
-	 * Getter for the polling attribute.
-	 *
-	 * @method _getPolling
-	 * @private
-	 */
-	_getPolling: function()
-	{
-		return this._pollingInterval;
-	},
-
-	/**
-	 * Setter for the polling attribute.
-	 *
-	 * @method _setPolling
-	 * @private
-	 */
-	_setPolling: function(value)
-	{
-		this._pollingInterval = value;
-		this.refreshData();
-	}
-});
-
-/**
- * Storage for the dataTipFunction attribute.
- *
- * @property Chart.SWFURL
- * @private
- * @static
- * @final
- * @default "assets/charts.swf"
- */
-YAHOO.widget.Chart.SWFURL = "assets/charts.swf";
-
-/**
- * PieChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class PieChart
- * @uses YAHOO.widget.Chart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.PieChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.PieChart.superclass.constructor.call(this, "pie", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.PieChart, YAHOO.widget.Chart,
-{
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{	
-		YAHOO.widget.PieChart.superclass._initAttributes.call(this, attributes);
-		
-		/**
-		 * @attribute dataField
-		 * @description The field in each item that corresponds to the data value.
-		 * @type String
-		 */
-		this.getAttributeConfig("dataField",
-		{
-			method: this._getDataField
-		});
-   
-		this.setAttributeConfig("dataField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setDataField
-		});
-   
-		/**
-		 * @attribute categoryField
-		 * @description The field in each item that corresponds to the category value.
-		 * @type String
-		 */
-		this.getAttributeConfig("categoryField",
-		{
-			method: this._getCategoryField
-		});
-   
-		this.setAttributeConfig("categoryField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setCategoryField
-		});
-	},
-
-	/**
-	 * Getter for the dataField attribute.
-	 *
-	 * @method _getDataField
-	 * @private
-	 */
-	_getDataField: function()
-	{
-		return this._swf.getDataField();
-	},
-
-	/**
-	 * Setter for the dataField attribute.
-	 *
-	 * @method _setDataField
-	 * @private
-	 */
-	_setDataField: function(value)
-	{
-		this._swf.setDataField(value);
-	},
-
-	/**
-	 * Getter for the categoryField attribute.
-	 *
-	 * @method _getCategoryField
-	 * @private
-	 */
-	_getCategoryField: function()
-	{
-		return this._swf.getCategoryField();
-	},
-
-	/**
-	 * Setter for the categoryField attribute.
-	 *
-	 * @method _setCategoryField
-	 * @private
-	 */
-	_setCategoryField: function(value)
-	{
-		this._swf.setCategoryField(value);
-	}
-});
-
-/**
- * CartesianChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class CartesianChart
- * @uses YAHOO.widget.Chart
- * @constructor
- * @param type {String} The char type. May be "line", "column", or "bar"
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
- YAHOO.widget.CartesianChart = function(type, containerId, dataSource, attributes)
-{
-	YAHOO.widget.CartesianChart.superclass.constructor.call(this, type, containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CartesianChart, YAHOO.widget.Chart,
-{
-	/**
-	 * Stores a reference to the xAxis labelFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _xAxisLabelFunction
-	 * @type String
-	 * @private
-	 */
-	_xAxisLabelFunction: null,
-	
-	/**
-	 * Stores a reference to the yAxis labelFunction created by
-	 * YAHOO.widget.FlashAdapter.createProxyFunction()
-	 * @property _yAxisLabelFunction
-	 * @type String
-	 * @private
-	 */
-	_yAxisLabelFunction: null,
-	
-	destroy: function()
-	{
-		//remove proxy functions
-		if(this._xAxisLabelFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
-			this._xAxisLabelFunction = null;
-		}
-		
-		if(this._yAxisLabelFunction)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
-			this._yAxisLabelFunction = null;
-		}
-	
-		//call last
-		YAHOO.widget.CartesianChart.superclass.destroy.call(this);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{	
-		YAHOO.widget.CartesianChart.superclass._initAttributes.call(this, attributes);
-
-		/**
-		 * @attribute xField
-		 * @description The field in each item that corresponds to a value on the x axis.
-		 * @type String
-		 */
-		this.getAttributeConfig("xField",
-		{
-			method: this._getXField
-		});
-
-		this.setAttributeConfig("xField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setXField
-		});
-
-		/**
-		 * @attribute yField
-		 * @description The field in each item that corresponds to a value on the x axis.
-		 * @type String
-		 */
-		this.getAttributeConfig("yField",
-		{
-			method: this._getYField
-		});
-
-		this.setAttributeConfig("yField",
-		{
-			validator: YAHOO.lang.isString,
-			method: this._setYField
-		});
-
-		/**
-		 * @attribute xAxis
-		 * @description A custom configuration for the horizontal x axis.
-		 * @type Axis
-		 */
-		this.setAttributeConfig("xAxis",
-		{
-			method: this._setXAxis
-		});
-
-		/**
-		 * @attribute yAxis
-		 * @description A custom configuration for the vertical y axis.
-		 * @type Axis
-		 */
-		this.setAttributeConfig("yAxis",
-		{
-			method: this._setYAxis
-		});
-	},
-
-	/**
-	 * Getter for the xField attribute.
-	 *
-	 * @method _getXField
-	 * @private
-	 */
-	_getXField: function()
-	{
-		return this._swf.getHorizontalField();
-	},
-
-	/**
-	 * Setter for the xField attribute.
-	 *
-	 * @method _setXField
-	 * @private
-	 */
-	_setXField: function(value)
-	{
-		this._swf.setHorizontalField(value);
-	},
-
-	/**
-	 * Getter for the yField attribute.
-	 *
-	 * @method _getYField
-	 * @private
-	 */
-	_getYField: function()
-	{
-		return this._swf.getVerticalField();
-	},
-
-	/**
-	 * Setter for the yField attribute.
-	 *
-	 * @method _setYField
-	 * @private
-	 */
-	_setYField: function(value)
-	{
-		this._swf.setVerticalField(value);
-	},
-	
-	/**
-	 * Setter for the xAxis attribute.
-	 *
-	 * @method _setXAxis
-	 * @private
-	 */
-	_setXAxis: function(value)
-	{
-		if(this._xAxisLabelFunction !== null)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
-			this._xAxisLabelFunction = null;
-		}
-		
-		var clonedXAxis = {};
-		for(var prop in value)
-		{
-			if(prop == "labelFunction")
-			{
-				if(value.labelFunction !== null)
-				{
-					if(typeof value.labelFunction == "function")
-					{
-						clonedXAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
-					}
-					else
-					{
-						clonedXAxis.labelFunction = value.labelFunction;
-					}
-					this._xAxisLabelFunction = clonedXAxis.labelFunction;
-				}
-			}
-			else
-			{
-				clonedXAxis[prop] = value[prop];
-			}
-		}
-		this._swf.setHorizontalAxis(clonedXAxis);
-	},
-
-	/**
-	 * Getter for the yAxis attribute.
-	 *
-	 * @method _setYAxis
-	 * @private
-	 */
-	_setYAxis: function(value)
-	{
-		if(this._yAxisLabelFunction !== null)
-		{
-			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
-			this._yAxisLabelFunction = null;
-		}
-
-		var clonedYAxis = {};
-		for(var prop in value)
-		{
-			if(prop == "labelFunction")
-			{
-				if(value.labelFunction !== null)
-				{
-					if(typeof value.labelFunction == "function")
-					{
-						clonedYAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
-					}
-					else
-					{
-						clonedYAxis.labelFunction = value.labelFunction;
-					}
-					this._yAxisLabelFunction = clonedYAxis.labelFunction;
-				}
-			}
-			else
-			{
-				clonedYAxis[prop] = value[prop];
-			}
-		}
-		this._swf.setVerticalAxis(clonedYAxis);
-	}
-});
-
-/**
- * LineChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class LineChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.LineChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.LineChart.superclass.constructor.call(this, "line", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.LineChart, YAHOO.widget.CartesianChart);
-
-/**
- * ColumnChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class ColumnChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.ColumnChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.ColumnChart.superclass.constructor.call(this, "column", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.ColumnChart, YAHOO.widget.CartesianChart);
-
-/**
- * BarChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class BarChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.BarChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.BarChart.superclass.constructor.call(this, "bar", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.BarChart, YAHOO.widget.CartesianChart);
-
-/**
- * StackedColumnChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedColumnChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.StackedColumnChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.StackedColumnChart.superclass.constructor.call(this, "stackcolumn", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedColumnChart, YAHOO.widget.CartesianChart);
-
-/**
- * StackedBarChart class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedBarChart
- * @uses YAHOO.widget.CartesianChart
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param dataSource {YAHOO.util.DataSource} DataSource instance.
- * @param attributes {object} (optional) Object literal of configuration values.
- */
-YAHOO.widget.StackedBarChart = function(containerId, dataSource, attributes)
-{
-	YAHOO.widget.StackedBarChart.superclass.constructor.call(this, "stackbar", containerId, dataSource, attributes);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedBarChart, YAHOO.widget.CartesianChart);
-
-/**
- * Defines a CartesianChart's vertical or horizontal axis.
- *
- * @namespace YAHOO.widget
- * @class Axis
- * @constructor
- */
-YAHOO.widget.Axis = function()
-{
-};
-
-YAHOO.widget.Axis.prototype = 
-{
-	/**
-	 * The type of axis.
-	 *
-	 * @property type
-	 * @type String
-	 */
-	type: null,
-	
-	/**
-	 * If true, the items on the axis will be drawn in opposite direction.
-	 *
-	 * @property reverse
-	 * @type Boolean
-	 */
-	reverse: false,
-	
-	/**
-	 * A string reference to the globally-accessible function that may be called to
-	 * determine each of the label values for this axis. Also accepts function references.
-	 *
-	 * @property labelFunction
-	 * @type String
-	 */
-	labelFunction: null
-};
-
-/**
- * A type of axis whose units are measured in numeric values.
- *
- * @namespace YAHOO.widget
- * @class NumericAxis
- * @constructor
- */
-YAHOO.widget.NumericAxis = function()
-{
-	YAHOO.widget.NumericAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.NumericAxis, YAHOO.widget.Axis,
-{
-	type: "numeric",
-	
-	/**
-	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
-	 * will be calculated automatically.
-	 *
-	 * @property minimum
-	 * @type Number
-	 */
-	minimum: NaN,
-	
-	/**
-	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
-	 * will be calculated automatically.
-	 *
-	 * @property maximum
-	 * @type Number
-	 */
-	maximum: NaN,
-	
-	/**
-	 * The spacing between major intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	majorUnit: NaN,
-
-	/**
-	 * The spacing between minor intervals on this axis.
-	 *
-	 * @property minorUnit
-	 * @type Number
-	 */
-	minorUnit: NaN,
-	
-	/**
-	 * If true, the labels, ticks, gridlines, and other objects will snap to
-	 * the nearest major or minor unit. If false, their position will be based
-	 * on the minimum value.
-	 *
-	 * @property snapToUnits
-	 * @type Boolean
-	 */
-	snapToUnits: true,
-	
-	/**
-	 * Series that are stackable will only stack when this value is set to true.
-	 *
-	 * @property stackingEnabled
-	 * @type Boolean
-	 */
-	stackingEnabled: false,
-
-	/**
-	 * If true, and the bounds are calculated automatically, either the minimum or
-	 * maximum will be set to zero.
-	 *
-	 * @property alwaysShowZero
-	 * @type Boolean
-	 */
-	alwaysShowZero: true,
-
-	/**
-	 * The scaling algorithm to use on this axis. May be "linear" or "logarithmic".
-	 *
-	 * @property scale
-	 * @type String
-	 */
-	scale: "linear"
-});
-
-/**
- * A type of axis whose units are measured in time-based values.
- *
- * @namespace YAHOO.widget
- * @class TimeAxis
- * @constructor
- */
-YAHOO.widget.TimeAxis = function()
-{
-	YAHOO.widget.TimeAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.TimeAxis, YAHOO.widget.Axis,
-{
-	type: "time",
-	
-	/**
-	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
-	 * will be calculated automatically.
-	 *
-	 * @property minimum
-	 * @type Date
-	 */
-	minimum: null,
-
-	/**
-	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
-	 * will be calculated automatically.
-	 *
-	 * @property maximum
-	 * @type Number
-	 */
-	maximum: null,
-	
-	/**
-	 * The spacing between major intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	majorUnit: NaN,
-	
-	/**
-	 * The time unit used by the majorUnit.
-	 *
-	 * @property majorTimeUnit
-	 * @type String
-	 */
-	majorTimeUnit: null,
-	
-	/**
-	 * The spacing between minor intervals on this axis.
-	 *
-	 * @property majorUnit
-	 * @type Number
-	 */
-	minorUnit: NaN,
-	
-	/**
-	 * The time unit used by the minorUnit.
-	 *
-	 * @property majorTimeUnit
-	 * @type String
-	 */
-	minorTimeUnit: null,
-
-	/**
-	 * If true, the labels, ticks, gridlines, and other objects will snap to
-	 * the nearest major or minor unit. If false, their position will be based
-	 * on the minimum value.
-	 *
-	 * @property snapToUnits
-	 * @type Boolean
-	 */
-	snapToUnits: true,
-
-	/**
-	 * Series that are stackable will only stack when this value is set to true.
-	 *
-	 * @property stackingEnabled
-	 * @type Boolean
-	 */
-	stackingEnabled: false
-});
-
-/**
- * A type of axis that displays items in categories.
- *
- * @namespace YAHOO.widget
- * @class CategoryAxis
- * @constructor
- */
-YAHOO.widget.CategoryAxis = function()
-{
-	YAHOO.widget.CategoryAxis.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CategoryAxis, YAHOO.widget.Axis,
-{
-	type: "category",
-	
-	/**
-	 * A list of category names to display along this axis.
-	 *
-	 * @property categoryNames
-	 * @type Array
-	 */
-	categoryNames: null
-});
-
-/**
- * Functionality common to most series. Generally, a <code>Series</code> 
- * object shouldn't be instantiated directly. Instead, a subclass with a 
- * concrete implementation should be used.
- *
- * @namespace YAHOO.widget
- * @class Series
- * @constructor
- */
-YAHOO.widget.Series = function() {};
-
-YAHOO.widget.Series.prototype = 
-{
-	/**
-	 * The type of series.
-	 *
-	 * @property type
-	 * @type String
-	 */
-	type: null,
-	
-	/**
-	 * The human-readable name of the series.
-	 *
-	 * @property displayName
-	 * @type String
-	 */
-	displayName: null
-};
-
-/**
- * Functionality common to most series appearing in cartesian charts.
- * Generally, a <code>CartesianSeries</code> object shouldn't be
- * instantiated directly. Instead, a subclass with a concrete implementation
- * should be used.
- *
- * @namespace YAHOO.widget
- * @class CartesianSeries
- * @uses YAHOO.widget.Series
- * @constructor
- */
-YAHOO.widget.CartesianSeries = function() 
-{
-	YAHOO.widget.CartesianSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.CartesianSeries, YAHOO.widget.Series,
-{
-	/**
-	 * The field used to access the x-axis value from the items from the data source.
-	 *
-	 * @property xField
-	 * @type String
-	 */
-	xField: null,
-	
-	/**
-	 * The field used to access the y-axis value from the items from the data source.
-	 *
-	 * @property yField
-	 * @type String
-	 */
-	yField: null
-});
-
-/**
- * ColumnSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class ColumnSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.ColumnSeries = function() 
-{
-	YAHOO.widget.ColumnSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.ColumnSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "column"
-});
-
-/**
- * LineSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class LineSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.LineSeries = function() 
-{
-	YAHOO.widget.LineSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.LineSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "line"
-});
-
-
-/**
- * BarSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class BarSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.BarSeries = function() 
-{
-	YAHOO.widget.BarSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.BarSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "bar"
-});
-
-
-/**
- * PieSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class PieSeries
- * @uses YAHOO.widget.Series
- * @constructor
- */
-YAHOO.widget.PieSeries = function() 
-{
-	YAHOO.widget.PieSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.PieSeries, YAHOO.widget.Series,
-{
-	type: "pie",
-	
-	/**
-	 * The field used to access the data value from the items from the data source.
-	 *
-	 * @property dataField
-	 * @type String
-	 */
-	dataField: null,
-	
-	/**
-	 * The field used to access the category value from the items from the data source.
-	 *
-	 * @property categoryField
-	 * @type String
-	 */
-	categoryField: null,
-
-	/**
-	 * A string reference to the globally-accessible function that may be called to
-	 * determine each of the label values for this series. Also accepts function references.
-	 *
-	 * @property labelFunction
-	 * @type String
-	 */
-	labelFunction: null
-});
-
-/**
- * StackedBarSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedBarSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.StackedBarSeries = function() 
-{
-	YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedBarSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "stackbar"
-});
-
-/**
- * StackedColumnSeries class for the YUI Charts widget.
- *
- * @namespace YAHOO.widget
- * @class StackedColumnSeries
- * @uses YAHOO.widget.CartesianSeries
- * @constructor
- */
-YAHOO.widget.StackedColumnSeries = function() 
-{
-	YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);
-};
-
-YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries, YAHOO.widget.CartesianSeries,
-{
-	type: "stackcolumn"
-});
-
-YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/charts/charts-min.js
===================================================================
--- trunk/root/static/yui/charts/charts-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,17 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+YAHOO.namespace("deconcept");YAHOO.deconcept=YAHOO.deconcept||{};if(typeof YAHOO.deconcept.util=="undefined"||!YAHOO.deconcept.util){YAHOO.deconcept.util={};}if(typeof YAHOO.deconcept.SWFObjectUtil=="undefined"||!YAHOO.deconcept.SWFObjectUtil){YAHOO.deconcept.SWFObjectUtil={};}YAHOO.deconcept.SWFObject=function(E,C,K,F,H,J,L,G,A,D){if(!document.getElementById){return;}this.DETECT_KEY=D?D:"detectflash";this.skipDetect=YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);this.params={};this.variables={};this.attributes=[];if(E){this.setAttribute("swf",E);}if(C){this.setAttribute("id",C);}if(K){this.setAttribute("width",K);}if(F){this.setAttribute("height",F);}if(H){this.setAttribute("version",new YAHOO.deconcept.PlayerVersion(H.toString().split(".")));}this.installedVer=YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){YAHOO.deconcept.SWFObject.doPrepUnload=true;}if(J){this.addParam("bgcolor",J);}var B=L?L:"high";!
 this.addParam("quality",B);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var I=(G)?G:window.location;this.setAttribute("xiRedirectUrl",I);this.setAttribute("redirectUrl","");if(A){this.setAttribute("redirectUrl",A);}};YAHOO.deconcept.SWFObject.prototype={useExpressInstall:function(A){this.xiSWFPath=!A?"expressinstall.swf":A;this.setAttribute("useExpressInstall",true);},setAttribute:function(A,B){this.attributes[A]=B;},getAttribute:function(A){return this.attributes[A];},addParam:function(A,B){this.params[A]=B;},getParams:function(){return this.params;},addVariable:function(A,B){this.variables[A]=B;},getVariable:function(A){return this.variables[A];},getVariables:function(){return this.variables;},getVariablePairs:function(){var A=[];var B;var C=this.getVariables();for(B in C){if(C.hasOwnProperty(B)){A[A.length]=B+"="+C[B];}}return A;},getSWFHTML:function(){var D="";var C={};var A="";var B="";if(navigator.plugins&&navigator.mimeType!
 s&&navigator.mimeTypes.length){if(this.getAttribute("doExpress!
 Install"
)){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}D='<embed type="application/x-shockwave-flash" src="'+this.getAttribute("swf")+'" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'"';D+=' id="'+this.getAttribute("id")+'" name="'+this.getAttribute("id")+'" ';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+=[A]+'="'+C[A]+'" ';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='flashvars="'+B+'"';}D+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}D='<object id="'+this.getAttribute("id")+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'">';D+='<param name="movie" value="'+this.getAttribute("swf")+'" />';C=this.getParams();for(A in C){if(C.hasOwnPropert!
 y(A)){D+='<param name="'+A+'" value="'+C[A]+'" />';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='<param name="flashvars" value="'+B+'" />';}D+="</object>";}return D;},write:function(A){if(this.getAttribute("useExpressInstall")){var B=new YAHOO.deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(B)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var C=(typeof A=="string")?document.getElementById(A):A;C.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!==""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};YAHOO.!
 deconcept.SWFObjectUtil.getPlayerVersion=function(){var D=null!
 ;var C=n
ew YAHOO.deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var A=navigator.plugins["Shockwave Flash"];if(A&&A.description){C=new YAHOO.deconcept.PlayerVersion(A.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var B=3;while(D){try{B++;D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+B);C=new YAHOO.deconcept.PlayerVersion([B,0,0]);}catch(E){D=null;}}}else{try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(E){try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");C=new YAHOO.deconcept.PlayerVersion([6,0,21]);D.AllowScriptAccess="always";}catch(E){if(C.major==6){return C;}}try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(E){}}if(D!==null){C=new YAHOO.deconcept.PlayerVersion(D.GetVariable("$version").split(" ")[1].split(","));}}}return C;};YAHOO.deconcept.PlayerVersion=function(A){this.major=A[0]!!
 ==null?parseInt(A[0],0):0;this.minor=A[1]!==null?parseInt(A[1],0):0;this.rev=A[2]!==null?parseInt(A[2],0):0;};YAHOO.deconcept.PlayerVersion.prototype.versionIsValid=function(A){if(this.major<A.major){return false;}if(this.major>A.major){return true;}if(this.minor<A.minor){return false;}if(this.minor>A.minor){return true;}if(this.rev<A.rev){return false;}return true;};YAHOO.deconcept.util={getRequestParameter:function(D){var C=document.location.search||document.location.hash;if(D===null){return C;}if(C){var B=C.substring(1).split("&");for(var A=0;A<B.length;A++){if(B[A].substring(0,B[A].indexOf("="))==D){return B[A].substring((B[A].indexOf("=")+1));}}}return"";
+}};YAHOO.deconcept.SWFObjectUtil.cleanupSWFs=function(){var C=document.getElementsByTagName("OBJECT");for(var B=C.length-1;B>=0;B--){C[B].style.display="none";for(var A in C[B]){if(typeof C[B][A]=="function"){C[B][A]=function(){};}}}};if(YAHOO.deconcept.SWFObject.doPrepUnload){if(!YAHOO.deconcept.unloadSet){YAHOO.deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",YAHOO.deconcept.SWFObjectUtil.prepUnload);YAHOO.deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(A){return document.all[A];};}YAHOO.widget.FlashAdapter=function(D,A,B){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};B=B||{};this._id=B.id=B.id||YAHOO.util.Dom.generateId(null,"yuigen");B.version=B.version||"9.0.45";B.backgroundColor=B.background!
 Color||"#ffffff";this._attributes=B;this._swfURL=D;this._containerID=A;this._embedSWF(this._swfURL,this._containerID,B.id,B.version,B.backgroundColor,B.expressInstall,B.wmode);try{this.createEvent("contentReady");}catch(C){}};YAHOO.extend(YAHOO.widget.FlashAdapter,YAHOO.util.AttributeProvider,{_swfURL:null,_containerID:null,_swf:null,_id:null,_initialized:false,_attributes:null,toString:function(){return"FlashAdapter "+this._id;},destroy:function(){if(this._swf){var B=YAHOO.util.Dom.get(this._containerID);B.removeChild(this._swf);}var A=this._id;for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}},_embedSWF:function(I,H,D,C,F,G,B){var E=new YAHOO.deconcept.SWFObject(I,D,"100%","100%",C,F);if(G){E.useExpressInstall(G);}E.addParam("allowScriptAccess","always");if(B){E.addParam("wmode",B);}E.addVariable("allowedDomain",document.location.hostname);E.addVariable("elementID",D);E.addVariable("eventHandler","YAHOO.widget.FlashAdapter.eventHandler");var A=YAHOO!
 .util.Dom.get(H);var J=E.write(A);if(J){this._swf=YAHOO.util.D!
 om.get(D
);this._swf.owner=this;}else{}},_eventHandler:function(B){var A=B.type;switch(A){case"swfReady":this._loadHandler();this.fireEvent("contentReady");return;case"log":return;}this.fireEvent(A,B);},_loadHandler:function(){this._initialized=false;this._initAttributes(this._attributes);this.setAttributes(this._attributes,true);this._initialized=true;},set:function(A,B){this._attributes[A]=B;YAHOO.widget.FlashAdapter.superclass.set.call(this,A,B);},_initAttributes:function(A){this.getAttributeConfig("altText",{method:this._getAltText});this.setAttributeConfig("altText",{method:this._setAltText});this.getAttributeConfig("swfURL",{method:this._getSWFURL});},_getSWFURL:function(){return this._swfURL;},_getAltText:function(){return this._swf.getAltText();},_setAltText:function(A){return this._swf.setAltText(A);}});YAHOO.widget.FlashAdapter.eventHandler=function(A,C){var B=YAHOO.util.Dom.get(A);if(!B.owner){setTimeout(function(){YAHOO.widget.FlashAdapter.eventHandler(A,C);},0);}else{B.o!
 wner._eventHandler(C);}};YAHOO.widget.FlashAdapter.proxyFunctionCount=0;YAHOO.widget.FlashAdapter.createProxyFunction=function(B){var A=YAHOO.widget.FlashAdapter.proxyFunctionCount;YAHOO.widget.FlashAdapter["proxyFunction"+A]=function(){return B.apply(null,arguments);};YAHOO.widget.FlashAdapter.proxyFunctionCount++;return"YAHOO.widget.FlashAdapter.proxyFunction"+A.toString();};YAHOO.widget.FlashAdapter.removeProxyFunction=function(A){if(!A||A.indexOf("YAHOO.widget.FlashAdapter.proxyFunction")<0){return;}A=A.substr(26);YAHOO.widget.FlashAdapter[A]=null;};YAHOO.widget.Chart=function(C,A,D,B){YAHOO.widget.Chart.superclass.constructor.call(this,YAHOO.widget.Chart.SWFURL,A,B);this._type=C;this._dataSource=D;this.createEvent("itemMouseOverEvent");this.createEvent("itemMouseOutEvent");this.createEvent("itemClickEvent");this.createEvent("itemDoubleClickEvent");this.createEvent("itemDragStartEvent");this.createEvent("itemDragEvent");this.createEvent("itemDragEndEvent");};YAHOO.exten!
 d(YAHOO.widget.Chart,YAHOO.widget.FlashAdapter,{_type:null,_po!
 llingID:
null,_pollingInterval:null,_dataTipFunction:null,_seriesLabelFunctions:null,toString:function(){return"Chart "+this._id;},setStyle:function(A,B){B=YAHOO.lang.JSON.stringify(B);this._swf.setStyle(A,B);},setStyles:function(A){A=YAHOO.lang.JSON.stringify(A);this._swf.setStyles(A);},setSeriesStyles:function(B){for(var A=0;A<B.length;A++){B[A]=YAHOO.lang.JSON.stringify(B[A]);}this._swf.setSeriesStyles(B);},destroy:function(){if(this._dataSource!==null){if(this._pollingID!==null){this._dataSource.clearInterval(this._pollingID);this._pollingID=null;}}if(this._dataTipFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);}YAHOO.widget.Chart.superclass.destroy.call(this);},_initAttributes:function(A){YAHOO.widget.Chart.superclass._initAttributes.call(this,A);this.getAttributeConfig("request",{method:this._getRequest});this.setAttributeConfig("request",{method:this._setRequest});this.getAttributeConfig("dataSource",{method:this._getDataSource});this.setAttribut!
 eConfig("dataSource",{method:this._setDataSource});this.getAttributeConfig("series",{method:this._getSeriesDefs});this.setAttributeConfig("series",{method:this._setSeriesDefs});this.getAttributeConfig("categoryNames",{method:this._getCategoryNames});this.setAttributeConfig("categoryNames",{validator:YAHOO.lang.isArray,method:this._setCategoryNames});this.getAttributeConfig("dataTipFunction",{method:this._getDataTipFunction});this.setAttributeConfig("dataTipFunction",{method:this._setDataTipFunction});this.getAttributeConfig("polling",{method:this._getPolling});this.setAttributeConfig("polling",{method:this._setPolling});},_loadHandler:function(){this._swf.setType(this._type);if(this._attributes.style){var A=this._attributes.style;this.setStyles(A);}YAHOO.widget.Chart.superclass._loadHandler.call(this);if(this._dataSource){this.set("dataSource",this._dataSource);}},refreshData:function(){if(!this._initialized){return;
+}if(this._dataSource!==null){if(this._pollingID!==null){this._dataSource.clearInterval(this._pollingID);this._pollingID=null;}if(this._pollingInterval>0){this._pollingID=this._dataSource.setInterval(this._pollingInterval,this._request,this._loadDataHandler,this);}this._dataSource.sendRequest(this._request,this._loadDataHandler,this);}},_loadDataHandler:function(D,C,J){if(this._swf){if(J){}else{var H;if(this._seriesLabelFunctions){var I=this._seriesLabelFunctions.length;for(H=0;H<I;H++){YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[H]);}this._seriesLabelFunction=null;}this._seriesLabelFunctions=[];var F=[];var E=0;var K=null;if(this._seriesDefs!==null){E=this._seriesDefs.length;for(H=0;H<E;H++){K=this._seriesDefs[H];var B={};for(var A in K){if(YAHOO.lang.hasOwnProperty(K,A)){if(A=="style"){if(K.style!==null){B.style=YAHOO.lang.JSON.stringify(K.style);}}else{if(A=="labelFunction"){if(K.labelFunction!==null&&typeof K.labelFunction=="function"){B.labe!
 lFunction=YAHOO.widget.FlashAdapter.createProxyFunction(K.labelFunction);this._seriesLabelFunctions.push(B.labelFunction);}}else{B[A]=K[A];}}}}F.push(B);}}if(E>0){for(H=0;H<E;H++){K=F[H];if(!K.type){K.type=this._type;}K.dataProvider=C.results;}}else{var G={type:this._type,dataProvider:C.results};F.push(G);}this._swf.setDataProvider(F);}}},_request:"",_getRequest:function(){return this._request;},_setRequest:function(A){this._request=A;this.refreshData();},_dataSource:null,_getDataSource:function(){return this._dataSource;},_setDataSource:function(A){this._dataSource=A;this.refreshData();},_seriesDefs:null,_getSeriesDefs:function(){return this._seriesDefs;},_setSeriesDefs:function(A){this._seriesDefs=A;this.refreshData();},_getCategoryNames:function(){this._swf.getCategoryNames();},_setCategoryNames:function(A){this._swf.setCategoryNames(A);},_setDataTipFunction:function(A){if(this._dataTipFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);}if(A&&!
 typeof A=="function"){A=YAHOO.widget.FlashAdapter.createProxyF!
 unction(
A);this._dataTipFunction=A;}this._swf.setDataTipFunction(A);},_getPolling:function(){return this._pollingInterval;},_setPolling:function(A){this._pollingInterval=A;this.refreshData();}});YAHOO.widget.Chart.SWFURL="assets/charts.swf";YAHOO.widget.PieChart=function(A,C,B){YAHOO.widget.PieChart.superclass.constructor.call(this,"pie",A,C,B);};YAHOO.lang.extend(YAHOO.widget.PieChart,YAHOO.widget.Chart,{_initAttributes:function(A){YAHOO.widget.PieChart.superclass._initAttributes.call(this,A);this.getAttributeConfig("dataField",{method:this._getDataField});this.setAttributeConfig("dataField",{validator:YAHOO.lang.isString,method:this._setDataField});this.getAttributeConfig("categoryField",{method:this._getCategoryField});this.setAttributeConfig("categoryField",{validator:YAHOO.lang.isString,method:this._setCategoryField});},_getDataField:function(){return this._swf.getDataField();},_setDataField:function(A){this._swf.setDataField(A);},_getCategoryField:function(){return this._swf.g!
 etCategoryField();},_setCategoryField:function(A){this._swf.setCategoryField(A);}});YAHOO.widget.CartesianChart=function(C,A,D,B){YAHOO.widget.CartesianChart.superclass.constructor.call(this,C,A,D,B);};YAHOO.lang.extend(YAHOO.widget.CartesianChart,YAHOO.widget.Chart,{_xAxisLabelFunction:null,_yAxisLabelFunction:null,destroy:function(){if(this._xAxisLabelFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);this._xAxisLabelFunction=null;}if(this._yAxisLabelFunction){YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);this._yAxisLabelFunction=null;}YAHOO.widget.CartesianChart.superclass.destroy.call(this);},_initAttributes:function(A){YAHOO.widget.CartesianChart.superclass._initAttributes.call(this,A);this.getAttributeConfig("xField",{method:this._getXField});this.setAttributeConfig("xField",{validator:YAHOO.lang.isString,method:this._setXField});this.getAttributeConfig("yField",{method:this._getYField});this.setAttributeConfig(!
 "yField",{validator:YAHOO.lang.isString,method:this._setYField!
 });this.
setAttributeConfig("xAxis",{method:this._setXAxis});this.setAttributeConfig("yAxis",{method:this._setYAxis});},_getXField:function(){return this._swf.getHorizontalField();},_setXField:function(A){this._swf.setHorizontalField(A);},_getYField:function(){return this._swf.getVerticalField();},_setYField:function(A){this._swf.setVerticalField(A);},_setXAxis:function(B){if(this._xAxisLabelFunction!==null){YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);this._xAxisLabelFunction=null;}var A={};for(var C in B){if(C=="labelFunction"){if(B.labelFunction!==null){if(typeof B.labelFunction=="function"){A.labelFunction=YAHOO.widget.FlashAdapter.createProxyFunction(B.labelFunction);}else{A.labelFunction=B.labelFunction;}this._xAxisLabelFunction=A.labelFunction;}}else{A[C]=B[C];}}this._swf.setHorizontalAxis(A);},_setYAxis:function(B){if(this._yAxisLabelFunction!==null){YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);this._yAxisLabelFunction=nul!
 l;}var A={};for(var C in B){if(C=="labelFunction"){if(B.labelFunction!==null){if(typeof B.labelFunction=="function"){A.labelFunction=YAHOO.widget.FlashAdapter.createProxyFunction(B.labelFunction);}else{A.labelFunction=B.labelFunction;}this._yAxisLabelFunction=A.labelFunction;}}else{A[C]=B[C];}}this._swf.setVerticalAxis(A);}});YAHOO.widget.LineChart=function(A,C,B){YAHOO.widget.LineChart.superclass.constructor.call(this,"line",A,C,B);};YAHOO.lang.extend(YAHOO.widget.LineChart,YAHOO.widget.CartesianChart);YAHOO.widget.ColumnChart=function(A,C,B){YAHOO.widget.ColumnChart.superclass.constructor.call(this,"column",A,C,B);};YAHOO.lang.extend(YAHOO.widget.ColumnChart,YAHOO.widget.CartesianChart);YAHOO.widget.BarChart=function(A,C,B){YAHOO.widget.BarChart.superclass.constructor.call(this,"bar",A,C,B);};YAHOO.lang.extend(YAHOO.widget.BarChart,YAHOO.widget.CartesianChart);YAHOO.widget.StackedColumnChart=function(A,C,B){YAHOO.widget.StackedColumnChart.superclass.constructor.call(this,!
 "stackcolumn",A,C,B);
+};YAHOO.lang.extend(YAHOO.widget.StackedColumnChart,YAHOO.widget.CartesianChart);YAHOO.widget.StackedBarChart=function(A,C,B){YAHOO.widget.StackedBarChart.superclass.constructor.call(this,"stackbar",A,C,B);};YAHOO.lang.extend(YAHOO.widget.StackedBarChart,YAHOO.widget.CartesianChart);YAHOO.widget.Axis=function(){};YAHOO.widget.Axis.prototype={type:null,reverse:false,labelFunction:null,labelSpacing:2,title:null};YAHOO.widget.NumericAxis=function(){YAHOO.widget.NumericAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.NumericAxis,YAHOO.widget.Axis,{type:"numeric",minimum:NaN,maximum:NaN,majorUnit:NaN,minorUnit:NaN,snapToUnits:true,stackingEnabled:false,alwaysShowZero:true,scale:"linear",roundMajorUnit:true});YAHOO.widget.TimeAxis=function(){YAHOO.widget.TimeAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.TimeAxis,YAHOO.widget.Axis,{type:"time",minimum:null,maximum:null,majorUnit:NaN,majorTimeUnit:null,minorUnit:NaN,minorTimeUnit:nul!
 l,snapToUnits:true,stackingEnabled:false});YAHOO.widget.CategoryAxis=function(){YAHOO.widget.CategoryAxis.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.CategoryAxis,YAHOO.widget.Axis,{type:"category",categoryNames:null,calculateCategoryCount:false});YAHOO.widget.Series=function(){};YAHOO.widget.Series.prototype={type:null,displayName:null};YAHOO.widget.CartesianSeries=function(){YAHOO.widget.CartesianSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.CartesianSeries,YAHOO.widget.Series,{xField:null,yField:null});YAHOO.widget.ColumnSeries=function(){YAHOO.widget.ColumnSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.ColumnSeries,YAHOO.widget.CartesianSeries,{type:"column"});YAHOO.widget.LineSeries=function(){YAHOO.widget.LineSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.LineSeries,YAHOO.widget.CartesianSeries,{type:"line"});YAHOO.widget.BarSeries=function(){YAHOO.widget.BarSeries!
 .superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.w!
 idget.Ba
rSeries,YAHOO.widget.CartesianSeries,{type:"bar"});YAHOO.widget.PieSeries=function(){YAHOO.widget.PieSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.PieSeries,YAHOO.widget.Series,{type:"pie",dataField:null,categoryField:null,labelFunction:null});YAHOO.widget.StackedBarSeries=function(){YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.StackedBarSeries,YAHOO.widget.CartesianSeries,{type:"stackbar"});YAHOO.widget.StackedColumnSeries=function(){YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);};YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries,YAHOO.widget.CartesianSeries,{type:"stackcolumn"});YAHOO.register("charts",YAHOO.widget.Chart,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/charts/charts.js
===================================================================
--- trunk/root/static/yui/charts/charts.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/charts/charts.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,2322 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
+/*!
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+
+YAHOO.namespace("deconcept"); 
+	
+YAHOO.deconcept = YAHOO.deconcept || {};
+
+if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
+{
+	YAHOO.deconcept.util = {};
+}
+
+if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
+{
+	YAHOO.deconcept.SWFObjectUtil = {};
+}
+
+YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
+{
+	if(!document.getElementById) { return; }
+	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
+	this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
+	this.params = {};
+	this.variables = {};
+	this.attributes = [];
+	if(swf) { this.setAttribute('swf', swf); }
+	if(id) { this.setAttribute('id', id); }
+	if(w) { this.setAttribute('width', w); }
+	if(h) { this.setAttribute('height', h); }
+	if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
+	this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
+	if (!window.opera && document.all && this.installedVer.major > 7)
+	{
+		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
+		YAHOO.deconcept.SWFObject.doPrepUnload = true;
+	}
+	if(c)
+	{
+		this.addParam('bgcolor', c);
+	}
+	var q = quality ? quality : 'high';
+	this.addParam('quality', q);
+	this.setAttribute('useExpressInstall', false);
+	this.setAttribute('doExpressInstall', false);
+	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
+	this.setAttribute('xiRedirectUrl', xir);
+	this.setAttribute('redirectUrl', '');
+	if(redirectUrl)
+	{
+		this.setAttribute('redirectUrl', redirectUrl);
+	}
+};
+
+YAHOO.deconcept.SWFObject.prototype =
+{
+	useExpressInstall: function(path)
+	{
+		this.xiSWFPath = !path ? "expressinstall.swf" : path;
+		this.setAttribute('useExpressInstall', true);
+	},
+	setAttribute: function(name, value){
+		this.attributes[name] = value;
+	},
+	getAttribute: function(name){
+		return this.attributes[name];
+	},
+	addParam: function(name, value){
+		this.params[name] = value;
+	},
+	getParams: function(){
+		return this.params;
+	},
+	addVariable: function(name, value){
+		this.variables[name] = value;
+	},
+	getVariable: function(name){
+		return this.variables[name];
+	},
+	getVariables: function(){
+		return this.variables;
+	},
+	getVariablePairs: function(){
+		var variablePairs = [];
+		var key;
+		var variables = this.getVariables();
+		for(key in variables)
+		{
+			if(variables.hasOwnProperty(key))
+			{
+				variablePairs[variablePairs.length] = key +"="+ variables[key];
+			}
+		}
+		return variablePairs;
+	},
+	getSWFHTML: function() {
+		var swfNode = "";
+		var params = {};
+		var key = "";
+		var pairs = "";
+		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "PlugIn");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
+			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += [key] +'="'+ params[key] +'" ';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
+			swfNode += '/>';
+		} else { // PC IE
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "ActiveX");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
+			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
+			swfNode += "</object>";
+		}
+		return swfNode;
+	},
+	write: function(elementId)
+	{
+		if(this.getAttribute('useExpressInstall')) {
+			// check to see if we need to do an express install
+			var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
+			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
+				this.setAttribute('doExpressInstall', true);
+				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
+				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+				this.addVariable("MMdoctitle", document.title);
+			}
+		}
+		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
+		{
+			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
+			n.innerHTML = this.getSWFHTML();
+			return true;
+		}
+		else
+		{
+			if(this.getAttribute('redirectUrl') !== "")
+			{
+				document.location.replace(this.getAttribute('redirectUrl'));
+			}
+		}
+		return false;
+	}
+};
+
+/* ---- detection functions ---- */
+YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
+{
+	var axo = null;
+	var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
+	if(navigator.plugins && navigator.mimeTypes.length)
+	{
+		var x = navigator.plugins["Shockwave Flash"];
+		if(x && x.description)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+		}
+	}
+	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
+	{ // if Windows CE
+		var counter = 3;
+		while(axo)
+		{
+			try
+			{
+				counter++;
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
+//				document.write("player v: "+ counter);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
+			}
+			catch(e)
+			{
+				axo = null;
+			}
+		}
+	}
+	else
+	{ // Win IE (non mobile)
+		// do minor version lookup in IE, but avoid fp6 crashing issues
+		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+		try
+		{
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+		}
+		catch(e)
+		{
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
+				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
+			}
+			catch(e)
+			{
+				if(PlayerVersion.major == 6)
+				{
+					return PlayerVersion;
+				}
+			}
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+			}
+			catch(e) {}
+		}
+		
+		if(axo !== null)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+		}
+	}
+	return PlayerVersion;
+};
+
+YAHOO.deconcept.PlayerVersion = function(arrVersion)
+{
+	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
+	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
+	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
+};
+
+YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
+{
+	if(this.major < fv.major)
+	{
+		return false;
+	}
+	if(this.major > fv.major)
+	{
+		return true;
+	}
+	if(this.minor < fv.minor)
+	{
+		return false;
+	}
+	if(this.minor > fv.minor)
+	{
+		return true;
+	}
+	if(this.rev < fv.rev)
+	{
+		return false;
+	}
+	return true;
+};
+
+/* ---- get value of query string param ---- */
+YAHOO.deconcept.util =
+{
+	getRequestParameter: function(param)
+	{
+		var q = document.location.search || document.location.hash;
+		if(param === null) { return q; }
+		if(q)
+		{
+			var pairs = q.substring(1).split("&");
+			for(var i=0; i < pairs.length; i++)
+			{
+				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
+				{
+					return pairs[i].substring((pairs[i].indexOf("=") + 1));
+				}
+			}
+		}
+		return "";
+	}
+};
+
+/* fix for video streaming bug */
+YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
+{
+	var objects = document.getElementsByTagName("OBJECT");
+	for(var i = objects.length - 1; i >= 0; i--)
+	{
+		objects[i].style.display = 'none';
+		for(var x in objects[i])
+		{
+			if(typeof objects[i][x] == 'function')
+			{
+				objects[i][x] = function(){};
+			}
+		}
+	}
+};
+
+// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
+if(YAHOO.deconcept.SWFObject.doPrepUnload)
+{
+	if(!YAHOO.deconcept.unloadSet)
+	{
+		YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
+		{
+			__flash_unloadHandler = function(){};
+			__flash_savedUnloadHandler = function(){};
+			window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
+		};
+		window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
+		YAHOO.deconcept.unloadSet = true;
+	}
+}
+
+/* add document.getElementById if needed (mobile IE < 5) */
+if(!document.getElementById && document.all)
+{
+	document.getElementById = function(id) { return document.all[id]; };
+}
+
+
+/**
+ * Wraps Flash embedding functionality and allows communication with SWF through
+ * attributes.
+ *
+ * @namespace YAHOO.widget
+ * @class FlashAdapter
+ * @uses YAHOO.util.AttributeProvider
+ */
+YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes)
+{
+	// set up the initial events and attributes stuff
+	this._queue = this._queue || [];
+	this._events = this._events || {};
+	this._configs = this._configs || {};
+	attributes = attributes || {};
+	
+	//the Flash Player external interface code from Adobe doesn't play nicely
+	//with the default value, yui-gen, in IE
+	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
+	attributes.version = attributes.version || "9.0.45";
+	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
+	
+	//we can't use the initial attributes right away
+	//so save them for once the SWF finishes loading
+	this._attributes = attributes;
+	
+	this._swfURL = swfURL;
+	this._containerID = containerID;
+	
+	//embed the SWF file in the page
+	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
+		attributes.backgroundColor, attributes.expressInstall, attributes.wmode);
+	
+	/**
+	 * Fires when the SWF is initialized and communication is possible.
+	 * @event contentReady
+	 */
+	//Fix for iframe cross-domain issue with FF2x 
+	try
+	{
+		this.createEvent("contentReady");
+	}
+	catch(e){}
+};
+
+YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
+{
+	/**
+	 * The URL of the SWF file.
+	 * @property _swfURL
+	 * @type String
+	 * @private
+	 */
+	_swfURL: null,
+
+	/**
+	 * The ID of the containing DIV.
+	 * @property _containerID
+	 * @type String
+	 * @private
+	 */
+	_containerID: null,
+
+	/**
+	 * A reference to the embedded SWF file.
+	 * @property _swf
+	 * @private
+	 */
+	_swf: null,
+
+	/**
+	 * The id of this instance.
+	 * @property _id
+	 * @type String
+	 * @private
+	 */
+	_id: null,
+
+	/**
+	 * Indicates whether the SWF has been initialized and is ready
+	 * to communicate with JavaScript
+	 * @property _initialized
+	 * @type Boolean
+	 * @private
+	 */
+	_initialized: false,
+	
+	/**
+	 * The initializing attributes are stored here until the SWF is ready.
+	 * @property _attributes
+	 * @type Object
+	 * @private
+	 */
+	_attributes: null, //the intializing attributes
+
+	/**
+	 * Public accessor to the unique name of the FlashAdapter instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the FlashAdapter instance.
+	 */
+	toString: function()
+	{
+		return "FlashAdapter " + this._id;
+	},
+
+	/**
+	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
+	 * event listeners and clears out DOM elements inside the container. After calling
+	 * this method, the instance reference should be expliclitly nulled by implementer,
+	 * as in myChart = null. Use with caution!
+	 *
+	 * @method destroy
+	 */
+	destroy: function()
+	{
+		//kill the Flash Player instance
+		if(this._swf)
+		{
+			var container = YAHOO.util.Dom.get(this._containerID);
+			container.removeChild(this._swf);
+		}
+		
+		var instanceName = this._id;
+		
+		//null out properties
+		for(var prop in this)
+		{
+			if(YAHOO.lang.hasOwnProperty(this, prop))
+			{
+				this[prop] = null;
+			}
+		}
+		
+	},
+
+	/**
+	 * Embeds the SWF in the page and associates it with this instance.
+	 *
+	 * @method _embedSWF
+	 * @private
+	 */
+	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode)
+	{
+		//standard SWFObject embed
+		var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
+
+		if(expressInstall)
+		{
+			swfObj.useExpressInstall(expressInstall);
+		}
+
+		//make sure we can communicate with ExternalInterface
+		swfObj.addParam("allowScriptAccess", "always");
+		
+		if(wmode)
+		{
+			swfObj.addParam("wmode", wmode);
+		}
+		
+		//again, a useful ExternalInterface trick
+		swfObj.addVariable("allowedDomain", document.location.hostname);
+
+		//tell the SWF which HTML element it is in
+		swfObj.addVariable("elementID", swfID);
+
+		// set the name of the function to call when the swf has an event
+		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
+
+		var container = YAHOO.util.Dom.get(containerID);
+		var result = swfObj.write(container);
+		if(result)
+		{
+			this._swf = YAHOO.util.Dom.get(swfID);
+			//if successful, let's add an owner property to the SWF reference
+			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
+			this._swf.owner = this;
+		}
+		else
+		{
+		}
+	},
+
+	/**
+	 * Handles or re-dispatches events received from the SWF.
+	 *
+	 * @method _eventHandler
+	 * @private
+	 */
+	_eventHandler: function(event)
+	{
+		var type = event.type;
+		switch(type)
+		{
+			case "swfReady":
+   				this._loadHandler();
+   				this.fireEvent("contentReady");
+				return;
+			case "log":
+				return;
+		}
+		
+		//be sure to return after your case or the event will automatically fire!
+		this.fireEvent(type, event);
+	},
+
+	/**
+	 * Called when the SWF has been initialized.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		this._initialized = false;
+		this._initAttributes(this._attributes);
+		this.setAttributes(this._attributes, true);
+		
+		this._initialized = true;
+	},
+	
+	set: function(name, value)
+	{
+		//save all the attributes in case the swf reloads
+		//so that we can pass them in again
+		this._attributes[name] = value;
+		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		//should be overridden if other attributes need to be set up
+
+		/**
+		 * @attribute wmode
+		 * @description Sets the window mode of the Flash Player control. May be
+		 *		"window", "opaque", or "transparent". Only available in the constructor
+		 *		because it may not be set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute expressInstall
+		 * @description URL pointing to a SWF file that handles Flash Player's express
+		 *		install feature. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute version
+		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute backgroundColor
+		 * @description The background color of the SWF. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute altText
+		 * @description The alternative text to provide for screen readers and other assistive technology.
+		 * @type String
+		 */
+		this.getAttributeConfig("altText",
+		{
+			method: this._getAltText
+		});
+		this.setAttributeConfig("altText",
+		{
+			method: this._setAltText
+		});
+		
+		/**
+		 * @attribute swfURL
+		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		this.getAttributeConfig("swfURL",
+		{
+			method: this._getSWFURL
+		});
+	},
+	
+	/**
+	 * Getter for swfURL attribute.
+	 *
+	 * @method _getSWFURL
+	 * @private
+	 */
+	_getSWFURL: function()
+	{
+		return this._swfURL;
+	},
+	
+	/**
+	 * Getter for altText attribute.
+	 *
+	 * @method _getAltText
+	 * @private
+	 */
+	_getAltText: function()
+	{
+		return this._swf.getAltText();
+	},
+
+	/**
+	 * Setter for altText attribute.
+	 *
+	 * @method _setAltText
+	 * @private
+	 */
+	_setAltText: function(value)
+	{
+		return this._swf.setAltText(value);
+	}
+});
+
+/**
+ * Receives event messages from SWF and passes them to the correct instance
+ * of FlashAdapter.
+ *
+ * @method YAHOO.widget.FlashAdapter.eventHandler
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
+{
+	var loadedSWF = YAHOO.util.Dom.get(elementID);
+	if(!loadedSWF.owner)
+	{
+		//fix for ie: if owner doesn't exist yet, try again in a moment
+		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
+	}
+	else
+	{
+		loadedSWF.owner._eventHandler(event);
+	}
+};
+
+/**
+ * The number of proxy functions that have been created.
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
+
+/**
+ * Creates a globally accessible function that wraps a function reference.
+ * Returns the proxy function's name as a string for use by the SWF through
+ * ExternalInterface.
+ *
+ * @method YAHOO.widget.FlashAdapter.createProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
+{
+	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
+	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
+	{
+		return func.apply(null, arguments);
+	};
+	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
+	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
+};
+
+/**
+ * Removes a function created with createProxyFunction()
+ * 
+ * @method YAHOO.widget.FlashAdapter.removeProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
+{
+	//quick error check
+	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
+	{
+		return;
+	}
+	
+	funcName = funcName.substr(26);
+	YAHOO.widget.FlashAdapter[funcName] = null;
+};
+
+/**
+ * The Charts widget provides a Flash control for displaying data
+ * graphically by series across A-grade browsers with Flash Player installed.
+ *
+ * @module charts
+ * @requires yahoo, dom, event, datasource
+ * @title Charts Widget
+ * @experimental
+ */
+ 
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+
+/**
+ * Chart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class Chart
+ * @uses YAHOO.widget.FlashAdapter
+ * @constructor
+ * @param type {String} The char type. May be "line", "column", "bar", or "pie"
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.Chart = function(type, containerId, dataSource, attributes)
+{
+	YAHOO.widget.Chart.superclass.constructor.call(this, YAHOO.widget.Chart.SWFURL, containerId, attributes);
+	
+	this._type = type;
+	this._dataSource = dataSource;
+	
+	/**
+	 * Fires when the user moves the mouse over the bounds of an item renderer in the chart.
+	 *
+	 * @event itemMouseOverEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemMouseOverEvent");
+	
+	/**
+	 * Fires when the user moves the mouse out of the bounds of an item renderer in the chart.
+	 *
+	 * @event itemMouseOutEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemMouseOutEvent");
+	
+	/**
+	 * Fires when the user clicks an item renderer in the chart with the mouse.
+	 *
+	 * @event itemClickEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemClickEvent");
+	
+	/**
+	 * Fires when the user double-clicks an item renderer in the chart with the mouse.
+	 *
+	 * @event itemDoubleClickEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDoubleClickEvent");
+	
+	/**
+	 * Fires when the user presses the mouse down on an item to initiate a drag action.
+	 *
+	 * @event itemDragStartEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragStartEvent");
+	
+	/**
+	 * Fires when the user moves the mouse during a drag action.
+	 *
+	 * @event itemDragEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragEvent");
+
+	/**
+	 * Fires when the user releases the mouse during a drag action.
+	 *
+	 * @event itemDragEndEvent
+	 * @param event.type {String} The event type
+	 * @param event.item {Object} The data displayed by the renderer
+	 * @param event.index {Number} The position within the series that the item appears.
+	 * @param event.seriesIndex {Number} The position within the series definition that the series appears.
+	 * @param event.x {Number} The horizontal position of the mouse, relative to the SWF.
+	 * @param event.y {Number} The vertical position of the mouse, relative to the SWF.
+	 */
+	this.createEvent("itemDragEndEvent");
+};
+
+YAHOO.extend(YAHOO.widget.Chart, YAHOO.widget.FlashAdapter,
+{
+	/**
+	 * The type of this chart instance.
+	 * @property _type
+	 * @type String
+	 * @private
+	 */
+	_type: null,
+
+	/**
+	 * The id returned from the DataSource's setInterval function.
+	 * @property _pollingID
+	 * @type Number
+	 * @private
+	 */
+	_pollingID: null,
+
+	/**
+	 * The time, in ms, between requests for data.
+	 * @property _pollingInterval
+	 * @type Number
+	 * @private
+	 */
+	_pollingInterval: null,
+
+	/**
+	 * Stores a reference to the dataTipFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _dataTipFunction
+	 * @type String
+	 * @private
+	 */
+	_dataTipFunction: null,
+	
+	/**
+	 * Stores references to series labelFunction values created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _seriesLabelFunctions
+	 * @type Array
+	 * @private
+	 */
+	_seriesLabelFunctions: null,
+
+	/**
+	 * Public accessor to the unique name of the Chart instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the Chart instance.
+	 */
+	toString: function()
+	{
+		return "Chart " + this._id;
+	},
+	
+	/**
+	 * Sets a single style value on the Chart instance.
+	 *
+	 * @method setStyle
+	 * @param name {String} Name of the Chart style value to change.
+	 * @param value {Object} New value to pass to the Chart style.
+	 */
+	setStyle: function(name, value)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		value = YAHOO.lang.JSON.stringify(value);
+		this._swf.setStyle(name, value);
+	},
+	
+	/**
+	 * Resets all styles on the Chart instance.
+	 *
+	 * @method setStyles
+	 * @param styles {Object} Initializer for all Chart styles.
+	 */
+	setStyles: function(styles)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		styles = YAHOO.lang.JSON.stringify(styles);
+		this._swf.setStyles(styles);
+	},
+	
+	/**
+	 * Sets the styles on all series in the Chart.
+	 *
+	 * @method setSeriesStyles
+	 * @param styles {Array} Initializer for all Chart series styles.
+	 */
+	setSeriesStyles: function(styles)
+	{
+		//we must jsonify this because Flash Player versions below 9.0.60 don't handle
+		//complex ExternalInterface parsing correctly
+		for(var i = 0; i < styles.length; i++)
+		{
+			styles[i] = YAHOO.lang.JSON.stringify(styles[i]);	
+		}
+		this._swf.setSeriesStyles(styles);
+	},
+	
+	destroy: function()
+	{
+		//stop polling if needed
+		if(this._dataSource !== null)
+		{
+			if(this._pollingID !== null)
+			{
+				this._dataSource.clearInterval(this._pollingID);
+				this._pollingID = null;
+			}
+		}
+		
+		//remove proxy functions
+		if(this._dataTipFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
+		}
+		
+		//call last
+		YAHOO.widget.Chart.superclass.destroy.call(this);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		YAHOO.widget.Chart.superclass._initAttributes.call(this, attributes);
+
+		/**
+		 * @attribute request
+		 * @description Request to be sent to the Chart's DataSource.
+		 * @type String
+		 */
+		this.getAttributeConfig("request",
+		{
+			method: this._getRequest
+		});
+		
+		this.setAttributeConfig("request",
+		{
+			method: this._setRequest
+		});
+		
+		/**
+		 * @attribute dataSource
+		 * @description The DataSource instance to display in the Chart.
+		 * @type DataSource
+		 */
+		this.getAttributeConfig("dataSource",
+		{
+			method: this._getDataSource
+		});
+		
+		this.setAttributeConfig("dataSource",
+		{
+			method: this._setDataSource
+		});
+		
+		/**
+		 * @attribute series
+		 * @description Defines the series to be displayed by the Chart.
+		 * @type Array
+		 */
+		this.getAttributeConfig("series",
+		{
+			method: this._getSeriesDefs
+		});
+		
+		this.setAttributeConfig("series",
+		{
+			method: this._setSeriesDefs
+		});
+		
+		/**
+		 * @attribute categoryNames
+		 * @description Defines the names of the categories to be displayed in the Chart..
+		 * @type Array
+		 */
+		this.getAttributeConfig("categoryNames",
+		{
+			method: this._getCategoryNames
+		});
+		
+		this.setAttributeConfig("categoryNames",
+		{
+			validator: YAHOO.lang.isArray,
+			method: this._setCategoryNames
+		});
+		
+		/**
+		 * @attribute dataTipFunction
+		 * @description The string representation of a globally-accessible function
+		 * that may be called by the SWF to generate the datatip text for a Chart's item.
+		 * @type String
+		 */
+		this.getAttributeConfig("dataTipFunction",
+		{
+			method: this._getDataTipFunction
+		});
+		
+		this.setAttributeConfig("dataTipFunction",
+		{
+			method: this._setDataTipFunction
+		});
+
+		/**
+		 * @attribute polling
+		 * @description A numeric value indicating the number of milliseconds between
+		 * polling requests to the DataSource.
+		 * @type Number
+		 */
+		this.getAttributeConfig("polling",
+		{
+			method: this._getPolling
+		});
+
+		this.setAttributeConfig("polling",
+		{
+			method: this._setPolling
+		});
+	},
+	
+	/**
+	 * Called when the SWF is ready for communication. Sets the type, initializes
+	 * the styles, and sets the DataSource.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		//the type is set separately because it must be first!
+		this._swf.setType(this._type);
+		
+		//set initial styles
+		if(this._attributes.style)
+		{
+			var style = this._attributes.style;
+			this.setStyles(style);		
+		}
+		
+		YAHOO.widget.Chart.superclass._loadHandler.call(this);
+		
+		if(this._dataSource)
+		{
+			this.set("dataSource", this._dataSource);
+		}
+	},
+
+	/**
+	 * Sends (or resends) the request to the DataSource.
+	 *
+	 * @method refreshData
+	 */
+	refreshData: function()
+	{
+		if(!this._initialized)
+		{
+			return;
+		}
+		
+		if(this._dataSource !== null)
+		{
+			if(this._pollingID !== null)
+			{
+				this._dataSource.clearInterval(this._pollingID);
+				this._pollingID = null;
+			}
+			
+			if(this._pollingInterval > 0)
+			{
+				this._pollingID = this._dataSource.setInterval(this._pollingInterval, this._request, this._loadDataHandler, this);
+			}
+			this._dataSource.sendRequest(this._request, this._loadDataHandler, this);
+		}
+	},
+
+	/**
+	 * Called when the DataSource receives new data. The series definitions are used
+	 * to build a data provider for the SWF chart.
+	 *
+	 * @method _loadDataHandler
+	 * @private
+	 */
+	_loadDataHandler: function(request, response, error)
+	{
+		if(this._swf)
+		{
+			if(error)
+			{
+			}
+			else
+			{
+				var i;
+				if(this._seriesLabelFunctions)
+				{
+					var count = this._seriesLabelFunctions.length;
+					for(i = 0; i < count; i++)
+					{
+						YAHOO.widget.FlashAdapter.removeProxyFunction(this._seriesLabelFunctions[i]);
+					}
+					this._seriesLabelFunction = null;
+				}
+				this._seriesLabelFunctions = [];
+
+				//make a copy of the series definitions so that we aren't
+				//editing them directly.
+				var dataProvider = [];	
+				var seriesCount = 0;
+				var currentSeries = null;
+				if(this._seriesDefs !== null)
+				{
+					seriesCount = this._seriesDefs.length;
+					for(i = 0; i < seriesCount; i++)
+					{
+						currentSeries = this._seriesDefs[i];
+						var clonedSeries = {};
+						for(var prop in currentSeries)
+						{
+							if(YAHOO.lang.hasOwnProperty(currentSeries, prop))
+							{
+								if(prop == "style")
+								{
+									if(currentSeries.style !== null)
+									{
+										clonedSeries.style = YAHOO.lang.JSON.stringify(currentSeries.style);
+									}
+								}
+
+								else if(prop == "labelFunction")
+								{
+									if(currentSeries.labelFunction !== null &&
+										typeof currentSeries.labelFunction == "function")
+									{
+										clonedSeries.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(currentSeries.labelFunction);
+										this._seriesLabelFunctions.push(clonedSeries.labelFunction);
+									}
+								}
+
+								else
+								{
+									clonedSeries[prop] = currentSeries[prop];
+								}
+							}
+						}
+						dataProvider.push(clonedSeries);
+					}
+				}
+
+				if(seriesCount > 0)
+				{
+					for(i = 0; i < seriesCount; i++)
+					{
+						currentSeries = dataProvider[i];
+						if(!currentSeries.type)
+						{
+							currentSeries.type = this._type;
+						}
+						currentSeries.dataProvider = response.results;
+					}
+				}
+				else
+				{
+					var series = {type: this._type, dataProvider: response.results};
+					dataProvider.push(series);
+				}
+				this._swf.setDataProvider(dataProvider);
+			}
+		}
+	},
+
+	/**
+	 * Storage for the request attribute.
+	 * 
+	 * @property _request
+	 * @private
+	 */
+	_request: "",
+	
+	/**
+	 * Getter for the request attribute.
+	 *
+	 * @method _getRequest
+	 * @private
+	 */
+	_getRequest: function()
+	{
+		return this._request;
+	},
+	
+	/**
+	 * Setter for the request attribute.
+	 *
+	 * @method _setRequest
+	 * @private
+	 */
+	_setRequest: function(value)
+	{
+		this._request = value;
+		this.refreshData();
+	},
+
+	/**
+	 * Storage for the dataSource attribute.
+	 * 
+	 * @property _dataSource
+	 * @private
+	 */
+	_dataSource: null,
+	
+	/**
+	 * Getter for the dataSource attribute.
+	 *
+	 * @method _getDataSource
+	 * @private
+	 */
+	_getDataSource: function()
+	{
+		return this._dataSource;
+	},
+
+	/**
+	 * Setter for the dataSource attribute.
+	 *
+	 * @method _setDataSource
+	 * @private
+	 */
+	_setDataSource: function(value)
+	{	
+		this._dataSource = value;
+		this.refreshData();
+	},
+	
+	/**
+	 * Storage for the series attribute.
+	 * 
+	 * @property _seriesDefs
+	 * @private
+	 */
+	_seriesDefs: null,
+	
+	/**
+	 * Getter for the series attribute.
+	 *
+	 * @method _getSeriesDefs
+	 * @private
+	 */
+	_getSeriesDefs: function()
+	{
+		return this._seriesDefs;
+	},
+	
+	/**
+	 * Setter for the series attribute.
+	 *
+	 * @method _setSeriesDefs
+	 * @private
+	 */
+	_setSeriesDefs: function(value)
+	{
+		this._seriesDefs = value;
+		this.refreshData();
+	},
+
+	/**
+	 * Getter for the categoryNames attribute.
+	 *
+	 * @method _getCategoryNames
+	 * @private
+	 */
+	_getCategoryNames: function()
+	{
+		this._swf.getCategoryNames();
+	},
+
+	/**
+	 * Setter for the categoryNames attribute.
+	 *
+	 * @method _setCategoryNames
+	 * @private
+	 */
+	_setCategoryNames: function(value)
+	{
+		this._swf.setCategoryNames(value);
+	},
+	
+	/**
+	 * Setter for the dataTipFunction attribute.
+	 *
+	 * @method _setDataTipFunction
+	 * @private
+	 */
+	_setDataTipFunction: function(value)
+	{
+		if(this._dataTipFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._dataTipFunction);
+		}
+		
+		if(value && typeof value == "function")
+		{
+			value = YAHOO.widget.FlashAdapter.createProxyFunction(value);
+			this._dataTipFunction = value;
+		}
+		this._swf.setDataTipFunction(value);
+	},
+
+	/**
+	 * Getter for the polling attribute.
+	 *
+	 * @method _getPolling
+	 * @private
+	 */
+	_getPolling: function()
+	{
+		return this._pollingInterval;
+	},
+
+	/**
+	 * Setter for the polling attribute.
+	 *
+	 * @method _setPolling
+	 * @private
+	 */
+	_setPolling: function(value)
+	{
+		this._pollingInterval = value;
+		this.refreshData();
+	}
+});
+
+/**
+ * Storage for the dataTipFunction attribute.
+ *
+ * @property Chart.SWFURL
+ * @private
+ * @static
+ * @final
+ * @default "assets/charts.swf"
+ */
+YAHOO.widget.Chart.SWFURL = "assets/charts.swf";
+
+/**
+ * PieChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class PieChart
+ * @uses YAHOO.widget.Chart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.PieChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.PieChart.superclass.constructor.call(this, "pie", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.PieChart, YAHOO.widget.Chart,
+{
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{	
+		YAHOO.widget.PieChart.superclass._initAttributes.call(this, attributes);
+		
+		/**
+		 * @attribute dataField
+		 * @description The field in each item that corresponds to the data value.
+		 * @type String
+		 */
+		this.getAttributeConfig("dataField",
+		{
+			method: this._getDataField
+		});
+   
+		this.setAttributeConfig("dataField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setDataField
+		});
+   
+		/**
+		 * @attribute categoryField
+		 * @description The field in each item that corresponds to the category value.
+		 * @type String
+		 */
+		this.getAttributeConfig("categoryField",
+		{
+			method: this._getCategoryField
+		});
+   
+		this.setAttributeConfig("categoryField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setCategoryField
+		});
+	},
+
+	/**
+	 * Getter for the dataField attribute.
+	 *
+	 * @method _getDataField
+	 * @private
+	 */
+	_getDataField: function()
+	{
+		return this._swf.getDataField();
+	},
+
+	/**
+	 * Setter for the dataField attribute.
+	 *
+	 * @method _setDataField
+	 * @private
+	 */
+	_setDataField: function(value)
+	{
+		this._swf.setDataField(value);
+	},
+
+	/**
+	 * Getter for the categoryField attribute.
+	 *
+	 * @method _getCategoryField
+	 * @private
+	 */
+	_getCategoryField: function()
+	{
+		return this._swf.getCategoryField();
+	},
+
+	/**
+	 * Setter for the categoryField attribute.
+	 *
+	 * @method _setCategoryField
+	 * @private
+	 */
+	_setCategoryField: function(value)
+	{
+		this._swf.setCategoryField(value);
+	}
+});
+
+/**
+ * CartesianChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class CartesianChart
+ * @uses YAHOO.widget.Chart
+ * @constructor
+ * @param type {String} The char type. May be "line", "column", or "bar"
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+ YAHOO.widget.CartesianChart = function(type, containerId, dataSource, attributes)
+{
+	YAHOO.widget.CartesianChart.superclass.constructor.call(this, type, containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CartesianChart, YAHOO.widget.Chart,
+{
+	/**
+	 * Stores a reference to the xAxis labelFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _xAxisLabelFunction
+	 * @type String
+	 * @private
+	 */
+	_xAxisLabelFunction: null,
+	
+	/**
+	 * Stores a reference to the yAxis labelFunction created by
+	 * YAHOO.widget.FlashAdapter.createProxyFunction()
+	 * @property _yAxisLabelFunction
+	 * @type String
+	 * @private
+	 */
+	_yAxisLabelFunction: null,
+	
+	destroy: function()
+	{
+		//remove proxy functions
+		if(this._xAxisLabelFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
+			this._xAxisLabelFunction = null;
+		}
+		
+		if(this._yAxisLabelFunction)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
+			this._yAxisLabelFunction = null;
+		}
+	
+		//call last
+		YAHOO.widget.CartesianChart.superclass.destroy.call(this);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{	
+		YAHOO.widget.CartesianChart.superclass._initAttributes.call(this, attributes);
+
+		/**
+		 * @attribute xField
+		 * @description The field in each item that corresponds to a value on the x axis.
+		 * @type String
+		 */
+		this.getAttributeConfig("xField",
+		{
+			method: this._getXField
+		});
+
+		this.setAttributeConfig("xField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setXField
+		});
+
+		/**
+		 * @attribute yField
+		 * @description The field in each item that corresponds to a value on the x axis.
+		 * @type String
+		 */
+		this.getAttributeConfig("yField",
+		{
+			method: this._getYField
+		});
+
+		this.setAttributeConfig("yField",
+		{
+			validator: YAHOO.lang.isString,
+			method: this._setYField
+		});
+
+		/**
+		 * @attribute xAxis
+		 * @description A custom configuration for the horizontal x axis.
+		 * @type Axis
+		 */
+		this.setAttributeConfig("xAxis",
+		{
+			method: this._setXAxis
+		});
+
+		/**
+		 * @attribute yAxis
+		 * @description A custom configuration for the vertical y axis.
+		 * @type Axis
+		 */
+		this.setAttributeConfig("yAxis",
+		{
+			method: this._setYAxis
+		});
+	},
+
+	/**
+	 * Getter for the xField attribute.
+	 *
+	 * @method _getXField
+	 * @private
+	 */
+	_getXField: function()
+	{
+		return this._swf.getHorizontalField();
+	},
+
+	/**
+	 * Setter for the xField attribute.
+	 *
+	 * @method _setXField
+	 * @private
+	 */
+	_setXField: function(value)
+	{
+		this._swf.setHorizontalField(value);
+	},
+
+	/**
+	 * Getter for the yField attribute.
+	 *
+	 * @method _getYField
+	 * @private
+	 */
+	_getYField: function()
+	{
+		return this._swf.getVerticalField();
+	},
+
+	/**
+	 * Setter for the yField attribute.
+	 *
+	 * @method _setYField
+	 * @private
+	 */
+	_setYField: function(value)
+	{
+		this._swf.setVerticalField(value);
+	},
+	
+	/**
+	 * Setter for the xAxis attribute.
+	 *
+	 * @method _setXAxis
+	 * @private
+	 */
+	_setXAxis: function(value)
+	{
+		if(this._xAxisLabelFunction !== null)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._xAxisLabelFunction);
+			this._xAxisLabelFunction = null;
+		}
+		
+		var clonedXAxis = {};
+		for(var prop in value)
+		{
+			if(prop == "labelFunction")
+			{
+				if(value.labelFunction !== null)
+				{
+					if(typeof value.labelFunction == "function")
+					{
+						clonedXAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
+					}
+					else
+					{
+						clonedXAxis.labelFunction = value.labelFunction;
+					}
+					this._xAxisLabelFunction = clonedXAxis.labelFunction;
+				}
+			}
+			else
+			{
+				clonedXAxis[prop] = value[prop];
+			}
+		}
+		this._swf.setHorizontalAxis(clonedXAxis);
+	},
+
+	/**
+	 * Getter for the yAxis attribute.
+	 *
+	 * @method _setYAxis
+	 * @private
+	 */
+	_setYAxis: function(value)
+	{
+		if(this._yAxisLabelFunction !== null)
+		{
+			YAHOO.widget.FlashAdapter.removeProxyFunction(this._yAxisLabelFunction);
+			this._yAxisLabelFunction = null;
+		}
+
+		var clonedYAxis = {};
+		for(var prop in value)
+		{
+			if(prop == "labelFunction")
+			{
+				if(value.labelFunction !== null)
+				{
+					if(typeof value.labelFunction == "function")
+					{
+						clonedYAxis.labelFunction = YAHOO.widget.FlashAdapter.createProxyFunction(value.labelFunction);
+					}
+					else
+					{
+						clonedYAxis.labelFunction = value.labelFunction;
+					}
+					this._yAxisLabelFunction = clonedYAxis.labelFunction;
+				}
+			}
+			else
+			{
+				clonedYAxis[prop] = value[prop];
+			}
+		}
+		this._swf.setVerticalAxis(clonedYAxis);
+	}
+});
+
+/**
+ * LineChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class LineChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.LineChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.LineChart.superclass.constructor.call(this, "line", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.LineChart, YAHOO.widget.CartesianChart);
+
+/**
+ * ColumnChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class ColumnChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.ColumnChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.ColumnChart.superclass.constructor.call(this, "column", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.ColumnChart, YAHOO.widget.CartesianChart);
+
+/**
+ * BarChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class BarChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.BarChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.BarChart.superclass.constructor.call(this, "bar", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.BarChart, YAHOO.widget.CartesianChart);
+
+/**
+ * StackedColumnChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedColumnChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.StackedColumnChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.StackedColumnChart.superclass.constructor.call(this, "stackcolumn", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedColumnChart, YAHOO.widget.CartesianChart);
+
+/**
+ * StackedBarChart class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedBarChart
+ * @uses YAHOO.widget.CartesianChart
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param dataSource {YAHOO.util.DataSource} DataSource instance.
+ * @param attributes {object} (optional) Object literal of configuration values.
+ */
+YAHOO.widget.StackedBarChart = function(containerId, dataSource, attributes)
+{
+	YAHOO.widget.StackedBarChart.superclass.constructor.call(this, "stackbar", containerId, dataSource, attributes);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedBarChart, YAHOO.widget.CartesianChart);
+
+/**
+ * Defines a CartesianChart's vertical or horizontal axis.
+ *
+ * @namespace YAHOO.widget
+ * @class Axis
+ * @constructor
+ */
+YAHOO.widget.Axis = function()
+{
+};
+
+YAHOO.widget.Axis.prototype = 
+{
+	/**
+	 * The type of axis.
+	 *
+	 * @property type
+	 * @type String
+	 */
+	type: null,
+	
+	/**
+	 * If true, the items on the axis will be drawn in opposite direction.
+	 *
+	 * @property reverse
+	 * @type Boolean
+	 */
+	reverse: false,
+	
+	/**
+	 * A string reference to the globally-accessible function that may be called to
+	 * determine each of the label values for this axis. Also accepts function references.
+	 *
+	 * @property labelFunction
+	 * @type String
+	 */
+	labelFunction: null,
+	
+	/**
+	 * The space, in pixels, between labels on an axis.
+	 *
+	 * @property labelSpacing
+	 * @type Number
+	 */
+	labelSpacing: 2,
+	
+	/**
+	 * The text that will appear next to the axis to indicate information about the data that it displays.
+	 *
+	 * @property title
+	 * @type String
+	 */
+	title: null 
+};
+
+/**
+ * A type of axis whose units are measured in numeric values.
+ *
+ * @namespace YAHOO.widget
+ * @class NumericAxis
+ * @extends YAHOO.widget.Axis
+ * @constructor
+ */
+YAHOO.widget.NumericAxis = function()
+{
+	YAHOO.widget.NumericAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.NumericAxis, YAHOO.widget.Axis,
+{
+	type: "numeric",
+	
+	/**
+	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
+	 * will be calculated automatically.
+	 *
+	 * @property minimum
+	 * @type Number
+	 */
+	minimum: NaN,
+	
+	/**
+	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
+	 * will be calculated automatically.
+	 *
+	 * @property maximum
+	 * @type Number
+	 */
+	maximum: NaN,
+	
+	/**
+	 * The spacing between major intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	majorUnit: NaN,
+
+	/**
+	 * The spacing between minor intervals on this axis.
+	 *
+	 * @property minorUnit
+	 * @type Number
+	 */
+	minorUnit: NaN,
+	
+	/**
+	 * If true, the labels, ticks, gridlines, and other objects will snap to
+	 * the nearest major or minor unit. If false, their position will be based
+	 * on the minimum value.
+	 *
+	 * @property snapToUnits
+	 * @type Boolean
+	 */
+	snapToUnits: true,
+	
+	/**
+	 * Series that are stackable will only stack when this value is set to true.
+	 *
+	 * @property stackingEnabled
+	 * @type Boolean
+	 */
+	stackingEnabled: false,
+
+	/**
+	 * If true, and the bounds are calculated automatically, either the minimum or
+	 * maximum will be set to zero.
+	 *
+	 * @property alwaysShowZero
+	 * @type Boolean
+	 */
+	alwaysShowZero: true,
+
+	/**
+	 * The scaling algorithm to use on this axis. May be "linear" or "logarithmic".
+	 *
+	 * @property scale
+	 * @type String
+	 */
+	scale: "linear",
+	
+	/**
+	 * Indicates whether to round the major unit.
+	 * 
+	 * @property roundMajorUnit
+	 * @type Boolean
+	 */
+	roundMajorUnit: true 
+});
+
+/**
+ * A type of axis whose units are measured in time-based values.
+ *
+ * @namespace YAHOO.widget
+ * @class TimeAxis
+ * @constructor
+ */
+YAHOO.widget.TimeAxis = function()
+{
+	YAHOO.widget.TimeAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.TimeAxis, YAHOO.widget.Axis,
+{
+	type: "time",
+	
+	/**
+	 * The minimum value drawn by the axis. If not set explicitly, the axis minimum
+	 * will be calculated automatically.
+	 *
+	 * @property minimum
+	 * @type Date
+	 */
+	minimum: null,
+
+	/**
+	 * The maximum value drawn by the axis. If not set explicitly, the axis maximum
+	 * will be calculated automatically.
+	 *
+	 * @property maximum
+	 * @type Number
+	 */
+	maximum: null,
+	
+	/**
+	 * The spacing between major intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	majorUnit: NaN,
+	
+	/**
+	 * The time unit used by the majorUnit.
+	 *
+	 * @property majorTimeUnit
+	 * @type String
+	 */
+	majorTimeUnit: null,
+	
+	/**
+	 * The spacing between minor intervals on this axis.
+	 *
+	 * @property majorUnit
+	 * @type Number
+	 */
+	minorUnit: NaN,
+	
+	/**
+	 * The time unit used by the minorUnit.
+	 *
+	 * @property majorTimeUnit
+	 * @type String
+	 */
+	minorTimeUnit: null,
+
+	/**
+	 * If true, the labels, ticks, gridlines, and other objects will snap to
+	 * the nearest major or minor unit. If false, their position will be based
+	 * on the minimum value.
+	 *
+	 * @property snapToUnits
+	 * @type Boolean
+	 */
+	snapToUnits: true,
+
+	/**
+	 * Series that are stackable will only stack when this value is set to true.
+	 *
+	 * @property stackingEnabled
+	 * @type Boolean
+	 */
+	stackingEnabled: false
+});
+
+/**
+ * A type of axis that displays items in categories.
+ *
+ * @namespace YAHOO.widget
+ * @class CategoryAxis
+ * @constructor
+ */
+YAHOO.widget.CategoryAxis = function()
+{
+	YAHOO.widget.CategoryAxis.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CategoryAxis, YAHOO.widget.Axis,
+{
+	type: "category",
+	
+	/**
+	 * A list of category names to display along this axis.
+	 *
+	 * @property categoryNames
+	 * @type Array
+	 */
+	categoryNames: null,
+	
+	/**
+	 * Indicates whether or not to calculate the number of categories (ticks and labels)
+	 * when there is not enough room to display all labels on the axis. If set to true, the axis 
+	 * will determine the number of categories to plot. If not, all categories will be plotted.
+	 *
+	 * @property calcualateCategoryCount
+	 * @type Boolean
+	 */
+	calculateCategoryCount: false 
+});
+
+/**
+ * Functionality common to most series. Generally, a <code>Series</code> 
+ * object shouldn't be instantiated directly. Instead, a subclass with a 
+ * concrete implementation should be used.
+ *
+ * @namespace YAHOO.widget
+ * @class Series
+ * @constructor
+ */
+YAHOO.widget.Series = function() {};
+
+YAHOO.widget.Series.prototype = 
+{
+	/**
+	 * The type of series.
+	 *
+	 * @property type
+	 * @type String
+	 */
+	type: null,
+	
+	/**
+	 * The human-readable name of the series.
+	 *
+	 * @property displayName
+	 * @type String
+	 */
+	displayName: null
+};
+
+/**
+ * Functionality common to most series appearing in cartesian charts.
+ * Generally, a <code>CartesianSeries</code> object shouldn't be
+ * instantiated directly. Instead, a subclass with a concrete implementation
+ * should be used.
+ *
+ * @namespace YAHOO.widget
+ * @class CartesianSeries
+ * @uses YAHOO.widget.Series
+ * @constructor
+ */
+YAHOO.widget.CartesianSeries = function() 
+{
+	YAHOO.widget.CartesianSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.CartesianSeries, YAHOO.widget.Series,
+{
+	/**
+	 * The field used to access the x-axis value from the items from the data source.
+	 *
+	 * @property xField
+	 * @type String
+	 */
+	xField: null,
+	
+	/**
+	 * The field used to access the y-axis value from the items from the data source.
+	 *
+	 * @property yField
+	 * @type String
+	 */
+	yField: null
+});
+
+/**
+ * ColumnSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class ColumnSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.ColumnSeries = function() 
+{
+	YAHOO.widget.ColumnSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.ColumnSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "column"
+});
+
+/**
+ * LineSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class LineSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.LineSeries = function() 
+{
+	YAHOO.widget.LineSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.LineSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "line"
+});
+
+
+/**
+ * BarSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class BarSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.BarSeries = function() 
+{
+	YAHOO.widget.BarSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.BarSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "bar"
+});
+
+
+/**
+ * PieSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class PieSeries
+ * @uses YAHOO.widget.Series
+ * @constructor
+ */
+YAHOO.widget.PieSeries = function() 
+{
+	YAHOO.widget.PieSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.PieSeries, YAHOO.widget.Series,
+{
+	type: "pie",
+	
+	/**
+	 * The field used to access the data value from the items from the data source.
+	 *
+	 * @property dataField
+	 * @type String
+	 */
+	dataField: null,
+	
+	/**
+	 * The field used to access the category value from the items from the data source.
+	 *
+	 * @property categoryField
+	 * @type String
+	 */
+	categoryField: null,
+
+	/**
+	 * A string reference to the globally-accessible function that may be called to
+	 * determine each of the label values for this series. Also accepts function references.
+	 *
+	 * @property labelFunction
+	 * @type String
+	 */
+	labelFunction: null
+});
+
+/**
+ * StackedBarSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedBarSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.StackedBarSeries = function() 
+{
+	YAHOO.widget.StackedBarSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedBarSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "stackbar"
+});
+
+/**
+ * StackedColumnSeries class for the YUI Charts widget.
+ *
+ * @namespace YAHOO.widget
+ * @class StackedColumnSeries
+ * @uses YAHOO.widget.CartesianSeries
+ * @constructor
+ */
+YAHOO.widget.StackedColumnSeries = function() 
+{
+	YAHOO.widget.StackedColumnSeries.superclass.constructor.call(this);
+};
+
+YAHOO.lang.extend(YAHOO.widget.StackedColumnSeries, YAHOO.widget.CartesianSeries,
+{
+	type: "stackcolumn"
+});
+
+YAHOO.register("charts", YAHOO.widget.Chart, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/colorpicker/README
===================================================================
--- trunk/root/static/yui/colorpicker/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,21 +0,0 @@
-ColorPicker - Release Notes
-
-2.6.0
-    * Added colorpicker-core.css (empty) for completeness
-
-2.5.1
-   * No change
-
-2.5.0
-   * No change
-
-2.4.0
-   * Initialization values assigned to showcontrols, showrgbcontrols,
-     showwebsafe, showhexsummary, animate, red, green, and blue in the
-     constructor configuration are now honored. 
-
-2.3.1
-   * No change (bug fixes were inherited from slider)
-
-2.3.0
-   * Initial release

Modified: trunk/root/static/yui/colorpicker/assets/colorpicker-core.css
===================================================================
--- trunk/root/static/yui/colorpicker/assets/colorpicker-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/assets/colorpicker-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,6 +1,6 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */

Modified: trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker-skin.css
===================================================================
--- trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 
 .yui-picker-panel {

Modified: trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker.css
===================================================================
--- trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/assets/skins/sam/colorpicker.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0px none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0px none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yu!
 i-picker-mask{position:absolute;z-index:1;top:0px;left:0px;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0px !important;}.yui-picker-controls .bd{height:100px;border-width:0px !important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0}.yui-picker-controls li{padding:2px;list-style:none;margin:0}.yui-picker-controls input{font-size:0.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color!
 :#000;}
+.yui-picker-panel{background:#e3e3e3;border-color:#888;}.yui-picker-panel .hd{background-color:#ccc;font-size:100%;line-height:100%;border:1px solid #e3e3e3;font-weight:bold;overflow:hidden;padding:6px;color:#000;}.yui-picker-panel .bd{background:#e8e8e8;margin:1px;height:200px;}.yui-picker-panel .ft{background:#e8e8e8;margin:1px;padding:1px;}.yui-picker{position:relative;}.yui-picker-hue-thumb{cursor:default;width:18px;height:18px;top:-8px;left:-2px;z-index:9;position:absolute;}.yui-picker-hue-bg{-moz-outline:none;outline:0 none;position:absolute;left:200px;height:183px;width:14px;background:url(hue_bg.png) no-repeat;top:4px;}.yui-picker-bg{-moz-outline:none;outline:0 none;position:absolute;top:4px;left:4px;height:182px;width:182px;background-color:#F00;background-image:url(picker_mask.png);}*html .yui-picker-bg{background-image:none;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='../../build/colorpicker/assets/picker_mask.png',sizingMethod='scale');}.yui-pi!
 cker-mask{position:absolute;z-index:1;top:0;left:0;}.yui-picker-thumb{cursor:default;width:11px;height:11px;z-index:9;position:absolute;top:-4px;left:-4px;}.yui-picker-swatch{position:absolute;left:240px;top:4px;height:60px;width:55px;border:1px solid #888;}.yui-picker-websafe-swatch{position:absolute;left:304px;top:4px;height:24px;width:24px;border:1px solid #888;}.yui-picker-controls{position:absolute;top:72px;left:226px;font:1em monospace;}.yui-picker-controls .hd{background:transparent;border-width:0!important;}.yui-picker-controls .bd{height:100px;border-width:0!important;}.yui-picker-controls ul{float:left;padding:0 2px 0 0;margin:0;}.yui-picker-controls li{padding:2px;list-style:none;margin:0;}.yui-picker-controls input{font-size:.85em;width:2.4em;}.yui-picker-hex-controls{clear:both;padding:2px;}.yui-picker-hex-controls input{width:4.6em;}.yui-picker-controls a{font:1em arial,helvetica,clean,sans-serif;display:block;*display:inline-block;padding:0;color:#000;}

Modified: trunk/root/static/yui/colorpicker/colorpicker-debug.js
===================================================================
--- trunk/root/static/yui/colorpicker/colorpicker-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/colorpicker-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides color conversion and validation utils
@@ -11,7 +11,9 @@
  */
 YAHOO.util.Color = function() {
 
-    var HCHARS="0123456789ABCDEF", lang=YAHOO.lang;
+    var ZERO     = "0",
+        isArray  = YAHOO.lang.isArray,
+        isNumber = YAHOO.lang.isNumber;
 
     return {
 
@@ -37,17 +39,19 @@
          */
         hsv2rgb: function(h, s, v) { 
 
-            if (lang.isArray(h)) {
+            if (isArray(h)) {
                 return this.hsv2rgb.call(this, h[0], h[1], h[2]);
             }
 
-            var r, g, b, i, f, p, q, t;
-            i = Math.floor((h/60)%6);
-            f = (h/60)-i;
-            p = v*(1-s);
-            q = v*(1-f*s);
-            t = v*(1-(1-f)*s);
-            switch(i) {
+            var r, g, b,
+                i = Math.floor((h/60)%6),
+                f = (h/60)-i,
+                p = v*(1-s),
+                q = v*(1-f*s),
+                t = v*(1-(1-f)*s),
+                fn;
+
+            switch (i) {
                 case 0: r=v; g=t; b=p; break;
                 case 1: r=q; g=v; b=p; break;
                 case 2: r=p; g=v; b=t; break;
@@ -56,7 +60,7 @@
                 case 5: r=v; g=p; b=q; break;
             }
 
-            var fn=this.real2dec;
+            fn=this.real2dec;
 
             return [fn(r), fn(g), fn(b)];
         },
@@ -72,18 +76,19 @@
          */
         rgb2hsv: function(r, g, b) {
 
-            if (lang.isArray(r)) {
-                return this.rgb2hsv.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.rgb2hsv.apply(this, r);
             }
 
-            r=r/255;
-            g=g/255;
-            b=b/255;
+            r /= 255;
+            g /= 255;
+            b /= 255;
 
-            var min,max,delta,h,s,v;
-            min = Math.min(Math.min(r,g),b);
-            max = Math.max(Math.max(r,g),b);
-            delta = max-min;
+            var h,s,
+                min = Math.min(Math.min(r,g),b),
+                max = Math.max(Math.max(r,g),b),
+                delta = max-min,
+                hsv;
 
             switch (max) {
                 case min: h=0; break;
@@ -98,10 +103,9 @@
             
             s = (max === 0) ? 0 : 1-(min/max);
 
-            var hsv = [Math.round(h), s, max];
+            hsv = [Math.round(h), s, max];
 
             return hsv;
-
         },
 
         /**
@@ -115,8 +119,8 @@
          * @return {string} the hex string
          */
         rgb2hex: function(r, g, b) {
-            if (lang.isArray(r)) {
-                return this.rgb2hex.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.rgb2hex.apply(this, r);
             }
 
             var f=this.dec2hex;
@@ -130,11 +134,10 @@
          * @return {string} the hex equivalent
          */
         dec2hex: function(n) {
-            n = parseInt(n, 10);
-            n = (lang.isNumber(n)) ? n : 0;
+            n = parseInt(n,10)|0;
             n = (n > 255 || n < 0) ? 0 : n;
 
-            return HCHARS.charAt((n - n % 16) / 16) + HCHARS.charAt(n % 16);
+            return (ZERO+n.toString(16)).slice(-2).toUpperCase();
         },
 
         /**
@@ -144,13 +147,7 @@
          * @return {int} the decimal
          */
         hex2dec: function(str) {
-            var f = function(c) {
-                return HCHARS.indexOf(c.toUpperCase());
-            };
-
-            var s=str.split('');
-            
-            return ((f(s[0]) * 16) + f(s[1]));
+            return parseInt(str,16);
         },
 
         /**
@@ -161,7 +158,7 @@
          */
         hex2rgb: function(s) { 
             var f = this.hex2dec;
-            return [f(s.substr(0, 2)), f(s.substr(2, 2)), f(s.substr(4, 2))];
+            return [f(s.slice(0, 2)), f(s.slice(2, 4)), f(s.slice(4, 6))];
         },
 
         /**
@@ -176,13 +173,13 @@
          */
         websafe: function(r, g, b) {
 
-            if (lang.isArray(r)) {
-                return this.websafe.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.websafe.apply(this, r);
             }
 
             // returns the closest match [0, 51, 102, 153, 204, 255]
             var f = function(v) {
-                if (lang.isNumber(v)) {
+                if (isNumber(v)) {
                     v = Math.min(Math.max(0, v), 255);
                     var i, next;
                     for (i=0; i<256; i=i+51) {
@@ -203,31 +200,24 @@
 }();
 
 
+/**
+ * The colorpicker module provides a widget for selecting colors
+ * @module colorpicker
+ * @requires yahoo, dom, event, element, slider
+ */
 (function() {
 
-    var _pickercount = 0;
-
-    /**
-     * The colorpicker module provides a widget for selecting colors
-     * @module colorpicker
-     * @requires yahoo, dom, event, element, slider
-     */
-
-
-    /**
-     * Creates the host element if it doesn't exist
-     * @method _createHostElement
-     * @private
-     */
-    var _createHostElement = function() {
-        var el = document.createElement('div');
-
-        if (this.CSS.BASE) {
-            el.className = this.CSS.BASE;
-        }
+    var _pickercount = 0,
+        util   = YAHOO.util,
+        lang   = YAHOO.lang,
+        Slider = YAHOO.widget.Slider,
+        Color  = util.Color,
+        Dom    = util.Dom,
+        Event  = util.Event,
+        sub    = lang.substitute,
         
-        return el;
-    };
+        b = "yui-picker";
+    
 
     /**
      * A widget to select colors
@@ -241,7 +231,7 @@
      * @param {Object} attr (optional) A key map of the colorpicker's 
      * initial attributes.  Ignored if first arg is attributes object.
      */
-    YAHOO.widget.ColorPicker = function(el, attr) {
+    function ColorPicker(el, attr) {
         _pickercount = _pickercount + 1;
         this.logger = new YAHOO.widget.LogWriter("ColorPicker");
         attr = attr || {};
@@ -252,1504 +242,1542 @@
         
         if (!el && !attr.element) { // create if we dont have one
             this.logger.log("creating host element");
-            el = _createHostElement.call(this, attr);
+            el = this._createHostElement(attr);
         }
 
-    	YAHOO.widget.ColorPicker.superclass.constructor.call(this, el, attr); 
-    };
+    	ColorPicker.superclass.constructor.call(this, el, attr); 
 
-    YAHOO.extend(YAHOO.widget.ColorPicker, YAHOO.util.Element);
+        this.initPicker();
+    }
+
+    YAHOO.extend(ColorPicker, YAHOO.util.Element, {
     
-    var proto = YAHOO.widget.ColorPicker.prototype,
-        Slider=YAHOO.widget.Slider,
-        Color=YAHOO.util.Color,
-        Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        lang = YAHOO.lang,
-        sub = lang.substitute;
-    
-
-    var b = "yui-picker";
-
-    /**
-     * The element ids used by this control
-     * @property ID
-     * @final
-     */
-    proto.ID = {
-
         /**
-         * The id for the "red" form field
-         * @property ID.R
-         * @type String
+         * The element ids used by this control
+         * @property ID
          * @final
-         * @default yui-picker-r
          */
-        R: b + "-r",
+        ID : {
 
-        /**
-         * The id for the "red" hex pair output
-         * @property ID.R_HEX
-         * @type String
-         * @final
-         * @default yui-picker-rhex
-         */
-        R_HEX: b + "-rhex",
+            /**
+             * The id for the "red" form field
+             * @property ID.R
+             * @type String
+             * @final
+             * @default yui-picker-r
+             */
+            R: b + "-r",
 
-        /**
-         * The id for the "green" form field
-         * @property ID.G
-         * @type String
-         * @final
-         * @default yui-picker-g
-         */
-        G: b + "-g",
+            /**
+             * The id for the "red" hex pair output
+             * @property ID.R_HEX
+             * @type String
+             * @final
+             * @default yui-picker-rhex
+             */
+            R_HEX: b + "-rhex",
 
-        /**
-         * The id for the "green" hex pair output
-         * @property ID.G_HEX
-         * @type String
-         * @final
-         * @default yui-picker-ghex
-         */
-        G_HEX: b + "-ghex",
+            /**
+             * The id for the "green" form field
+             * @property ID.G
+             * @type String
+             * @final
+             * @default yui-picker-g
+             */
+            G: b + "-g",
 
+            /**
+             * The id for the "green" hex pair output
+             * @property ID.G_HEX
+             * @type String
+             * @final
+             * @default yui-picker-ghex
+             */
+            G_HEX: b + "-ghex",
 
-        /**
-         * The id for the "blue" form field
-         * @property ID.B
-         * @type String
-         * @final
-         * @default yui-picker-b
-         */
-        B: b + "-b",
 
+            /**
+             * The id for the "blue" form field
+             * @property ID.B
+             * @type String
+             * @final
+             * @default yui-picker-b
+             */
+            B: b + "-b",
+
+            /**
+             * The id for the "blue" hex pair output
+             * @property ID.B_HEX
+             * @type String
+             * @final
+             * @default yui-picker-bhex
+             */
+            B_HEX: b + "-bhex",
+
+            /**
+             * The id for the "hue" form field
+             * @property ID.H
+             * @type String
+             * @final
+             * @default yui-picker-h
+             */
+            H: b + "-h",
+
+            /**
+             * The id for the "saturation" form field
+             * @property ID.S
+             * @type String
+             * @final
+             * @default yui-picker-s
+             */
+            S: b + "-s",
+
+            /**
+             * The id for the "value" form field
+             * @property ID.V
+             * @type String
+             * @final
+             * @default yui-picker-v
+             */
+            V: b + "-v",
+
+            /**
+             * The id for the picker region slider
+             * @property ID.PICKER_BG
+             * @type String
+             * @final
+             * @default yui-picker-bg
+             */
+            PICKER_BG:      b + "-bg",
+
+            /**
+             * The id for the picker region thumb
+             * @property ID.PICKER_THUMB
+             * @type String
+             * @final
+             * @default yui-picker-thumb
+             */
+            PICKER_THUMB:   b + "-thumb",
+
+            /**
+             * The id for the hue slider
+             * @property ID.HUE_BG
+             * @type String
+             * @final
+             * @default yui-picker-hue-bg
+             */
+            HUE_BG:         b + "-hue-bg",
+
+            /**
+             * The id for the hue thumb
+             * @property ID.HUE_THUMB
+             * @type String
+             * @final
+             * @default yui-picker-hue-thumb
+             */
+            HUE_THUMB:      b + "-hue-thumb",
+
+            /**
+             * The id for the hex value form field
+             * @property ID.HEX
+             * @type String
+             * @final
+             * @default yui-picker-hex
+             */
+            HEX:            b + "-hex",
+
+            /**
+             * The id for the color swatch
+             * @property ID.SWATCH
+             * @type String
+             * @final
+             * @default yui-picker-swatch
+             */
+            SWATCH:         b + "-swatch",
+
+            /**
+             * The id for the websafe color swatch
+             * @property ID.WEBSAFE_SWATCH
+             * @type String
+             * @final
+             * @default yui-picker-websafe-swatch
+             */
+            WEBSAFE_SWATCH: b + "-websafe-swatch",
+
+            /**
+             * The id for the control details
+             * @property ID.CONTROLS
+             * @final
+             * @default yui-picker-controls
+             */
+            CONTROLS: b + "-controls",
+
+            /**
+             * The id for the rgb controls
+             * @property ID.RGB_CONTROLS
+             * @final
+             * @default yui-picker-rgb-controls
+             */
+            RGB_CONTROLS: b + "-rgb-controls",
+
+            /**
+             * The id for the hsv controls
+             * @property ID.HSV_CONTROLS
+             * @final
+             * @default yui-picker-hsv-controls
+             */
+            HSV_CONTROLS: b + "-hsv-controls",
+            
+            /**
+             * The id for the hsv controls
+             * @property ID.HEX_CONTROLS
+             * @final
+             * @default yui-picker-hex-controls
+             */
+            HEX_CONTROLS: b + "-hex-controls",
+
+            /**
+             * The id for the hex summary
+             * @property ID.HEX_SUMMARY
+             * @final
+             * @default yui-picker-hex-summary
+             */
+            HEX_SUMMARY: b + "-hex-summary",
+
+            /**
+             * The id for the controls section header
+             * @property ID.CONTROLS_LABEL
+             * @final
+             * @default yui-picker-controls-label
+             */
+            CONTROLS_LABEL: b + "-controls-label"
+        },
+
         /**
-         * The id for the "blue" hex pair output
-         * @property ID.B_HEX
-         * @type String
+         * Constants for any script-generated messages.  The values here
+         * are the default messages.  They can be updated by providing
+         * the complete list to the constructor for the "txt" attribute.
+         * @property TXT
          * @final
-         * @default yui-picker-bhex
          */
-        B_HEX: b + "-bhex",
+        TXT : {
+            ILLEGAL_HEX: "Illegal hex value entered",
+            SHOW_CONTROLS: "Show color details",
+            HIDE_CONTROLS: "Hide color details",
+            CURRENT_COLOR: "Currently selected color: {rgb}",
+            CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.",
+            R: "R",
+            G: "G",
+            B: "B",
+            H: "H",
+            S: "S",
+            V: "V",
+            HEX: "#",
+            DEG: "\u00B0",
+            PERCENT: "%"
+        },
 
         /**
-         * The id for the "hue" form field
-         * @property ID.H
-         * @type String
+         * Constants for the default image locations for img tags that are
+         * generated by the control.  They can be modified by passing the
+         * complete list to the contructor for the "images" attribute
+         * @property IMAGE
          * @final
-         * @default yui-picker-h
          */
-        H: b + "-h",
+        IMAGE : {
+            PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png",
+            HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png"
+        },
 
         /**
-         * The id for the "saturation" form field
-         * @property ID.S
-         * @type String
+         * Constants for the control's default default values
+         * @property DEFAULT
          * @final
-         * @default yui-picker-s
          */
-        S: b + "-s",
+        DEFAULT : {
+            PICKER_SIZE: 180
+        },
 
         /**
-         * The id for the "value" form field
-         * @property ID.V
-         * @type String
+         * Constants for the control's configuration attributes
+         * @property OPT
          * @final
-         * @default yui-picker-v
          */
-        V: b + "-v",
+        OPT : {
+            HUE         : "hue",
+            SATURATION  : "saturation",
+            VALUE       : "value",
+            RED     : "red",
+            GREEN   : "green",
+            BLUE    : "blue",
+            HSV     : "hsv",
+            RGB     : "rgb",
+            WEBSAFE : "websafe",
+            HEX     : "hex",
+            PICKER_SIZE       : "pickersize",
+            SHOW_CONTROLS     : "showcontrols",
+            SHOW_RGB_CONTROLS : "showrgbcontrols",
+            SHOW_HSV_CONTROLS : "showhsvcontrols",
+            SHOW_HEX_CONTROLS : "showhexcontrols",
+            SHOW_HEX_SUMMARY  : "showhexsummary",
+            SHOW_WEBSAFE      : "showwebsafe",
+            CONTAINER         : "container",
+            IDS      : "ids",
+            ELEMENTS : "elements",
+            TXT      : "txt",
+            IMAGES   : "images",
+            ANIMATE  : "animate"
+        },
 
         /**
-         * The id for the picker region slider
-         * @property ID.PICKER_BG
-         * @type String
-         * @final
-         * @default yui-picker-bg
+         * Flag to allow individual UI updates to forego animation if available.
+         * True during construction for initial thumb placement.  Set to false
+         * after that.
+         *
+         * @property skipAnim
+         * @type Boolean
+         * @default true
          */
-        PICKER_BG:      b + "-bg",
+        skipAnim : true,
 
         /**
-         * The id for the picker region thumb
-         * @property ID.PICKER_THUMB
-         * @type String
-         * @final
-         * @default yui-picker-thumb
+         * Creates the host element if it doesn't exist
+         * @method _createHostElement
+         * @protected
          */
-        PICKER_THUMB:   b + "-thumb",
+        _createHostElement : function () {
+            var el = document.createElement('div');
 
+            if (this.CSS.BASE) {
+                el.className = this.CSS.BASE;
+            }
+            
+            return el;
+        },
+
         /**
-         * The id for the hue slider
-         * @property ID.HUE_BG
-         * @type String
-         * @final
-         * @default yui-picker-hue-bg
+         * Moves the hue slider into the position dictated by the current state
+         * of the control
+         * @method _updateHueSlider
+         * @protected
          */
-        HUE_BG:         b + "-hue-bg",
+        _updateHueSlider : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                h = this.get(this.OPT.HUE);
 
+            h = size - Math.round(h / 360 * size);
+            
+            // 0 is at the top and bottom of the hue slider.  Always go to
+            // the top so we don't end up sending the thumb to the bottom
+            // when the value didn't actually change (e.g., a conversion
+            // produced 360 instead of 0 and the value was already 0).
+            if (h === size) {
+                h = 0;
+            }
+            this.logger.log("Hue slider is being set to " + h);
+
+            this.hueSlider.setValue(h, this.skipAnim);
+        },
+
         /**
-         * The id for the hue thumb
-         * @property ID.HUE_THUMB
-         * @type String
-         * @final
-         * @default yui-picker-hue-thumb
+         * Moves the picker slider into the position dictated by the current state
+         * of the control
+         * @method _updatePickerSlider
+         * @protected
          */
-        HUE_THUMB:      b + "-hue-thumb",
+        _updatePickerSlider : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                s = this.get(this.OPT.SATURATION),
+                v = this.get(this.OPT.VALUE);
 
+            s = Math.round(s * size / 100);
+            v = Math.round(size - (v * size / 100));
+
+            this.logger.log("Setting picker slider to " + [s, v]);
+
+            this.pickerSlider.setRegionValue(s, v, this.skipAnim);
+        },
+
         /**
-         * The id for the hex value form field
-         * @property ID.HEX
-         * @type String
-         * @final
-         * @default yui-picker-hex
+         * Moves the sliders into the position dictated by the current state
+         * of the control
+         * @method _updateSliders
+         * @protected
          */
-        HEX:            b + "-hex",
+        _updateSliders : function() {
+            this._updateHueSlider();
+            this._updatePickerSlider();
+        },
 
         /**
-         * The id for the color swatch
-         * @property ID.SWATCH
-         * @type String
-         * @final
-         * @default yui-picker-swatch
+         * Sets the control to the specified rgb value and
+         * moves the sliders to the proper positions
+         * @method setValue
+         * @param rgb {[int, int, int]} the rgb value
+         * @param silent {boolean} whether or not to fire the change event
          */
-        SWATCH:         b + "-swatch",
+        setValue : function(rgb, silent) {
+            silent = (silent) || false;
+            this.set(this.OPT.RGB, rgb, silent);
+            this._updateSliders();
+        },
 
         /**
-         * The id for the websafe color swatch
-         * @property ID.WEBSAFE_SWATCH
-         * @type String
-         * @final
-         * @default yui-picker-websafe-swatch
+         * The hue slider
+         * @property hueSlider
+         * @type YAHOO.widget.Slider
          */
-        WEBSAFE_SWATCH: b + "-websafe-swatch",
-
+        hueSlider : null,
+        
         /**
-         * The id for the control details
-         * @property ID.CONTROLS
-         * @final
-         * @default yui-picker-controls
+         * The picker region
+         * @property pickerSlider
+         * @type YAHOO.widget.Slider
          */
-        CONTROLS: b + "-controls",
+        pickerSlider : null,
 
         /**
-         * The id for the rgb controls
-         * @property ID.RGB_CONTROLS
-         * @final
-         * @default yui-picker-rgb-controls
+         * Translates the slider value into hue, int[0,359]
+         * @method _getH
+         * @protected
+         * @return {int} the hue from 0 to 359
          */
-        RGB_CONTROLS: b + "-rgb-controls",
+        _getH : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                h = (size - this.hueSlider.getValue()) / size;
+            h = Math.round(h*360);
+            return (h === 360) ? 0 : h;
+        },
 
         /**
-         * The id for the hsv controls
-         * @property ID.HSV_CONTROLS
-         * @final
-         * @default yui-picker-hsv-controls
+         * Translates the slider value into saturation, int[0,1], left to right
+         * @method _getS
+         * @protected
+         * @return {int} the saturation from 0 to 1
          */
-        HSV_CONTROLS: b + "-hsv-controls",
-        
-        /**
-         * The id for the hsv controls
-         * @property ID.HEX_CONTROLS
-         * @final
-         * @default yui-picker-hex-controls
-         */
-        HEX_CONTROLS: b + "-hex-controls",
+        _getS : function() {
+            return this.pickerSlider.getXValue() / this.get(this.OPT.PICKER_SIZE);
+        },
 
         /**
-         * The id for the hex summary
-         * @property ID.HEX_SUMMARY
-         * @final
-         * @default yui-picker-hex-summary
+         * Translates the slider value into value/brightness, int[0,1], top
+         * to bottom
+         * @method _getV
+         * @protected
+         * @return {int} the value from 0 to 1
          */
-        HEX_SUMMARY: b + "-hex-summary",
+        _getV : function() {
+            var size = this.get(this.OPT.PICKER_SIZE);
+            return (size - this.pickerSlider.getYValue()) / size;
+        },
 
         /**
-         * The id for the controls section header
-         * @property ID.CONTROLS_LABEL
-         * @final
-         * @default yui-picker-controls-label
+         * Updates the background of the swatch with the current rbg value.
+         * Also updates the websafe swatch to the closest websafe color
+         * @method _updateSwatch
+         * @protected
          */
-        CONTROLS_LABEL: b + "-controls-label"
-    };
+        _updateSwatch : function() {
+            var rgb = this.get(this.OPT.RGB),
+                websafe = this.get(this.OPT.WEBSAFE),
+                el = this.getElement(this.ID.SWATCH),
+                color = rgb.join(","),
+                txt = this.get(this.OPT.TXT);
 
-    /**
-     * Constants for any script-generated messages.  The values here
-     * are the default messages.  They can be updated by providing
-     * the complete list to the constructor for the "txt" attribute.
-     * @property TXT
-     * @final
-     */
-    proto.TXT = {
-        ILLEGAL_HEX: "Illegal hex value entered",
-        SHOW_CONTROLS: "Show color details",
-        HIDE_CONTROLS: "Hide color details",
-        CURRENT_COLOR: "Currently selected color: {rgb}",
-        CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.",
-        R: "R",
-        G: "G",
-        B: "B",
-        H: "H",
-        S: "S",
-        V: "V",
-        HEX: "#",
-        DEG: "\u00B0",
-        PERCENT: "%"
-    };
+            Dom.setStyle(el, "background-color", "rgb(" + color  + ")");
+            el.title = sub(txt.CURRENT_COLOR, {
+                    "rgb": "#" + this.get(this.OPT.HEX)
+                });
 
-    /**
-     * Constants for the default image locations for img tags that are
-     * generated by the control.  They can be modified by passing the
-     * complete list to the contructor for the "images" attribute
-     * @property IMAGE
-     * @final
-     */
-    proto.IMAGE = {
-        PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png",
-        HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png"
-    };
 
-    /*
-     * Constants for the control's custom event names.  subscribe
-     * to the rgbChange event instead.
-     * @property EVENT
-     * @final
-     */
-    //proto.EVENT = {
-        //CHANGE: "change"
-    //};
+            el = this.getElement(this.ID.WEBSAFE_SWATCH);
+            color = websafe.join(",");
 
-    //proto.CSS = { };
+            Dom.setStyle(el, "background-color", "rgb(" + color + ")");
+            el.title = sub(txt.CLOSEST_WEBSAFE, {
+                    "rgb": "#" + Color.rgb2hex(websafe)
+                });
 
-    /**
-     * Constants for the control's default default values
-     * @property DEFAULT
-     * @final
-     */
-    proto.DEFAULT = {
-        PICKER_SIZE: 180
-    };
+        },
 
-    /**
-     * Constants for the control's configuration attributes
-     * @property OPT
-     * @final
-     */
-    proto.OPT = {
-        HUE: "hue",
-        SATURATION: "saturation",
-        VALUE: "value",
-        RED: "red",
-        GREEN: "green",
-        BLUE: "blue",
-        HSV: "hsv",
-        RGB: "rgb",
-        WEBSAFE: "websafe",
-        HEX: "hex",
-        PICKER_SIZE: "pickersize",
-        SHOW_CONTROLS: "showcontrols",
-        SHOW_RGB_CONTROLS: "showrgbcontrols",
-        SHOW_HSV_CONTROLS: "showhsvcontrols",
-        SHOW_HEX_CONTROLS: "showhexcontrols",
-        SHOW_HEX_SUMMARY: "showhexsummary",
-        SHOW_WEBSAFE: "showwebsafe",
-        //SHOW_SUBMIT: "showsubmit",
-        CONTAINER: "container",
-        IDS: "ids",
-        ELEMENTS: "elements",
-        TXT: "txt",
-        IMAGES: "images",
-        ANIMATE: "animate"
-    };
+        /**
+         * Reads the sliders and converts the values to RGB, updating the
+         * internal state for all the individual form fields
+         * @method _getValuesFromSliders
+         * @protected
+         */
+        _getValuesFromSliders : function() {
+            this.logger.log("hsv " + [this._getH(),this._getS(),this._getV()]);
+            this.set(this.OPT.RGB, Color.hsv2rgb(this._getH(), this._getS(), this._getV()));
+        },
 
-    /**
-     * Moves the hue slider into the position dictated by the current state
-     * of the control
-     * @method _updateHueSlider
-     * @private
-     */
-    var _updateHueSlider = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            h = this.get(this.OPT.HUE);
+        /**
+         * Updates the form field controls with the state data contained
+         * in the control.
+         * @method _updateFormFields
+         * @protected
+         */
+        _updateFormFields : function() {
+            this.getElement(this.ID.H).value = this.get(this.OPT.HUE);
+            this.getElement(this.ID.S).value = this.get(this.OPT.SATURATION);
+            this.getElement(this.ID.V).value = this.get(this.OPT.VALUE);
+            this.getElement(this.ID.R).value = this.get(this.OPT.RED);
+            this.getElement(this.ID.R_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.RED));
+            this.getElement(this.ID.G).value = this.get(this.OPT.GREEN);
+            this.getElement(this.ID.G_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.GREEN));
+            this.getElement(this.ID.B).value = this.get(this.OPT.BLUE);
+            this.getElement(this.ID.B_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.BLUE));
+            this.getElement(this.ID.HEX).value = this.get(this.OPT.HEX);
+        },
 
-        h = size - Math.round(h / 360 * size);
-        
-        // 0 is at the top and bottom of the hue slider.  Always go to
-        // the top so we don't end up sending the thumb to the bottom
-        // when the value didn't actually change (e.g., a conversion
-        // produced 360 instead of 0 and the value was already 0).
-        if (h === size) {
-            h = 0;
-        }
-        this.logger.log("Hue slider is being set to " + h);
+        /**
+         * Event handler for the hue slider.
+         * @method _onHueSliderChange
+         * @param newOffset {int} pixels from the start position
+         * @protected
+         */
+        _onHueSliderChange : function(newOffset) {
+            this.logger.log("hue update: " + newOffset , "warn");
 
-        this.hueSlider.setValue(h);
-    };
+            var h        = this._getH(),
+                rgb      = Color.hsv2rgb(h, 1, 1),
+                styleDef = "rgb(" + rgb.join(",") + ")";
 
-    /**
-     * Moves the picker slider into the position dictated by the current state
-     * of the control
-     * @method _updatePickerSlider
-     * @private
-     */
-    var _updatePickerSlider = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            s = this.get(this.OPT.SATURATION),
-            v = this.get(this.OPT.VALUE);
+            this.set(this.OPT.HUE, h, true);
 
-        s = Math.round(s * size / 100);
-        v = Math.round(size - (v * size / 100));
+            // set picker background to the hue
+            Dom.setStyle(this.getElement(this.ID.PICKER_BG), "background-color", styleDef);
 
-        this.logger.log("Setting picker slider to " + [s, v]);
+            if (this.hueSlider.valueChangeSource !== Slider.SOURCE_SET_VALUE) {
+                this._getValuesFromSliders();
+            }
 
-        this.pickerSlider.setRegionValue(s, v);
-    };
+            this._updateFormFields();
+            this._updateSwatch();
+        },
 
-    /**
-     * Moves the sliders into the position dictated by the current state
-     * of the control
-     * @method _updateSliders
-     * @private
-     */
-    var _updateSliders = function() {
-        _updateHueSlider.call(this);
-        _updatePickerSlider.call(this);
-    };
+        /**
+         * Event handler for the picker slider, which controls the
+         * saturation and value/brightness.
+         * @method _onPickerSliderChange
+         * @param newOffset {{x: int, y: int}} x/y pixels from the start position
+         * @protected
+         */
+        _onPickerSliderChange : function(newOffset) {
+            this.logger.log(sub("picker update [{x}, {y}]", newOffset));
 
-    /**
-     * Sets the control to the specified rgb value and
-     * moves the sliders to the proper positions
-     * @method setValue
-     * @param rgb {[int, int, int]} the rgb value
-     * @param silent {boolean} whether or not to fire the change event
-     */
-    proto.setValue = function(rgb, silent) {
-        silent = (silent) || false;
-        this.set(this.OPT.RGB, rgb, silent);
-        _updateSliders.call(this);
-    };
+            var s=this._getS(), v=this._getV();
+            this.set(this.OPT.SATURATION, Math.round(s*100), true);
+            this.set(this.OPT.VALUE, Math.round(v*100), true);
 
-    /**
-     * The hue slider
-     * @property hueSlider
-     * @type YAHOO.widget.Slider
-     */
-    proto.hueSlider = null; 
-    
-    /**
-     * The picker region
-     * @property pickerSlider
-     * @type YAHOO.widget.Slider
-     */
-    proto.pickerSlider = null;
+            if (this.pickerSlider.valueChangeSource !== Slider.SOURCE_SET_VALUE) {
+                this._getValuesFromSliders();
+            }
 
-    /**
-     * Translates the slider value into hue, int[0,359]
-     * @method _getH
-     * @private
-     * @return {int} the hue from 0 to 359
-     */
-    var _getH = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            h = (size - this.hueSlider.getValue()) / size;
-        h = Math.round(h*360);
-        return (h === 360) ? 0 : h;
-    };
+            this._updateFormFields();
+            this._updateSwatch();
+        },
 
-    /**
-     * Translates the slider value into saturation, int[0,1], left to right
-     * @method _getS
-     * @private
-     * @return {int} the saturation from 0 to 1
-     */
-    var _getS = function() {
-        return this.pickerSlider.getXValue() / this.get(this.OPT.PICKER_SIZE);
-    };
 
-    /**
-     * Translates the slider value into value/brightness, int[0,1], top
-     * to bottom
-     * @method _getV
-     * @private
-     * @return {int} the value from 0 to 1
-     */
-    var _getV = function() {
-        var size = this.get(this.OPT.PICKER_SIZE);
-        return (size - this.pickerSlider.getYValue()) / size;
-    };
+        /**
+         * Key map to well-known commands for txt field input
+         * @method _getCommand
+         * @param e {Event} the keypress or keydown event
+         * @return {int} a command code
+         * <ul>
+         * <li>0 = not a number, letter in range, or special key</li>
+         * <li>1 = number</li>
+         * <li>2 = a-fA-F</li>
+         * <li>3 = increment (up arrow)</li>
+         * <li>4 = decrement (down arrow)</li>
+         * <li>5 = special key (tab, delete, return, escape, left, right)</li> 
+         * <li>6 = return</li>
+         * </ul>
+         * @protected
+         */
+        _getCommand : function(e) {
+            var c = Event.getCharCode(e);
 
-    /**
-     * Updates the background of the swatch with the current rbg value.
-     * Also updates the websafe swatch to the closest websafe color
-     * @method _updateSwatch
-     * @private
-     */
-    var _updateSwatch = function() {
-        var rgb = this.get(this.OPT.RGB),
-            websafe = this.get(this.OPT.WEBSAFE),
-            el = this.getElement(this.ID.SWATCH),
-            color = rgb.join(","),
-            txt = this.get(this.OPT.TXT);
+            //alert(Event.getCharCode(e) + ", " + e.keyCode + ", " + e.charCode);
 
-        Dom.setStyle(el, "background-color", "rgb(" + color  + ")");
-        el.title = lang.substitute(txt.CURRENT_COLOR, {
-                "rgb": "#" + this.get(this.OPT.HEX)
-            });
+            // special keys
+            if (c === 38) { // up arrow
+                return 3;
+            } else if (c === 13) { // return
+                return 6;
+            } else if (c === 40) { // down array
+                return 4;
+            } else if (c >= 48 && c<=57) { // 0-9
+                return 1;
+            } else if (c >= 97 && c<=102) { // a-f
+                return 2;
+            } else if (c >= 65 && c<=70) { // A-F
+                return 2;
+            //} else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 || 
+            //              (c >= 112 && c <=123)) { // including F-keys
+            // tab, delete, return, escape, left, right or ctrl/meta sequences
+            } else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 ||
+                       e.ctrlKey || e.metaKey) { // special chars
+                return 5;
+            } else { // something we probably don't want
+                return 0;
+            }
+        },
 
+        /**
+         * Use the value of the text field to update the control
+         * @method _useFieldValue
+         * @param e {Event} an event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _useFieldValue : function(e, el, prop) {
+            var val = el.value;
 
-        el = this.getElement(this.ID.WEBSAFE_SWATCH);
-        color = websafe.join(",");
+            if (prop !== this.OPT.HEX) {
+                val = parseInt(val, 10);
+            }
 
-        Dom.setStyle(el, "background-color", "rgb(" + color + ")");
-        el.title = lang.substitute(txt.CLOSEST_WEBSAFE, {
-                "rgb": "#" + Color.rgb2hex(websafe)
-            });
+            if (val !== this.get(prop)) {
+                this.set(prop, val);
+            }
+        },
 
-    };
+        /**
+         * Handle keypress on one of the rgb or hsv fields.
+         * @method _rgbFieldKeypress
+         * @param e {Event} the keypress event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _rgbFieldKeypress : function(e, el, prop) {
+            var command = this._getCommand(e),
+                inc = (e.shiftKey) ? 10 : 1;
+            switch (command) {
+                case 6: // return, update the value
+                    this._useFieldValue.apply(this, arguments);
+                    break;
+                            
+                case 3: // up arrow, increment
+                    this.set(prop, Math.min(this.get(prop)+inc, 255));
+                    this._updateFormFields();
+                    //Event.stopEvent(e);
+                    break;
+                case 4: // down arrow, decrement
+                    this.set(prop, Math.max(this.get(prop)-inc, 0));
+                    this._updateFormFields();
+                    //Event.stopEvent(e);
+                    break;
 
-    /**
-     * Reads the sliders and converts the values to RGB, updating the
-     * internal state for all the individual form fields
-     * @method _getValuesFromSliders
-     * @private
-     */
-    var _getValuesFromSliders = function() {
-        var h=_getH.call(this), s=_getS.call(this), v=_getV.call(this);
-        YAHOO.log("hsv " + [h, s, v]);
+                default:
+            }
 
-        var rgb = Color.hsv2rgb(h, s, v);
-        //var websafe = Color.websafe(rgb);
-        //var hex = Color.rgb2hex(rgb[0], rgb[1], rgb[2]);
+        },
 
-        this.set(this.OPT.RGB, rgb);
-    };
+        /**
+         * Handle keydown on the hex field
+         * @method _hexFieldKeypress
+         * @param e {Event} the keypress event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _hexFieldKeypress : function(e, el, prop) {
+            var command = this._getCommand(e);
+            if (command === 6) { // return, update the value
+                this._useFieldValue.apply(this, arguments);
+            }
+        },
 
-    /**
-     * Updates the form field controls with the state data contained
-     * in the control.
-     * @method _updateFormFields
-     * @private
-     */
-    var _updateFormFields = function() {
-        this.getElement(this.ID.H).value = this.get(this.OPT.HUE);
-        this.getElement(this.ID.S).value = this.get(this.OPT.SATURATION);
-        this.getElement(this.ID.V).value = this.get(this.OPT.VALUE);
-        this.getElement(this.ID.R).value = this.get(this.OPT.RED);
-        this.getElement(this.ID.R_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.RED));
-        this.getElement(this.ID.G).value = this.get(this.OPT.GREEN);
-        this.getElement(this.ID.G_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.GREEN));
-        this.getElement(this.ID.B).value = this.get(this.OPT.BLUE);
-        this.getElement(this.ID.B_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.BLUE));
-        this.getElement(this.ID.HEX).value = this.get(this.OPT.HEX);
-    };
-
-    /**
-     * Event handler for the hue slider.
-     * @method _onHueSliderChange
-     * @param newOffset {int} pixels from the start position
-     * @private
-     */
-    var _onHueSliderChange = function(newOffset) {
-        this.logger.log("hue update: " + newOffset , "warn");
-
-        var h = _getH.call(this);
-        this.set(this.OPT.HUE, h, true);
-
-        // set picker background to the hue
-        var rgb = Color.hsv2rgb(h, 1, 1);
-        var styleDef = "rgb(" + rgb.join(",") + ")";
-
-        Dom.setStyle(this.getElement(this.ID.PICKER_BG), "background-color", styleDef);
-
-        if (this.hueSlider.valueChangeSource === this.hueSlider.SOURCE_UI_EVENT) {
-            _getValuesFromSliders.call(this);
-        }
-
-        _updateFormFields.call(this);
-        _updateSwatch.call(this);
-    };
-
-    /**
-     * Event handler for the picker slider, which controls the
-     * saturation and value/brightness.
-     * @method _onPickerSliderChange
-     * @param newOffset {{x: int, y: int}} x/y pixels from the start position
-     * @private
-     */
-    var _onPickerSliderChange = function(newOffset) {
-        this.logger.log(sub("picker update [{x}, {y}]", newOffset));
-
-        var s=_getS.call(this), v=_getV.call(this);
-        this.set(this.OPT.SATURATION, Math.round(s*100), true);
-        this.set(this.OPT.VALUE, Math.round(v*100), true);
-
-        if (this.pickerSlider.valueChangeSource === this.pickerSlider.SOURCE_UI_EVENT) {
-            _getValuesFromSliders.call(this);
-        }
-
-        _updateFormFields.call(this);
-        _updateSwatch.call(this);
-    };
-
-
-    /**
-     * Key map to well-known commands for txt field input
-     * @method _getCommand
-     * @param e {Event} the keypress or keydown event
-     * @return {int} a command code
-     * <ul>
-     * <li>0 = not a number, letter in range, or special key</li>
-     * <li>1 = number</li>
-     * <li>2 = a-fA-F</li>
-     * <li>3 = increment (up arrow)</li>
-     * <li>4 = decrement (down arrow)</li>
-     * <li>5 = special key (tab, delete, return, escape, left, right)</li> 
-     * <li>6 = return</li>
-     * </ul>
-     * @private
-     */
-    var _getCommand = function(e) {
-        var c = Event.getCharCode(e);
-
-        //alert(Event.getCharCode(e) + ", " + e.keyCode + ", " + e.charCode);
-
-        // special keys
-        if (c === 38) { // up arrow
-            return 3;
-        } else if (c === 13) { // return
-            return 6;
-        } else if (c === 40) { // down array
-            return 4;
-        } else if (c >= 48 && c<=57) { // 0-9
-            return 1;
-        } else if (c >= 97 && c<=102) { // a-f
-            return 2;
-        } else if (c >= 65 && c<=70) { // A-F
-            return 2;
-        //} else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 || 
-        //              (c >= 112 && c <=123)) { // including F-keys
-        // tab, delete, return, escape, left, right
-        } else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1) { // special chars
-            return 5;
-        } else { // something we probably don't want
-            return 0;
-        }
-    };
-
-    /**
-     * Use the value of the text field to update the control
-     * @method _hexFieldKeypress
-     * @param e {Event} an event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _useFieldValue = function(e, el, prop) {
-        var val = el.value;
-
-        if (prop !== this.OPT.HEX) {
-            val = parseInt(val, 10);
-        }
-
-        if (val !== this.get(prop)) {
-            this.set(prop, val);
-        }
-    };
-
-    /**
-     * Handle keypress on one of the rgb or hsv fields.
-     * @method _rgbFieldKeypress
-     * @param e {Event} the keypress event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _rgbFieldKeypress = function(e, el, prop) {
-        var command = _getCommand(e);
-        var inc = (e.shiftKey) ? 10 : 1;
-        switch (command) {
-            case 6: // return, update the value
-                _useFieldValue.apply(this, arguments);
-                break;
-                        
-            case 3: // up arrow, increment
-                this.set(prop, Math.min(this.get(prop)+inc, 255));
-                _updateFormFields.call(this);
-                //Event.stopEvent(e);
-                break;
-            case 4: // down arrow, decrement
-                this.set(prop, Math.max(this.get(prop)-inc, 0));
-                _updateFormFields.call(this);
-                //Event.stopEvent(e);
-                break;
-
-            default:
-        }
-
-    };
-
-    /**
-     * Handle keydown on the hex field
-     * @method _hexFieldKeypress
-     * @param e {Event} the keypress event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _hexFieldKeypress = function(e, el, prop) {
-        var command = _getCommand(e);
-        if (command === 6) { // return, update the value
-            _useFieldValue.apply(this, arguments);
-        }
-    };
-
-    /** 
-     * Allows numbers and special chars, and by default allows a-f.  
-     * Used for the hex field keypress handler.
-     * @method _hexOnly
-     * @param e {Event} the event
-     * @param numbersOnly omits a-f if set to true
-     * @private
-     * @return {boolean} false if we are canceling the event
-     */
-    var _hexOnly = function(e, numbersOnly) {
-        var command = _getCommand(e);
-        switch (command) {
-            case 6: // return
-            case 5: // special char
-            case 1: // number
-                break;
-            case 2: // hex char (a-f)
-                if (numbersOnly !== true) {
+        /** 
+         * Allows numbers and special chars, and by default allows a-f.  
+         * Used for the hex field keypress handler.
+         * @method _hexOnly
+         * @param e {Event} the event
+         * @param numbersOnly omits a-f if set to true
+         * @protected
+         * @return {boolean} false if we are canceling the event
+         */
+        _hexOnly : function(e, numbersOnly) {
+            var command = this._getCommand(e);
+            switch (command) {
+                case 6: // return
+                case 5: // special char
+                case 1: // number
                     break;
-                }
+                case 2: // hex char (a-f)
+                    if (numbersOnly !== true) {
+                        break;
+                    }
 
-                // fallthrough is intentional
+                    // fallthrough is intentional
 
-            default: // prevent alpha and punctuation
-                Event.stopEvent(e);
-                return false;
-        }
-    };
+                default: // prevent alpha and punctuation
+                    Event.stopEvent(e);
+                    return false;
+            }
+        },
 
-    /** 
-     * Allows numbers and special chars only.  Used for the
-     * rgb and hsv fields keypress handler.
-     * @method _numbersOnly
-     * @param e {Event} the event
-     * @private
-     * @return {boolean} false if we are canceling the event
-     */
-    var _numbersOnly = function(e) {
-        return _hexOnly(e, true);
-    };
+        /** 
+         * Allows numbers and special chars only.  Used for the
+         * rgb and hsv fields keypress handler.
+         * @method _numbersOnly
+         * @param e {Event} the event
+         * @protected
+         * @return {boolean} false if we are canceling the event
+         */
+        _numbersOnly : function(e) {
+            return this._hexOnly(e, true);
+        },
 
-    /**
-     * Returns the element reference that is saved.  The id can be either
-     * the element id, or the key for this id in the "id" config attribute.
-     * For instance, the host element id can be obtained by passing its
-     * id (default: "yui_picker") or by its key "YUI_PICKER".
-     * @param id {string} the element id, or key 
-     * @return {HTMLElement} a reference to the element
-     */
-    proto.getElement = function(id) { 
-        return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[id]]; 
-    };
+        /**
+         * Returns the element reference that is saved.  The id can be either
+         * the element id, or the key for this id in the "id" config attribute.
+         * For instance, the host element id can be obtained by passing its
+         * id (default: "yui_picker") or by its key "YUI_PICKER".
+         * @param id {string} the element id, or key 
+         * @return {HTMLElement} a reference to the element
+         */
+        getElement : function(id) { 
+            return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[id]]; 
+        },
 
-    var _createElements = function() {
-        this.logger.log("Building markup");
-        var el, child, img, fld, i, 
-            ids = this.get(this.OPT.IDS),
-            txt = this.get(this.OPT.TXT),
-            images = this.get(this.OPT.IMAGES),
-            Elem = function(type, o) {
-                var n = document.createElement(type);
-                if (o) {
-                    lang.augmentObject(n, o, true);
-                }
-                return n;
-            },
-            RGBElem = function(type, obj) {
-                var o = lang.merge({
-                        //type: "txt",
-                        autocomplete: "off",
-                        value: "0",
-                        size: 3,
-                        maxlength: 3
-                    }, obj);
+        _createElements : function() {
+            this.logger.log("Building markup");
+            var el, child, img, fld, p,
+                ids = this.get(this.OPT.IDS),
+                txt = this.get(this.OPT.TXT),
+                images = this.get(this.OPT.IMAGES),
+                Elem = function(type, o) {
+                    var n = document.createElement(type);
+                    if (o) {
+                        lang.augmentObject(n, o, true);
+                    }
+                    return n;
+                },
+                RGBElem = function(type, obj) {
+                    var o = lang.merge({
+                            //type: "txt",
+                            autocomplete: "off",
+                            value: "0",
+                            size: 3,
+                            maxlength: 3
+                        }, obj);
 
-                o.name = o.id;
-                return new Elem(type, o);
-            };
+                    o.name = o.id;
+                    return new Elem(type, o);
+                };
 
-        var p = this.get("element");
+            p = this.get("element");
 
-        // Picker slider (S and V) ---------------------------------------------
+            // Picker slider (S and V) ---------------------------------------------
 
-        el = new Elem("div", {
-            id: ids[this.ID.PICKER_BG],
-            className: "yui-picker-bg",
-            tabIndex: -1,
-            hideFocus: true
-        });
+            el = new Elem("div", {
+                id: ids[this.ID.PICKER_BG],
+                className: "yui-picker-bg",
+                tabIndex: -1,
+                hideFocus: true
+            });
 
-        child = new Elem("div", {
-            id: ids[this.ID.PICKER_THUMB],
-            className: "yui-picker-thumb"
-        });
+            child = new Elem("div", {
+                id: ids[this.ID.PICKER_THUMB],
+                className: "yui-picker-thumb"
+            });
 
-        img = new Elem("img", {
-            src: images.PICKER_THUMB
-        });
+            img = new Elem("img", {
+                src: images.PICKER_THUMB
+            });
 
-        child.appendChild(img);
-        el.appendChild(child);
-        p.appendChild(el);
-        
-        // Hue slider ---------------------------------------------
-        el = new Elem("div", {
-            id: ids[this.ID.HUE_BG],
-            className: "yui-picker-hue-bg",
-            tabIndex: -1,
-            hideFocus: true
-        });
+            child.appendChild(img);
+            el.appendChild(child);
+            p.appendChild(el);
+            
+            // Hue slider ---------------------------------------------
+            el = new Elem("div", {
+                id: ids[this.ID.HUE_BG],
+                className: "yui-picker-hue-bg",
+                tabIndex: -1,
+                hideFocus: true
+            });
 
-        child = new Elem("div", {
-            id: ids[this.ID.HUE_THUMB],
-            className: "yui-picker-hue-thumb"
-        });
+            child = new Elem("div", {
+                id: ids[this.ID.HUE_THUMB],
+                className: "yui-picker-hue-thumb"
+            });
 
-        img = new Elem("img", {
-            src: images.HUE_THUMB
-        });
-
-        child.appendChild(img);
-        el.appendChild(child);
-        p.appendChild(el);
-
-
-        // controls ---------------------------------------------
-
-        el = new Elem("div", {
-            id: ids[this.ID.CONTROLS],
-            className: "yui-picker-controls"
-        });
-
-        p.appendChild(el);
-        p = el;
-
-            // controls header
-            el = new Elem("div", {
-                className: "hd"
+            img = new Elem("img", {
+                src: images.HUE_THUMB
             });
 
-            child = new Elem("a", {
-                id: ids[this.ID.CONTROLS_LABEL],
-                //className: "yui-picker-controls-label",
-                href: "#"
-            });
+            child.appendChild(img);
             el.appendChild(child);
             p.appendChild(el);
 
-            // bd
+
+            // controls ---------------------------------------------
+
             el = new Elem("div", {
-                className: "bd"
+                id: ids[this.ID.CONTROLS],
+                className: "yui-picker-controls"
             });
 
             p.appendChild(el);
             p = el;
 
-                // rgb
-                el = new Elem("ul", {
-                    id: ids[this.ID.RGB_CONTROLS],
-                    className: "yui-picker-rgb-controls"
+                // controls header
+                el = new Elem("div", {
+                    className: "hd"
                 });
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.R + " "));
-
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.R],
-                    className: "yui-picker-r"
+                child = new Elem("a", {
+                    id: ids[this.ID.CONTROLS_LABEL],
+                    //className: "yui-picker-controls-label",
+                    href: "#"
                 });
-
-                child.appendChild(fld);
                 el.appendChild(child);
+                p.appendChild(el);
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.G + " "));
-
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.G],
-                    className: "yui-picker-g"
+                // bd
+                el = new Elem("div", {
+                    className: "bd"
                 });
 
-                child.appendChild(fld);
-                el.appendChild(child);
+                p.appendChild(el);
+                p = el;
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.B + " "));
+                    // rgb
+                    el = new Elem("ul", {
+                        id: ids[this.ID.RGB_CONTROLS],
+                        className: "yui-picker-rgb-controls"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.B],
-                    className: "yui-picker-b"
-                });
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.R + " "));
 
-                child.appendChild(fld);
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.R],
+                        className: "yui-picker-r"
+                    });
 
-                p.appendChild(el);
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                // hsv
-                el = new Elem("ul", {
-                    id: ids[this.ID.HSV_CONTROLS],
-                    className: "yui-picker-hsv-controls"
-                });
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.G + " "));
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.H + " "));
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.G],
+                        className: "yui-picker-g"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.H],
-                    className: "yui-picker-h"
-                });
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.DEG));
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.B + " "));
 
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.B],
+                        className: "yui-picker-b"
+                    });
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.S + " "));
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.S],
-                    className: "yui-picker-s"
-                });
+                    p.appendChild(el);
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.PERCENT));
+                    // hsv
+                    el = new Elem("ul", {
+                        id: ids[this.ID.HSV_CONTROLS],
+                        className: "yui-picker-hsv-controls"
+                    });
 
-                el.appendChild(child);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.H + " "));
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.V + " "));
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.H],
+                        className: "yui-picker-h"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.V],
-                    className: "yui-picker-v"
-                });
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.DEG));
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.PERCENT));
+                    el.appendChild(child);
 
-                el.appendChild(child);
-                p.appendChild(el);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.S + " "));
 
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.S],
+                        className: "yui-picker-s"
+                    });
 
-                // hex summary
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.PERCENT));
 
-                el = new Elem("ul", {
-                    id: ids[this.ID.HEX_SUMMARY],
-                    className: "yui-picker-hex_summary"
-                });
+                    el.appendChild(child);
 
-                child = new Elem("li", {
-                    id: ids[this.ID.R_HEX]
-                });
-                el.appendChild(child);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.V + " "));
 
-                child = new Elem("li", {
-                    id: ids[this.ID.G_HEX]
-                });
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.V],
+                        className: "yui-picker-v"
+                    });
 
-                child = new Elem("li", {
-                    id: ids[this.ID.B_HEX]
-                });
-                el.appendChild(child);
-                p.appendChild(el);
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.PERCENT));
 
-                // hex field
-                el = new Elem("div", {
-                    id: ids[this.ID.HEX_CONTROLS],
-                    className: "yui-picker-hex-controls"
-                });
-                el.appendChild(document.createTextNode(txt.HEX + " "));
+                    el.appendChild(child);
+                    p.appendChild(el);
 
-                child = new RGBElem("input", {
-                    id: ids[this.ID.HEX],
-                    className: "yui-picker-hex",
-                    size: 6,
-                    maxlength: 6
-                });
 
-                el.appendChild(child);
-                p.appendChild(el);
+                    // hex summary
 
-                p = this.get("element");
+                    el = new Elem("ul", {
+                        id: ids[this.ID.HEX_SUMMARY],
+                        className: "yui-picker-hex_summary"
+                    });
 
-                // swatch
-                el = new Elem("div", {
-                    id: ids[this.ID.SWATCH],
-                    className: "yui-picker-swatch"
-                });
+                    child = new Elem("li", {
+                        id: ids[this.ID.R_HEX]
+                    });
+                    el.appendChild(child);
 
-                p.appendChild(el);
+                    child = new Elem("li", {
+                        id: ids[this.ID.G_HEX]
+                    });
+                    el.appendChild(child);
 
-                // websafe swatch
-                el = new Elem("div", {
-                    id: ids[this.ID.WEBSAFE_SWATCH],
-                    className: "yui-picker-websafe-swatch"
-                });
+                    child = new Elem("li", {
+                        id: ids[this.ID.B_HEX]
+                    });
+                    el.appendChild(child);
+                    p.appendChild(el);
 
-                p.appendChild(el);
+                    // hex field
+                    el = new Elem("div", {
+                        id: ids[this.ID.HEX_CONTROLS],
+                        className: "yui-picker-hex-controls"
+                    });
+                    el.appendChild(document.createTextNode(txt.HEX + " "));
 
-    };
+                    child = new RGBElem("input", {
+                        id: ids[this.ID.HEX],
+                        className: "yui-picker-hex",
+                        size: 6,
+                        maxlength: 6
+                    });
 
-    var _attachRGBHSV = function(id, config) {
-        Event.on(this.getElement(id), "keydown", function(e, me) {
-                _rgbFieldKeypress.call(me, e, this, config);
-            }, this);
-        Event.on(this.getElement(id), "keypress", _numbersOnly, this);
-        Event.on(this.getElement(id), "blur", function(e, me) {
-                _useFieldValue.call(me, e, this, config);
-            }, this);
-    };
+                    el.appendChild(child);
+                    p.appendChild(el);
 
+                    p = this.get("element");
 
-    /**
-     * Updates the rgb attribute with the current state of the r,g,b
-     * fields.  This is invoked from change listeners on these
-     * attributes to facilitate updating these values from the
-     * individual form fields
-     * @method _updateRGB
-     * @private
-     */
-    var _updateRGB = function() {
-        var rgb = [this.get(this.OPT.RED), 
-                   this.get(this.OPT.GREEN),
-                   this.get(this.OPT.BLUE)];
+                    // swatch
+                    el = new Elem("div", {
+                        id: ids[this.ID.SWATCH],
+                        className: "yui-picker-swatch"
+                    });
 
-        this.logger.log("RGB value set to " + rgb);
-        this.set(this.OPT.RGB, rgb);
+                    p.appendChild(el);
 
-        _updateSliders.call(this);
-    };
+                    // websafe swatch
+                    el = new Elem("div", {
+                        id: ids[this.ID.WEBSAFE_SWATCH],
+                        className: "yui-picker-websafe-swatch"
+                    });
 
-    /**
-     * Sets the initial state of the sliders
-     * @method initPicker
-     */
-    proto.initPicker = function () {
+                    p.appendChild(el);
 
-        // bind all of our elements
-        var o=this.OPT, 
-            ids = this.get(o.IDS), 
-            els = this.get(o.ELEMENTS), 
-                  i, el, id;
+        },
 
-        // Add the default value as a key for each element for easier lookup
-        for (i in this.ID) {
-            if (lang.hasOwnProperty(this.ID, i)) {
-                ids[this.ID[i]] = ids[i];
-            }
-        }
+        _attachRGBHSV : function(id, config) {
+            Event.on(this.getElement(id), "keydown", function(e, me) {
+                    me._rgbFieldKeypress(e, this, config);
+                }, this);
+            Event.on(this.getElement(id), "keypress", this._numbersOnly, this, true);
+            Event.on(this.getElement(id), "blur", function(e, me) {
+                    me._useFieldValue(e, this, config);
+                }, this);
+        },
 
-        // Check for picker element, if not there, create all of them
-        el = Dom.get(ids[this.ID.PICKER_BG]);
-        if (!el) {
-            _createElements.call(this);
-        } else {
-            this.logger.log("Using pre-existing markup");
-        }
 
-        for (i in ids) {
-            if (lang.hasOwnProperty(ids, i)) {
-                // look for element
-                el = Dom.get(ids[i]);
+        /**
+         * Updates the rgb attribute with the current state of the r,g,b
+         * fields.  This is invoked from change listeners on these
+         * attributes to facilitate updating these values from the
+         * individual form fields
+         * @method _updateRGB
+         * @protected
+         */
+        _updateRGB : function() {
+            var rgb = [this.get(this.OPT.RED), 
+                       this.get(this.OPT.GREEN),
+                       this.get(this.OPT.BLUE)];
 
-                // generate an id if the implementer passed in an element reference,
-                // and the element did not have an id already
-                id = Dom.generateId(el);
+            this.logger.log("RGB value set to " + rgb);
+            this.set(this.OPT.RGB, rgb);
 
-                // update the id in case we generated the id
-                ids[i] = id; // key is WEBSAFE_SWATCH
-                ids[ids[i]] = id; // key is websafe_swatch
+            this._updateSliders();
+        },
 
-                // store the dom ref
-                els[id] = el;
+        /**
+         * Creates any missing DOM structure.
+         *
+         * @method _initElements
+         * @protected
+         */
+        _initElements : function () {
+            // bind all of our elements
+            var o=this.OPT, 
+                ids = this.get(o.IDS), 
+                els = this.get(o.ELEMENTS), 
+                      i, el, id;
+
+            // Add the default value as a key for each element for easier lookup
+            for (i in this.ID) {
+                if (lang.hasOwnProperty(this.ID, i)) {
+                    ids[this.ID[i]] = ids[i];
+                }
             }
-        }
 
-        // set the initial visibility state of our controls
-            els = [o.SHOW_CONTROLS, 
-                   o.SHOW_RGB_CONTROLS,
-                   o.SHOW_HSV_CONTROLS,
-                   o.SHOW_HEX_CONTROLS,
-                   o.SHOW_HEX_SUMMARY,
-                   o.SHOW_WEBSAFE
-                   ];
+            // Check for picker element, if not there, create all of them
+            el = Dom.get(ids[this.ID.PICKER_BG]);
+            if (!el) {
+                this._createElements();
+            } else {
+                this.logger.log("Using pre-existing markup");
+            }
 
-        for (i=0; i<els.length; i=i+1) {
-            this.set(els[i], this.get(els[i]));
-        }
+            for (i in ids) {
+                if (lang.hasOwnProperty(ids, i)) {
+                    // look for element
+                    el = Dom.get(ids[i]);
 
-        var s = this.get(o.PICKER_SIZE);
-        this.logger.log("picker size" + s);
+                    // generate an id if the implementer passed in an element reference,
+                    // and the element did not have an id already
+                    id = Dom.generateId(el);
 
-        this.hueSlider = Slider.getVertSlider(this.getElement(this.ID.HUE_BG), 
-                                              this.getElement(this.ID.HUE_THUMB), 0, s);
-        this.hueSlider.subscribe("change", _onHueSliderChange, this, true);
+                    // update the id in case we generated the id
+                    ids[i] = id; // key is WEBSAFE_SWATCH
+                    ids[ids[i]] = id; // key is websafe_swatch
 
-        this.pickerSlider = Slider.getSliderRegion(this.getElement(this.ID.PICKER_BG), 
-                                                   this.getElement(this.ID.PICKER_THUMB), 0, s, 0, s);
-        this.pickerSlider.subscribe("change", _onPickerSliderChange, this, true);
+                    // store the dom ref
+                    els[id] = el;
+                }
+            }
 
-        // Set the animate state
-        this.set(o.ANIMATE,this.get(o.ANIMATE));
+        },
 
-        //_onHueSliderChange.call(this, 0);
+        /**
+         * Sets the initial state of the sliders
+         * @method initPicker
+         */
+        initPicker : function () {
+            this._initSliders();
+            this._bindUI();
+            this.syncUI(true);
+        },
 
-        Event.on(this.getElement(this.ID.WEBSAFE_SWATCH), "click", function(e) {
-               this.setValue(this.get(o.WEBSAFE));
-               //_updateSliders
-           }, this, true);
+        /**
+         * Creates the Hue and Value/Saturation Sliders.
+         *
+         * @method _initSliders
+         * @protected
+         */
+        _initSliders : function () {
+            var ID = this.ID,
+                size = this.get(this.OPT.PICKER_SIZE);
 
-        Event.on(this.getElement(this.ID.CONTROLS_LABEL), "click", function(e) {
-               this.set(o.SHOW_CONTROLS, !this.get(o.SHOW_CONTROLS));
-               Event.preventDefault(e);
-           }, this, true);
+            this.logger.log("picker size" + size);
 
-        _attachRGBHSV.call(this, this.ID.R, this.OPT.RED); 
-        _attachRGBHSV.call(this, this.ID.G, this.OPT.GREEN); 
-        _attachRGBHSV.call(this, this.ID.B, this.OPT.BLUE); 
-        _attachRGBHSV.call(this, this.ID.H, this.OPT.HUE); 
-        _attachRGBHSV.call(this, this.ID.S, this.OPT.SATURATION); 
-        _attachRGBHSV.call(this, this.ID.V, this.OPT.VALUE); 
+            this.hueSlider = Slider.getVertSlider(
+                this.getElement(ID.HUE_BG), 
+                this.getElement(ID.HUE_THUMB), 0, size);
 
-        Event.on(this.getElement(this.ID.HEX), "keydown", function(e, me) {
-                _hexFieldKeypress.call(me, e, this, me.OPT.HEX);
-            }, this);
+            this.pickerSlider = Slider.getSliderRegion(
+                this.getElement(ID.PICKER_BG), 
+                this.getElement(ID.PICKER_THUMB), 0, size, 0, size);
 
-        Event.on(this.getElement(this.ID.HEX), "keypress", _hexOnly, this);
-        Event.on(this.getElement(this.ID.HEX), "blur", function(e, me) {
-                _useFieldValue.call(me, e, this, me.OPT.HEX);
-            }, this);
+            // Apply animate attribute configuration
+            this.set(this.OPT.ANIMATE, this.get(this.OPT.ANIMATE));
+        },
 
-        _updateRGB.call(this);
-    };
+        /**
+         * Adds event listeners to Sliders and UI elements.  Wires everything
+         * up.
+         *
+         * @method _bindUI
+         * @protected
+         */
+        _bindUI : function () {
+            var ID = this.ID,
+                O  = this.OPT;
 
+            this.hueSlider.subscribe("change",
+                this._onHueSliderChange, this, true);
+            this.pickerSlider.subscribe("change",
+                this._onPickerSliderChange, this, true);
 
-    /**
-     * Updates the RGB values from the current state of the HSV
-     * values.  Executed when the one of the HSV form fields are
-     * updated
-     * _updateRGBFromHSV
-     * @private
-     */
-    var _updateRGBFromHSV = function() {
-        var hsv = [this.get(this.OPT.HUE), 
-                   this.get(this.OPT.SATURATION)/100,
-                   this.get(this.OPT.VALUE)/100];
+            Event.on(this.getElement(ID.WEBSAFE_SWATCH), "click", function(e) {
+                   this.setValue(this.get(O.WEBSAFE));
+               }, this, true);
 
-        var rgb = Color.hsv2rgb(hsv);
+            Event.on(this.getElement(ID.CONTROLS_LABEL), "click", function(e) {
+                   this.set(O.SHOW_CONTROLS, !this.get(O.SHOW_CONTROLS));
+                   Event.preventDefault(e);
+               }, this, true);
 
-        this.logger.log("HSV converted to RGB " + hsv + " : " + rgb);
-        this.set(this.OPT.RGB, rgb);
+            this._attachRGBHSV(ID.R, O.RED); 
+            this._attachRGBHSV(ID.G, O.GREEN); 
+            this._attachRGBHSV(ID.B, O.BLUE); 
+            this._attachRGBHSV(ID.H, O.HUE); 
+            this._attachRGBHSV(ID.S, O.SATURATION); 
+            this._attachRGBHSV(ID.V, O.VALUE); 
 
-        _updateSliders.call(this);
-    };
+            Event.on(this.getElement(ID.HEX), "keydown", function(e, me) {
+                    me._hexFieldKeypress(e, this, O.HEX);
+                }, this);
 
-    /**
-     * Parses the hex string to normalize shorthand values, converts
-     * the hex value to rgb and updates the rgb attribute (which
-     * updates the state for all of the other values)
-     * method _updateHex
-     * @private
-     */
-    var _updateHex = function() {
-       
-        var hex = this.get(this.OPT.HEX), l=hex.length;
+            Event.on(this.getElement(this.ID.HEX), "keypress",
+                this._hexOnly, this,true);
+            Event.on(this.getElement(this.ID.HEX), "blur", function(e, me) {
+                    me._useFieldValue(e, this, O.HEX);
+                }, this);
+        },
 
-        // support #369 -> #336699 shorthand
-        if (l === 3) {
-            var c = hex.split(""), i;
-            for (i=0; i<l; i=i+1) {
-                c[i] = c[i] + c[i];
-            }
+        /**
+         * Wrapper for _updateRGB, but allows setting 
+         *
+         * @method syncUI
+         * @param skipAnim {Boolean} Omit Slider animation for this action
+         */
+        syncUI : function (skipAnim) {
+            this.skipAnim = skipAnim;
+            this._updateRGB();
+            this.skipAnim = false;
+        },
 
-            hex = c.join("");
-        }
 
-        if (hex.length !== 6) {
-            this.logger.log(this.get(this.TXT.ILLEGAL_HEX), "error");
-            return false;
-        }
+        /**
+         * Updates the RGB values from the current state of the HSV
+         * values.  Executed when the one of the HSV form fields are
+         * updated
+         * _updateRGBFromHSV
+         * @protected
+         */
+        _updateRGBFromHSV : function() {
+            var hsv = [this.get(this.OPT.HUE), 
+                       this.get(this.OPT.SATURATION)/100,
+                       this.get(this.OPT.VALUE)/100],
+                rgb = Color.hsv2rgb(hsv);
 
-        var rgb = Color.hex2rgb(hex);
+            this.logger.log("HSV converted to RGB " + hsv + " : " + rgb);
+            this.set(this.OPT.RGB, rgb);
 
-        this.logger.log(sub("Hex value set to {hex} ({rgb})", {
-                hex: hex, rgb: rgb
-            }));
+            this._updateSliders();
+        },
 
-        this.setValue(rgb);
+        /**
+         * Parses the hex string to normalize shorthand values, converts
+         * the hex value to rgb and updates the rgb attribute (which
+         * updates the state for all of the other values)
+         * method _updateHex
+         * @protected
+         */
+        _updateHex : function() {
+           
+            var hex = this.get(this.OPT.HEX),
+                l   = hex.length,
+                c,i,rgb;
 
-        //_updateSliders.call(this);
+            // support #369 -> #336699 shorthand
+            if (l === 3) {
+                c = hex.split("");
+                for (i=0; i<l; i=i+1) {
+                    c[i] = c[i] + c[i];
+                }
 
-    };
+                hex = c.join("");
+            }
 
+            if (hex.length !== 6) {
+                this.logger.log(this.get(this.TXT.ILLEGAL_HEX), "error");
+                return false;
+            }
 
+            rgb = Color.hex2rgb(hex);
 
-    /**
-     * Sets up the config attributes and the change listeners for this
-     * properties
-     * @method initAttributes
-     * @param attr An object containing default attribute values
-     */
-    proto.initAttributes = function(attr) {
+            this.logger.log(sub("Hex value set to {hex} ({rgb})", {
+                    hex: hex, rgb: rgb
+                }));
 
-        attr = attr || {};
-        YAHOO.widget.ColorPicker.superclass.initAttributes.call(this, attr);
-        
-        /**
-         * The size of the picker. Trying to change this is not recommended.
-         * @attribute pickersize
-         * @default 180
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.PICKER_SIZE, {
-                value: attr.size || this.DEFAULT.PICKER_SIZE
-            });
+            this.setValue(rgb);
+        },
 
-        /**
-         * The current hue value 0-360
-         * @attribute hue
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.HUE, {
-                value: attr.hue || 0,
-                validator: lang.isNumber
-            });
 
         /**
-         * The current saturation value 0-100
-         * @attribute saturation
-         * @type int
+         * Returns the cached element reference.  If the id is not a string, it
+         * is assumed that it is an element and this is returned.
+         * @param id {string|HTMLElement} the element key, id, or ref
+         * @param on {boolean} hide or show.  If true, show
+         * @protected
          */
-        this.setAttributeConfig(this.OPT.SATURATION, {
-                value: attr.saturation || 0,
-                validator: lang.isNumber
-            });
+        _hideShowEl : function(id, on) {
+            var el = (lang.isString(id) ? this.getElement(id) : id);
+            Dom.setStyle(el, "display", (on) ? "" : "none");
+        },
 
-        /**
-         * The current value/brightness value 0-100
-         * @attribute value
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.VALUE, {
-                value: lang.isNumber(attr.value) ? attr.value : 100,
-                validator: lang.isNumber
-            });
 
         /**
-         * The current red value 0-255
-         * @attribute red
-         * @type int
+         * Sets up the config attributes and the change listeners for this
+         * properties
+         * @method initAttributes
+         * @param attr An object containing default attribute values
          */
-        this.setAttributeConfig(this.OPT.RED, {
-                value: lang.isNumber(attr.red) ? attr.red : 255,
-                validator: lang.isNumber
-            });
+        initAttributes : function(attr) {
 
-        /**
-         * The current green value 0-255
-         * @attribute green 
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.GREEN, {
-                value: lang.isNumber(attr.green) ? attr.green : 255,
-                validator: lang.isNumber
-            });
+            attr = attr || {};
+            ColorPicker.superclass.initAttributes.call(this, attr);
+            
+            /**
+             * The size of the picker. Trying to change this is not recommended.
+             * @attribute pickersize
+             * @default 180
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.PICKER_SIZE, {
+                    value: attr.size || this.DEFAULT.PICKER_SIZE
+                });
 
-        /**
-         * The current blue value 0-255
-         * @attribute blue
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.BLUE, {
-                value: lang.isNumber(attr.blue) ? attr.blue : 255,
-                validator: lang.isNumber
-            });
+            /**
+             * The current hue value 0-360
+             * @attribute hue
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.HUE, {
+                    value: attr.hue || 0,
+                    validator: lang.isNumber
+                });
 
-        /**
-         * The current hex value #000000-#FFFFFF, without the #
-         * @attribute hex
-         * @type string
-         */
-        this.setAttributeConfig(this.OPT.HEX, {
-                value: attr.hex || "FFFFFF",
-                validator: lang.isString
-            });
+            /**
+             * The current saturation value 0-100
+             * @attribute saturation
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.SATURATION, {
+                    value: attr.saturation || 0,
+                    validator: lang.isNumber
+                });
 
-        /**
-         * The current rgb value.  Updates the state of all of the
-         * other value fields.  Read-only: use setValue to set the
-         * controls rgb value.
-         * @attribute hex
-         * @type [int, int, int]
-         * @readonly
-         */
-        this.setAttributeConfig(this.OPT.RGB, {
-                value: attr.rgb || [255,255,255],
-                method: function(rgb) {
+            /**
+             * The current value/brightness value 0-100
+             * @attribute value
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.VALUE, {
+                    value: lang.isNumber(attr.value) ? attr.value : 100,
+                    validator: lang.isNumber
+                });
 
-                    this.set(this.OPT.RED, rgb[0], true);
-                    this.set(this.OPT.GREEN, rgb[1], true);
-                    this.set(this.OPT.BLUE, rgb[2], true);
+            /**
+             * The current red value 0-255
+             * @attribute red
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.RED, {
+                    value: lang.isNumber(attr.red) ? attr.red : 255,
+                    validator: lang.isNumber
+                });
 
-                    var websafe = Color.websafe(rgb);
-                    this.set(this.OPT.WEBSAFE, websafe, true);
+            /**
+             * The current green value 0-255
+             * @attribute green 
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.GREEN, {
+                    value: lang.isNumber(attr.green) ? attr.green : 255,
+                    validator: lang.isNumber
+                });
 
-                    var hex = Color.rgb2hex(rgb);
-                    this.set(this.OPT.HEX, hex, true);
+            /**
+             * The current blue value 0-255
+             * @attribute blue
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.BLUE, {
+                    value: lang.isNumber(attr.blue) ? attr.blue : 255,
+                    validator: lang.isNumber
+                });
 
-                    var hsv = Color.rgb2hsv(rgb);
+            /**
+             * The current hex value #000000-#FFFFFF, without the #
+             * @attribute hex
+             * @type string
+             */
+            this.setAttributeConfig(this.OPT.HEX, {
+                    value: attr.hex || "FFFFFF",
+                    validator: lang.isString
+                });
 
-                    this.logger.log(sub("RGB value set to {rgb} (hsv: {hsv})", {
-                            "hsv": hsv, "rgb": rgb
-                        }));
+            /**
+             * The current rgb value.  Updates the state of all of the
+             * other value fields.  Read-only: use setValue to set the
+             * controls rgb value.
+             * @attribute hex
+             * @type [int, int, int]
+             * @readonly
+             */
+            this.setAttributeConfig(this.OPT.RGB, {
+                    value: attr.rgb || [255,255,255],
+                    method: function(rgb) {
 
-                    this.set(this.OPT.HUE, hsv[0], true);
-                    this.set(this.OPT.SATURATION, Math.round(hsv[1]*100), true);
-                    this.set(this.OPT.VALUE, Math.round(hsv[2]*100), true);
-                },
-                readonly: true
-            });
+                        this.set(this.OPT.RED, rgb[0], true);
+                        this.set(this.OPT.GREEN, rgb[1], true);
+                        this.set(this.OPT.BLUE, rgb[2], true);
 
-        /**
-         * If the color picker will live inside of a container object,
-         * set, provide a reference to it so the control can use the
-         * container's events.
-         * @attribute container
-         * @type YAHOO.widget.Panel
-         */
-        this.setAttributeConfig(this.OPT.CONTAINER, {
-                    value: null,
-                    method: function(container) {
-                        if (container) {
-                            // Position can get out of sync when the
-                            // control is manipulated while display is
-                            // none.  Resetting the slider constraints
-                            // when it is visible gets the state back in
-                            // order.
-                            container.showEvent.subscribe(function() {
-                                // this.pickerSlider.thumb.resetConstraints();
-                                // this.hueSlider.thumb.resetConstraints();
-                                this.pickerSlider.focus();
-                            }, this, true);
+                        var websafe = Color.websafe(rgb),
+                            hex = Color.rgb2hex(rgb),
+                            hsv = Color.rgb2hsv(rgb);
+
+                        this.set(this.OPT.WEBSAFE, websafe, true);
+                        this.set(this.OPT.HEX, hex, true);
+
+
+                        this.logger.log(sub("RGB value set to {rgb} (hsv: {hsv})", {
+                                "hsv": hsv, "rgb": rgb
+                            }));
+
+                        // fix bug #1754338 - when saturation is 0, hue is
+                        // silently always set to 0, but input field not updated
+                        if (hsv[1]) {
+                            this.set(this.OPT.HUE, hsv[0], true);
                         }
-                    }
+                        this.set(this.OPT.SATURATION, Math.round(hsv[1]*100), true);
+                        this.set(this.OPT.VALUE, Math.round(hsv[2]*100), true);
+                    },
+                    readonly: true
                 });
-        /**
-         * The closest current websafe value
-         * @attribute websafe
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.WEBSAFE, {
-                value: attr.websafe || [255,255,255]
-            });
 
+            /**
+             * If the color picker will live inside of a container object,
+             * set, provide a reference to it so the control can use the
+             * container's events.
+             * @attribute container
+             * @type YAHOO.widget.Panel
+             */
+            this.setAttributeConfig(this.OPT.CONTAINER, {
+                        value: null,
+                        method: function(container) {
+                            if (container) {
+                                // Position can get out of sync when the
+                                // control is manipulated while display is
+                                // none.  Resetting the slider constraints
+                                // when it is visible gets the state back in
+                                // order.
+                                container.showEvent.subscribe(function() {
+                                    // this.pickerSlider.thumb.resetConstraints();
+                                    // this.hueSlider.thumb.resetConstraints();
+                                    this.pickerSlider.focus();
+                                }, this, true);
+                            }
+                        }
+                    });
+            /**
+             * The closest current websafe value
+             * @attribute websafe
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.WEBSAFE, {
+                    value: attr.websafe || [255,255,255]
+                });
 
-        var ids = attr.ids || lang.merge({}, this.ID);
 
-        if (!attr.ids && _pickercount > 1) {
-            for (var i in ids) {
-                if (lang.hasOwnProperty(ids, i)) {
-                    ids[i] = ids[i] + _pickercount;
+            var ids = attr.ids || lang.merge({}, this.ID), i;
+
+            if (!attr.ids && _pickercount > 1) {
+                for (i in ids) {
+                    if (lang.hasOwnProperty(ids, i)) {
+                        ids[i] = ids[i] + _pickercount;
+                    }
                 }
             }
-        }
 
 
-        /**
-         * A list of element ids and/or element references used by the 
-         * control.  The default is the this.ID list, and can be customized
-         * by passing a list in the contructor
-         * @attribute ids
-         * @type {referenceid: realid}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.IDS, {
-                value: ids,
-                writeonce: true
-            });
+            /**
+             * A list of element ids and/or element references used by the 
+             * control.  The default is the this.ID list, and can be customized
+             * by passing a list in the contructor
+             * @attribute ids
+             * @type {referenceid: realid}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.IDS, {
+                    value: ids,
+                    writeonce: true
+                });
 
-        /**
-         * A list of txt strings for internationalization.  Default
-         * is this.TXT
-         * @attribute txt
-         * @type {key: txt}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.TXT, {
-                value: attr.txt || this.TXT,
-                writeonce: true
-            });
+            /**
+             * A list of txt strings for internationalization.  Default
+             * is this.TXT
+             * @attribute txt
+             * @type {key: txt}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.TXT, {
+                    value: attr.txt || this.TXT,
+                    writeonce: true
+                });
 
-        /**
-         * The img src default list
-         * is this.IMAGES
-         * @attribute images
-         * @type {key: image}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.IMAGES, {
-                value: attr.images || this.IMAGE,
-                writeonce: true
-            });
-        /**
-         * The element refs used by this control.  Set at initialization
-         * @attribute elements
-         * @type {id: HTMLElement}
-         * @readonly
-         */
-        this.setAttributeConfig(this.OPT.ELEMENTS, {
-                value: {},
-                readonly: true
-            });
+            /**
+             * The img src default list
+             * is this.IMAGES
+             * @attribute images
+             * @type {key: image}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.IMAGES, {
+                    value: attr.images || this.IMAGE,
+                    writeonce: true
+                });
+            /**
+             * The element refs used by this control.  Set at initialization
+             * @attribute elements
+             * @type {id: HTMLElement}
+             * @readonly
+             */
+            this.setAttributeConfig(this.OPT.ELEMENTS, {
+                    value: {},
+                    readonly: true
+                });
 
-        /**
-         * Returns the cached element reference.  If the id is not a string, it
-         * is assumed that it is an element and this is returned.
-         * @param id {string|HTMLElement} the element key, id, or ref
-         * @param on {boolean} hide or show.  If true, show
-         * @private */
-        var _hideShowEl = function(id, on) {
-            var el = (lang.isString(id) ? this.getElement(id) : id);
-            //Dom.setStyle(id, "visibility", (on) ? "" : "hidden");
-            Dom.setStyle(el, "display", (on) ? "" : "none");
-        };
+            /**
+             * Hide/show the entire set of controls
+             * @attribute showcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_CONTROLS, {
+                    value: lang.isBoolean(attr.showcontrols) ? attr.showcontrols : true,
+                    method: function(on) {
 
-        /**
-         * Hide/show the entire set of controls
-         * @attribute showcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_CONTROLS, {
-                value: lang.isBoolean(attr.showcontrols) ? attr.showcontrols : true,
-                method: function(on) {
+                        var el = Dom.getElementsByClassName("bd", "div", 
+                                this.getElement(this.ID.CONTROLS))[0];
 
-                    var el = Dom.getElementsByClassName("bd", "div", 
-                            this.getElement(this.ID.CONTROLS))[0];
+                        this._hideShowEl(el, on);
 
-                    _hideShowEl.call(this, el, on);
+                        this.getElement(this.ID.CONTROLS_LABEL).innerHTML = 
+                            (on) ? this.get(this.OPT.TXT).HIDE_CONTROLS :
+                                   this.get(this.OPT.TXT).SHOW_CONTROLS;
 
-                    this.getElement(this.ID.CONTROLS_LABEL).innerHTML = 
-                        (on) ? this.get(this.OPT.TXT).HIDE_CONTROLS :
-                               this.get(this.OPT.TXT).SHOW_CONTROLS;
+                    }
+                });
 
-                }
-            });
+            /**
+             * Hide/show the rgb controls
+             * @attribute showrgbcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS, {
+                    value: lang.isBoolean(attr.showrgbcontrols) ? attr.showrgbcontrols : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.RGB_CONTROLS, on);
+                    }
+                });
 
-        /**
-         * Hide/show the rgb controls
-         * @attribute showrgbcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS, {
-                value: lang.isBoolean(attr.showrgbcontrols) ? attr.showrgbcontrols : true,
-                method: function(on) {
-                    //Dom.setStyle(this.getElement(this.ID.RBG_CONTROLS), "visibility", (on) ? "" : "hidden");
-                    _hideShowEl.call(this, this.ID.RGB_CONTROLS, on);
-                }
-            });
+            /**
+             * Hide/show the hsv controls
+             * @attribute showhsvcontrols
+             * @type boolean
+             * @default false
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS, {
+                    value: lang.isBoolean(attr.showhsvcontrols) ?
+                                          attr.showhsvcontrols : false,
+                    method: function(on) {
+                        //Dom.setStyle(this.getElement(this.ID.HSV_CONTROLS), "visibility", (on) ? "" : "hidden");
+                        this._hideShowEl(this.ID.HSV_CONTROLS, on);
 
-        /**
-         * Hide/show the hsv controls
-         * @attribute showhsvcontrols
-         * @type boolean
-         * @default false
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS, {
-                value: lang.isBoolean(attr.showhsvcontrols) ?
-                                      attr.showhsvcontrols : false,
-                method: function(on) {
-                    //Dom.setStyle(this.getElement(this.ID.HSV_CONTROLS), "visibility", (on) ? "" : "hidden");
-                    _hideShowEl.call(this, this.ID.HSV_CONTROLS, on);
+                        // can't show both the hsv controls and the rbg hex summary
+                        if (on && this.get(this.OPT.SHOW_HEX_SUMMARY)) {
+                            this.set(this.OPT.SHOW_HEX_SUMMARY, false);
+                        }
+                    }
+                });
 
-                    // can't show both the hsv controls and the rbg hex summary
-                    if (on && this.get(this.OPT.SHOW_HEX_SUMMARY)) {
-                        this.set(this.OPT.SHOW_HEX_SUMMARY, false);
+            /**
+             * Hide/show the hex controls
+             * @attribute showhexcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS, {
+                    value: lang.isBoolean(attr.showhexcontrols) ?
+                                          attr.showhexcontrols : false,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.HEX_CONTROLS, on);
                     }
-                }
-            });
+                });
 
-        /**
-         * Hide/show the hex controls
-         * @attribute showhexcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS, {
-                value: lang.isBoolean(attr.showhexcontrols) ?
-                                      attr.showhexcontrols : false,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.HEX_CONTROLS, on);
-                }
-            });
+            /**
+             * Hide/show the websafe swatch
+             * @attribute showwebsafe
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_WEBSAFE, {
+                    value: lang.isBoolean(attr.showwebsafe) ? attr.showwebsafe : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.WEBSAFE_SWATCH, on);
+                    }
+                });
 
-        /**
-         * Hide/show the websafe swatch
-         * @attribute showwebsafe
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_WEBSAFE, {
-                value: lang.isBoolean(attr.showwebsafe) ? attr.showwebsafe : true,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.WEBSAFE_SWATCH, on);
-                }
-            });
+            /**
+             * Hide/show the hex summary
+             * @attribute showhexsummary
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY, {
+                    value: lang.isBoolean(attr.showhexsummary) ? attr.showhexsummary : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.HEX_SUMMARY, on);
 
-        /**
-         * Hide/show the hex summary
-         * @attribute showhexsummary
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY, {
-                value: lang.isBoolean(attr.showhexsummary) ? attr.showhexsummary : true,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.HEX_SUMMARY, on);
-
-                    // can't show both the hsv controls and the rbg hex summary
-                    if (on && this.get(this.OPT.SHOW_HSV_CONTROLS)) {
-                        this.set(this.OPT.SHOW_HSV_CONTROLS, false);
+                        // can't show both the hsv controls and the rbg hex summary
+                        if (on && this.get(this.OPT.SHOW_HSV_CONTROLS)) {
+                            this.set(this.OPT.SHOW_HSV_CONTROLS, false);
+                        }
                     }
-                }
-            });
-        this.setAttributeConfig(this.OPT.ANIMATE, {
-                value: lang.isBoolean(attr.animate) ? attr.animate : true,
-                method: function(on) {
-                    this.pickerSlider.animate = on;
-                    this.hueSlider.animate = on;
-                }
-            });
+                });
+            this.setAttributeConfig(this.OPT.ANIMATE, {
+                    value: lang.isBoolean(attr.animate) ? attr.animate : true,
+                    method: function(on) {
+                        if (this.pickerSlider) {
+                            this.pickerSlider.animate = on;
+                            this.hueSlider.animate = on;
+                        }
+                    }
+                });
 
-        this.on(this.OPT.HUE + "Change", _updateRGBFromHSV, this, true);
-        this.on(this.OPT.SATURATION + "Change", _updateRGBFromHSV, this, true);
-        this.on(this.OPT.VALUE + "Change", _updatePickerSlider, this, true);
+            this.on(this.OPT.HUE + "Change", this._updateRGBFromHSV, this, true);
+            this.on(this.OPT.SATURATION + "Change", this._updateRGBFromHSV, this, true);
+            this.on(this.OPT.VALUE + "Change", this._updateRGBFromHSV, this, true);
 
-        this.on(this.OPT.RED + "Change", _updateRGB, this, true);
-        this.on(this.OPT.GREEN + "Change", _updateRGB, this, true);
-        this.on(this.OPT.BLUE + "Change", _updateRGB, this, true);
+            this.on(this.OPT.RED + "Change", this._updateRGB, this, true);
+            this.on(this.OPT.GREEN + "Change", this._updateRGB, this, true);
+            this.on(this.OPT.BLUE + "Change", this._updateRGB, this, true);
 
-        this.on(this.OPT.HEX + "Change", _updateHex, this, true);
+            this.on(this.OPT.HEX + "Change", this._updateHex, this, true);
 
-        this.initPicker();
-    };
+            this._initElements();
+        }
+    });
 
+    YAHOO.widget.ColorPicker = ColorPicker;
 })();
-YAHOO.register("colorpicker", YAHOO.widget.ColorPicker, {version: "2.6.0", build: "1321"});
+YAHOO.register("colorpicker", YAHOO.widget.ColorPicker, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/colorpicker/colorpicker-min.js
===================================================================
--- trunk/root/static/yui/colorpicker/colorpicker-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/colorpicker-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,9 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.util.Color=function(){var A="0123456789ABCDEF",B=YAHOO.lang;return{real2dec:function(C){return Math.min(255,Math.round(C*256));},hsv2rgb:function(G,N,L){if(B.isArray(G)){return this.hsv2rgb.call(this,G[0],G[1],G[2]);}var C,H,K,F,I,E,D,M;F=Math.floor((G/60)%6);I=(G/60)-F;E=L*(1-N);D=L*(1-I*N);M=L*(1-(1-I)*N);switch(F){case 0:C=L;H=M;K=E;break;case 1:C=D;H=L;K=E;break;case 2:C=E;H=L;K=M;break;case 3:C=E;H=D;K=L;break;case 4:C=M;H=E;K=L;break;case 5:C=L;H=E;K=D;break;}var J=this.real2dec;return[J(C),J(H),J(K)];},rgb2hsv:function(C,G,H){if(B.isArray(C)){return this.rgb2hsv.call(this,C[0],C[1],C[2]);}C=C/255;G=G/255;H=H/255;var D,I,K,F,L,J;D=Math.min(Math.min(C,G),H);I=Math.max(Math.max(C,G),H);K=I-D;switch(I){case D:F=0;break;case C:F=60*(G-H)/K;if(G<H){F+=360;}break;case G:F=(60*(H-C)/K)+120;break;case H:F=(60*(C-G)/K)+240;break;}L=(I===0)?0:1-(D/I);var E=[Math.round(F),L,I];return E;},rgb2hex:function(E,D,C){if(B.isArray(E)){return this.rgb2hex.call(this,E[0],E[1],E[2])!
 ;}var F=this.dec2hex;return F(E)+F(D)+F(C);},dec2hex:function(C){C=parseInt(C,10);C=(B.isNumber(C))?C:0;C=(C>255||C<0)?0:C;return A.charAt((C-C%16)/16)+A.charAt(C%16);},hex2dec:function(E){var D=function(F){return A.indexOf(F.toUpperCase());};var C=E.split("");return((D(C[0])*16)+D(C[1]));},hex2rgb:function(C){var D=this.hex2dec;return[D(C.substr(0,2)),D(C.substr(2,2)),D(C.substr(4,2))];},websafe:function(E,D,C){if(B.isArray(E)){return this.websafe.call(this,E[0],E[1],E[2]);}var F=function(G){if(B.isNumber(G)){G=Math.min(Math.max(0,G),255);var H,I;for(H=0;H<256;H=H+51){I=H+51;if(G>=H&&G<=I){return(G-H>25)?I:H;}}}return G;};return[F(E),F(D),F(C)];}};}();(function(){var E=0;var R=function(){var b=document.createElement("div");if(this.CSS.BASE){b.className=this.CSS.BASE;}return b;};YAHOO.widget.ColorPicker=function(h,b){E=E+1;b=b||{};if(arguments.length===1&&!YAHOO.lang.isString(h)&&!h.nodeName){b=h;h=b.element||null;}if(!h&&!b.element){h=R.call(this,b);}YAHOO.widget.ColorPick!
 er.superclass.constructor.call(this,h,b);};YAHOO.extend(YAHOO.!
 widget.C
olorPicker,YAHOO.util.Element);var Q=YAHOO.widget.ColorPicker.prototype,P=YAHOO.widget.Slider,e=YAHOO.util.Color,C=YAHOO.util.Dom,f=YAHOO.util.Event,g=YAHOO.lang,J=g.substitute;var a="yui-picker";Q.ID={R:a+"-r",R_HEX:a+"-rhex",G:a+"-g",G_HEX:a+"-ghex",B:a+"-b",B_HEX:a+"-bhex",H:a+"-h",S:a+"-s",V:a+"-v",PICKER_BG:a+"-bg",PICKER_THUMB:a+"-thumb",HUE_BG:a+"-hue-bg",HUE_THUMB:a+"-hue-thumb",HEX:a+"-hex",SWATCH:a+"-swatch",WEBSAFE_SWATCH:a+"-websafe-swatch",CONTROLS:a+"-controls",RGB_CONTROLS:a+"-rgb-controls",HSV_CONTROLS:a+"-hsv-controls",HEX_CONTROLS:a+"-hex-controls",HEX_SUMMARY:a+"-hex-summary",CONTROLS_LABEL:a+"-controls-label"};Q.TXT={ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"};Q.IMAGE={PICKER_THUMB:"../../build/colorpicker/asse!
 ts/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"};Q.DEFAULT={PICKER_SIZE:180};Q.OPT={HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcontrols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"};var S=function(){var b=this.get(this.OPT.PICKER_SIZE),i=this.get(this.OPT.HUE);i=b-Math.round(i/360*b);if(i===b){i=0;}this.hueSlider.setValue(i);};var d=function(){var h=this.get(this.OPT.PICKER_SIZE),i=this.get(this.OPT.SATURATION),b=this.get(this.OPT.VALUE);i=Math.round(i*h/100);b=Math.round(h-(b*h/100));this.pickerSlider.setRegionValue(i,b);};var T=function(){S.call(this);d.call(this);};Q.setValue=function(h,b){b=(b!
 )||false;this.set(this.OPT.RGB,h,b);T.call(this);};Q.hueSlider!
 =null;Q.
pickerSlider=null;var X=function(){var b=this.get(this.OPT.PICKER_SIZE),i=(b-this.hueSlider.getValue())/b;i=Math.round(i*360);return(i===360)?0:i;};var O=function(){return this.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);};var N=function(){var b=this.get(this.OPT.PICKER_SIZE);return(b-this.pickerSlider.getYValue())/b;};var M=function(){var i=this.get(this.OPT.RGB),k=this.get(this.OPT.WEBSAFE),j=this.getElement(this.ID.SWATCH),h=i.join(","),b=this.get(this.OPT.TXT);C.setStyle(j,"background-color","rgb("+h+")");j.title=g.substitute(b.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});j=this.getElement(this.ID.WEBSAFE_SWATCH);h=k.join(",");C.setStyle(j,"background-color","rgb("+h+")");j.title=g.substitute(b.CLOSEST_WEBSAFE,{"rgb":"#"+e.rgb2hex(k)});};var Z=function(){var k=X.call(this),j=O.call(this),b=N.call(this);var i=e.hsv2rgb(k,j,b);this.set(this.OPT.RGB,i);};var B=function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).valu!
 e=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML=e.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=e.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=e.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);};var Y=function(k){var i=X.call(this);this.set(this.OPT.HUE,i,true);var b=e.hsv2rgb(i,1,1);var j="rgb("+b.join(",")+")";C.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",j);if(this.hueSlider.valueChangeSource===this.hueSlider.SOURCE_UI_EVENT){Z.call(this);}B.call(this);M.call(this);};var H=function(i){var h=O.call(this),b=N.call(this);this.set(this.OPT.SATURATION,Math.round(h*100),true);
-this.set(this.OPT.VALUE,Math.round(b*100),true);if(this.pickerSlider.valueChangeSource===this.pickerSlider.SOURCE_UI_EVENT){Z.call(this);}B.call(this);M.call(this);};var W=function(b){var h=f.getCharCode(b);if(h===38){return 3;}else{if(h===13){return 6;}else{if(h===40){return 4;}else{if(h>=48&&h<=57){return 1;}else{if(h>=97&&h<=102){return 2;}else{if(h>=65&&h<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(h)>-1){return 5;}else{return 0;}}}}}}}};var I=function(h,b,j){var i=b.value;if(j!==this.OPT.HEX){i=parseInt(i,10);}if(i!==this.get(j)){this.set(j,i);}};var G=function(i,b,k){var j=W(i);var h=(i.shiftKey)?10:1;switch(j){case 6:I.apply(this,arguments);break;case 3:this.set(k,Math.min(this.get(k)+h,255));B.call(this);break;case 4:this.set(k,Math.max(this.get(k)-h,0));B.call(this);break;default:}};var A=function(h,b,j){var i=W(h);if(i===6){I.apply(this,arguments);}};var L=function(h,b){var i=W(h);switch(i){case 6:case 5:case 1:break;case 2:if(b!==true){break;}default:f.!
 stopEvent(h);return false;}};var K=function(b){return L(b,true);};Q.getElement=function(b){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[b]];};var D=function(){var k,j,n,l,m,b=this.get(this.OPT.IDS),o=this.get(this.OPT.TXT),r=this.get(this.OPT.IMAGES),q=function(i,p){var t=document.createElement(i);if(p){g.augmentObject(t,p,true);}return t;},s=function(i,p){var t=g.merge({autocomplete:"off",value:"0",size:3,maxlength:3},p);t.name=t.id;return new q(i,t);};var h=this.get("element");k=new q("div",{id:b[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});j=new q("div",{id:b[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});n=new q("img",{src:r.PICKER_THUMB});j.appendChild(n);k.appendChild(j);h.appendChild(k);k=new q("div",{id:b[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});j=new q("div",{id:b[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"});n=new q("img",{src:r.HUE_THUMB});j.appendChild(n);k.appendChild(j);h!
 .appendChild(k);k=new q("div",{id:b[this.ID.CONTROLS],classNam!
 e:"yui-p
icker-controls"});h.appendChild(k);h=k;k=new q("div",{className:"hd"});j=new q("a",{id:b[this.ID.CONTROLS_LABEL],href:"#"});k.appendChild(j);h.appendChild(k);k=new q("div",{className:"bd"});h.appendChild(k);h=k;k=new q("ul",{id:b[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});j=new q("li");j.appendChild(document.createTextNode(o.R+" "));l=new s("input",{id:b[this.ID.R],className:"yui-picker-r"});j.appendChild(l);k.appendChild(j);j=new q("li");j.appendChild(document.createTextNode(o.G+" "));l=new s("input",{id:b[this.ID.G],className:"yui-picker-g"});j.appendChild(l);k.appendChild(j);j=new q("li");j.appendChild(document.createTextNode(o.B+" "));l=new s("input",{id:b[this.ID.B],className:"yui-picker-b"});j.appendChild(l);k.appendChild(j);h.appendChild(k);k=new q("ul",{id:b[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});j=new q("li");j.appendChild(document.createTextNode(o.H+" "));l=new s("input",{id:b[this.ID.H],className:"yui-picker-h"});j.appendChild!
 (l);j.appendChild(document.createTextNode(" "+o.DEG));k.appendChild(j);j=new q("li");j.appendChild(document.createTextNode(o.S+" "));l=new s("input",{id:b[this.ID.S],className:"yui-picker-s"});j.appendChild(l);j.appendChild(document.createTextNode(" "+o.PERCENT));k.appendChild(j);j=new q("li");j.appendChild(document.createTextNode(o.V+" "));l=new s("input",{id:b[this.ID.V],className:"yui-picker-v"});j.appendChild(l);j.appendChild(document.createTextNode(" "+o.PERCENT));k.appendChild(j);h.appendChild(k);k=new q("ul",{id:b[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});j=new q("li",{id:b[this.ID.R_HEX]});k.appendChild(j);j=new q("li",{id:b[this.ID.G_HEX]});k.appendChild(j);j=new q("li",{id:b[this.ID.B_HEX]});k.appendChild(j);h.appendChild(k);k=new q("div",{id:b[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});k.appendChild(document.createTextNode(o.HEX+" "));j=new s("input",{id:b[this.ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});k.appendChild(!
 j);h.appendChild(k);h=this.get("element");k=new q("div",{id:b[!
 this.ID.
SWATCH],className:"yui-picker-swatch"});h.appendChild(k);k=new q("div",{id:b[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});h.appendChild(k);};var c=function(h,b){f.on(this.getElement(h),"keydown",function(j,i){G.call(i,j,this,b);},this);f.on(this.getElement(h),"keypress",K,this);f.on(this.getElement(h),"blur",function(j,i){I.call(i,j,this,b);},this);};var F=function(){var b=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,b);T.call(this);};Q.initPicker=function(){var m=this.OPT,l=this.get(m.IDS),h=this.get(m.ELEMENTS),b,k,n;for(b in this.ID){if(g.hasOwnProperty(this.ID,b)){l[this.ID[b]]=l[b];}}k=C.get(l[this.ID.PICKER_BG]);if(!k){D.call(this);}else{}for(b in l){if(g.hasOwnProperty(l,b)){k=C.get(l[b]);n=C.generateId(k);l[b]=n;l[l[b]]=n;h[n]=k;}}h=[m.SHOW_CONTROLS,m.SHOW_RGB_CONTROLS,m.SHOW_HSV_CONTROLS,m.SHOW_HEX_CONTROLS,m.SHOW_HEX_SUMMARY,m.SHOW_WEBSAFE];for(b=0;b<h.length;b=b+1){this.set(h[b],this.get(h[b]));!
 }var j=this.get(m.PICKER_SIZE);this.hueSlider=P.getVertSlider(this.getElement(this.ID.HUE_BG),this.getElement(this.ID.HUE_THUMB),0,j);this.hueSlider.subscribe("change",Y,this,true);this.pickerSlider=P.getSliderRegion(this.getElement(this.ID.PICKER_BG),this.getElement(this.ID.PICKER_THUMB),0,j,0,j);this.pickerSlider.subscribe("change",H,this,true);this.set(m.ANIMATE,this.get(m.ANIMATE));f.on(this.getElement(this.ID.WEBSAFE_SWATCH),"click",function(i){this.setValue(this.get(m.WEBSAFE));},this,true);f.on(this.getElement(this.ID.CONTROLS_LABEL),"click",function(i){this.set(m.SHOW_CONTROLS,!this.get(m.SHOW_CONTROLS));f.preventDefault(i);},this,true);c.call(this,this.ID.R,this.OPT.RED);c.call(this,this.ID.G,this.OPT.GREEN);c.call(this,this.ID.B,this.OPT.BLUE);c.call(this,this.ID.H,this.OPT.HUE);c.call(this,this.ID.S,this.OPT.SATURATION);c.call(this,this.ID.V,this.OPT.VALUE);f.on(this.getElement(this.ID.HEX),"keydown",function(o,i){A.call(i,o,this,i.OPT.HEX);
-},this);f.on(this.getElement(this.ID.HEX),"keypress",L,this);f.on(this.getElement(this.ID.HEX),"blur",function(o,i){I.call(i,o,this,i.OPT.HEX);},this);F.call(this);};var U=function(){var h=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100];var b=e.hsv2rgb(h);this.set(this.OPT.RGB,b);T.call(this);};var V=function(){var k=this.get(this.OPT.HEX),b=k.length;if(b===3){var m=k.split(""),j;for(j=0;j<b;j=j+1){m[j]=m[j]+m[j];}k=m.join("");}if(k.length!==6){return false;}var h=e.hex2rgb(k);this.setValue(h);};Q.initAttributes=function(b){b=b||{};YAHOO.widget.ColorPicker.superclass.initAttributes.call(this,b);this.setAttributeConfig(this.OPT.PICKER_SIZE,{value:b.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:b.hue||0,validator:g.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:b.saturation||0,validator:g.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:g.isNumber(b.value)?b.value:100,validator:g.isN!
 umber});this.setAttributeConfig(this.OPT.RED,{value:g.isNumber(b.red)?b.red:255,validator:g.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:g.isNumber(b.green)?b.green:255,validator:g.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:g.isNumber(b.blue)?b.blue:255,validator:g.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:b.hex||"FFFFFF",validator:g.isString});this.setAttributeConfig(this.OPT.RGB,{value:b.rgb||[255,255,255],method:function(l){this.set(this.OPT.RED,l[0],true);this.set(this.OPT.GREEN,l[1],true);this.set(this.OPT.BLUE,l[2],true);var n=e.websafe(l);this.set(this.OPT.WEBSAFE,n,true);var m=e.rgb2hex(l);this.set(this.OPT.HEX,m,true);var i=e.rgb2hsv(l);this.set(this.OPT.HUE,i[0],true);this.set(this.OPT.SATURATION,Math.round(i[1]*100),true);this.set(this.OPT.VALUE,Math.round(i[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(i){if(i){i.showEvent.subscribe(function(){this.pickerSlider.focus()!
 ;},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{v!
 alue:b.w
ebsafe||[255,255,255]});var j=b.ids||g.merge({},this.ID);if(!b.ids&&E>1){for(var h in j){if(g.hasOwnProperty(j,h)){j[h]=j[h]+E;}}}this.setAttributeConfig(this.OPT.IDS,{value:j,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:b.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:b.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});var k=function(m,i){var l=(g.isString(m)?this.getElement(m):m);C.setStyle(l,"display",(i)?"":"none");};this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:g.isBoolean(b.showcontrols)?b.showcontrols:true,method:function(i){var l=C.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];k.call(this,l,i);this.getElement(this.ID.CONTROLS_LABEL).innerHTML=(i)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:g.isBoolean(b.showrgbcontrols)?b.showrgbcontrols:true,m!
 ethod:function(i){k.call(this,this.ID.RGB_CONTROLS,i);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:g.isBoolean(b.showhsvcontrols)?b.showhsvcontrols:false,method:function(i){k.call(this,this.ID.HSV_CONTROLS,i);if(i&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:g.isBoolean(b.showhexcontrols)?b.showhexcontrols:false,method:function(i){k.call(this,this.ID.HEX_CONTROLS,i);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:g.isBoolean(b.showwebsafe)?b.showwebsafe:true,method:function(i){k.call(this,this.ID.WEBSAFE_SWATCH,i);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:g.isBoolean(b.showhexsummary)?b.showhexsummary:true,method:function(i){k.call(this,this.ID.HEX_SUMMARY,i);if(i&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:g.isBoolean(b.animate)?b.animate:true!
 ,method:function(i){this.pickerSlider.animate=i;this.hueSlider!
 .animate
=i;}});this.on(this.OPT.HUE+"Change",U,this,true);this.on(this.OPT.SATURATION+"Change",U,this,true);this.on(this.OPT.VALUE+"Change",d,this,true);this.on(this.OPT.RED+"Change",F,this,true);this.on(this.OPT.GREEN+"Change",F,this,true);this.on(this.OPT.BLUE+"Change",F,this,true);this.on(this.OPT.HEX+"Change",V,this,true);this.initPicker();};})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.util.Color=function(){var A="0",B=YAHOO.lang.isArray,C=YAHOO.lang.isNumber;return{real2dec:function(D){return Math.min(255,Math.round(D*256));},hsv2rgb:function(H,O,M){if(B(H)){return this.hsv2rgb.call(this,H[0],H[1],H[2]);}var D,I,L,G=Math.floor((H/60)%6),J=(H/60)-G,F=M*(1-O),E=M*(1-J*O),N=M*(1-(1-J)*O),K;switch(G){case 0:D=M;I=N;L=F;break;case 1:D=E;I=M;L=F;break;case 2:D=F;I=M;L=N;break;case 3:D=F;I=E;L=M;break;case 4:D=N;I=F;L=M;break;case 5:D=M;I=F;L=E;break;}K=this.real2dec;return[K(D),K(I),K(L)];},rgb2hsv:function(D,H,I){if(B(D)){return this.rgb2hsv.apply(this,D);}D/=255;H/=255;I/=255;var G,L,E=Math.min(Math.min(D,H),I),J=Math.max(Math.max(D,H),I),K=J-E,F;switch(J){case E:G=0;break;case D:G=60*(H-I)/K;if(H<I){G+=360;}break;case H:G=(60*(I-D)/K)+120;break;case I:G=(60*(D-H)/K)+240;break;}L=(J===0)?0:1-(E/J);F=[Math.round(G),L,J];return F;},rgb2hex:function(F,E,D){if(B(F)){return this.rgb2hex.apply(this,F);}var G=this.dec2hex;return G(F)+G(E)+G(D);},dec2hex:funct!
 ion(D){D=parseInt(D,10)|0;D=(D>255||D<0)?0:D;return(A+D.toString(16)).slice(-2).toUpperCase();},hex2dec:function(D){return parseInt(D,16);},hex2rgb:function(D){var E=this.hex2dec;return[E(D.slice(0,2)),E(D.slice(2,4)),E(D.slice(4,6))];},websafe:function(F,E,D){if(B(F)){return this.websafe.apply(this,F);}var G=function(H){if(C(H)){H=Math.min(Math.max(0,H),255);var I,J;for(I=0;I<256;I=I+51){J=I+51;if(H>=I&&H<=J){return(H-I>25)?J:I;}}}return H;};return[G(F),G(E),G(D)];}};}();(function(){var J=0,F=YAHOO.util,C=YAHOO.lang,D=YAHOO.widget.Slider,B=F.Color,E=F.Dom,I=F.Event,A=C.substitute,H="yui-picker";function G(L,K){J=J+1;K=K||{};if(arguments.length===1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createHostElement(K);}G.superclass.constructor.call(this,L,K);this.initPicker();}YAHOO.extend(G,YAHOO.util.Element,{ID:{R:H+"-r",R_HEX:H+"-rhex",G:H+"-g",G_HEX:H+"-ghex",B:H+"-b",B_HEX:H+"-bhex",H:H+"-h",S:H+"-s",V:H+"-v",PICKER_BG:H+"-bg",PI!
 CKER_THUMB:H+"-thumb",HUE_BG:H+"-hue-bg",HUE_THUMB:H+"-hue-thu!
 mb",HEX:
H+"-hex",SWATCH:H+"-swatch",WEBSAFE_SWATCH:H+"-websafe-swatch",CONTROLS:H+"-controls",RGB_CONTROLS:H+"-rgb-controls",HSV_CONTROLS:H+"-hsv-controls",HEX_CONTROLS:H+"-hex-controls",HEX_SUMMARY:H+"-hex-summary",CONTROLS_LABEL:H+"-controls-label"},TXT:{ILLEGAL_HEX:"Illegal hex value entered",SHOW_CONTROLS:"Show color details",HIDE_CONTROLS:"Hide color details",CURRENT_COLOR:"Currently selected color: {rgb}",CLOSEST_WEBSAFE:"Closest websafe color: {rgb}. Click to select.",R:"R",G:"G",B:"B",H:"H",S:"S",V:"V",HEX:"#",DEG:"\u00B0",PERCENT:"%"},IMAGE:{PICKER_THUMB:"../../build/colorpicker/assets/picker_thumb.png",HUE_THUMB:"../../build/colorpicker/assets/hue_thumb.png"},DEFAULT:{PICKER_SIZE:180},OPT:{HUE:"hue",SATURATION:"saturation",VALUE:"value",RED:"red",GREEN:"green",BLUE:"blue",HSV:"hsv",RGB:"rgb",WEBSAFE:"websafe",HEX:"hex",PICKER_SIZE:"pickersize",SHOW_CONTROLS:"showcontrols",SHOW_RGB_CONTROLS:"showrgbcontrols",SHOW_HSV_CONTROLS:"showhsvcontrols",SHOW_HEX_CONTROLS:"showhexcont!
 rols",SHOW_HEX_SUMMARY:"showhexsummary",SHOW_WEBSAFE:"showwebsafe",CONTAINER:"container",IDS:"ids",ELEMENTS:"elements",TXT:"txt",IMAGES:"images",ANIMATE:"animate"},skipAnim:true,_createHostElement:function(){var K=document.createElement("div");if(this.CSS.BASE){K.className=this.CSS.BASE;}return K;},_updateHueSlider:function(){var K=this.get(this.OPT.PICKER_SIZE),L=this.get(this.OPT.HUE);L=K-Math.round(L/360*K);if(L===K){L=0;}this.hueSlider.setValue(L,this.skipAnim);},_updatePickerSlider:function(){var L=this.get(this.OPT.PICKER_SIZE),M=this.get(this.OPT.SATURATION),K=this.get(this.OPT.VALUE);M=Math.round(M*L/100);K=Math.round(L-(K*L/100));this.pickerSlider.setRegionValue(M,K,this.skipAnim);},_updateSliders:function(){this._updateHueSlider();this._updatePickerSlider();},setValue:function(L,K){K=(K)||false;this.set(this.OPT.RGB,L,K);this._updateSliders();},hueSlider:null,pickerSlider:null,_getH:function(){var K=this.get(this.OPT.PICKER_SIZE),L=(K-this.hueSlider.getValue())/K;!
 L=Math.round(L*360);return(L===360)?0:L;},_getS:function(){ret!
 urn this
.pickerSlider.getXValue()/this.get(this.OPT.PICKER_SIZE);},_getV:function(){var K=this.get(this.OPT.PICKER_SIZE);return(K-this.pickerSlider.getYValue())/K;},_updateSwatch:function(){var M=this.get(this.OPT.RGB),O=this.get(this.OPT.WEBSAFE),N=this.getElement(this.ID.SWATCH),L=M.join(","),K=this.get(this.OPT.TXT);E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CURRENT_COLOR,{"rgb":"#"+this.get(this.OPT.HEX)});N=this.getElement(this.ID.WEBSAFE_SWATCH);L=O.join(",");E.setStyle(N,"background-color","rgb("+L+")");N.title=A(K.CLOSEST_WEBSAFE,{"rgb":"#"+B.rgb2hex(O)});},_getValuesFromSliders:function(){this.set(this.OPT.RGB,B.hsv2rgb(this._getH(),this._getS(),this._getV()));},_updateFormFields:function(){this.getElement(this.ID.H).value=this.get(this.OPT.HUE);this.getElement(this.ID.S).value=this.get(this.OPT.SATURATION);this.getElement(this.ID.V).value=this.get(this.OPT.VALUE);this.getElement(this.ID.R).value=this.get(this.OPT.RED);this.getElement(this.ID.R_HEX).innerHTML!
 =B.dec2hex(this.get(this.OPT.RED));this.getElement(this.ID.G).value=this.get(this.OPT.GREEN);this.getElement(this.ID.G_HEX).innerHTML=B.dec2hex(this.get(this.OPT.GREEN));this.getElement(this.ID.B).value=this.get(this.OPT.BLUE);this.getElement(this.ID.B_HEX).innerHTML=B.dec2hex(this.get(this.OPT.BLUE));this.getElement(this.ID.HEX).value=this.get(this.OPT.HEX);},_onHueSliderChange:function(N){var L=this._getH(),K=B.hsv2rgb(L,1,1),M="rgb("+K.join(",")+")";this.set(this.OPT.HUE,L,true);E.setStyle(this.getElement(this.ID.PICKER_BG),"background-color",M);if(this.hueSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();}this._updateFormFields();this._updateSwatch();},_onPickerSliderChange:function(M){var L=this._getS(),K=this._getV();this.set(this.OPT.SATURATION,Math.round(L*100),true);this.set(this.OPT.VALUE,Math.round(K*100),true);if(this.pickerSlider.valueChangeSource!==D.SOURCE_SET_VALUE){this._getValuesFromSliders();
+}this._updateFormFields();this._updateSwatch();},_getCommand:function(K){var L=I.getCharCode(K);if(L===38){return 3;}else{if(L===13){return 6;}else{if(L===40){return 4;}else{if(L>=48&&L<=57){return 1;}else{if(L>=97&&L<=102){return 2;}else{if(L>=65&&L<=70){return 2;}else{if("8, 9, 13, 27, 37, 39".indexOf(L)>-1||K.ctrlKey||K.metaKey){return 5;}else{return 0;}}}}}}}},_useFieldValue:function(L,K,N){var M=K.value;if(N!==this.OPT.HEX){M=parseInt(M,10);}if(M!==this.get(N)){this.set(N,M);}},_rgbFieldKeypress:function(M,K,O){var N=this._getCommand(M),L=(M.shiftKey)?10:1;switch(N){case 6:this._useFieldValue.apply(this,arguments);break;case 3:this.set(O,Math.min(this.get(O)+L,255));this._updateFormFields();break;case 4:this.set(O,Math.max(this.get(O)-L,0));this._updateFormFields();break;default:}},_hexFieldKeypress:function(L,K,N){var M=this._getCommand(L);if(M===6){this._useFieldValue.apply(this,arguments);}},_hexOnly:function(L,K){var M=this._getCommand(L);switch(M){case 6:case 5:ca!
 se 1:break;case 2:if(K!==true){break;}default:I.stopEvent(L);return false;}},_numbersOnly:function(K){return this._hexOnly(K,true);},getElement:function(K){return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[K]];},_createElements:function(){var N,M,P,O,L,K=this.get(this.OPT.IDS),Q=this.get(this.OPT.TXT),S=this.get(this.OPT.IMAGES),R=function(U,V){var W=document.createElement(U);if(V){C.augmentObject(W,V,true);}return W;},T=function(U,V){var W=C.merge({autocomplete:"off",value:"0",size:3,maxlength:3},V);W.name=W.id;return new R(U,W);};L=this.get("element");N=new R("div",{id:K[this.ID.PICKER_BG],className:"yui-picker-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.PICKER_THUMB],className:"yui-picker-thumb"});P=new R("img",{src:S.PICKER_THUMB});M.appendChild(P);N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HUE_BG],className:"yui-picker-hue-bg",tabIndex:-1,hideFocus:true});M=new R("div",{id:K[this.ID.HUE_THUMB],className:"yui-picker-hue-thumb"!
 });P=new R("img",{src:S.HUE_THUMB});M.appendChild(P);N.appendC!
 hild(M);
L.appendChild(N);N=new R("div",{id:K[this.ID.CONTROLS],className:"yui-picker-controls"});L.appendChild(N);L=N;N=new R("div",{className:"hd"});M=new R("a",{id:K[this.ID.CONTROLS_LABEL],href:"#"});N.appendChild(M);L.appendChild(N);N=new R("div",{className:"bd"});L.appendChild(N);L=N;N=new R("ul",{id:K[this.ID.RGB_CONTROLS],className:"yui-picker-rgb-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.R+" "));O=new T("input",{id:K[this.ID.R],className:"yui-picker-r"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.G+" "));O=new T("input",{id:K[this.ID.G],className:"yui-picker-g"});M.appendChild(O);N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.B+" "));O=new T("input",{id:K[this.ID.B],className:"yui-picker-b"});M.appendChild(O);N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HSV_CONTROLS],className:"yui-picker-hsv-controls"});M=new R("li");M.appendChild(document.createTextNode(Q.H+" "));O=!
 new T("input",{id:K[this.ID.H],className:"yui-picker-h"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.DEG));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.S+" "));O=new T("input",{id:K[this.ID.S],className:"yui-picker-s"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);M=new R("li");M.appendChild(document.createTextNode(Q.V+" "));O=new T("input",{id:K[this.ID.V],className:"yui-picker-v"});M.appendChild(O);M.appendChild(document.createTextNode(" "+Q.PERCENT));N.appendChild(M);L.appendChild(N);N=new R("ul",{id:K[this.ID.HEX_SUMMARY],className:"yui-picker-hex_summary"});M=new R("li",{id:K[this.ID.R_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.G_HEX]});N.appendChild(M);M=new R("li",{id:K[this.ID.B_HEX]});N.appendChild(M);L.appendChild(N);N=new R("div",{id:K[this.ID.HEX_CONTROLS],className:"yui-picker-hex-controls"});N.appendChild(document.createTextNode(Q.HEX+" "));M=new T("input",{id:K[this!
 .ID.HEX],className:"yui-picker-hex",size:6,maxlength:6});N.app!
 endChild
(M);L.appendChild(N);L=this.get("element");N=new R("div",{id:K[this.ID.SWATCH],className:"yui-picker-swatch"});L.appendChild(N);N=new R("div",{id:K[this.ID.WEBSAFE_SWATCH],className:"yui-picker-websafe-swatch"});L.appendChild(N);},_attachRGBHSV:function(L,K){I.on(this.getElement(L),"keydown",function(N,M){M._rgbFieldKeypress(N,this,K);},this);I.on(this.getElement(L),"keypress",this._numbersOnly,this,true);I.on(this.getElement(L),"blur",function(N,M){M._useFieldValue(N,this,K);},this);},_updateRGB:function(){var K=[this.get(this.OPT.RED),this.get(this.OPT.GREEN),this.get(this.OPT.BLUE)];this.set(this.OPT.RGB,K);this._updateSliders();},_initElements:function(){var O=this.OPT,N=this.get(O.IDS),L=this.get(O.ELEMENTS),K,M,P;for(K in this.ID){if(C.hasOwnProperty(this.ID,K)){N[this.ID[K]]=N[K];}}M=E.get(N[this.ID.PICKER_BG]);if(!M){this._createElements();}else{}for(K in N){if(C.hasOwnProperty(N,K)){M=E.get(N[K]);P=E.generateId(M);N[K]=P;N[N[K]]=P;L[P]=M;}}},initPicker:function(){th!
 is._initSliders();this._bindUI();this.syncUI(true);},_initSliders:function(){var K=this.ID,L=this.get(this.OPT.PICKER_SIZE);this.hueSlider=D.getVertSlider(this.getElement(K.HUE_BG),this.getElement(K.HUE_THUMB),0,L);this.pickerSlider=D.getSliderRegion(this.getElement(K.PICKER_BG),this.getElement(K.PICKER_THUMB),0,L,0,L);this.set(this.OPT.ANIMATE,this.get(this.OPT.ANIMATE));},_bindUI:function(){var K=this.ID,L=this.OPT;this.hueSlider.subscribe("change",this._onHueSliderChange,this,true);this.pickerSlider.subscribe("change",this._onPickerSliderChange,this,true);I.on(this.getElement(K.WEBSAFE_SWATCH),"click",function(M){this.setValue(this.get(L.WEBSAFE));},this,true);I.on(this.getElement(K.CONTROLS_LABEL),"click",function(M){this.set(L.SHOW_CONTROLS,!this.get(L.SHOW_CONTROLS));I.preventDefault(M);},this,true);this._attachRGBHSV(K.R,L.RED);this._attachRGBHSV(K.G,L.GREEN);this._attachRGBHSV(K.B,L.BLUE);this._attachRGBHSV(K.H,L.HUE);
+this._attachRGBHSV(K.S,L.SATURATION);this._attachRGBHSV(K.V,L.VALUE);I.on(this.getElement(K.HEX),"keydown",function(N,M){M._hexFieldKeypress(N,this,L.HEX);},this);I.on(this.getElement(this.ID.HEX),"keypress",this._hexOnly,this,true);I.on(this.getElement(this.ID.HEX),"blur",function(N,M){M._useFieldValue(N,this,L.HEX);},this);},syncUI:function(K){this.skipAnim=K;this._updateRGB();this.skipAnim=false;},_updateRGBFromHSV:function(){var L=[this.get(this.OPT.HUE),this.get(this.OPT.SATURATION)/100,this.get(this.OPT.VALUE)/100],K=B.hsv2rgb(L);this.set(this.OPT.RGB,K);this._updateSliders();},_updateHex:function(){var N=this.get(this.OPT.HEX),K=N.length,O,M,L;if(K===3){O=N.split("");for(M=0;M<K;M=M+1){O[M]=O[M]+O[M];}N=O.join("");}if(N.length!==6){return false;}L=B.hex2rgb(N);this.setValue(L);},_hideShowEl:function(M,K){var L=(C.isString(M)?this.getElement(M):M);E.setStyle(L,"display",(K)?"":"none");},initAttributes:function(K){K=K||{};G.superclass.initAttributes.call(this,K);this.s!
 etAttributeConfig(this.OPT.PICKER_SIZE,{value:K.size||this.DEFAULT.PICKER_SIZE});this.setAttributeConfig(this.OPT.HUE,{value:K.hue||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.SATURATION,{value:K.saturation||0,validator:C.isNumber});this.setAttributeConfig(this.OPT.VALUE,{value:C.isNumber(K.value)?K.value:100,validator:C.isNumber});this.setAttributeConfig(this.OPT.RED,{value:C.isNumber(K.red)?K.red:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.GREEN,{value:C.isNumber(K.green)?K.green:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.BLUE,{value:C.isNumber(K.blue)?K.blue:255,validator:C.isNumber});this.setAttributeConfig(this.OPT.HEX,{value:K.hex||"FFFFFF",validator:C.isString});this.setAttributeConfig(this.OPT.RGB,{value:K.rgb||[255,255,255],method:function(O){this.set(this.OPT.RED,O[0],true);this.set(this.OPT.GREEN,O[1],true);this.set(this.OPT.BLUE,O[2],true);var Q=B.websafe(O),P=B.rgb2hex(O),N=B.rgb2hsv(O);this.set(this.OPT.WEBSAFE,Q,!
 true);this.set(this.OPT.HEX,P,true);if(N[1]){this.set(this.OPT!
 .HUE,N[0
],true);}this.set(this.OPT.SATURATION,Math.round(N[1]*100),true);this.set(this.OPT.VALUE,Math.round(N[2]*100),true);},readonly:true});this.setAttributeConfig(this.OPT.CONTAINER,{value:null,method:function(N){if(N){N.showEvent.subscribe(function(){this.pickerSlider.focus();},this,true);}}});this.setAttributeConfig(this.OPT.WEBSAFE,{value:K.websafe||[255,255,255]});var M=K.ids||C.merge({},this.ID),L;if(!K.ids&&J>1){for(L in M){if(C.hasOwnProperty(M,L)){M[L]=M[L]+J;}}}this.setAttributeConfig(this.OPT.IDS,{value:M,writeonce:true});this.setAttributeConfig(this.OPT.TXT,{value:K.txt||this.TXT,writeonce:true});this.setAttributeConfig(this.OPT.IMAGES,{value:K.images||this.IMAGE,writeonce:true});this.setAttributeConfig(this.OPT.ELEMENTS,{value:{},readonly:true});this.setAttributeConfig(this.OPT.SHOW_CONTROLS,{value:C.isBoolean(K.showcontrols)?K.showcontrols:true,method:function(N){var O=E.getElementsByClassName("bd","div",this.getElement(this.ID.CONTROLS))[0];this._hideShowEl(O,N);thi!
 s.getElement(this.ID.CONTROLS_LABEL).innerHTML=(N)?this.get(this.OPT.TXT).HIDE_CONTROLS:this.get(this.OPT.TXT).SHOW_CONTROLS;}});this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS,{value:C.isBoolean(K.showrgbcontrols)?K.showrgbcontrols:true,method:function(N){this._hideShowEl(this.ID.RGB_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS,{value:C.isBoolean(K.showhsvcontrols)?K.showhsvcontrols:false,method:function(N){this._hideShowEl(this.ID.HSV_CONTROLS,N);if(N&&this.get(this.OPT.SHOW_HEX_SUMMARY)){this.set(this.OPT.SHOW_HEX_SUMMARY,false);}}});this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS,{value:C.isBoolean(K.showhexcontrols)?K.showhexcontrols:false,method:function(N){this._hideShowEl(this.ID.HEX_CONTROLS,N);}});this.setAttributeConfig(this.OPT.SHOW_WEBSAFE,{value:C.isBoolean(K.showwebsafe)?K.showwebsafe:true,method:function(N){this._hideShowEl(this.ID.WEBSAFE_SWATCH,N);}});this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY,{value:C.isBoolean(K.showhex!
 summary)?K.showhexsummary:true,method:function(N){this._hideSh!
 owEl(thi
s.ID.HEX_SUMMARY,N);if(N&&this.get(this.OPT.SHOW_HSV_CONTROLS)){this.set(this.OPT.SHOW_HSV_CONTROLS,false);}}});this.setAttributeConfig(this.OPT.ANIMATE,{value:C.isBoolean(K.animate)?K.animate:true,method:function(N){if(this.pickerSlider){this.pickerSlider.animate=N;this.hueSlider.animate=N;}}});this.on(this.OPT.HUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.SATURATION+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.VALUE+"Change",this._updateRGBFromHSV,this,true);this.on(this.OPT.RED+"Change",this._updateRGB,this,true);this.on(this.OPT.GREEN+"Change",this._updateRGB,this,true);this.on(this.OPT.BLUE+"Change",this._updateRGB,this,true);this.on(this.OPT.HEX+"Change",this._updateHex,this,true);this._initElements();}});YAHOO.widget.ColorPicker=G;})();YAHOO.register("colorpicker",YAHOO.widget.ColorPicker,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/colorpicker/colorpicker.js
===================================================================
--- trunk/root/static/yui/colorpicker/colorpicker.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/colorpicker/colorpicker.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides color conversion and validation utils
@@ -11,7 +11,9 @@
  */
 YAHOO.util.Color = function() {
 
-    var HCHARS="0123456789ABCDEF", lang=YAHOO.lang;
+    var ZERO     = "0",
+        isArray  = YAHOO.lang.isArray,
+        isNumber = YAHOO.lang.isNumber;
 
     return {
 
@@ -37,17 +39,19 @@
          */
         hsv2rgb: function(h, s, v) { 
 
-            if (lang.isArray(h)) {
+            if (isArray(h)) {
                 return this.hsv2rgb.call(this, h[0], h[1], h[2]);
             }
 
-            var r, g, b, i, f, p, q, t;
-            i = Math.floor((h/60)%6);
-            f = (h/60)-i;
-            p = v*(1-s);
-            q = v*(1-f*s);
-            t = v*(1-(1-f)*s);
-            switch(i) {
+            var r, g, b,
+                i = Math.floor((h/60)%6),
+                f = (h/60)-i,
+                p = v*(1-s),
+                q = v*(1-f*s),
+                t = v*(1-(1-f)*s),
+                fn;
+
+            switch (i) {
                 case 0: r=v; g=t; b=p; break;
                 case 1: r=q; g=v; b=p; break;
                 case 2: r=p; g=v; b=t; break;
@@ -56,7 +60,7 @@
                 case 5: r=v; g=p; b=q; break;
             }
 
-            var fn=this.real2dec;
+            fn=this.real2dec;
 
             return [fn(r), fn(g), fn(b)];
         },
@@ -72,18 +76,19 @@
          */
         rgb2hsv: function(r, g, b) {
 
-            if (lang.isArray(r)) {
-                return this.rgb2hsv.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.rgb2hsv.apply(this, r);
             }
 
-            r=r/255;
-            g=g/255;
-            b=b/255;
+            r /= 255;
+            g /= 255;
+            b /= 255;
 
-            var min,max,delta,h,s,v;
-            min = Math.min(Math.min(r,g),b);
-            max = Math.max(Math.max(r,g),b);
-            delta = max-min;
+            var h,s,
+                min = Math.min(Math.min(r,g),b),
+                max = Math.max(Math.max(r,g),b),
+                delta = max-min,
+                hsv;
 
             switch (max) {
                 case min: h=0; break;
@@ -98,10 +103,9 @@
             
             s = (max === 0) ? 0 : 1-(min/max);
 
-            var hsv = [Math.round(h), s, max];
+            hsv = [Math.round(h), s, max];
 
             return hsv;
-
         },
 
         /**
@@ -115,8 +119,8 @@
          * @return {string} the hex string
          */
         rgb2hex: function(r, g, b) {
-            if (lang.isArray(r)) {
-                return this.rgb2hex.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.rgb2hex.apply(this, r);
             }
 
             var f=this.dec2hex;
@@ -130,11 +134,10 @@
          * @return {string} the hex equivalent
          */
         dec2hex: function(n) {
-            n = parseInt(n, 10);
-            n = (lang.isNumber(n)) ? n : 0;
+            n = parseInt(n,10)|0;
             n = (n > 255 || n < 0) ? 0 : n;
 
-            return HCHARS.charAt((n - n % 16) / 16) + HCHARS.charAt(n % 16);
+            return (ZERO+n.toString(16)).slice(-2).toUpperCase();
         },
 
         /**
@@ -144,13 +147,7 @@
          * @return {int} the decimal
          */
         hex2dec: function(str) {
-            var f = function(c) {
-                return HCHARS.indexOf(c.toUpperCase());
-            };
-
-            var s=str.split('');
-            
-            return ((f(s[0]) * 16) + f(s[1]));
+            return parseInt(str,16);
         },
 
         /**
@@ -161,7 +158,7 @@
          */
         hex2rgb: function(s) { 
             var f = this.hex2dec;
-            return [f(s.substr(0, 2)), f(s.substr(2, 2)), f(s.substr(4, 2))];
+            return [f(s.slice(0, 2)), f(s.slice(2, 4)), f(s.slice(4, 6))];
         },
 
         /**
@@ -176,13 +173,13 @@
          */
         websafe: function(r, g, b) {
 
-            if (lang.isArray(r)) {
-                return this.websafe.call(this, r[0], r[1], r[2]);
+            if (isArray(r)) {
+                return this.websafe.apply(this, r);
             }
 
             // returns the closest match [0, 51, 102, 153, 204, 255]
             var f = function(v) {
-                if (lang.isNumber(v)) {
+                if (isNumber(v)) {
                     v = Math.min(Math.max(0, v), 255);
                     var i, next;
                     for (i=0; i<256; i=i+51) {
@@ -202,31 +199,24 @@
 }();
 
 
+/**
+ * The colorpicker module provides a widget for selecting colors
+ * @module colorpicker
+ * @requires yahoo, dom, event, element, slider
+ */
 (function() {
 
-    var _pickercount = 0;
-
-    /**
-     * The colorpicker module provides a widget for selecting colors
-     * @module colorpicker
-     * @requires yahoo, dom, event, element, slider
-     */
-
-
-    /**
-     * Creates the host element if it doesn't exist
-     * @method _createHostElement
-     * @private
-     */
-    var _createHostElement = function() {
-        var el = document.createElement('div');
-
-        if (this.CSS.BASE) {
-            el.className = this.CSS.BASE;
-        }
+    var _pickercount = 0,
+        util   = YAHOO.util,
+        lang   = YAHOO.lang,
+        Slider = YAHOO.widget.Slider,
+        Color  = util.Color,
+        Dom    = util.Dom,
+        Event  = util.Event,
+        sub    = lang.substitute,
         
-        return el;
-    };
+        b = "yui-picker";
+    
 
     /**
      * A widget to select colors
@@ -240,7 +230,7 @@
      * @param {Object} attr (optional) A key map of the colorpicker's 
      * initial attributes.  Ignored if first arg is attributes object.
      */
-    YAHOO.widget.ColorPicker = function(el, attr) {
+    function ColorPicker(el, attr) {
         _pickercount = _pickercount + 1;
         attr = attr || {};
         if (arguments.length === 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
@@ -249,1487 +239,1525 @@
         }
         
         if (!el && !attr.element) { // create if we dont have one
-            el = _createHostElement.call(this, attr);
+            el = this._createHostElement(attr);
         }
 
-    	YAHOO.widget.ColorPicker.superclass.constructor.call(this, el, attr); 
-    };
+    	ColorPicker.superclass.constructor.call(this, el, attr); 
 
-    YAHOO.extend(YAHOO.widget.ColorPicker, YAHOO.util.Element);
+        this.initPicker();
+    }
+
+    YAHOO.extend(ColorPicker, YAHOO.util.Element, {
     
-    var proto = YAHOO.widget.ColorPicker.prototype,
-        Slider=YAHOO.widget.Slider,
-        Color=YAHOO.util.Color,
-        Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        lang = YAHOO.lang,
-        sub = lang.substitute;
-    
-
-    var b = "yui-picker";
-
-    /**
-     * The element ids used by this control
-     * @property ID
-     * @final
-     */
-    proto.ID = {
-
         /**
-         * The id for the "red" form field
-         * @property ID.R
-         * @type String
+         * The element ids used by this control
+         * @property ID
          * @final
-         * @default yui-picker-r
          */
-        R: b + "-r",
+        ID : {
 
-        /**
-         * The id for the "red" hex pair output
-         * @property ID.R_HEX
-         * @type String
-         * @final
-         * @default yui-picker-rhex
-         */
-        R_HEX: b + "-rhex",
+            /**
+             * The id for the "red" form field
+             * @property ID.R
+             * @type String
+             * @final
+             * @default yui-picker-r
+             */
+            R: b + "-r",
 
-        /**
-         * The id for the "green" form field
-         * @property ID.G
-         * @type String
-         * @final
-         * @default yui-picker-g
-         */
-        G: b + "-g",
+            /**
+             * The id for the "red" hex pair output
+             * @property ID.R_HEX
+             * @type String
+             * @final
+             * @default yui-picker-rhex
+             */
+            R_HEX: b + "-rhex",
 
-        /**
-         * The id for the "green" hex pair output
-         * @property ID.G_HEX
-         * @type String
-         * @final
-         * @default yui-picker-ghex
-         */
-        G_HEX: b + "-ghex",
+            /**
+             * The id for the "green" form field
+             * @property ID.G
+             * @type String
+             * @final
+             * @default yui-picker-g
+             */
+            G: b + "-g",
 
+            /**
+             * The id for the "green" hex pair output
+             * @property ID.G_HEX
+             * @type String
+             * @final
+             * @default yui-picker-ghex
+             */
+            G_HEX: b + "-ghex",
 
-        /**
-         * The id for the "blue" form field
-         * @property ID.B
-         * @type String
-         * @final
-         * @default yui-picker-b
-         */
-        B: b + "-b",
 
+            /**
+             * The id for the "blue" form field
+             * @property ID.B
+             * @type String
+             * @final
+             * @default yui-picker-b
+             */
+            B: b + "-b",
+
+            /**
+             * The id for the "blue" hex pair output
+             * @property ID.B_HEX
+             * @type String
+             * @final
+             * @default yui-picker-bhex
+             */
+            B_HEX: b + "-bhex",
+
+            /**
+             * The id for the "hue" form field
+             * @property ID.H
+             * @type String
+             * @final
+             * @default yui-picker-h
+             */
+            H: b + "-h",
+
+            /**
+             * The id for the "saturation" form field
+             * @property ID.S
+             * @type String
+             * @final
+             * @default yui-picker-s
+             */
+            S: b + "-s",
+
+            /**
+             * The id for the "value" form field
+             * @property ID.V
+             * @type String
+             * @final
+             * @default yui-picker-v
+             */
+            V: b + "-v",
+
+            /**
+             * The id for the picker region slider
+             * @property ID.PICKER_BG
+             * @type String
+             * @final
+             * @default yui-picker-bg
+             */
+            PICKER_BG:      b + "-bg",
+
+            /**
+             * The id for the picker region thumb
+             * @property ID.PICKER_THUMB
+             * @type String
+             * @final
+             * @default yui-picker-thumb
+             */
+            PICKER_THUMB:   b + "-thumb",
+
+            /**
+             * The id for the hue slider
+             * @property ID.HUE_BG
+             * @type String
+             * @final
+             * @default yui-picker-hue-bg
+             */
+            HUE_BG:         b + "-hue-bg",
+
+            /**
+             * The id for the hue thumb
+             * @property ID.HUE_THUMB
+             * @type String
+             * @final
+             * @default yui-picker-hue-thumb
+             */
+            HUE_THUMB:      b + "-hue-thumb",
+
+            /**
+             * The id for the hex value form field
+             * @property ID.HEX
+             * @type String
+             * @final
+             * @default yui-picker-hex
+             */
+            HEX:            b + "-hex",
+
+            /**
+             * The id for the color swatch
+             * @property ID.SWATCH
+             * @type String
+             * @final
+             * @default yui-picker-swatch
+             */
+            SWATCH:         b + "-swatch",
+
+            /**
+             * The id for the websafe color swatch
+             * @property ID.WEBSAFE_SWATCH
+             * @type String
+             * @final
+             * @default yui-picker-websafe-swatch
+             */
+            WEBSAFE_SWATCH: b + "-websafe-swatch",
+
+            /**
+             * The id for the control details
+             * @property ID.CONTROLS
+             * @final
+             * @default yui-picker-controls
+             */
+            CONTROLS: b + "-controls",
+
+            /**
+             * The id for the rgb controls
+             * @property ID.RGB_CONTROLS
+             * @final
+             * @default yui-picker-rgb-controls
+             */
+            RGB_CONTROLS: b + "-rgb-controls",
+
+            /**
+             * The id for the hsv controls
+             * @property ID.HSV_CONTROLS
+             * @final
+             * @default yui-picker-hsv-controls
+             */
+            HSV_CONTROLS: b + "-hsv-controls",
+            
+            /**
+             * The id for the hsv controls
+             * @property ID.HEX_CONTROLS
+             * @final
+             * @default yui-picker-hex-controls
+             */
+            HEX_CONTROLS: b + "-hex-controls",
+
+            /**
+             * The id for the hex summary
+             * @property ID.HEX_SUMMARY
+             * @final
+             * @default yui-picker-hex-summary
+             */
+            HEX_SUMMARY: b + "-hex-summary",
+
+            /**
+             * The id for the controls section header
+             * @property ID.CONTROLS_LABEL
+             * @final
+             * @default yui-picker-controls-label
+             */
+            CONTROLS_LABEL: b + "-controls-label"
+        },
+
         /**
-         * The id for the "blue" hex pair output
-         * @property ID.B_HEX
-         * @type String
+         * Constants for any script-generated messages.  The values here
+         * are the default messages.  They can be updated by providing
+         * the complete list to the constructor for the "txt" attribute.
+         * @property TXT
          * @final
-         * @default yui-picker-bhex
          */
-        B_HEX: b + "-bhex",
+        TXT : {
+            ILLEGAL_HEX: "Illegal hex value entered",
+            SHOW_CONTROLS: "Show color details",
+            HIDE_CONTROLS: "Hide color details",
+            CURRENT_COLOR: "Currently selected color: {rgb}",
+            CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.",
+            R: "R",
+            G: "G",
+            B: "B",
+            H: "H",
+            S: "S",
+            V: "V",
+            HEX: "#",
+            DEG: "\u00B0",
+            PERCENT: "%"
+        },
 
         /**
-         * The id for the "hue" form field
-         * @property ID.H
-         * @type String
+         * Constants for the default image locations for img tags that are
+         * generated by the control.  They can be modified by passing the
+         * complete list to the contructor for the "images" attribute
+         * @property IMAGE
          * @final
-         * @default yui-picker-h
          */
-        H: b + "-h",
+        IMAGE : {
+            PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png",
+            HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png"
+        },
 
         /**
-         * The id for the "saturation" form field
-         * @property ID.S
-         * @type String
+         * Constants for the control's default default values
+         * @property DEFAULT
          * @final
-         * @default yui-picker-s
          */
-        S: b + "-s",
+        DEFAULT : {
+            PICKER_SIZE: 180
+        },
 
         /**
-         * The id for the "value" form field
-         * @property ID.V
-         * @type String
+         * Constants for the control's configuration attributes
+         * @property OPT
          * @final
-         * @default yui-picker-v
          */
-        V: b + "-v",
+        OPT : {
+            HUE         : "hue",
+            SATURATION  : "saturation",
+            VALUE       : "value",
+            RED     : "red",
+            GREEN   : "green",
+            BLUE    : "blue",
+            HSV     : "hsv",
+            RGB     : "rgb",
+            WEBSAFE : "websafe",
+            HEX     : "hex",
+            PICKER_SIZE       : "pickersize",
+            SHOW_CONTROLS     : "showcontrols",
+            SHOW_RGB_CONTROLS : "showrgbcontrols",
+            SHOW_HSV_CONTROLS : "showhsvcontrols",
+            SHOW_HEX_CONTROLS : "showhexcontrols",
+            SHOW_HEX_SUMMARY  : "showhexsummary",
+            SHOW_WEBSAFE      : "showwebsafe",
+            CONTAINER         : "container",
+            IDS      : "ids",
+            ELEMENTS : "elements",
+            TXT      : "txt",
+            IMAGES   : "images",
+            ANIMATE  : "animate"
+        },
 
         /**
-         * The id for the picker region slider
-         * @property ID.PICKER_BG
-         * @type String
-         * @final
-         * @default yui-picker-bg
+         * Flag to allow individual UI updates to forego animation if available.
+         * True during construction for initial thumb placement.  Set to false
+         * after that.
+         *
+         * @property skipAnim
+         * @type Boolean
+         * @default true
          */
-        PICKER_BG:      b + "-bg",
+        skipAnim : true,
 
         /**
-         * The id for the picker region thumb
-         * @property ID.PICKER_THUMB
-         * @type String
-         * @final
-         * @default yui-picker-thumb
+         * Creates the host element if it doesn't exist
+         * @method _createHostElement
+         * @protected
          */
-        PICKER_THUMB:   b + "-thumb",
+        _createHostElement : function () {
+            var el = document.createElement('div');
 
+            if (this.CSS.BASE) {
+                el.className = this.CSS.BASE;
+            }
+            
+            return el;
+        },
+
         /**
-         * The id for the hue slider
-         * @property ID.HUE_BG
-         * @type String
-         * @final
-         * @default yui-picker-hue-bg
+         * Moves the hue slider into the position dictated by the current state
+         * of the control
+         * @method _updateHueSlider
+         * @protected
          */
-        HUE_BG:         b + "-hue-bg",
+        _updateHueSlider : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                h = this.get(this.OPT.HUE);
 
+            h = size - Math.round(h / 360 * size);
+            
+            // 0 is at the top and bottom of the hue slider.  Always go to
+            // the top so we don't end up sending the thumb to the bottom
+            // when the value didn't actually change (e.g., a conversion
+            // produced 360 instead of 0 and the value was already 0).
+            if (h === size) {
+                h = 0;
+            }
+
+            this.hueSlider.setValue(h, this.skipAnim);
+        },
+
         /**
-         * The id for the hue thumb
-         * @property ID.HUE_THUMB
-         * @type String
-         * @final
-         * @default yui-picker-hue-thumb
+         * Moves the picker slider into the position dictated by the current state
+         * of the control
+         * @method _updatePickerSlider
+         * @protected
          */
-        HUE_THUMB:      b + "-hue-thumb",
+        _updatePickerSlider : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                s = this.get(this.OPT.SATURATION),
+                v = this.get(this.OPT.VALUE);
 
+            s = Math.round(s * size / 100);
+            v = Math.round(size - (v * size / 100));
+
+
+            this.pickerSlider.setRegionValue(s, v, this.skipAnim);
+        },
+
         /**
-         * The id for the hex value form field
-         * @property ID.HEX
-         * @type String
-         * @final
-         * @default yui-picker-hex
+         * Moves the sliders into the position dictated by the current state
+         * of the control
+         * @method _updateSliders
+         * @protected
          */
-        HEX:            b + "-hex",
+        _updateSliders : function() {
+            this._updateHueSlider();
+            this._updatePickerSlider();
+        },
 
         /**
-         * The id for the color swatch
-         * @property ID.SWATCH
-         * @type String
-         * @final
-         * @default yui-picker-swatch
+         * Sets the control to the specified rgb value and
+         * moves the sliders to the proper positions
+         * @method setValue
+         * @param rgb {[int, int, int]} the rgb value
+         * @param silent {boolean} whether or not to fire the change event
          */
-        SWATCH:         b + "-swatch",
+        setValue : function(rgb, silent) {
+            silent = (silent) || false;
+            this.set(this.OPT.RGB, rgb, silent);
+            this._updateSliders();
+        },
 
         /**
-         * The id for the websafe color swatch
-         * @property ID.WEBSAFE_SWATCH
-         * @type String
-         * @final
-         * @default yui-picker-websafe-swatch
+         * The hue slider
+         * @property hueSlider
+         * @type YAHOO.widget.Slider
          */
-        WEBSAFE_SWATCH: b + "-websafe-swatch",
-
+        hueSlider : null,
+        
         /**
-         * The id for the control details
-         * @property ID.CONTROLS
-         * @final
-         * @default yui-picker-controls
+         * The picker region
+         * @property pickerSlider
+         * @type YAHOO.widget.Slider
          */
-        CONTROLS: b + "-controls",
+        pickerSlider : null,
 
         /**
-         * The id for the rgb controls
-         * @property ID.RGB_CONTROLS
-         * @final
-         * @default yui-picker-rgb-controls
+         * Translates the slider value into hue, int[0,359]
+         * @method _getH
+         * @protected
+         * @return {int} the hue from 0 to 359
          */
-        RGB_CONTROLS: b + "-rgb-controls",
+        _getH : function() {
+            var size = this.get(this.OPT.PICKER_SIZE),
+                h = (size - this.hueSlider.getValue()) / size;
+            h = Math.round(h*360);
+            return (h === 360) ? 0 : h;
+        },
 
         /**
-         * The id for the hsv controls
-         * @property ID.HSV_CONTROLS
-         * @final
-         * @default yui-picker-hsv-controls
+         * Translates the slider value into saturation, int[0,1], left to right
+         * @method _getS
+         * @protected
+         * @return {int} the saturation from 0 to 1
          */
-        HSV_CONTROLS: b + "-hsv-controls",
-        
-        /**
-         * The id for the hsv controls
-         * @property ID.HEX_CONTROLS
-         * @final
-         * @default yui-picker-hex-controls
-         */
-        HEX_CONTROLS: b + "-hex-controls",
+        _getS : function() {
+            return this.pickerSlider.getXValue() / this.get(this.OPT.PICKER_SIZE);
+        },
 
         /**
-         * The id for the hex summary
-         * @property ID.HEX_SUMMARY
-         * @final
-         * @default yui-picker-hex-summary
+         * Translates the slider value into value/brightness, int[0,1], top
+         * to bottom
+         * @method _getV
+         * @protected
+         * @return {int} the value from 0 to 1
          */
-        HEX_SUMMARY: b + "-hex-summary",
+        _getV : function() {
+            var size = this.get(this.OPT.PICKER_SIZE);
+            return (size - this.pickerSlider.getYValue()) / size;
+        },
 
         /**
-         * The id for the controls section header
-         * @property ID.CONTROLS_LABEL
-         * @final
-         * @default yui-picker-controls-label
+         * Updates the background of the swatch with the current rbg value.
+         * Also updates the websafe swatch to the closest websafe color
+         * @method _updateSwatch
+         * @protected
          */
-        CONTROLS_LABEL: b + "-controls-label"
-    };
+        _updateSwatch : function() {
+            var rgb = this.get(this.OPT.RGB),
+                websafe = this.get(this.OPT.WEBSAFE),
+                el = this.getElement(this.ID.SWATCH),
+                color = rgb.join(","),
+                txt = this.get(this.OPT.TXT);
 
-    /**
-     * Constants for any script-generated messages.  The values here
-     * are the default messages.  They can be updated by providing
-     * the complete list to the constructor for the "txt" attribute.
-     * @property TXT
-     * @final
-     */
-    proto.TXT = {
-        ILLEGAL_HEX: "Illegal hex value entered",
-        SHOW_CONTROLS: "Show color details",
-        HIDE_CONTROLS: "Hide color details",
-        CURRENT_COLOR: "Currently selected color: {rgb}",
-        CLOSEST_WEBSAFE: "Closest websafe color: {rgb}. Click to select.",
-        R: "R",
-        G: "G",
-        B: "B",
-        H: "H",
-        S: "S",
-        V: "V",
-        HEX: "#",
-        DEG: "\u00B0",
-        PERCENT: "%"
-    };
+            Dom.setStyle(el, "background-color", "rgb(" + color  + ")");
+            el.title = sub(txt.CURRENT_COLOR, {
+                    "rgb": "#" + this.get(this.OPT.HEX)
+                });
 
-    /**
-     * Constants for the default image locations for img tags that are
-     * generated by the control.  They can be modified by passing the
-     * complete list to the contructor for the "images" attribute
-     * @property IMAGE
-     * @final
-     */
-    proto.IMAGE = {
-        PICKER_THUMB: "../../build/colorpicker/assets/picker_thumb.png",
-        HUE_THUMB: "../../build/colorpicker/assets/hue_thumb.png"
-    };
 
-    /*
-     * Constants for the control's custom event names.  subscribe
-     * to the rgbChange event instead.
-     * @property EVENT
-     * @final
-     */
-    //proto.EVENT = {
-        //CHANGE: "change"
-    //};
+            el = this.getElement(this.ID.WEBSAFE_SWATCH);
+            color = websafe.join(",");
 
-    //proto.CSS = { };
+            Dom.setStyle(el, "background-color", "rgb(" + color + ")");
+            el.title = sub(txt.CLOSEST_WEBSAFE, {
+                    "rgb": "#" + Color.rgb2hex(websafe)
+                });
 
-    /**
-     * Constants for the control's default default values
-     * @property DEFAULT
-     * @final
-     */
-    proto.DEFAULT = {
-        PICKER_SIZE: 180
-    };
+        },
 
-    /**
-     * Constants for the control's configuration attributes
-     * @property OPT
-     * @final
-     */
-    proto.OPT = {
-        HUE: "hue",
-        SATURATION: "saturation",
-        VALUE: "value",
-        RED: "red",
-        GREEN: "green",
-        BLUE: "blue",
-        HSV: "hsv",
-        RGB: "rgb",
-        WEBSAFE: "websafe",
-        HEX: "hex",
-        PICKER_SIZE: "pickersize",
-        SHOW_CONTROLS: "showcontrols",
-        SHOW_RGB_CONTROLS: "showrgbcontrols",
-        SHOW_HSV_CONTROLS: "showhsvcontrols",
-        SHOW_HEX_CONTROLS: "showhexcontrols",
-        SHOW_HEX_SUMMARY: "showhexsummary",
-        SHOW_WEBSAFE: "showwebsafe",
-        //SHOW_SUBMIT: "showsubmit",
-        CONTAINER: "container",
-        IDS: "ids",
-        ELEMENTS: "elements",
-        TXT: "txt",
-        IMAGES: "images",
-        ANIMATE: "animate"
-    };
+        /**
+         * Reads the sliders and converts the values to RGB, updating the
+         * internal state for all the individual form fields
+         * @method _getValuesFromSliders
+         * @protected
+         */
+        _getValuesFromSliders : function() {
+            this.set(this.OPT.RGB, Color.hsv2rgb(this._getH(), this._getS(), this._getV()));
+        },
 
-    /**
-     * Moves the hue slider into the position dictated by the current state
-     * of the control
-     * @method _updateHueSlider
-     * @private
-     */
-    var _updateHueSlider = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            h = this.get(this.OPT.HUE);
+        /**
+         * Updates the form field controls with the state data contained
+         * in the control.
+         * @method _updateFormFields
+         * @protected
+         */
+        _updateFormFields : function() {
+            this.getElement(this.ID.H).value = this.get(this.OPT.HUE);
+            this.getElement(this.ID.S).value = this.get(this.OPT.SATURATION);
+            this.getElement(this.ID.V).value = this.get(this.OPT.VALUE);
+            this.getElement(this.ID.R).value = this.get(this.OPT.RED);
+            this.getElement(this.ID.R_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.RED));
+            this.getElement(this.ID.G).value = this.get(this.OPT.GREEN);
+            this.getElement(this.ID.G_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.GREEN));
+            this.getElement(this.ID.B).value = this.get(this.OPT.BLUE);
+            this.getElement(this.ID.B_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.BLUE));
+            this.getElement(this.ID.HEX).value = this.get(this.OPT.HEX);
+        },
 
-        h = size - Math.round(h / 360 * size);
-        
-        // 0 is at the top and bottom of the hue slider.  Always go to
-        // the top so we don't end up sending the thumb to the bottom
-        // when the value didn't actually change (e.g., a conversion
-        // produced 360 instead of 0 and the value was already 0).
-        if (h === size) {
-            h = 0;
-        }
+        /**
+         * Event handler for the hue slider.
+         * @method _onHueSliderChange
+         * @param newOffset {int} pixels from the start position
+         * @protected
+         */
+        _onHueSliderChange : function(newOffset) {
 
-        this.hueSlider.setValue(h);
-    };
+            var h        = this._getH(),
+                rgb      = Color.hsv2rgb(h, 1, 1),
+                styleDef = "rgb(" + rgb.join(",") + ")";
 
-    /**
-     * Moves the picker slider into the position dictated by the current state
-     * of the control
-     * @method _updatePickerSlider
-     * @private
-     */
-    var _updatePickerSlider = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            s = this.get(this.OPT.SATURATION),
-            v = this.get(this.OPT.VALUE);
+            this.set(this.OPT.HUE, h, true);
 
-        s = Math.round(s * size / 100);
-        v = Math.round(size - (v * size / 100));
+            // set picker background to the hue
+            Dom.setStyle(this.getElement(this.ID.PICKER_BG), "background-color", styleDef);
 
+            if (this.hueSlider.valueChangeSource !== Slider.SOURCE_SET_VALUE) {
+                this._getValuesFromSliders();
+            }
 
-        this.pickerSlider.setRegionValue(s, v);
-    };
+            this._updateFormFields();
+            this._updateSwatch();
+        },
 
-    /**
-     * Moves the sliders into the position dictated by the current state
-     * of the control
-     * @method _updateSliders
-     * @private
-     */
-    var _updateSliders = function() {
-        _updateHueSlider.call(this);
-        _updatePickerSlider.call(this);
-    };
+        /**
+         * Event handler for the picker slider, which controls the
+         * saturation and value/brightness.
+         * @method _onPickerSliderChange
+         * @param newOffset {{x: int, y: int}} x/y pixels from the start position
+         * @protected
+         */
+        _onPickerSliderChange : function(newOffset) {
 
-    /**
-     * Sets the control to the specified rgb value and
-     * moves the sliders to the proper positions
-     * @method setValue
-     * @param rgb {[int, int, int]} the rgb value
-     * @param silent {boolean} whether or not to fire the change event
-     */
-    proto.setValue = function(rgb, silent) {
-        silent = (silent) || false;
-        this.set(this.OPT.RGB, rgb, silent);
-        _updateSliders.call(this);
-    };
+            var s=this._getS(), v=this._getV();
+            this.set(this.OPT.SATURATION, Math.round(s*100), true);
+            this.set(this.OPT.VALUE, Math.round(v*100), true);
 
-    /**
-     * The hue slider
-     * @property hueSlider
-     * @type YAHOO.widget.Slider
-     */
-    proto.hueSlider = null; 
-    
-    /**
-     * The picker region
-     * @property pickerSlider
-     * @type YAHOO.widget.Slider
-     */
-    proto.pickerSlider = null;
+            if (this.pickerSlider.valueChangeSource !== Slider.SOURCE_SET_VALUE) {
+                this._getValuesFromSliders();
+            }
 
-    /**
-     * Translates the slider value into hue, int[0,359]
-     * @method _getH
-     * @private
-     * @return {int} the hue from 0 to 359
-     */
-    var _getH = function() {
-        var size = this.get(this.OPT.PICKER_SIZE),
-            h = (size - this.hueSlider.getValue()) / size;
-        h = Math.round(h*360);
-        return (h === 360) ? 0 : h;
-    };
+            this._updateFormFields();
+            this._updateSwatch();
+        },
 
-    /**
-     * Translates the slider value into saturation, int[0,1], left to right
-     * @method _getS
-     * @private
-     * @return {int} the saturation from 0 to 1
-     */
-    var _getS = function() {
-        return this.pickerSlider.getXValue() / this.get(this.OPT.PICKER_SIZE);
-    };
 
-    /**
-     * Translates the slider value into value/brightness, int[0,1], top
-     * to bottom
-     * @method _getV
-     * @private
-     * @return {int} the value from 0 to 1
-     */
-    var _getV = function() {
-        var size = this.get(this.OPT.PICKER_SIZE);
-        return (size - this.pickerSlider.getYValue()) / size;
-    };
+        /**
+         * Key map to well-known commands for txt field input
+         * @method _getCommand
+         * @param e {Event} the keypress or keydown event
+         * @return {int} a command code
+         * <ul>
+         * <li>0 = not a number, letter in range, or special key</li>
+         * <li>1 = number</li>
+         * <li>2 = a-fA-F</li>
+         * <li>3 = increment (up arrow)</li>
+         * <li>4 = decrement (down arrow)</li>
+         * <li>5 = special key (tab, delete, return, escape, left, right)</li> 
+         * <li>6 = return</li>
+         * </ul>
+         * @protected
+         */
+        _getCommand : function(e) {
+            var c = Event.getCharCode(e);
 
-    /**
-     * Updates the background of the swatch with the current rbg value.
-     * Also updates the websafe swatch to the closest websafe color
-     * @method _updateSwatch
-     * @private
-     */
-    var _updateSwatch = function() {
-        var rgb = this.get(this.OPT.RGB),
-            websafe = this.get(this.OPT.WEBSAFE),
-            el = this.getElement(this.ID.SWATCH),
-            color = rgb.join(","),
-            txt = this.get(this.OPT.TXT);
+            //alert(Event.getCharCode(e) + ", " + e.keyCode + ", " + e.charCode);
 
-        Dom.setStyle(el, "background-color", "rgb(" + color  + ")");
-        el.title = lang.substitute(txt.CURRENT_COLOR, {
-                "rgb": "#" + this.get(this.OPT.HEX)
-            });
+            // special keys
+            if (c === 38) { // up arrow
+                return 3;
+            } else if (c === 13) { // return
+                return 6;
+            } else if (c === 40) { // down array
+                return 4;
+            } else if (c >= 48 && c<=57) { // 0-9
+                return 1;
+            } else if (c >= 97 && c<=102) { // a-f
+                return 2;
+            } else if (c >= 65 && c<=70) { // A-F
+                return 2;
+            //} else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 || 
+            //              (c >= 112 && c <=123)) { // including F-keys
+            // tab, delete, return, escape, left, right or ctrl/meta sequences
+            } else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 ||
+                       e.ctrlKey || e.metaKey) { // special chars
+                return 5;
+            } else { // something we probably don't want
+                return 0;
+            }
+        },
 
+        /**
+         * Use the value of the text field to update the control
+         * @method _useFieldValue
+         * @param e {Event} an event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _useFieldValue : function(e, el, prop) {
+            var val = el.value;
 
-        el = this.getElement(this.ID.WEBSAFE_SWATCH);
-        color = websafe.join(",");
+            if (prop !== this.OPT.HEX) {
+                val = parseInt(val, 10);
+            }
 
-        Dom.setStyle(el, "background-color", "rgb(" + color + ")");
-        el.title = lang.substitute(txt.CLOSEST_WEBSAFE, {
-                "rgb": "#" + Color.rgb2hex(websafe)
-            });
+            if (val !== this.get(prop)) {
+                this.set(prop, val);
+            }
+        },
 
-    };
+        /**
+         * Handle keypress on one of the rgb or hsv fields.
+         * @method _rgbFieldKeypress
+         * @param e {Event} the keypress event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _rgbFieldKeypress : function(e, el, prop) {
+            var command = this._getCommand(e),
+                inc = (e.shiftKey) ? 10 : 1;
+            switch (command) {
+                case 6: // return, update the value
+                    this._useFieldValue.apply(this, arguments);
+                    break;
+                            
+                case 3: // up arrow, increment
+                    this.set(prop, Math.min(this.get(prop)+inc, 255));
+                    this._updateFormFields();
+                    //Event.stopEvent(e);
+                    break;
+                case 4: // down arrow, decrement
+                    this.set(prop, Math.max(this.get(prop)-inc, 0));
+                    this._updateFormFields();
+                    //Event.stopEvent(e);
+                    break;
 
-    /**
-     * Reads the sliders and converts the values to RGB, updating the
-     * internal state for all the individual form fields
-     * @method _getValuesFromSliders
-     * @private
-     */
-    var _getValuesFromSliders = function() {
-        var h=_getH.call(this), s=_getS.call(this), v=_getV.call(this);
+                default:
+            }
 
-        var rgb = Color.hsv2rgb(h, s, v);
-        //var websafe = Color.websafe(rgb);
-        //var hex = Color.rgb2hex(rgb[0], rgb[1], rgb[2]);
+        },
 
-        this.set(this.OPT.RGB, rgb);
-    };
+        /**
+         * Handle keydown on the hex field
+         * @method _hexFieldKeypress
+         * @param e {Event} the keypress event
+         * @param el {HTMLElement} the field
+         * @param prop {string} the key to the linked property
+         * @protected
+         */
+        _hexFieldKeypress : function(e, el, prop) {
+            var command = this._getCommand(e);
+            if (command === 6) { // return, update the value
+                this._useFieldValue.apply(this, arguments);
+            }
+        },
 
-    /**
-     * Updates the form field controls with the state data contained
-     * in the control.
-     * @method _updateFormFields
-     * @private
-     */
-    var _updateFormFields = function() {
-        this.getElement(this.ID.H).value = this.get(this.OPT.HUE);
-        this.getElement(this.ID.S).value = this.get(this.OPT.SATURATION);
-        this.getElement(this.ID.V).value = this.get(this.OPT.VALUE);
-        this.getElement(this.ID.R).value = this.get(this.OPT.RED);
-        this.getElement(this.ID.R_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.RED));
-        this.getElement(this.ID.G).value = this.get(this.OPT.GREEN);
-        this.getElement(this.ID.G_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.GREEN));
-        this.getElement(this.ID.B).value = this.get(this.OPT.BLUE);
-        this.getElement(this.ID.B_HEX).innerHTML = Color.dec2hex(this.get(this.OPT.BLUE));
-        this.getElement(this.ID.HEX).value = this.get(this.OPT.HEX);
-    };
-
-    /**
-     * Event handler for the hue slider.
-     * @method _onHueSliderChange
-     * @param newOffset {int} pixels from the start position
-     * @private
-     */
-    var _onHueSliderChange = function(newOffset) {
-
-        var h = _getH.call(this);
-        this.set(this.OPT.HUE, h, true);
-
-        // set picker background to the hue
-        var rgb = Color.hsv2rgb(h, 1, 1);
-        var styleDef = "rgb(" + rgb.join(",") + ")";
-
-        Dom.setStyle(this.getElement(this.ID.PICKER_BG), "background-color", styleDef);
-
-        if (this.hueSlider.valueChangeSource === this.hueSlider.SOURCE_UI_EVENT) {
-            _getValuesFromSliders.call(this);
-        }
-
-        _updateFormFields.call(this);
-        _updateSwatch.call(this);
-    };
-
-    /**
-     * Event handler for the picker slider, which controls the
-     * saturation and value/brightness.
-     * @method _onPickerSliderChange
-     * @param newOffset {{x: int, y: int}} x/y pixels from the start position
-     * @private
-     */
-    var _onPickerSliderChange = function(newOffset) {
-
-        var s=_getS.call(this), v=_getV.call(this);
-        this.set(this.OPT.SATURATION, Math.round(s*100), true);
-        this.set(this.OPT.VALUE, Math.round(v*100), true);
-
-        if (this.pickerSlider.valueChangeSource === this.pickerSlider.SOURCE_UI_EVENT) {
-            _getValuesFromSliders.call(this);
-        }
-
-        _updateFormFields.call(this);
-        _updateSwatch.call(this);
-    };
-
-
-    /**
-     * Key map to well-known commands for txt field input
-     * @method _getCommand
-     * @param e {Event} the keypress or keydown event
-     * @return {int} a command code
-     * <ul>
-     * <li>0 = not a number, letter in range, or special key</li>
-     * <li>1 = number</li>
-     * <li>2 = a-fA-F</li>
-     * <li>3 = increment (up arrow)</li>
-     * <li>4 = decrement (down arrow)</li>
-     * <li>5 = special key (tab, delete, return, escape, left, right)</li> 
-     * <li>6 = return</li>
-     * </ul>
-     * @private
-     */
-    var _getCommand = function(e) {
-        var c = Event.getCharCode(e);
-
-        //alert(Event.getCharCode(e) + ", " + e.keyCode + ", " + e.charCode);
-
-        // special keys
-        if (c === 38) { // up arrow
-            return 3;
-        } else if (c === 13) { // return
-            return 6;
-        } else if (c === 40) { // down array
-            return 4;
-        } else if (c >= 48 && c<=57) { // 0-9
-            return 1;
-        } else if (c >= 97 && c<=102) { // a-f
-            return 2;
-        } else if (c >= 65 && c<=70) { // A-F
-            return 2;
-        //} else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1 || 
-        //              (c >= 112 && c <=123)) { // including F-keys
-        // tab, delete, return, escape, left, right
-        } else if ("8, 9, 13, 27, 37, 39".indexOf(c) > -1) { // special chars
-            return 5;
-        } else { // something we probably don't want
-            return 0;
-        }
-    };
-
-    /**
-     * Use the value of the text field to update the control
-     * @method _hexFieldKeypress
-     * @param e {Event} an event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _useFieldValue = function(e, el, prop) {
-        var val = el.value;
-
-        if (prop !== this.OPT.HEX) {
-            val = parseInt(val, 10);
-        }
-
-        if (val !== this.get(prop)) {
-            this.set(prop, val);
-        }
-    };
-
-    /**
-     * Handle keypress on one of the rgb or hsv fields.
-     * @method _rgbFieldKeypress
-     * @param e {Event} the keypress event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _rgbFieldKeypress = function(e, el, prop) {
-        var command = _getCommand(e);
-        var inc = (e.shiftKey) ? 10 : 1;
-        switch (command) {
-            case 6: // return, update the value
-                _useFieldValue.apply(this, arguments);
-                break;
-                        
-            case 3: // up arrow, increment
-                this.set(prop, Math.min(this.get(prop)+inc, 255));
-                _updateFormFields.call(this);
-                //Event.stopEvent(e);
-                break;
-            case 4: // down arrow, decrement
-                this.set(prop, Math.max(this.get(prop)-inc, 0));
-                _updateFormFields.call(this);
-                //Event.stopEvent(e);
-                break;
-
-            default:
-        }
-
-    };
-
-    /**
-     * Handle keydown on the hex field
-     * @method _hexFieldKeypress
-     * @param e {Event} the keypress event
-     * @param el {HTMLElement} the field
-     * @param prop {string} the key to the linked property
-     * @private
-     */
-    var _hexFieldKeypress = function(e, el, prop) {
-        var command = _getCommand(e);
-        if (command === 6) { // return, update the value
-            _useFieldValue.apply(this, arguments);
-        }
-    };
-
-    /** 
-     * Allows numbers and special chars, and by default allows a-f.  
-     * Used for the hex field keypress handler.
-     * @method _hexOnly
-     * @param e {Event} the event
-     * @param numbersOnly omits a-f if set to true
-     * @private
-     * @return {boolean} false if we are canceling the event
-     */
-    var _hexOnly = function(e, numbersOnly) {
-        var command = _getCommand(e);
-        switch (command) {
-            case 6: // return
-            case 5: // special char
-            case 1: // number
-                break;
-            case 2: // hex char (a-f)
-                if (numbersOnly !== true) {
+        /** 
+         * Allows numbers and special chars, and by default allows a-f.  
+         * Used for the hex field keypress handler.
+         * @method _hexOnly
+         * @param e {Event} the event
+         * @param numbersOnly omits a-f if set to true
+         * @protected
+         * @return {boolean} false if we are canceling the event
+         */
+        _hexOnly : function(e, numbersOnly) {
+            var command = this._getCommand(e);
+            switch (command) {
+                case 6: // return
+                case 5: // special char
+                case 1: // number
                     break;
-                }
+                case 2: // hex char (a-f)
+                    if (numbersOnly !== true) {
+                        break;
+                    }
 
-                // fallthrough is intentional
+                    // fallthrough is intentional
 
-            default: // prevent alpha and punctuation
-                Event.stopEvent(e);
-                return false;
-        }
-    };
+                default: // prevent alpha and punctuation
+                    Event.stopEvent(e);
+                    return false;
+            }
+        },
 
-    /** 
-     * Allows numbers and special chars only.  Used for the
-     * rgb and hsv fields keypress handler.
-     * @method _numbersOnly
-     * @param e {Event} the event
-     * @private
-     * @return {boolean} false if we are canceling the event
-     */
-    var _numbersOnly = function(e) {
-        return _hexOnly(e, true);
-    };
+        /** 
+         * Allows numbers and special chars only.  Used for the
+         * rgb and hsv fields keypress handler.
+         * @method _numbersOnly
+         * @param e {Event} the event
+         * @protected
+         * @return {boolean} false if we are canceling the event
+         */
+        _numbersOnly : function(e) {
+            return this._hexOnly(e, true);
+        },
 
-    /**
-     * Returns the element reference that is saved.  The id can be either
-     * the element id, or the key for this id in the "id" config attribute.
-     * For instance, the host element id can be obtained by passing its
-     * id (default: "yui_picker") or by its key "YUI_PICKER".
-     * @param id {string} the element id, or key 
-     * @return {HTMLElement} a reference to the element
-     */
-    proto.getElement = function(id) { 
-        return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[id]]; 
-    };
+        /**
+         * Returns the element reference that is saved.  The id can be either
+         * the element id, or the key for this id in the "id" config attribute.
+         * For instance, the host element id can be obtained by passing its
+         * id (default: "yui_picker") or by its key "YUI_PICKER".
+         * @param id {string} the element id, or key 
+         * @return {HTMLElement} a reference to the element
+         */
+        getElement : function(id) { 
+            return this.get(this.OPT.ELEMENTS)[this.get(this.OPT.IDS)[id]]; 
+        },
 
-    var _createElements = function() {
-        var el, child, img, fld, i, 
-            ids = this.get(this.OPT.IDS),
-            txt = this.get(this.OPT.TXT),
-            images = this.get(this.OPT.IMAGES),
-            Elem = function(type, o) {
-                var n = document.createElement(type);
-                if (o) {
-                    lang.augmentObject(n, o, true);
-                }
-                return n;
-            },
-            RGBElem = function(type, obj) {
-                var o = lang.merge({
-                        //type: "txt",
-                        autocomplete: "off",
-                        value: "0",
-                        size: 3,
-                        maxlength: 3
-                    }, obj);
+        _createElements : function() {
+            var el, child, img, fld, p,
+                ids = this.get(this.OPT.IDS),
+                txt = this.get(this.OPT.TXT),
+                images = this.get(this.OPT.IMAGES),
+                Elem = function(type, o) {
+                    var n = document.createElement(type);
+                    if (o) {
+                        lang.augmentObject(n, o, true);
+                    }
+                    return n;
+                },
+                RGBElem = function(type, obj) {
+                    var o = lang.merge({
+                            //type: "txt",
+                            autocomplete: "off",
+                            value: "0",
+                            size: 3,
+                            maxlength: 3
+                        }, obj);
 
-                o.name = o.id;
-                return new Elem(type, o);
-            };
+                    o.name = o.id;
+                    return new Elem(type, o);
+                };
 
-        var p = this.get("element");
+            p = this.get("element");
 
-        // Picker slider (S and V) ---------------------------------------------
+            // Picker slider (S and V) ---------------------------------------------
 
-        el = new Elem("div", {
-            id: ids[this.ID.PICKER_BG],
-            className: "yui-picker-bg",
-            tabIndex: -1,
-            hideFocus: true
-        });
+            el = new Elem("div", {
+                id: ids[this.ID.PICKER_BG],
+                className: "yui-picker-bg",
+                tabIndex: -1,
+                hideFocus: true
+            });
 
-        child = new Elem("div", {
-            id: ids[this.ID.PICKER_THUMB],
-            className: "yui-picker-thumb"
-        });
+            child = new Elem("div", {
+                id: ids[this.ID.PICKER_THUMB],
+                className: "yui-picker-thumb"
+            });
 
-        img = new Elem("img", {
-            src: images.PICKER_THUMB
-        });
+            img = new Elem("img", {
+                src: images.PICKER_THUMB
+            });
 
-        child.appendChild(img);
-        el.appendChild(child);
-        p.appendChild(el);
-        
-        // Hue slider ---------------------------------------------
-        el = new Elem("div", {
-            id: ids[this.ID.HUE_BG],
-            className: "yui-picker-hue-bg",
-            tabIndex: -1,
-            hideFocus: true
-        });
+            child.appendChild(img);
+            el.appendChild(child);
+            p.appendChild(el);
+            
+            // Hue slider ---------------------------------------------
+            el = new Elem("div", {
+                id: ids[this.ID.HUE_BG],
+                className: "yui-picker-hue-bg",
+                tabIndex: -1,
+                hideFocus: true
+            });
 
-        child = new Elem("div", {
-            id: ids[this.ID.HUE_THUMB],
-            className: "yui-picker-hue-thumb"
-        });
+            child = new Elem("div", {
+                id: ids[this.ID.HUE_THUMB],
+                className: "yui-picker-hue-thumb"
+            });
 
-        img = new Elem("img", {
-            src: images.HUE_THUMB
-        });
-
-        child.appendChild(img);
-        el.appendChild(child);
-        p.appendChild(el);
-
-
-        // controls ---------------------------------------------
-
-        el = new Elem("div", {
-            id: ids[this.ID.CONTROLS],
-            className: "yui-picker-controls"
-        });
-
-        p.appendChild(el);
-        p = el;
-
-            // controls header
-            el = new Elem("div", {
-                className: "hd"
+            img = new Elem("img", {
+                src: images.HUE_THUMB
             });
 
-            child = new Elem("a", {
-                id: ids[this.ID.CONTROLS_LABEL],
-                //className: "yui-picker-controls-label",
-                href: "#"
-            });
+            child.appendChild(img);
             el.appendChild(child);
             p.appendChild(el);
 
-            // bd
+
+            // controls ---------------------------------------------
+
             el = new Elem("div", {
-                className: "bd"
+                id: ids[this.ID.CONTROLS],
+                className: "yui-picker-controls"
             });
 
             p.appendChild(el);
             p = el;
 
-                // rgb
-                el = new Elem("ul", {
-                    id: ids[this.ID.RGB_CONTROLS],
-                    className: "yui-picker-rgb-controls"
+                // controls header
+                el = new Elem("div", {
+                    className: "hd"
                 });
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.R + " "));
-
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.R],
-                    className: "yui-picker-r"
+                child = new Elem("a", {
+                    id: ids[this.ID.CONTROLS_LABEL],
+                    //className: "yui-picker-controls-label",
+                    href: "#"
                 });
-
-                child.appendChild(fld);
                 el.appendChild(child);
+                p.appendChild(el);
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.G + " "));
-
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.G],
-                    className: "yui-picker-g"
+                // bd
+                el = new Elem("div", {
+                    className: "bd"
                 });
 
-                child.appendChild(fld);
-                el.appendChild(child);
+                p.appendChild(el);
+                p = el;
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.B + " "));
+                    // rgb
+                    el = new Elem("ul", {
+                        id: ids[this.ID.RGB_CONTROLS],
+                        className: "yui-picker-rgb-controls"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.B],
-                    className: "yui-picker-b"
-                });
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.R + " "));
 
-                child.appendChild(fld);
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.R],
+                        className: "yui-picker-r"
+                    });
 
-                p.appendChild(el);
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                // hsv
-                el = new Elem("ul", {
-                    id: ids[this.ID.HSV_CONTROLS],
-                    className: "yui-picker-hsv-controls"
-                });
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.G + " "));
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.H + " "));
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.G],
+                        className: "yui-picker-g"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.H],
-                    className: "yui-picker-h"
-                });
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.DEG));
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.B + " "));
 
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.B],
+                        className: "yui-picker-b"
+                    });
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.S + " "));
+                    child.appendChild(fld);
+                    el.appendChild(child);
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.S],
-                    className: "yui-picker-s"
-                });
+                    p.appendChild(el);
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.PERCENT));
+                    // hsv
+                    el = new Elem("ul", {
+                        id: ids[this.ID.HSV_CONTROLS],
+                        className: "yui-picker-hsv-controls"
+                    });
 
-                el.appendChild(child);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.H + " "));
 
-                child = new Elem("li");
-                child.appendChild(document.createTextNode(txt.V + " "));
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.H],
+                        className: "yui-picker-h"
+                    });
 
-                fld = new RGBElem("input", {
-                    id: ids[this.ID.V],
-                    className: "yui-picker-v"
-                });
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.DEG));
 
-                child.appendChild(fld);
-                child.appendChild(document.createTextNode(" " + txt.PERCENT));
+                    el.appendChild(child);
 
-                el.appendChild(child);
-                p.appendChild(el);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.S + " "));
 
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.S],
+                        className: "yui-picker-s"
+                    });
 
-                // hex summary
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.PERCENT));
 
-                el = new Elem("ul", {
-                    id: ids[this.ID.HEX_SUMMARY],
-                    className: "yui-picker-hex_summary"
-                });
+                    el.appendChild(child);
 
-                child = new Elem("li", {
-                    id: ids[this.ID.R_HEX]
-                });
-                el.appendChild(child);
+                    child = new Elem("li");
+                    child.appendChild(document.createTextNode(txt.V + " "));
 
-                child = new Elem("li", {
-                    id: ids[this.ID.G_HEX]
-                });
-                el.appendChild(child);
+                    fld = new RGBElem("input", {
+                        id: ids[this.ID.V],
+                        className: "yui-picker-v"
+                    });
 
-                child = new Elem("li", {
-                    id: ids[this.ID.B_HEX]
-                });
-                el.appendChild(child);
-                p.appendChild(el);
+                    child.appendChild(fld);
+                    child.appendChild(document.createTextNode(" " + txt.PERCENT));
 
-                // hex field
-                el = new Elem("div", {
-                    id: ids[this.ID.HEX_CONTROLS],
-                    className: "yui-picker-hex-controls"
-                });
-                el.appendChild(document.createTextNode(txt.HEX + " "));
+                    el.appendChild(child);
+                    p.appendChild(el);
 
-                child = new RGBElem("input", {
-                    id: ids[this.ID.HEX],
-                    className: "yui-picker-hex",
-                    size: 6,
-                    maxlength: 6
-                });
 
-                el.appendChild(child);
-                p.appendChild(el);
+                    // hex summary
 
-                p = this.get("element");
+                    el = new Elem("ul", {
+                        id: ids[this.ID.HEX_SUMMARY],
+                        className: "yui-picker-hex_summary"
+                    });
 
-                // swatch
-                el = new Elem("div", {
-                    id: ids[this.ID.SWATCH],
-                    className: "yui-picker-swatch"
-                });
+                    child = new Elem("li", {
+                        id: ids[this.ID.R_HEX]
+                    });
+                    el.appendChild(child);
 
-                p.appendChild(el);
+                    child = new Elem("li", {
+                        id: ids[this.ID.G_HEX]
+                    });
+                    el.appendChild(child);
 
-                // websafe swatch
-                el = new Elem("div", {
-                    id: ids[this.ID.WEBSAFE_SWATCH],
-                    className: "yui-picker-websafe-swatch"
-                });
+                    child = new Elem("li", {
+                        id: ids[this.ID.B_HEX]
+                    });
+                    el.appendChild(child);
+                    p.appendChild(el);
 
-                p.appendChild(el);
+                    // hex field
+                    el = new Elem("div", {
+                        id: ids[this.ID.HEX_CONTROLS],
+                        className: "yui-picker-hex-controls"
+                    });
+                    el.appendChild(document.createTextNode(txt.HEX + " "));
 
-    };
+                    child = new RGBElem("input", {
+                        id: ids[this.ID.HEX],
+                        className: "yui-picker-hex",
+                        size: 6,
+                        maxlength: 6
+                    });
 
-    var _attachRGBHSV = function(id, config) {
-        Event.on(this.getElement(id), "keydown", function(e, me) {
-                _rgbFieldKeypress.call(me, e, this, config);
-            }, this);
-        Event.on(this.getElement(id), "keypress", _numbersOnly, this);
-        Event.on(this.getElement(id), "blur", function(e, me) {
-                _useFieldValue.call(me, e, this, config);
-            }, this);
-    };
+                    el.appendChild(child);
+                    p.appendChild(el);
 
+                    p = this.get("element");
 
-    /**
-     * Updates the rgb attribute with the current state of the r,g,b
-     * fields.  This is invoked from change listeners on these
-     * attributes to facilitate updating these values from the
-     * individual form fields
-     * @method _updateRGB
-     * @private
-     */
-    var _updateRGB = function() {
-        var rgb = [this.get(this.OPT.RED), 
-                   this.get(this.OPT.GREEN),
-                   this.get(this.OPT.BLUE)];
+                    // swatch
+                    el = new Elem("div", {
+                        id: ids[this.ID.SWATCH],
+                        className: "yui-picker-swatch"
+                    });
 
-        this.set(this.OPT.RGB, rgb);
+                    p.appendChild(el);
 
-        _updateSliders.call(this);
-    };
+                    // websafe swatch
+                    el = new Elem("div", {
+                        id: ids[this.ID.WEBSAFE_SWATCH],
+                        className: "yui-picker-websafe-swatch"
+                    });
 
-    /**
-     * Sets the initial state of the sliders
-     * @method initPicker
-     */
-    proto.initPicker = function () {
+                    p.appendChild(el);
 
-        // bind all of our elements
-        var o=this.OPT, 
-            ids = this.get(o.IDS), 
-            els = this.get(o.ELEMENTS), 
-                  i, el, id;
+        },
 
-        // Add the default value as a key for each element for easier lookup
-        for (i in this.ID) {
-            if (lang.hasOwnProperty(this.ID, i)) {
-                ids[this.ID[i]] = ids[i];
-            }
-        }
+        _attachRGBHSV : function(id, config) {
+            Event.on(this.getElement(id), "keydown", function(e, me) {
+                    me._rgbFieldKeypress(e, this, config);
+                }, this);
+            Event.on(this.getElement(id), "keypress", this._numbersOnly, this, true);
+            Event.on(this.getElement(id), "blur", function(e, me) {
+                    me._useFieldValue(e, this, config);
+                }, this);
+        },
 
-        // Check for picker element, if not there, create all of them
-        el = Dom.get(ids[this.ID.PICKER_BG]);
-        if (!el) {
-            _createElements.call(this);
-        } else {
-        }
 
-        for (i in ids) {
-            if (lang.hasOwnProperty(ids, i)) {
-                // look for element
-                el = Dom.get(ids[i]);
+        /**
+         * Updates the rgb attribute with the current state of the r,g,b
+         * fields.  This is invoked from change listeners on these
+         * attributes to facilitate updating these values from the
+         * individual form fields
+         * @method _updateRGB
+         * @protected
+         */
+        _updateRGB : function() {
+            var rgb = [this.get(this.OPT.RED), 
+                       this.get(this.OPT.GREEN),
+                       this.get(this.OPT.BLUE)];
 
-                // generate an id if the implementer passed in an element reference,
-                // and the element did not have an id already
-                id = Dom.generateId(el);
+            this.set(this.OPT.RGB, rgb);
 
-                // update the id in case we generated the id
-                ids[i] = id; // key is WEBSAFE_SWATCH
-                ids[ids[i]] = id; // key is websafe_swatch
+            this._updateSliders();
+        },
 
-                // store the dom ref
-                els[id] = el;
+        /**
+         * Creates any missing DOM structure.
+         *
+         * @method _initElements
+         * @protected
+         */
+        _initElements : function () {
+            // bind all of our elements
+            var o=this.OPT, 
+                ids = this.get(o.IDS), 
+                els = this.get(o.ELEMENTS), 
+                      i, el, id;
+
+            // Add the default value as a key for each element for easier lookup
+            for (i in this.ID) {
+                if (lang.hasOwnProperty(this.ID, i)) {
+                    ids[this.ID[i]] = ids[i];
+                }
             }
-        }
 
-        // set the initial visibility state of our controls
-            els = [o.SHOW_CONTROLS, 
-                   o.SHOW_RGB_CONTROLS,
-                   o.SHOW_HSV_CONTROLS,
-                   o.SHOW_HEX_CONTROLS,
-                   o.SHOW_HEX_SUMMARY,
-                   o.SHOW_WEBSAFE
-                   ];
+            // Check for picker element, if not there, create all of them
+            el = Dom.get(ids[this.ID.PICKER_BG]);
+            if (!el) {
+                this._createElements();
+            } else {
+            }
 
-        for (i=0; i<els.length; i=i+1) {
-            this.set(els[i], this.get(els[i]));
-        }
+            for (i in ids) {
+                if (lang.hasOwnProperty(ids, i)) {
+                    // look for element
+                    el = Dom.get(ids[i]);
 
-        var s = this.get(o.PICKER_SIZE);
+                    // generate an id if the implementer passed in an element reference,
+                    // and the element did not have an id already
+                    id = Dom.generateId(el);
 
-        this.hueSlider = Slider.getVertSlider(this.getElement(this.ID.HUE_BG), 
-                                              this.getElement(this.ID.HUE_THUMB), 0, s);
-        this.hueSlider.subscribe("change", _onHueSliderChange, this, true);
+                    // update the id in case we generated the id
+                    ids[i] = id; // key is WEBSAFE_SWATCH
+                    ids[ids[i]] = id; // key is websafe_swatch
 
-        this.pickerSlider = Slider.getSliderRegion(this.getElement(this.ID.PICKER_BG), 
-                                                   this.getElement(this.ID.PICKER_THUMB), 0, s, 0, s);
-        this.pickerSlider.subscribe("change", _onPickerSliderChange, this, true);
+                    // store the dom ref
+                    els[id] = el;
+                }
+            }
 
-        // Set the animate state
-        this.set(o.ANIMATE,this.get(o.ANIMATE));
+        },
 
-        //_onHueSliderChange.call(this, 0);
+        /**
+         * Sets the initial state of the sliders
+         * @method initPicker
+         */
+        initPicker : function () {
+            this._initSliders();
+            this._bindUI();
+            this.syncUI(true);
+        },
 
-        Event.on(this.getElement(this.ID.WEBSAFE_SWATCH), "click", function(e) {
-               this.setValue(this.get(o.WEBSAFE));
-               //_updateSliders
-           }, this, true);
+        /**
+         * Creates the Hue and Value/Saturation Sliders.
+         *
+         * @method _initSliders
+         * @protected
+         */
+        _initSliders : function () {
+            var ID = this.ID,
+                size = this.get(this.OPT.PICKER_SIZE);
 
-        Event.on(this.getElement(this.ID.CONTROLS_LABEL), "click", function(e) {
-               this.set(o.SHOW_CONTROLS, !this.get(o.SHOW_CONTROLS));
-               Event.preventDefault(e);
-           }, this, true);
 
-        _attachRGBHSV.call(this, this.ID.R, this.OPT.RED); 
-        _attachRGBHSV.call(this, this.ID.G, this.OPT.GREEN); 
-        _attachRGBHSV.call(this, this.ID.B, this.OPT.BLUE); 
-        _attachRGBHSV.call(this, this.ID.H, this.OPT.HUE); 
-        _attachRGBHSV.call(this, this.ID.S, this.OPT.SATURATION); 
-        _attachRGBHSV.call(this, this.ID.V, this.OPT.VALUE); 
+            this.hueSlider = Slider.getVertSlider(
+                this.getElement(ID.HUE_BG), 
+                this.getElement(ID.HUE_THUMB), 0, size);
 
-        Event.on(this.getElement(this.ID.HEX), "keydown", function(e, me) {
-                _hexFieldKeypress.call(me, e, this, me.OPT.HEX);
-            }, this);
+            this.pickerSlider = Slider.getSliderRegion(
+                this.getElement(ID.PICKER_BG), 
+                this.getElement(ID.PICKER_THUMB), 0, size, 0, size);
 
-        Event.on(this.getElement(this.ID.HEX), "keypress", _hexOnly, this);
-        Event.on(this.getElement(this.ID.HEX), "blur", function(e, me) {
-                _useFieldValue.call(me, e, this, me.OPT.HEX);
-            }, this);
+            // Apply animate attribute configuration
+            this.set(this.OPT.ANIMATE, this.get(this.OPT.ANIMATE));
+        },
 
-        _updateRGB.call(this);
-    };
+        /**
+         * Adds event listeners to Sliders and UI elements.  Wires everything
+         * up.
+         *
+         * @method _bindUI
+         * @protected
+         */
+        _bindUI : function () {
+            var ID = this.ID,
+                O  = this.OPT;
 
+            this.hueSlider.subscribe("change",
+                this._onHueSliderChange, this, true);
+            this.pickerSlider.subscribe("change",
+                this._onPickerSliderChange, this, true);
 
-    /**
-     * Updates the RGB values from the current state of the HSV
-     * values.  Executed when the one of the HSV form fields are
-     * updated
-     * _updateRGBFromHSV
-     * @private
-     */
-    var _updateRGBFromHSV = function() {
-        var hsv = [this.get(this.OPT.HUE), 
-                   this.get(this.OPT.SATURATION)/100,
-                   this.get(this.OPT.VALUE)/100];
+            Event.on(this.getElement(ID.WEBSAFE_SWATCH), "click", function(e) {
+                   this.setValue(this.get(O.WEBSAFE));
+               }, this, true);
 
-        var rgb = Color.hsv2rgb(hsv);
+            Event.on(this.getElement(ID.CONTROLS_LABEL), "click", function(e) {
+                   this.set(O.SHOW_CONTROLS, !this.get(O.SHOW_CONTROLS));
+                   Event.preventDefault(e);
+               }, this, true);
 
-        this.set(this.OPT.RGB, rgb);
+            this._attachRGBHSV(ID.R, O.RED); 
+            this._attachRGBHSV(ID.G, O.GREEN); 
+            this._attachRGBHSV(ID.B, O.BLUE); 
+            this._attachRGBHSV(ID.H, O.HUE); 
+            this._attachRGBHSV(ID.S, O.SATURATION); 
+            this._attachRGBHSV(ID.V, O.VALUE); 
 
-        _updateSliders.call(this);
-    };
+            Event.on(this.getElement(ID.HEX), "keydown", function(e, me) {
+                    me._hexFieldKeypress(e, this, O.HEX);
+                }, this);
 
-    /**
-     * Parses the hex string to normalize shorthand values, converts
-     * the hex value to rgb and updates the rgb attribute (which
-     * updates the state for all of the other values)
-     * method _updateHex
-     * @private
-     */
-    var _updateHex = function() {
-       
-        var hex = this.get(this.OPT.HEX), l=hex.length;
+            Event.on(this.getElement(this.ID.HEX), "keypress",
+                this._hexOnly, this,true);
+            Event.on(this.getElement(this.ID.HEX), "blur", function(e, me) {
+                    me._useFieldValue(e, this, O.HEX);
+                }, this);
+        },
 
-        // support #369 -> #336699 shorthand
-        if (l === 3) {
-            var c = hex.split(""), i;
-            for (i=0; i<l; i=i+1) {
-                c[i] = c[i] + c[i];
-            }
+        /**
+         * Wrapper for _updateRGB, but allows setting 
+         *
+         * @method syncUI
+         * @param skipAnim {Boolean} Omit Slider animation for this action
+         */
+        syncUI : function (skipAnim) {
+            this.skipAnim = skipAnim;
+            this._updateRGB();
+            this.skipAnim = false;
+        },
 
-            hex = c.join("");
-        }
 
-        if (hex.length !== 6) {
-            return false;
-        }
+        /**
+         * Updates the RGB values from the current state of the HSV
+         * values.  Executed when the one of the HSV form fields are
+         * updated
+         * _updateRGBFromHSV
+         * @protected
+         */
+        _updateRGBFromHSV : function() {
+            var hsv = [this.get(this.OPT.HUE), 
+                       this.get(this.OPT.SATURATION)/100,
+                       this.get(this.OPT.VALUE)/100],
+                rgb = Color.hsv2rgb(hsv);
 
-        var rgb = Color.hex2rgb(hex);
+            this.set(this.OPT.RGB, rgb);
 
+            this._updateSliders();
+        },
 
-        this.setValue(rgb);
+        /**
+         * Parses the hex string to normalize shorthand values, converts
+         * the hex value to rgb and updates the rgb attribute (which
+         * updates the state for all of the other values)
+         * method _updateHex
+         * @protected
+         */
+        _updateHex : function() {
+           
+            var hex = this.get(this.OPT.HEX),
+                l   = hex.length,
+                c,i,rgb;
 
-        //_updateSliders.call(this);
+            // support #369 -> #336699 shorthand
+            if (l === 3) {
+                c = hex.split("");
+                for (i=0; i<l; i=i+1) {
+                    c[i] = c[i] + c[i];
+                }
 
-    };
+                hex = c.join("");
+            }
 
+            if (hex.length !== 6) {
+                return false;
+            }
 
+            rgb = Color.hex2rgb(hex);
 
-    /**
-     * Sets up the config attributes and the change listeners for this
-     * properties
-     * @method initAttributes
-     * @param attr An object containing default attribute values
-     */
-    proto.initAttributes = function(attr) {
 
-        attr = attr || {};
-        YAHOO.widget.ColorPicker.superclass.initAttributes.call(this, attr);
-        
-        /**
-         * The size of the picker. Trying to change this is not recommended.
-         * @attribute pickersize
-         * @default 180
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.PICKER_SIZE, {
-                value: attr.size || this.DEFAULT.PICKER_SIZE
-            });
+            this.setValue(rgb);
+        },
 
-        /**
-         * The current hue value 0-360
-         * @attribute hue
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.HUE, {
-                value: attr.hue || 0,
-                validator: lang.isNumber
-            });
 
         /**
-         * The current saturation value 0-100
-         * @attribute saturation
-         * @type int
+         * Returns the cached element reference.  If the id is not a string, it
+         * is assumed that it is an element and this is returned.
+         * @param id {string|HTMLElement} the element key, id, or ref
+         * @param on {boolean} hide or show.  If true, show
+         * @protected
          */
-        this.setAttributeConfig(this.OPT.SATURATION, {
-                value: attr.saturation || 0,
-                validator: lang.isNumber
-            });
+        _hideShowEl : function(id, on) {
+            var el = (lang.isString(id) ? this.getElement(id) : id);
+            Dom.setStyle(el, "display", (on) ? "" : "none");
+        },
 
-        /**
-         * The current value/brightness value 0-100
-         * @attribute value
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.VALUE, {
-                value: lang.isNumber(attr.value) ? attr.value : 100,
-                validator: lang.isNumber
-            });
 
         /**
-         * The current red value 0-255
-         * @attribute red
-         * @type int
+         * Sets up the config attributes and the change listeners for this
+         * properties
+         * @method initAttributes
+         * @param attr An object containing default attribute values
          */
-        this.setAttributeConfig(this.OPT.RED, {
-                value: lang.isNumber(attr.red) ? attr.red : 255,
-                validator: lang.isNumber
-            });
+        initAttributes : function(attr) {
 
-        /**
-         * The current green value 0-255
-         * @attribute green 
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.GREEN, {
-                value: lang.isNumber(attr.green) ? attr.green : 255,
-                validator: lang.isNumber
-            });
+            attr = attr || {};
+            ColorPicker.superclass.initAttributes.call(this, attr);
+            
+            /**
+             * The size of the picker. Trying to change this is not recommended.
+             * @attribute pickersize
+             * @default 180
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.PICKER_SIZE, {
+                    value: attr.size || this.DEFAULT.PICKER_SIZE
+                });
 
-        /**
-         * The current blue value 0-255
-         * @attribute blue
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.BLUE, {
-                value: lang.isNumber(attr.blue) ? attr.blue : 255,
-                validator: lang.isNumber
-            });
+            /**
+             * The current hue value 0-360
+             * @attribute hue
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.HUE, {
+                    value: attr.hue || 0,
+                    validator: lang.isNumber
+                });
 
-        /**
-         * The current hex value #000000-#FFFFFF, without the #
-         * @attribute hex
-         * @type string
-         */
-        this.setAttributeConfig(this.OPT.HEX, {
-                value: attr.hex || "FFFFFF",
-                validator: lang.isString
-            });
+            /**
+             * The current saturation value 0-100
+             * @attribute saturation
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.SATURATION, {
+                    value: attr.saturation || 0,
+                    validator: lang.isNumber
+                });
 
-        /**
-         * The current rgb value.  Updates the state of all of the
-         * other value fields.  Read-only: use setValue to set the
-         * controls rgb value.
-         * @attribute hex
-         * @type [int, int, int]
-         * @readonly
-         */
-        this.setAttributeConfig(this.OPT.RGB, {
-                value: attr.rgb || [255,255,255],
-                method: function(rgb) {
+            /**
+             * The current value/brightness value 0-100
+             * @attribute value
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.VALUE, {
+                    value: lang.isNumber(attr.value) ? attr.value : 100,
+                    validator: lang.isNumber
+                });
 
-                    this.set(this.OPT.RED, rgb[0], true);
-                    this.set(this.OPT.GREEN, rgb[1], true);
-                    this.set(this.OPT.BLUE, rgb[2], true);
+            /**
+             * The current red value 0-255
+             * @attribute red
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.RED, {
+                    value: lang.isNumber(attr.red) ? attr.red : 255,
+                    validator: lang.isNumber
+                });
 
-                    var websafe = Color.websafe(rgb);
-                    this.set(this.OPT.WEBSAFE, websafe, true);
+            /**
+             * The current green value 0-255
+             * @attribute green 
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.GREEN, {
+                    value: lang.isNumber(attr.green) ? attr.green : 255,
+                    validator: lang.isNumber
+                });
 
-                    var hex = Color.rgb2hex(rgb);
-                    this.set(this.OPT.HEX, hex, true);
+            /**
+             * The current blue value 0-255
+             * @attribute blue
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.BLUE, {
+                    value: lang.isNumber(attr.blue) ? attr.blue : 255,
+                    validator: lang.isNumber
+                });
 
-                    var hsv = Color.rgb2hsv(rgb);
+            /**
+             * The current hex value #000000-#FFFFFF, without the #
+             * @attribute hex
+             * @type string
+             */
+            this.setAttributeConfig(this.OPT.HEX, {
+                    value: attr.hex || "FFFFFF",
+                    validator: lang.isString
+                });
 
+            /**
+             * The current rgb value.  Updates the state of all of the
+             * other value fields.  Read-only: use setValue to set the
+             * controls rgb value.
+             * @attribute hex
+             * @type [int, int, int]
+             * @readonly
+             */
+            this.setAttributeConfig(this.OPT.RGB, {
+                    value: attr.rgb || [255,255,255],
+                    method: function(rgb) {
 
-                    this.set(this.OPT.HUE, hsv[0], true);
-                    this.set(this.OPT.SATURATION, Math.round(hsv[1]*100), true);
-                    this.set(this.OPT.VALUE, Math.round(hsv[2]*100), true);
-                },
-                readonly: true
-            });
+                        this.set(this.OPT.RED, rgb[0], true);
+                        this.set(this.OPT.GREEN, rgb[1], true);
+                        this.set(this.OPT.BLUE, rgb[2], true);
 
-        /**
-         * If the color picker will live inside of a container object,
-         * set, provide a reference to it so the control can use the
-         * container's events.
-         * @attribute container
-         * @type YAHOO.widget.Panel
-         */
-        this.setAttributeConfig(this.OPT.CONTAINER, {
-                    value: null,
-                    method: function(container) {
-                        if (container) {
-                            // Position can get out of sync when the
-                            // control is manipulated while display is
-                            // none.  Resetting the slider constraints
-                            // when it is visible gets the state back in
-                            // order.
-                            container.showEvent.subscribe(function() {
-                                // this.pickerSlider.thumb.resetConstraints();
-                                // this.hueSlider.thumb.resetConstraints();
-                                this.pickerSlider.focus();
-                            }, this, true);
+                        var websafe = Color.websafe(rgb),
+                            hex = Color.rgb2hex(rgb),
+                            hsv = Color.rgb2hsv(rgb);
+
+                        this.set(this.OPT.WEBSAFE, websafe, true);
+                        this.set(this.OPT.HEX, hex, true);
+
+
+
+                        // fix bug #1754338 - when saturation is 0, hue is
+                        // silently always set to 0, but input field not updated
+                        if (hsv[1]) {
+                            this.set(this.OPT.HUE, hsv[0], true);
                         }
-                    }
+                        this.set(this.OPT.SATURATION, Math.round(hsv[1]*100), true);
+                        this.set(this.OPT.VALUE, Math.round(hsv[2]*100), true);
+                    },
+                    readonly: true
                 });
-        /**
-         * The closest current websafe value
-         * @attribute websafe
-         * @type int
-         */
-        this.setAttributeConfig(this.OPT.WEBSAFE, {
-                value: attr.websafe || [255,255,255]
-            });
 
+            /**
+             * If the color picker will live inside of a container object,
+             * set, provide a reference to it so the control can use the
+             * container's events.
+             * @attribute container
+             * @type YAHOO.widget.Panel
+             */
+            this.setAttributeConfig(this.OPT.CONTAINER, {
+                        value: null,
+                        method: function(container) {
+                            if (container) {
+                                // Position can get out of sync when the
+                                // control is manipulated while display is
+                                // none.  Resetting the slider constraints
+                                // when it is visible gets the state back in
+                                // order.
+                                container.showEvent.subscribe(function() {
+                                    // this.pickerSlider.thumb.resetConstraints();
+                                    // this.hueSlider.thumb.resetConstraints();
+                                    this.pickerSlider.focus();
+                                }, this, true);
+                            }
+                        }
+                    });
+            /**
+             * The closest current websafe value
+             * @attribute websafe
+             * @type int
+             */
+            this.setAttributeConfig(this.OPT.WEBSAFE, {
+                    value: attr.websafe || [255,255,255]
+                });
 
-        var ids = attr.ids || lang.merge({}, this.ID);
 
-        if (!attr.ids && _pickercount > 1) {
-            for (var i in ids) {
-                if (lang.hasOwnProperty(ids, i)) {
-                    ids[i] = ids[i] + _pickercount;
+            var ids = attr.ids || lang.merge({}, this.ID), i;
+
+            if (!attr.ids && _pickercount > 1) {
+                for (i in ids) {
+                    if (lang.hasOwnProperty(ids, i)) {
+                        ids[i] = ids[i] + _pickercount;
+                    }
                 }
             }
-        }
 
 
-        /**
-         * A list of element ids and/or element references used by the 
-         * control.  The default is the this.ID list, and can be customized
-         * by passing a list in the contructor
-         * @attribute ids
-         * @type {referenceid: realid}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.IDS, {
-                value: ids,
-                writeonce: true
-            });
+            /**
+             * A list of element ids and/or element references used by the 
+             * control.  The default is the this.ID list, and can be customized
+             * by passing a list in the contructor
+             * @attribute ids
+             * @type {referenceid: realid}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.IDS, {
+                    value: ids,
+                    writeonce: true
+                });
 
-        /**
-         * A list of txt strings for internationalization.  Default
-         * is this.TXT
-         * @attribute txt
-         * @type {key: txt}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.TXT, {
-                value: attr.txt || this.TXT,
-                writeonce: true
-            });
+            /**
+             * A list of txt strings for internationalization.  Default
+             * is this.TXT
+             * @attribute txt
+             * @type {key: txt}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.TXT, {
+                    value: attr.txt || this.TXT,
+                    writeonce: true
+                });
 
-        /**
-         * The img src default list
-         * is this.IMAGES
-         * @attribute images
-         * @type {key: image}
-         * @writeonce
-         */
-        this.setAttributeConfig(this.OPT.IMAGES, {
-                value: attr.images || this.IMAGE,
-                writeonce: true
-            });
-        /**
-         * The element refs used by this control.  Set at initialization
-         * @attribute elements
-         * @type {id: HTMLElement}
-         * @readonly
-         */
-        this.setAttributeConfig(this.OPT.ELEMENTS, {
-                value: {},
-                readonly: true
-            });
+            /**
+             * The img src default list
+             * is this.IMAGES
+             * @attribute images
+             * @type {key: image}
+             * @writeonce
+             */
+            this.setAttributeConfig(this.OPT.IMAGES, {
+                    value: attr.images || this.IMAGE,
+                    writeonce: true
+                });
+            /**
+             * The element refs used by this control.  Set at initialization
+             * @attribute elements
+             * @type {id: HTMLElement}
+             * @readonly
+             */
+            this.setAttributeConfig(this.OPT.ELEMENTS, {
+                    value: {},
+                    readonly: true
+                });
 
-        /**
-         * Returns the cached element reference.  If the id is not a string, it
-         * is assumed that it is an element and this is returned.
-         * @param id {string|HTMLElement} the element key, id, or ref
-         * @param on {boolean} hide or show.  If true, show
-         * @private */
-        var _hideShowEl = function(id, on) {
-            var el = (lang.isString(id) ? this.getElement(id) : id);
-            //Dom.setStyle(id, "visibility", (on) ? "" : "hidden");
-            Dom.setStyle(el, "display", (on) ? "" : "none");
-        };
+            /**
+             * Hide/show the entire set of controls
+             * @attribute showcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_CONTROLS, {
+                    value: lang.isBoolean(attr.showcontrols) ? attr.showcontrols : true,
+                    method: function(on) {
 
-        /**
-         * Hide/show the entire set of controls
-         * @attribute showcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_CONTROLS, {
-                value: lang.isBoolean(attr.showcontrols) ? attr.showcontrols : true,
-                method: function(on) {
+                        var el = Dom.getElementsByClassName("bd", "div", 
+                                this.getElement(this.ID.CONTROLS))[0];
 
-                    var el = Dom.getElementsByClassName("bd", "div", 
-                            this.getElement(this.ID.CONTROLS))[0];
+                        this._hideShowEl(el, on);
 
-                    _hideShowEl.call(this, el, on);
+                        this.getElement(this.ID.CONTROLS_LABEL).innerHTML = 
+                            (on) ? this.get(this.OPT.TXT).HIDE_CONTROLS :
+                                   this.get(this.OPT.TXT).SHOW_CONTROLS;
 
-                    this.getElement(this.ID.CONTROLS_LABEL).innerHTML = 
-                        (on) ? this.get(this.OPT.TXT).HIDE_CONTROLS :
-                               this.get(this.OPT.TXT).SHOW_CONTROLS;
+                    }
+                });
 
-                }
-            });
+            /**
+             * Hide/show the rgb controls
+             * @attribute showrgbcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS, {
+                    value: lang.isBoolean(attr.showrgbcontrols) ? attr.showrgbcontrols : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.RGB_CONTROLS, on);
+                    }
+                });
 
-        /**
-         * Hide/show the rgb controls
-         * @attribute showrgbcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_RGB_CONTROLS, {
-                value: lang.isBoolean(attr.showrgbcontrols) ? attr.showrgbcontrols : true,
-                method: function(on) {
-                    //Dom.setStyle(this.getElement(this.ID.RBG_CONTROLS), "visibility", (on) ? "" : "hidden");
-                    _hideShowEl.call(this, this.ID.RGB_CONTROLS, on);
-                }
-            });
+            /**
+             * Hide/show the hsv controls
+             * @attribute showhsvcontrols
+             * @type boolean
+             * @default false
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS, {
+                    value: lang.isBoolean(attr.showhsvcontrols) ?
+                                          attr.showhsvcontrols : false,
+                    method: function(on) {
+                        //Dom.setStyle(this.getElement(this.ID.HSV_CONTROLS), "visibility", (on) ? "" : "hidden");
+                        this._hideShowEl(this.ID.HSV_CONTROLS, on);
 
-        /**
-         * Hide/show the hsv controls
-         * @attribute showhsvcontrols
-         * @type boolean
-         * @default false
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HSV_CONTROLS, {
-                value: lang.isBoolean(attr.showhsvcontrols) ?
-                                      attr.showhsvcontrols : false,
-                method: function(on) {
-                    //Dom.setStyle(this.getElement(this.ID.HSV_CONTROLS), "visibility", (on) ? "" : "hidden");
-                    _hideShowEl.call(this, this.ID.HSV_CONTROLS, on);
+                        // can't show both the hsv controls and the rbg hex summary
+                        if (on && this.get(this.OPT.SHOW_HEX_SUMMARY)) {
+                            this.set(this.OPT.SHOW_HEX_SUMMARY, false);
+                        }
+                    }
+                });
 
-                    // can't show both the hsv controls and the rbg hex summary
-                    if (on && this.get(this.OPT.SHOW_HEX_SUMMARY)) {
-                        this.set(this.OPT.SHOW_HEX_SUMMARY, false);
+            /**
+             * Hide/show the hex controls
+             * @attribute showhexcontrols
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS, {
+                    value: lang.isBoolean(attr.showhexcontrols) ?
+                                          attr.showhexcontrols : false,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.HEX_CONTROLS, on);
                     }
-                }
-            });
+                });
 
-        /**
-         * Hide/show the hex controls
-         * @attribute showhexcontrols
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HEX_CONTROLS, {
-                value: lang.isBoolean(attr.showhexcontrols) ?
-                                      attr.showhexcontrols : false,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.HEX_CONTROLS, on);
-                }
-            });
+            /**
+             * Hide/show the websafe swatch
+             * @attribute showwebsafe
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_WEBSAFE, {
+                    value: lang.isBoolean(attr.showwebsafe) ? attr.showwebsafe : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.WEBSAFE_SWATCH, on);
+                    }
+                });
 
-        /**
-         * Hide/show the websafe swatch
-         * @attribute showwebsafe
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_WEBSAFE, {
-                value: lang.isBoolean(attr.showwebsafe) ? attr.showwebsafe : true,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.WEBSAFE_SWATCH, on);
-                }
-            });
+            /**
+             * Hide/show the hex summary
+             * @attribute showhexsummary
+             * @type boolean
+             * @default true
+             */
+            this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY, {
+                    value: lang.isBoolean(attr.showhexsummary) ? attr.showhexsummary : true,
+                    method: function(on) {
+                        this._hideShowEl(this.ID.HEX_SUMMARY, on);
 
-        /**
-         * Hide/show the hex summary
-         * @attribute showhexsummary
-         * @type boolean
-         * @default true
-         */
-        this.setAttributeConfig(this.OPT.SHOW_HEX_SUMMARY, {
-                value: lang.isBoolean(attr.showhexsummary) ? attr.showhexsummary : true,
-                method: function(on) {
-                    _hideShowEl.call(this, this.ID.HEX_SUMMARY, on);
-
-                    // can't show both the hsv controls and the rbg hex summary
-                    if (on && this.get(this.OPT.SHOW_HSV_CONTROLS)) {
-                        this.set(this.OPT.SHOW_HSV_CONTROLS, false);
+                        // can't show both the hsv controls and the rbg hex summary
+                        if (on && this.get(this.OPT.SHOW_HSV_CONTROLS)) {
+                            this.set(this.OPT.SHOW_HSV_CONTROLS, false);
+                        }
                     }
-                }
-            });
-        this.setAttributeConfig(this.OPT.ANIMATE, {
-                value: lang.isBoolean(attr.animate) ? attr.animate : true,
-                method: function(on) {
-                    this.pickerSlider.animate = on;
-                    this.hueSlider.animate = on;
-                }
-            });
+                });
+            this.setAttributeConfig(this.OPT.ANIMATE, {
+                    value: lang.isBoolean(attr.animate) ? attr.animate : true,
+                    method: function(on) {
+                        if (this.pickerSlider) {
+                            this.pickerSlider.animate = on;
+                            this.hueSlider.animate = on;
+                        }
+                    }
+                });
 
-        this.on(this.OPT.HUE + "Change", _updateRGBFromHSV, this, true);
-        this.on(this.OPT.SATURATION + "Change", _updateRGBFromHSV, this, true);
-        this.on(this.OPT.VALUE + "Change", _updatePickerSlider, this, true);
+            this.on(this.OPT.HUE + "Change", this._updateRGBFromHSV, this, true);
+            this.on(this.OPT.SATURATION + "Change", this._updateRGBFromHSV, this, true);
+            this.on(this.OPT.VALUE + "Change", this._updateRGBFromHSV, this, true);
 
-        this.on(this.OPT.RED + "Change", _updateRGB, this, true);
-        this.on(this.OPT.GREEN + "Change", _updateRGB, this, true);
-        this.on(this.OPT.BLUE + "Change", _updateRGB, this, true);
+            this.on(this.OPT.RED + "Change", this._updateRGB, this, true);
+            this.on(this.OPT.GREEN + "Change", this._updateRGB, this, true);
+            this.on(this.OPT.BLUE + "Change", this._updateRGB, this, true);
 
-        this.on(this.OPT.HEX + "Change", _updateHex, this, true);
+            this.on(this.OPT.HEX + "Change", this._updateHex, this, true);
 
-        this.initPicker();
-    };
+            this._initElements();
+        }
+    });
 
+    YAHOO.widget.ColorPicker = ColorPicker;
 })();
-YAHOO.register("colorpicker", YAHOO.widget.ColorPicker, {version: "2.6.0", build: "1321"});
+YAHOO.register("colorpicker", YAHOO.widget.ColorPicker, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/connection/README
===================================================================
--- trunk/root/static/yui/connection/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/connection/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,302 +0,0 @@
-Connection Manager Release Notes
-
-*** version 2.6.0 ***
-
-* setForm optimization for select-one elements.
-
-* File upload transactions that include encoded POST data will have the keys and
-values decoded before they are used to create the form fields, to avoid having
-the data encoded twice.
-
-*** version 2.5.2 ***
-
-* In file upload transactions, in Safari 3.x, fail to send the file data.  This
-is due to Safari evaluating the condition statement "if(formObject.encoding){}"
-as true.  This results in the incorrect attribute being set, the correct
-attribute being "enctype."  The conditional check now explicitly verifies for
-IE, before setting the appropriate attribute.
-
-* NOTE: File uploads using setForm() does not function as expected in Opera
-9.27.  The file and data upload phase works as expected, however the server
-response cannot be read.  Specifically, "onload" for an iframe is triggered when
-the iframe is appended into the DOM.  This results in the upload callback being
-fired immediately, before the transaction is complete, and before the response
-data are available.
-
-This condition is documented in Opera's bug tracking system: 295719 and appears
-to have been fixed as of Opera 9.50 b2.
-
-*** version 2.5.1 ***
-
-* no changes.
-
-*** version 2.5.0 ***
-
-* setForm() can now detects HTTPS in the URI for file upload transactions.  The
-third, boolean argument for HTTPS when using IE is no longer necessary.
-
-* [FIXED] SF1882101.  POST transactions without a message will now have a
-Content-Length value set to 0 for FF 2.x.  This is accomplished by passing a
-value of empty string instead of null to XHR's send().  All other A-Grade
-browsers remain unaffected and perform correctly.
-
-*** version 2.4.0 ***
-
-* [FIXED] SF1804153.  Transactions initialized with setForm() now properly clear
-the POST data field after each transaction.
-
-* The callback object can accept a new member, cache, defined with a boolean
-value.  If set to false (e.g., var callback = { cache:false };), a timestamp
-will be appended to the URI to override HTTP GET caching.  This timestamp value
-will appear as rnd=timestamp in the request querystring.
-
-* Custom Events startEvent, completeEvent, and abortEvent now receive
-callback.argument, if defined, in addition to the transaction ID.  Each Custom
-Event's function handler receives two arguments -- the event type as the first
-argument, and an array as the second argument.  The first element in the array
-is the transaction ID, and the second element are any arguments defined in the
-callback object.
-
-*** version 2.3.1 ***
-
-* setDefaultPostHeader() can now be overloaded with a boolean, string, or
-number.  By default, POST transactions send the following Content-Type header:
-'application/x-www-form-urlencoded; charset=UTF-8'.
-
-A custom Content-Type header can now be set by passing its value to
-setDefaultPostHeader().
-
-* HTML form submissions now send a Content-Type header of "application/x-www-
-form-urlencoded", omitting the charset=UTF-8 value.
-
-* setDefaultXhrHeader() can now be overloaded with a boolean, string, or number.
-By default, all transactions send a custom header of "X-Requested-
-With:XMLHttpRequest".
-
-This default header value can be overridden by passing the desired value as an
-argument to setDefaultPostHeader().
-
-* The file upload iframe's event listener is now explicitly removed before the
-iframe is destroyed.
-
-*** version 2.3.0 ***
-
-* Custom Events are introduced in Connection Manager.  These events -- for a
-non-file upload transaction -- are:
-
-   * startEvent
-   * completeEvent
-   * successEvent
-   * failureEvent
-   * abortEvent
-
-For transactions involving file upload with an HTML form, the events are:
-
-   * startEvent
-   * completeEvent
-   * uploadEvent
-   * abortEvent
-
-* Event utility is a now Connection Manager dependency.
-
-* abort() and isCallInProgress() are now functional for file upload
-transactions.
-
-* NOTE: The native XHR implementation in Safari 2.0.4 has been confirmed to leak
-memory.
-
-* UPDATE: The XHR implementation in Safari 3.0 beta(and WebKit builds) now
-appear to handle HTTP 204 responses correctly.  XHR in Opera, as of 9.21, still
-does not produce a valid HTTP status code with an HTTP 204 response.
-
-*** version 2.2.2 ***
-
-* No revisions.
-
-*** version 2.2.1 ***
-
-* setForm() will include the correct name-value of the HTML Submit button
-clicked where multiple HTML Submit button options are present in an HTML form.
-To enable this feature, include the Event utility source file as a dependency
-before the Connection Manager source file.
-
-* The XHR implementation in IE6 and IE7, Opera, and Safari do not properly
-handle an HTTP 204 response.  IE6/7 will instead return a Win error 1223.
-handleTransactionResponse() will treat 1223 as an HTTP 204, and route the
-response appropriately to the success callback.  createResponseObject() will
-normalize the response object's status and statusText values to 204 and "No
-Content" respectively.  However, no headers are returned.
-
-Opera and Safari provide no discernable response with HTTP 204(e.g., response
-object's properties are undefined).  This response will trigger the failure
-callback with a status of 0 and statusText of "communication failure".
-
-*** version 2.2.0 ***
-
-* initHeader() now accepts a third argument as a boolean.  When set to true,
-this specific header will automatically be sent with each transaction.
-Otherwise, the header will be set and sent for the specific transaction only.
-Example: initHeader('X-YUI-State','Beta', true); all transactions will send this
-header.
-   * resetDefaultHeaders() will clear the default headers collection.
-
-* All Connection Mananger transactions will broadcast the header: "X-Requested-
-With: XMLHttpRequest".
-   * This can be turned off: YAHOO.util.Connect.setDefaultXhrHeader(false);
-
-* The HTTP method argument in asyncRequest is now case-insensitive.
-
-* uploadFile() will now correctly handle the absence of a callback object,
-allowing the transaction to complete silently.
-
-*** version 0.12.2 ***
-
-* The Opera/Connection Manager concurrent object condition, described in version
-0.12.0, no longer tests applies for Opera, version 9.10.
-
-*** version 0.12.1 ***
-
-* connection-debug.js corrected and synchronized with connection.js.  Code
-inconsistencies between the two files existed in 0.12.0.
-
-*** version 0.12.0 ***
-
-* When uploading files via setForm() and asyncRequest includes a POST data
-argument, appendPostData() will create hidden input fields for each postData
-label/value and append each field to the form object.
-
-* setForm() returns the assembled label/value string of the parsed HTML form
-fields.
-
-* NOTE: Opera 9.02 does not allow for more than 12 concurrent Connection Manager
-objects.
-
-The following example creates 12 requests in a loop:
-for(var n=0; n<=12; i++){
-  conn[n] = YAHOO.util.Connect.asyncRequest('GET', sUrl, callback);
-}
-
-If n > 13, Opera 9.02 will crash.  Connection manager objects count n must be <=
-12 at all times.  This condition was not present in Opera version 9.01.
-
-This condition does not apply to other A-Grade browsers (
-http://developer.yahoo.com/yui/articles/gbs/gbs_browser-chart.html)
-
-*** version 0.11.3 ***
-
-* YUI Event dependency for file uploading is now optional.
-
-* uploadFile() now sets unique IDs for each file upload transaction to prevent
-iframe collisions with parallel uploads.
-
-* The callback object now has property responseXML to provide support for file
-upload transactions that return an XML document.
-
-* setForm() will verify if a select option value attribute is present and use
-its value, including empty string, before using the text node value.
-
-* Modified polling mechanism in handleReadyState() and
-handleTransactionResponse() to prevent infinite polling if JavaScript errors
-occur in the user-defined callback.
-
-* createFrame() will now accept a boolean argument of true to set the frame
-source to "javascript:false" to prevent IE from throwing security warnings in an
-HTTPS environment.
-
-* setHeader() now enumerates through the _http_header object using
-hasOwnProperty() to prevent collisions with members added to Object via
-prototype.
-
-* If using setForm() and asyncRequest includes a POST data argument, the data
-will be concatenated to the HTML form POST message.
-
-*** version 0.11.2 ***
-
-* No revisions.
-
-*** version 0.11.1 ***
-
-* uploadFile() now verifies the existence of callback.upload before invoking
-callback, with or without object scope.
-
-*** version 0.11.0 ***
-
-* Each transaction can be defined with a timeout threshold, in milliseconds,
-through the callback object.  If the threshold is reached, and the transaction
-hasn't yet completed, the transaction will call abort().
-
-* abort() will now accept a callback object as the second argument.  The
-failure callback will receive a response object to indicate the transaction was
-aborted.
-
-* setForm() will now support file uploads by setting the second argument to
-true (e.g., YAHOO.util.Connect.setForm(formObject, true).  File upload does not
-use the callback success or failure handler.  Instead, it uses a new callback
-object handler: upload.
-
-* HTML form submit will no longer submit form fields without a defined name
-attribute.
-
-* The default POST header of 'Content-Type','application/x-www-form-urlencoded'
-can be overridden by calling setDefaultPostHeader(false).  This
-will remove the default header from non-HTML form, POST submissions.
-
-* setHeader() now enumerates through the _http_header object with
-propertyIsEnumerable to prevent collisions with members added to Object via
-prototype.
-
-*** version 0.10.0 ***
-
-* handleTransactionResponse() now treats the full HTTP 2xx range as a success
-case, instead of just HTTP 200.
-
-* To accommodate multiple field values in Mozilla/Firefox, multiple initHeader
-calls with the same label will now result in the values concatenated to a
-comma- delimited string value.
-Example:
-Setting Content-Type:'application/x-www-form-urlencoded' and Content-
-Type:'text/xml' will result in Content-Type:'application/x-www-form-urlencoded,
-text/xml'.
-
-* Default polling interval lowered to 50ms.
-
-* YAHOO.util.Connect.setPollingInterval() will allow you to set a polling
-interval -- in milliseconds -- to override the default value.
-
-* YAHOO.util.Connect.getResponseHeader[headerLabel] now supported as a response
-object property to provide symmetry with the native XHR object's property.
-Example:
-YAHOO.util.Connect.getResponseHeader['Content-Length'] will return the value
-for the Content-Length header, if the header is available.
-
-* YAHOO.util.Connect.allResponseHeaders property renamed to
-getAllResponseHeaders to provide symmetry with the native XHR object's
-property.
-
-* YAHOO.util.Connect.setForm() now supports HTTP GET as well as HTTP POST.
-
-* YAHOO.util.Connect.setForm() now accepts an HTML form object as well as its
-name attribute value.
-
-* YAHOO.util.Connect.setForm() will not submit HTML form fields that are
-disabled or do not have a name attribute value.
-
-* [FIXED] Response exceptions result in infinite callback loop in
-Mozilla/Firefox.
-
-* [FIXED] YAHOO.util.Connect.abort() now properly clears polling interval.
-
-* [FIXED] isCallInProgress() now verifies whether XHR instance still exists,
-and returns false if the connection object is no longer available.
-
-*** version 0.9.0 ***
-
-* Initial release
-
-
-
-
-
-
-
-

Modified: trunk/root/static/yui/connection/connection-debug.js
===================================================================
--- trunk/root/static/yui/connection/connection-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/connection/connection-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Connection Manager provides a simplified interface to the XMLHttpRequest
@@ -234,8 +234,9 @@
 				document,
 				'click',
 				function(e){
-					var obj = YAHOO.util.Event.getTarget(e);
-					if(obj.nodeName.toLowerCase() == 'input' && (obj.type && obj.type.toLowerCase() == 'submit')){
+					var obj = YAHOO.util.Event.getTarget(e),
+						name = obj.nodeName.toLowerCase();
+					if((name === 'input' || name === 'button') && (obj.type && obj.type.toLowerCase() == 'submit')){
 						YAHOO.util.Connect._submitElementValue = encodeURIComponent(obj.name) + "=" + encodeURIComponent(obj.value);
 					}
 				});
@@ -1028,10 +1029,6 @@
 							if(this._hasSubmitListener && this._submitElementValue){
                                 data[item++] = this._submitElementValue;
 							}
-							else{
-                                data[item++] = oName + oValue;
-							}
-
 							hasSubmit = true;
 						}
 						break;
@@ -1406,4 +1403,4 @@
 		}
 	}
 };
-YAHOO.register("connection", YAHOO.util.Connect, {version: "2.6.0", build: "1321"});
+YAHOO.register("connection", YAHOO.util.Connect, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/connection/connection-min.js
===================================================================
--- trunk/root/static/yui/connection/connection-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/connection/connection-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(B){var A=YAHOO.util.Event.getTarget(B);if(A.nodeName.toLowerCase()=="input"&&(A.type&&A.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(A.name)+"="+encodeURIComponent(A.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YA!
 HOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B<this._!
 msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_p!
 rogid[B]
);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.init!
 Header("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clear!
 Interval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout!
 ){window
.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failure!
 Event.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;
-}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return ;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return ;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!P&&K){K=encodeURIComponent(K)+"=!
 ";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}else{F[O++]=K+I;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},create!
 Frame:function(A){var B="yuiIO"+this._transaction_id;var C;if(!
 YAHOO.en
v.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode!
 .setAttribute("target",I);if(YAHOO.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(YAHOO.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.document.XMLDocume!
 nt?L.contentWindow.document.XMLDocument:L.contentWindow.docume!
 nt;}catc
h(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}YAHOO.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};YAHOO.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallIn!
 Progress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(C){var B=YAHOO.util.Event.getTarget(C),A=B.nodeName.toLowerCase();if((A==="input"||A==="button")&&(B.type&&B.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(B.name)+"="+encodeURIComponent(B.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start")!
 ,completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D)!
 {for(var B=0;B<this._msxml_progid.length;++B){try{A=new Active!
 XObject(
this._msxml_progid[B]);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Reques!
 ted-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readySt!
 ate===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C!
 .tId];if
(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.fa!
 ilureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;
+}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!!
 P&&K){K=encodeURIComponent(K)+"=";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormD!
 ata="";},createFrame:function(A){var B="yuiIO"+this._transacti!
 on_id;va
r C;if(YAHOO.env.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST")!
 ;this._formNode.setAttribute("target",I);if(YAHOO.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(YAHOO.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.doc!
 ument.XMLDocument?L.contentWindow.document.XMLDocument:L.conte!
 ntWindow
.document;}catch(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}YAHOO.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};YAHOO.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}retu!
 rn D;},isCallInProgress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/connection/connection.js
===================================================================
--- trunk/root/static/yui/connection/connection.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/connection/connection.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Connection Manager provides a simplified interface to the XMLHttpRequest
@@ -234,8 +234,9 @@
 				document,
 				'click',
 				function(e){
-					var obj = YAHOO.util.Event.getTarget(e);
-					if(obj.nodeName.toLowerCase() == 'input' && (obj.type && obj.type.toLowerCase() == 'submit')){
+					var obj = YAHOO.util.Event.getTarget(e),
+						name = obj.nodeName.toLowerCase();
+					if((name === 'input' || name === 'button') && (obj.type && obj.type.toLowerCase() == 'submit')){
 						YAHOO.util.Connect._submitElementValue = encodeURIComponent(obj.name) + "=" + encodeURIComponent(obj.value);
 					}
 				});
@@ -1007,10 +1008,6 @@
 							if(this._hasSubmitListener && this._submitElementValue){
                                 data[item++] = this._submitElementValue;
 							}
-							else{
-                                data[item++] = oName + oValue;
-							}
-
 							hasSubmit = true;
 						}
 						break;
@@ -1376,4 +1373,4 @@
 		}
 	}
 };
-YAHOO.register("connection", YAHOO.util.Connect, {version: "2.6.0", build: "1321"});
+YAHOO.register("connection", YAHOO.util.Connect, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/container/README
===================================================================
--- trunk/root/static/yui/container/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1129 +0,0 @@
-Container Release Notes
-
-*** version 2.6.0 ***
-
-Changes:
---------
-
-+ 1px rounded corners in Sam-Skin, added in 2.3.0, are no longer
-  rendered in IE6 or IE7.
-  
-  hasLayout and relative positioning applied 
-  to the header, body and footer elements to achieve the 1px 
-  rounded corners had functional side effects (such as the inability
-  to shrink-wrap auto width containers, and the creation of invalid
-  stacking contexts)
-  
-  1px rounded corners can be re-applied with a CSS patch if required,
-  as discussed on the container documentation web page.
-  
-+ We now attempt to focus the first focusable element inside a Panel,
-  when it is shown (as is done with Dialog).
-  
-+ Setting the "height" configuration property will now result in the 
-  container's body element being resized to fill out any empty 
-  vertical space. This behavior can be configured using the 
-  "autofillheight" configuration property discussed below.
-
-Added the following features:
------------------------------
-
-+ Added a new "preventcontextoverlap" configuration property used 
-  to manage whether or not an Overlay instance should overlap its 
-  context element (defined using the "context" configuration property)
-  when the "constraintoviewport" configuration property is set 
-  to "true".
-
-+ Added ability to specify event triggers when using the "context"
-  configuration property. The container wil re-align itself with 
-  the context element in response to these trigger events.
-
-  See context configuration property documentation for usage details.
-  
-+ Added "autofillheight" configuration property, which is set to "body"
-  by default. This configuration property can be used to specify which
-  of the 3 container element - "header", "body", "footer" should be
-  resized to fill out any remaining vertical space when the container's
-  "height" configuration property is set.
-
-  The property can be set to false/null to disable the feature if 
-  desired.
-  
-+ Panel now supports focusFirst and focusLast methods, as 
-  well as tab, shift-tab looping when modal (similar to Dialog).
-
-Fixed the following bugs:
--------------------------
-
-+ Fixed issue with tooltip iframe remaining visible in situations
-  where the page was scrolled down.
-  
-+ Fixed OverlayManager.find to return null, if the Overlay cannot
-  be found.
-
-+ OverlayManager no longer overwrites focus or blur methods on the 
-  registered container, if they already exist (e.g. for Menu). Instead
-  it registers focus/blur event listeners to maintain OverlayManager
-  state in such situations.
-  
-+ Panels/Dialogs without a fixed width specified (auto width containers) 
-  now shrink-wrap correctly in IE6, IE7 (see 1px rounded corner discussion 
-  above)
-
-+ Added text to the close icon, to enhance accessibility for screen 
-  readers. Also changed the close icon element from a span, to an anchor
-  to facilate keyboard tab access.
-  
-+ Added title to text resize monitor iframe, to assist screen readers.
-
-+ Fixed modal mask resizing when going from a larger to a smaller window
-  size.
-  
-+ hideMaskEvent is now fired after all modal mask relatd state changes 
-  (including changes to the document.body) have taken place. 
-  
-  Originally it was fired before removing the "masked" class from 
-  document.body.
-  
-+ Fixed Sam Skin look/feel for default Dialog buttons. Originally 
-  disabled default buttons looked the same as enabled default buttons.
-  
-+ Fixed asynchronous Dialog submission failure for cases where the form
-  contained elements named "action" or "method".
-  
-+ Fixed Dialog button focus methods when using YUI Buttons.
-
-+ Modal Dialogs buttons are now included in the tab, shift-tab flow. 
-  Originally buttons in Modal dialogs were unreachable when tabbing.
-  
-+ Individual focus handlers attached to all non-container focusable
-  elements (used to enforce modality), resulted in poor performance 
-  when showing/hiding modal Panels, especially in IE, on pages with
-  a large number of focusable elements.
-  
-  Instead of individual listeners, Panel now registers a single 
-  focus listener on the document to enforce modality, improving
-  performance and scalability for modal solutions.
-  
-+ Files for optional component dependencies (e.g. animation, dragdrop,
-  connection) can now be included after container's js files, without
-  breaking related functionality.
-  
-+ Fixed Config to remove (null out) current entry from the 
-  config queue, before invoking fireEvent for the entry, to 
-  keep it from being re-added to the end of the queue if 
-  listeners were to set a property which superceded the entry.
-
-*** version 2.5.2 ***
-
-+ No change.
-
-*** version 2.5.1 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Module.setBody, setHeader and setFooter methods now accept
-  DocumentFragments. This feature was implicitly available
-  in versions prior to 2.5.0 and is now officially supported.
-
-Changes:
---------
-
-+ Optimized addition of Modality focus handlers on masked
-  elements (which are used to enforce modality) and added 
-  ability to disable feature, to avoid timeout script errors 
-  in IE if your page contains a very large number of focusable 
-  elements.
-
-  Additionally changes to Event in 2.5.1 should allow
-  for increased scalability, when using Modal panels containing
-  large numbers of focusable elements on the page.
-
-  Added a YAHOO.widget.Panel.FOCUSABLE property, defining 
-  the set of elements which should have focus handlers applied 
-  when covered by the Modal mask.
-
-  If you wish to disable the addition of focus handlers to all
-  focusable elements on the page when a Modal Panel is displayed,
-  the property can be set to an empty array:
-
-        YAHOO.widget.Panel.FOCUSABLE = [];
-
-  NOTE: This will mean that elements under mask may still be
-  accessible using the keyboard, however the mask will still 
-  prevent mouse access to elements.
-
-*** version 2.5.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ We now add the text resize monitor iframe to the DOM in a timeout,
-  to help alleviate the perpetual loading indicator seen in 
-  Firefox 2.0.0.8 (Gecko 1.8.1.8) and above on Windows.
-
-+ Changed the closing script tag string used in the resize monitor, to 
-  allow container-min.js, container_core-min.js content to be used inline.
-
-+ Fixed problem with underlay size being too short in IE6 when setting up
-  an initially visible Dialog with buttons.
-  
-+ Removed overflow:auto applied to the modal mask for all browsers other 
-  than gecko/MacOS to help avoid the "missing text cursor" Gecko bug. 
-  Overflow:auto is still applied to for Gecko/MacOS to help avoid 
-  scrollbar bleedthrough, another Gecko bug (discussed in Container's 
-  known issues section).
-  
-Added the following features:
------------------------------
-
-+ Added a "hideaftersubmit" config property to Dialog, to allow the end
-  user to configure whether or not the Dialog should be hidden after
-  it has been submitted. By default it is set to false, to provide 
-  backwards compatibility.
-  
-+ Added contextMouseOverEvent, contextMouseOutEvent and 
-  contextTriggerEvent events to Tooltip, which provide access to the 
-  context element when the user mouses over a context element, mouses 
-  out of a context element, and before a tooltip is about to be 
-  triggered (displayed) for a context element. See the API docs for
-  these events for futher details.
-  
-+ Added a "disabled" config property to Tooltip, to allow the user
-  to dynamically disable a tooltip.
-  
-Changes:
---------
-
-+ Optimized constraintoviewport handling for Overlays which haven't
-  been specifically positioned, so that the constraint checks aren't
-  made before every show.
-
-*** version 2.4.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ constraintoviewport and fixedcenter now handle Overlays which are 
-  larger than the viewport. The Overlay will be positioned such that
-  it's top, left corner is in the viewport. Panel's draggable 
-  behavior now also honors constraintoviewport, if the panel is 
-  larger than the viewport.
-
-+ constrainToViewport will now correctly constrain Overlays which 
-  haven't been specifically positioned (don't have an XY value set).
-
-+ Overlay/OverlayManager bringToTop methods will bring Overlays to 
-  the top of the stack, even if their current zindex is the same as 
-  other Overlays on the page.
-
-+ Fixed double textResizeEvents fired on gecko based browsers (e.g
-  Firefox 2.x).
-
-+ Panel underlay now resizes correctly in Safari 2.x, when the 
-  content of the Panel is modified (e.g. when setBody() is called).
-  
-+ Tooltip "text" configuration property is no longer overridden by
-  the "title" attribute value on the context element if both are
-  set. The "text" configuration property takes precedence 
-  (as indicated in the Tooltip documentation).
-
-+ Transparent shadows no longer become opaque (black) in IE6/IE7 
-  when a Panel with ContainerEffect.FADE is hidden and then 
-  shown again. Also on IE6/IE7 transparent shadows no longer 
-  appear opaque while animation is in progress.
-
-+ An empty header is no longer created for non-draggable 
-  Dialogs/SimpleDialogs which don't provide their own headers.
-  By design, an empty header is still created for draggable 
-  Dialogs/SimpleDialogs which don't provide a header, in order 
-  to provide a drag handle.
-  
-+ Select boxes inside Modal Panels on IE6 are no longer hidden.
-
-+ In Sam Skin, Dialog/SimpleDialog default and non-default HTML 
-  buttons (used when YUI Button is not included on the page) now 
-  have a consistent look. Previously style properties intended 
-  for default YUI Buttons, were being incorrectly applied to 
-  default HTML buttons, giving them a look inconsistent with 
-  non-default buttons.
-
-Added the following features:
------------------------------
-
-+ Added "dragOnly" configuration property to Panel, to leverage
-  the "dragOnly" configuration property added to the DragDrop 
-  utility for 2.4.0.
-
-  When the "dragOnly" configuration property is set to true,
-  the DD instance created for the Panel will not check for drop 
-  targets on the page, improving performance during drag operations 
-  which don't require drop target interaction.
-
-  The property is set to "false" by default to maintain backwards
-  compatibility with older 2.x releases, but should be set to "true"
-  if no drop targets for the Panel exist on the page.
-
-  See the DragDrop utilities 2.4.0 README for additional information.
-
-*** version 2.3.1 ***
-
-Fixed the following bugs:
--------------------------
-
-+ To help reduce the occurrence of "Operation Aborted" errors in IE, 
-  containers which are rendered to the document's BODY element (e.g. 
-  myOverlay.render(document.body)) are now inserted before the first
-  child of the BODY element. This applies to both the container 
-  element as well as the iframe shim if enabled.
-
-  Prior to 2.3.1, these two elements were appended as the last 
-  children of the BODY element.
-
-  When rendering to any other element on the page, the behavior is 
-  unchanged and both the container and shim are appended as the last 
-  children of the element.
-
-  Upgrade Impact For Containers Rendered To Document.Body
-  -------------------------------------------------------
-  If you have an xy coordinate and non-zero z-index specified for 
-  your container there should be no negative impact.
-  
-  If you haven't specified an xy position, the fix could result
-  in a shift in your container position, depending on other elements
-  on the page.
-
-  If you haven't specified a z-index and are relying on DOM order to 
-  stack the container, you may see a change in stacking order of 
-  the container or iframe shim.
-
-  Both these changes can be resolved by setting a specific z-index
-  and position based on the layout of other elements on your page.
-  
-  If you do need to revert to 2.3.0 behavior, a configuration property
-  "appendtodocumentbody" has been added to Module, which can be set to
-  true.
-
-  The change to stacking order is discussed in detail below in 
-  relation to other z-index fixes made for 2.3.1.
-
-+ Z-index is now applied correctly for Overlay/Panel elements, their 
-  corresponding iframe shims, and modal masks (for Panels).
-  This fix applies to both the default z-index based on the CSS 
-  for the Overlay/Panel and specific z-indices set using the 
-  "zindex" configuration parameter.
-
-  Default z-index values are:
-
-     Overlay/Panel element: 2
-     Iframe shim: 1
-     Mask: 1
-  
-  The iframe shim and modal mask z-index will always be set to one less
-  than the Overlay/Panel z-index.
-
-  PLEASE NOTE:
-  
-  As a result of the fix to reduce "Operation Aborted" errors,
-  setting a z-index of 1 on an Overlay/Panel rendered to document.body 
-  will result in its iframe shim and modal mask (which will have a 
-  z-index of 0) being rendered behind other positioned elements in the 
-  document.
-
-  This is because the Overlay/Panel, iframe shim and mask are 
-  inserted as the first children of the BODY element and hence any 
-  positioned elements with a z-index of 0 or auto which occur after 
-  them in the document will be stacked on top of them as per W3C spec.
-
-  If you need to keep the Overlay/Panel above positioned elements on your 
-  page, it's z-index needs to be set to 2 or more.
-
-  In general it's advisable to manage the z-index of positioned elements 
-  on your page deliberately by setting a z-index, to avoid having their 
-  order in the document define their stacking order.
-  
-  For detailed stacking order information see:
-  - http://www.w3.org/TR/CSS21/visuren.html#layers
-  - http://developer.mozilla.org/en/docs/Understanding_CSS_z-index:The_st
-    acking_context
-
-+ Module now correctly recognizes standard module header, body and footer 
-  DIVs when they have extra CSS classes applied in addition to the 
-  required hd, bd, and ft classes. e.g. <div class="bd news"></div>.
-
-+ An empty header (set to $#160;) is created for draggable Panels which
-  don't have a header specified, to provide a drag handle. This fixes a
-  regression introduced in 2.3.0 so that 2.2.2 behavior is restored.
-  
-+ Dialog.destroy has been fixed to account for Dialog form elements which 
-  may not be direct children of the standard module body ("bd") element.
-
-+ SimpleDialog.destory now completes successfully if the optional 
-  button-beta.js dependancy is not included on the page.
-  
-+ Destroying Overlays registered with the OverlayManager no longer results in a 
-  JavaScript error. The Overlay is destroyed and removed from the 
-  OverlayManager correctly.
-  
-+ Submitting a Dialog form directly (e.g. using a "submit" button, hitting
-  enter on a single text field form) no longer throws a JavaScript error.
-
-Known Issues
-------------
-
-+ IE: Borders for tables with border-collapse:collapse remain visible
-  -------------------------------------------------------------------
-  If an Overlay, or any of its subclasses, contains a table with its
-  border-collapse CSS property set to "collapse" instead of the default 
-  value of "separate", the borders of the table will remain visible, when 
-  the Overlay is configured to be hidden initially. The table contents 
-  will be hidden correctly.
-  
-  This is due to an IE bug, reproducible by the basic test case below:
-  
-     <style type="text/css">
-        .box  {visibility:hidden;}
-        td    {border:1px solid red;}
-        table {border-collapse:collapse;}
-     </style>
-
-     <div class="box">
-        <table>
-           <tr>
-               <td>1</td>
-               <td>2</td>
-           </tr>
-        </table>
-     </div>
-
-  Setting the DIV elements "style.visibility" JS property fixes the 
-  problem with the simple test case. NOTE: Setting the style in markup 
-  using the DIV's style attribute does not.
-
-  Extending this to Container, the simplest workaround if you're not 
-  using effects, is to use Overlay's hide() method to setup visibility. 
-  This will set the Overlay's element "style.visibility" property. e.g.
-
-      // Start visible, then hide.
-      var ovr = YAHOO.widget.Overlay("ovr");
-      ovr.render();
-      ovr.hide();
-      
-  You can also apply this workaround if you want to use effects by 
-  setting the effect up after you hide. e.g.
-  
-      // Start visible, but don't apply effects, 
-      // to avoid initial animation.
-      var ovr = YAHOO.widget.Overlay("ovr");
-      ovr.render();
-      ovr.hide();
-      ovr.cfg.setProperty("effect", {effect:.....});
-
-  If initial flicker is a problem with the above, you can set the 
-  visibility directly on the Overlay element after rendering e.g.
-
-      var ovr = YAHOO.widget.Overlay("ovr", {visible:false});
-      ovr.render();
-      YAHOO.util.Dom.setStyle(ovr.element, "visibility", "hidden");
-
-  but if possible one of the previous methods should be used since 
-  they use the public API as opposed to manipulating the DOM directly.
-
-*** version 2.3.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Improved creation of the <iframe> element used to monitor changes to the 
-  browser's font size so that:
-  
-    - Safari's status bar no longer displays a "Loading..." message after the 
-      page has loaded.
-  
-    - Firefox no longer reports duplicate cookie information.
-    
-    - The browser scrollbars no longer flash on and off in Firefox.
-
-+ It is now possible to set the "button" configuration property of a 
-  YAHOO.widget.Dialog instance after it has be rendered.
-
-+ Form elements appended to a YAHOO.widget.Dialog instance via the "setBody"
-  method are now automatically registered using the "registerForm" method.
-
-+ The "focusFirst" method of YAHOO.widget.Dialog will no longer result in a 
-  JavaScript error in IE if the first element in the Dialog instance's form
-  is a radio button.
-
-+ YAHOO.widget.Panel instances whose "draggable" property is set to "true" and
-  "width" property is set to "auto" are now able to be dragged in IE 6 (Quirks
-  and Strict Mode) and IE 7 Quirks Mode.
-
-+ Updated focus methods of YAHOO.widget.Dialog to prevent JavaScript errors 
-  that result from trying to set focus to elements that hidden or disabled.
-
-+ Pressing the enter key will no longer result in a YAHOO.widget.Dialog 
-  instance's "validate" method being called twice.
-
-+ Pressing the enter key while focused on a form field inside a Dialog will no
-  longer trigger the "click" event handler defined by the Dialog's default 
-  button in IE and Firefox.
-
-+ Pressing the enter key when focused on a form field inside a 
-  YAHOO.widget.Dialog instance with no buttons created via its "buttons" 
-  configuration property will no longer result in a JavaScript error.
-
-+ Aqua scrollbars will no longer bleed through Container widgets in Firefox
-  for Mac OS X.
-
-+ The "width" and "height" configuration properties of YAHOO.widget.Overlay
-  now supersede the "fixedcenter" and "context" configuration properties to 
-  ensure correct positioning of Overlay instances using the "fixedcenter" 
-  and "context" configuration properties.
-
-+ Calling the "destroy" method on a YAHOO.widget.Overlay instance no longer 
-  results in a JavaScript error on the subsequent focus of another 
-  Overlay instance.
-
-+ YAHOO.widget.Tooltip instances without a value specified for the "width" 
-  configuration property will be rendered at a width equal to the offsetWidth
-  of their root <DIV/> element to prevent their width from being clipped or 
-  constrained by their parent HTML element.
-
-
-Changes:
---------
-
-+ Rendering of YAHOO.widget.Tooltip instances is now deferred using the 
-  "onDOMReady" event handler of YAHOO.util.Event rather than waiting until 
-  the "load" event of the Tooltip's parent window fires.
-
-+ Deprecated "browser" property of YAHOO.widget.Module in favor 
-  of YAHOO.env.ua.
-
-+ The "moveEvent" of a YAHOO.widget.Panel instance now also fires with the 
-  "endDrag" event of the its YAHOO.util.DD instance.
-
-+ Updated modal functionality of YAHOO.widget.Panel:
-    
-    - The creation of a Panel instance's modality mask is now deferred until it
-      is initially made visible.
-
-    - Showing a modal Panel instance will now result in the Panel and its 
-      associated modality mask element having a higher z-index than all other
-      YAHOO.widget.Overlay instances and Overlay subclasses.
-
-+ Updated the "underlay" configuration property of YAHOO.widget.Panel:
-
-    - The creation of the underlay element is deferred until the Panel
-      instance is initially made visible.
-
-    - For Gecko-based browsers on Mac OS X the underlay elment is always 
-      created as it is used as a shim to prevent Aqua scrollbars below a Panel 
-      instance from poking through it.
-
-    - For IE 7 (Quirks Mode) and IE 6 (Quirks Mode and Standard Mode) the 
-      underlay element is resized in response to a change to a Panel instance's 
-      "width" or "height" configuration properties, a change to the browser's 
-      font size or the firing of the contentChangedEvent (triggered by use of  
-      the "setHeader," "appendToHeader," "setBody," "appendToBody," 
-      "setFooter," or "appendToFooter" methods). 
-
-+ Updated the "iframe" configuration property of YAHOO.widget.Overlay:
-
-    - The creation of the <iframe> shim element is deferred until the Overlay
-      instance is initially made visible.
-
-    - The <iframe> shim element is resized when a change to an Overlay 
-      instance's content is made at runtime via the "setHeader," 
-      "appendToHeader," "setBody," "appendToBody," "setFooter," or 
-      "appendToFooter" methods.
-
-+ Updated the "buttons" configuration property of YAHOO.widget.Dialog:
-
-    - YAHOO.widget.Button is now an optional dependancy, and if included, each
-      button in a Dialog will be an instance of Button.
-
-    - The "text" property of each button now accepts HTML
-    
-    - The "handler" property of each button can now be set to:
-    
-        + A reference to a function that should fire when the button is 
-          clicked.  (In this case scope of this function is always its 
-          Dialog instance.)
-
-        + An object literal representing the code to be executed when the 
-          button is clicked.  The format is:  
-          {
-            fn: Function (The handler to call when the event fires.),
-            obj: Object (An object to pass back to the handler.),
-            scope: Object (The object to use for the scope of the handler.)
-          }   
-
-
-Added the following features:
------------------------------
-
-+ Added ability for YAHOO.widget.Tooltip instances to have shadow:
-
-    - The shadow for a Tooltip is implemented by appending a new element as the 
-      last child of its root <DIV/> element:
-
-        <DIV class="yui-tt">
-            <DIV class="bd"> ... </DIV>
-            <DIV class="yui-tt-shadow"/>
-        </DIV>
-
-    - The code that creates the shadow element resides inside the Tooltip's 
-      public "onRender" prototype method.  To disable the creation of a 
-      Tooltip's shadow override the prototype of the "onRender" method:
-      
-      YAHOO.widget.Tooltip.prototype.onRender = function () {};
-      
-    - The actual creation of the shadow element is deferred until the Tooltip 
-      is made visible for the first time.
-
-    - A Tooltip's shadow element can be styled via two CSS classes:
-
-        + "yui-tt-shadow"  - Applied to the shadow element when it is created.
-        + "yui-tt-shadow-visible" - Applied to the shadow element when the  
-          Tooltip is visible; it is removed the Tooltip is hidden.
-
-    - The shadow element is only styled when using the new "Sam" skin, for
-      the previous default skin its "display" property is set to "none."
-
-+ Prototype of all classes (Module, Overlay, Panel, Dialog, SimpleDialog,  
-  Tooltip, Config, and ContainerEffect) are augmented with 
-  YAHOO.util.EventProvider, facilitating subscribing to an instance's 
-  Custom Events by name via a "subscribe" method that is a direct member of 
-  the class.  For example:
-  
-    var oOverlay = new YAHOO.widget.Overlay("myoverlay");
-    
-    oOverlay.subscribe("show", onShow);
-
-+ Added a new "bringToTop" method to YAHOO.widget.Overlay that places the 
-  Overlay on top of all other Overlay instances.
-
-+ Added a new "bringToTop" method to YAHOO.widget.OverlayManager that places 
-  the specified Overlay instance on top of all other Overlay instances.  This 
-  method is called on each Overlay instance that is registered with an 
-  OverlayManager instance.
-
-+ Dialog instances are now able to upload files should the Dialog instance's 
-  form contain <input type="file"/> elements.  PLEASE NOTE: If a Dialog 
-  instance will be handling asyncronous file uploads, its "callback" property 
-  will need to be setup with an "upload" handler rather than the standard 
-  "success" and, or "failure" handlers.  For more information, see the 
-  Connection Manager documenation on file uploads:
-  http://developer.yahoo.com/yui/connection/#file
-
-+ Added a new "getButtons" method to YAHOO.widget.Dialog that returns an array 
-  containing each of the Dialog's buttons; by default an array of HTML <BUTTON>
-  elements.  If the Dialog's buttons were created using the 
-  YAHOO.widget.Button class (via the inclusion of the optional Button
-  dependancy on the page), an array of YAHOO.widget.Button instances 
-  is returned.
-
-+ Added a "destroy" method to YAHOO.util.Config that sets all properties to 
-  null, unsubscribes all listeners from each property's change event and all 
-  listeners from the configChangedEvent.  The "destroy" method of 
-  YAHOO.widget.Module now automatically calls the "destroy" method of its
-  configuation object.
-
-+ Added a "IFRAME_OFFSET" constant to YAHOO.widget.Overlay that controls how 
-  much the <iframe> shim should be offset from each side of an 
-  Overlay instance.
-
-+ Added a new "syncIframe" method to YAHOO.widget.Overlay that syncronizes the 
-  size and position of the <iframe> shim to that of the Overlay.
-
-+ Added a "ICON_CSS_CLASSNAME" constant to YAHOO.widget.SimpleDialog that 
-  represents the name of the CSS class applied to the element created by the 
-  "icon" configuration property.
-
-  
-Known Issues
-------------
-
-+ "Sam" skin Panel missing left and right borders when declared with a height
-  ---------------------------------------------------------------------------
-  If the height of a Panel instance exceeds the total height of its header, 
-  body and footer elements, the space not filled with content will lack a left 
-  and right border.  Therefore, to set a Panel instance to a fixed height 
-  when using the "Sam" skin, apply the desired height to the body element, 
-  taking into account the height of the header and footer elements.  To set the 
-  height of a Panel instance's body via CSS:
-  
-  #mypanel .bd {
-    height: 100px;
-  }
-  
-  Or via JavaScript:
-  
-  oMyPanel.body.style.height = "100px";
-
-+ Elements with scrollbars poke through Overlay instances floating above them
-  ---------------------------------------------------------------------------
-  There is a bug in Gecko-based browsers for Mac OS X where an element's 
-  scrollbars will poke through absolutely positioned elements floating above
-  them.  To fix this problem the "overflow" property of an Overlay instance's 
-  root element is toggled between "hidden" and "auto" (through the application 
-  and removal of the "hide-scrollbars" and "show-scrollbars" CSS classes) as its 
-  "visibility" configuration property is toggled between "false" and "true."
-  
-  PLEASE NOTE:  
-  
-  1) The "hide-scrollbars" and "show-scrollbars" CSS classes classes are 
-     applied only for Gecko on Mac OS X and are added/removed to/from the 
-     Overlay's root HTML element (DIV) via the "hideMacGeckoScrollbars" and 
-     "showMacGeckoScrollbars" methods of YAHOO.widget.Overlay.
-     
-  2) For Panel (and its subclasses) it is the underlay element, not the root 
-     element, whose "overflow" property is toggled between "hidden" and "auto."
-     The underlay element therefore acts as a shim to correct the 
-     scrollbar problem.
-     
-  3) For Tooltip instances using the "Sam" skin it is the shadow element, not 
-     the root element, whose "overflow" property is toggled between "hidden" 
-     and "auto."  The shadow element therefore acts as a shim to correct the 
-     scrollbar problem.
-     
-  4) Once the fix is applied the bug will reappear if the window loses focus.  
-     This can be remedied via Javascript by hiding and showing the Overlay 
-     instance when the window receives focus:
-
-        YAHOO.util.Event.on(window, "focus", function () {
-        
-            oMyOverlay.hide();
-            oMyOverlay.show();
-        
-        });
-
-    ** For more information see 
-     https://bugzilla.mozilla.org/show_bug.cgi?id=187435
-
-+ Scrollbars remain visible after an Overlay is hidden
-  ----------------------------------------------------
-  There is a bug in Gecko-based browsers for Mac OS X where an element's 
-  scrollbars and the scrollbars of its child nodes remain visible when its 
-  "visibility" property property is set to "hidden."  To fix this problem,
-  the "overflow" property of an Overlay instance's root element and child nodes
-  is toggled between "hidden" and "auto" (through the application and removal 
-  of the "hide-scrollbars" and "show-scrollbars" CSS classes) as its 
-  "visibility" configuration property is toggled between "false" and "true."
-
-  PLEASE NOTE:  
-  
-  1) The "hide-scrollbars" and "show-scrollbars" CSS classes classes are 
-     applied only for Gecko on Mac OS X and are added/removed to/from the 
-     Overlay's root HTML element (DIV) via the "hideMacGeckoScrollbars" and 
-     "showMacGeckoScrollbars" methods of YAHOO.widget.Overlay.
-  
-  2) There may be instances where the CSS for a web page or application 
-     contains style rules whose specificity override the rules implemented by 
-     the Container CSS files to fix this bug.  In such cases, is necessary to 
-     leverage the provided "hide-scrollbars" and "show-scrollbars" classes to 
-     write custom style rules to guard against this bug.  For example:
-  
-     To fix the scrollbars issue for an Overlay instance with an id of 
-     "myoverlay" whose body element has scrollbars applied by default:
-
-        #myoverlay .bd {
-        
-            height: 100px;
-        
-            /* Apply scrollbars for all browsers. */
-            overflow: auto;
-        
-        }
-        
-        #myoverlay.hide-scrollbars .bd {
-        
-            /* Hide scrollbars by default for Gecko on OS X */
-            overflow: hidden;
-            
-        }
-        
-        #myoverlay.show-scrollbars .bd {
-        
-            /* Show scrollbars for Gecko on OS X when the Overlay is visible */
-            overflow: auto;
-            
-        }        
-    
-     To fix the scrollbars issue for a Panel instance with an id of "mypanel" 
-     whose body element has scrollbars applied by default:
-    
-        #mypanel .bd {
-        
-            height: 100px;
-        
-            /* Apply scrollbars for all browsers. */
-            overflow: auto;
-        
-        }
-        
-        .yui-panel-container.hide-scrollbars #mypanel .bd {
-        
-            /* Hide scrollbars by default for Gecko on OS X */
-            overflow: hidden;
-            
-        }
-        
-        .yui-panel-container.show-scrollbars #mypanel .bd {
-        
-            /* Show scrollbars for Gecko on OS X when the Panel is visible  */
-            overflow: auto;
-            
-        }
-
-    ** For more information see 
-       https://bugzilla.mozilla.org/show_bug.cgi?id=187435
-
-+ Flash Movies appear on top of Overlay instances
-  -----------------------------------------------
-  Flash movies can appear on top of Overlay instances in IE and Gecko-based
-  browsers.  To fix this problem, set the "wmode" of the Flash movie to either
-  "transparent" or "opaque" as indicated below: 
-
-  Via the <object> tag:
-
-    <object>
-        <param name="wmode" value="opaque">
-    </object>
-
-    <object>
-        <param name="wmode" value="transparent"> 
-    </object>
-
-  Via the <embed> tag:
-    
-    <embed wmode="transparent"> ... </embed>
-    <embed wmode="opaque"> ... </embed>
-
-    ** For more information see 
-       http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_15523
-
-+ Overlay instances not rendered at correct z-index in IE
-  -------------------------------------------------------
-  In IE, when an Overlay instance is rendered inside a relatively positioned 
-  element the z-index of the Overlay instance is now relative to its 
-  relatively positioned parent element.  This is not a bug in the 
-  Overlay class, but rather a bug in IE where relatively positioned elements 
-  establish a new stacking context for their child nodes.  To avoid this 
-  bug it is recommend that all Overlay instances that need to be able to float
-  above any other element in the document be made direct descendants of the 
-  <body> element.
-
-  ** For more information see 
-   http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html
-
-+ Header elements for Panel instances using "Sam" skin shrinkwrap in IE 7
-  -----------------------------------------------------------------------
-  In IE 7 (Standards Mode) if a Panel instance is created without specifying a
-  value for the "width" configuration property the width of the Panel's 
-  header element will shrinkwrap to the width of its text node.  To avoid 
-  triggering this bug in IE always specify a value for the "width" 
-  configuration property when using Panel.
-
-+ Panel instances render at 100% of the browser viewport
-  ------------------------------------------------------
-  In IE 7 (Quirks Mode) and IE 6 (Quirks Mode and Standards Mode) if any of the 
-  child nodes of a Panel instance's root element have "layout" 
-  (http://msdn2.microsoft.com/en-us/library/ms533776.aspx) and no value
-  has been specified for the "width" configuration property, the Panel will 
-  render at 100% of the width of browser's viewport.  This bug will manifest
-  when using the "Sam" skin as layout is applied to the header, body and 
-  footer elements (by setting the CSS "zoom" property of the element to "1" ) 
-  in order to get the negative margins required for the rounded corners to 
-  render correctly.  To avoid triggering this bug in IE always specify a value
-  for the "width" configuration property when using Panel.
-
-+ Panel instances render at 2px wider when using "Sam" skin 
-  ---------------------------------------------------------
-  For the "Sam" skin a Panel instance's rounded corners are created via the 
-  application of negative 1px left and right margins on the header, body and 
-  footer elements.  These negative margins will cause a Panel instance to be 
-  rendered at 2px wider than the value specified by the "width" configuration 
-  property.  Therefore, when using the "Sam" skin consider the negative left 
-  and right margins and subtract 2 from the value passed to the "width" 
-  configuration property in order to have the Panel render at the desired 
-  width.  For example, to render a Panel 300px wide, pass a value of "298px" 
-  to the "width" configuration property.
-
-
-*** version 2.2.2 ***
-
-+ Clicking the close button of a Panel (or any instance of a Panel subclass) 
-  registered with an OverlayManager will no longer result in the Panel 
-  receiving focus.
-
-+ Overlay instances registered with an OverlayManager will now correctly 
-  blur themselves when hidden.
-
-+ Calling the "destroy" method of an Overlay instance will now result in it 
-  being removed from its OverlayManager instance(s).
-
-+ The DOM event listener for the event defined by the "focusevent" 
-  configuration property of an OverlayManager instance is now removed from each 
-  Overlay instance when it is removed from its OverlayManager.
-
-+ All subscribers for an Overlay instance's "focus" and "blur" events are 
-  now unsubscribed when it is removed from its OverlayManager.
-
-
-*** version 2.2.1 ***
-
-+ Made the default scope for all Custom Events published by Module, Overlay, 
-  Panel, Tooltip, Dialog and SimpleDialog the widget instance.  Previously the 
-  default scope for Custom Events was inconsistent across classes; the default
-  scope for Custom Events published by Overlay was always the Overlay instance
-  whereas the Custom Events published by all of the other classes had no 
-  default scope.  
-
-+ Added default scope for CustomEvents published by YAHOO.util.Config:
-  - Default scope for the "configChangedEvent" is now the Config instance.
-  - Default scope for Config property events is now the Config's owner (widget).
-
-+ Panel and Tooltip now always convert the value of a DOM element's "tagName" 
-  property to uppercase before evaluating it.  This improves 
-  XHTML compatibility.
-  
-+ Pressing the enter key while focused on a form field inside a Dialog will 
-  now trigger the "click" event handler defined by the Dialog's default 
-  button in IE and Firefox.  Previously, this behavior only worked in Safari 
-  and Opera.
-
-+ Added a "yui" prefix to the default CSS class name for Module to be 
-  consistent with the other Container family widgets.
-
-+ Container/Panel's underlay shadow is now defined as partially-transparent
-  black rather than gray.  This prevents the shadow from lightening the 
-  background color of elements beneath it.
-
-+ Fixed memory leaks in Panel and Dialog.
-
-+ The Drag and Drop library is now a truly optional dependency for Panel and its 
-  subclasses.
-
-+ Panel "focus" and "blur" events are now fired when Panels are focused and 
-  blurred via the "focus" and "blurAll" methods of YAHOO.widget.OverlayManager.
-
-+ Panel instances rendered without setting the value for the "width" 
-  configuration property will now have their "width" configuration 
-  property set to the value of the Panel's element's "offsetWidth" property 
-  when rendered.  This fixes an issue in IE 6 and 7 where Panels that are 
-  rendered without setting the "width" configuration property will only be 
-  draggable by mousing down on the text inside the header, rather than anywhere 
-  inside the header.
-  
-+ Refactored the Container family including the Config class to improve 
-  performance, especially when working with a large number of instances in IE6.
-
-
-
-*** version 2.2.0 ***
-
-    Module
-       - Removed hardcoded file paths for image roots.  Affected properties
-       include:
-        - YAHOO.widget.Module.IMG_ROOT
-        - YAHOO.widget.Module.IMG_ROOT_SSL
-       - HTML elements, created via createElement, now use lowercase.
-
-    Panel
-       - To shield against CSS class collision, the following references now
-       have a "yui-" prefix:
-          - YAHOO.widget.Panel.CSS_PANEL now references CSS class "yui-
-          panel".
-          - YAHOO.widget.Panel.CSS_PANEL_CONTAINER now references CSS class
-          "yui-panel-container".
-       -  Close button can now be configured via the CSS class "container-
-       close".
-       - HTML elements, created via createElement, now use lowercase.
-
-    Dialog
-       - To shield against CSS class collision, the following references now
-       have a "yui-" prefix:
-        - YAHOO.widget.Dialog.CSS_DIALOG now references CSS class "yui-
-        dialog".
-       - HTML elements, created via createElement, now use lowercase.
-
-    SimpleDialog
-       - Removed hardcoded file paths for SimpleDialog icons, which are now
-       configurable in CSS:
-          - YAHOO.widget.SimpleDialog.ICON_BLOCK now references CSS class
-          "blckicon".
-          - YAHOO.widget.SimpleDialog.ICON_ALARM now references CSS class
-          "alrticon".
-          - YAHOO.widget.SimpleDialog.ICON_HELP now references CSS class
-          "hlpicon".
-          - YAHOO.widget.SimpleDialog.ICON_INFO now references CSS class
-          "infoicon".
-          - YAHOO.widget.SimpleDialog.ICON_WARN now references CSS class
-          "warnicon".
-          - YAHOO.widget.SimpleDialog.ICON_TIP now references CSS class
-          "tipicon".
-       - To provide shield against CSS class collision the following
-       references now have a "yui-" prefix:
-          - YAHOO.widget.SimpleDialog.CSS_SIMPLEDIALOG now references CSS
-          class "yui-simple-dialog";
-
-    Tooltip
-       - To shield against CSS class collision, the following references now
-       have a "yui-" prefix:
-          - YAHOO.widget.Tooltip.CSS_TOOLTIP now references CSS class "yui-
-          tipicon" "yui-tt";
-
-*** version 0.12.2 ***
-
-    Module
-       - Corrected issue where listener was not properly removed from resize
-       monitor element when "monitorresize" is disabled
-
-    Panel
-       - Fixed issue that would sometimes prevent select lists from working
-       properly in Firefox
-
-    Dialog
-       - Fixed error that would occur when trying to create a Dialog where
-       the first form element is set to "disabled"
-       - Modified "close" property handler for Dialog/SimpleDialog to call
-       "cancel" instead of "hide"
-
-*** version 0.12.1 ***
-
-    All Classes
-       - "monitorresize" property now functions in situations where
-       document.domain has been modified.
-       - YAHOO.widget.Module.textResizeEvent now fires when the font size is
-       changed (except for Opera, which uses "zoom" functionality that
-       prevents this)
-       - Event listeners attached to container elements are now properly
-       purged on destroy using YAHOO.util.Event.purgeElement
-
-    Panel
-       - Fixed issue where focus events were broken on the page when a modal
-       Panel was created
-
-    Dialog
-       - Fixed bug where hitting "enter" on a Dialog was forcing the default
-       submission behavior of the form's action to execute
-       - Dialog no longer tries to give focus to hidden form elements.
-       - Replaced   references in Panel with   for XHTML
-       compliance.
-       - Fixed issue that was preventing Safari from successfully using the
-       getData() function
-
-*** version 0.12 ***
-
-    All Classes
-       - New documentation format implemented, and removed unnecessary
-       prototype null references previously used for generating
-       documentation
-
-    Config
-       - Added 'undefined' check when reading initial properties for
-       .reset()
-       - Fixed Firefox warning on .resetProperty()
-       - Fixed issue preventing resetProperty() from resetting values
-       correctly
-
-    Module
-       - Removed unused "childNodesInDom" property
-
-    Overlay
-       - Converted center() to use Dom utility
-       - Fixed configVisible() to properly detect actual visible/hidden
-       status in Internet Explorer, which reports "inherit" for all elements
-       by default.
-       - Updated onDomResize to properly reapply "context" property
-       - Unified scroll/resize handlers so that they fire properly (when the
-       event has completed) as opposed to constantly (as seen in Mozilla-
-       based browsers)
-
-    Panel
-       - Modified modality mask to show before Panel is shown (prior to any
-       animation)
-       - Modified buildWrapper to eliminate cloning of the initial markup
-       module, which fixes issues with select options not maintaining their
-       default selections in IE
-       - Modality mask is now z-indexed properly so that the mask z-index is
-       always one less than the Panel z-index
-
-    Dialog
-       - Fixed Connection to get "action" attribute using getAttribute, to
-       allow for form fields named "action"
-       - Added support for "GET" by retrieving the form "method" rather than
-       always defaulting to "POST"
-
-    KeyListener
-       - Fixed to work properly with Safari 2.0 by matching against keyCode
-       or charCode
-
-*** version 0.11.4 ***
-
-    - Panel: Modality mask is now properly removed from DOM on Panel
-    destroy.
-
-*** version 0.11.3 ***
-
-    - Module: Fixed SSL warning issue in IE
-    - Overlay: Fixed memory leak related to iframe shim in IE
-    - Panel: No focusable elements under the mask can now be tabbed to
-    - Panel: Set Panel container overflow to hidden to fix scrolling issue
-    in Opera 9
-
-*** version 0.11.2 ***
-
-    - All: JsLint optimization
-    - Overlay: Fixed SSL issues with monitorresize property
-    - OverlayManager: Fixed z-index incrementing issues
-    - Dialog: Form elements called "name" will now function properly
-    - Dialog: Removed unnecessary scope:this reference
-
-*** version 0.11.1 ***
-
-    - Tooltip: Removed incorrect logger statement
-    - Dialog: Corrected logic that was causing browser lockup in IE for
-    SimpleDialog
-    - Dialog: Fixed "firstButtom" typo
-
-*** version 0.11.0 ***
-
-    - toString function added to all classes for easy logging
-    - YAHOO.extend is now being used for inheritance on all container
-    classes
-    - Module: monitorresize feature now works on all browsers
-    - Module: Fixed bug with image root and isSecure
-    - Overlay: Fixed bugs related to IFRAME shim positioning
-    - Overlay: center() now works in quirks mode
-    - Overlay: Overlay now has a custom destroy() method that also removes
-    the IFRAME shim
-    - OverlayManager: Fixed bug in the prototype that was preventing
-    multiple Managers on one page
-    - OverlayManager: focusEvent now fires at all appropriate times
-    - Tooltip: context can now be specified as an array, so Tooltips can be
-    reused across multiple context elements
-    - Tooltip: preventoverlap now functions properly for large context
-    elements (i.e, images)
-    - Tooltip: fixed bugs regarding setTimeout
-    - Tooltip: added mousemove event to allow for more accurate Tooltip
-    positioning
-    - Panel: added dragEvent for monitoring all event handlers for drag and
-    drop
-    - Panel: modality mask is now resized on scroll
-    - Panel: KeyListeners are now properly destroyed when the Panel is
-    destroyed
-    - Panel: Header is now sized properly in quirks mode
-    - Dialog: Blinking cursor issue is fixed for Firefox
-    - Dialog: callback object for Connection is now public (this.callback)
-    - Dialog: onsuccess/onfailure properties removed (as a result of the
-    public callback object)
-    - Dialog: Dialog is now invisible by default
-    - Dialog: Buttons are now properly cleaned up on destroy
-
-*** version 0.10.0 ***
-
-* Initial release

Modified: trunk/root/static/yui/container/assets/container-core.css
===================================================================
--- trunk/root/static/yui/container/assets/container-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/assets/container-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-overlay,
 .yui-panel-container {
@@ -11,6 +11,10 @@
     z-index: 2;
 }
 
+.yui-panel {
+    position:relative;
+}
+
 .yui-panel-container form {
     margin: 0;
 }
@@ -140,7 +144,7 @@
     padding-bottom: 1px;
 }
 
-.yui-effect-fade .underlay {
+.yui-effect-fade .underlay, .yui-effect-fade .yui-tt-shadow {
     display:none;
 }
 
@@ -165,4 +169,8 @@
     overflow:hidden;
     text-indent:-10000em;
     text-decoration:none;
+}
+
+.yui-overlay.yui-force-redraw, .yui-panel-container.yui-force-redraw {
+    margin-bottom:1px;
 }
\ No newline at end of file

Modified: trunk/root/static/yui/container/assets/container.css
===================================================================
--- trunk/root/static/yui/container/assets/container.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/assets/container.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-overlay,
 .yui-panel-container {

Modified: trunk/root/static/yui/container/assets/skins/sam/container-skin.css
===================================================================
--- trunk/root/static/yui/container/assets/skins/sam/container-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/assets/skins/sam/container-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Panel modality mask styles */
 .yui-skin-sam .mask {
     background-color: #000;
     opacity: .25;
-    *filter: alpha(opacity=25);  /* Set opacity in IE */
+    filter: alpha(opacity=25);  /* Set opacity in IE */
 }
 
 /* Panel styles */
@@ -128,7 +128,7 @@
 
     background-color: #000;
     opacity: .12;
-    *filter: alpha(opacity=12);  /* Set opacity in IE */
+    filter: alpha(opacity=12);  /* Set opacity in IE */
 }
 
 
@@ -238,5 +238,5 @@
 
 .yui-skin-sam .yui-tt-shadow-visible {
     opacity: .12;
-    *filter: alpha(opacity=12);  /* For IE */
+    filter: alpha(opacity=12);  /* For IE */
 }
\ No newline at end of file

Modified: trunk/root/static/yui/container/assets/skins/sam/container.css
===================================================================
--- trunk/root/static/yui/container/assets/skins/sam/container.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/assets/skins/sam/container.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0 !important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-decoration:none;}.yui-skin-sam .mask{background-color:#000;op!
 acity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yui-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font-size:77%;}.yui-skin-sam .yui-panel-container.focused .yui-panel .hd{}.yui-skin-sam .!
 container-close{position:absolute;top:5px;right:6px;width:25px!
 ;height:
15px;background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-position:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304!
 369;}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0pt -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-position:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon{background-position:0 !
 -1250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;lef!
 t:0;z-in
dex:1;color:#000;padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;border-width:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;*filter:alpha(opacity=12);}
+.yui-overlay,.yui-panel-container{visibility:hidden;position:absolute;z-index:2;}.yui-panel{position:relative;}.yui-panel-container form{margin:0;}.mask{z-index:1;display:none;position:absolute;top:0;left:0;right:0;bottom:0;}.mask.block-scrollbars{overflow:auto;}.masked select,.drag select,.hide-select select{_visibility:hidden;}.yui-panel-container select{_visibility:inherit;}.hide-scrollbars,.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.show-scrollbars{overflow:auto;}.yui-panel-container.show-scrollbars,.yui-tt.show-scrollbars{overflow:visible;}.yui-panel-container.show-scrollbars .underlay,.yui-tt.show-scrollbars .yui-tt-shadow{overflow:auto;}.yui-panel-container.shadow .underlay.yui-force-redraw{padding-bottom:1px;}.yui-effect-fade .underlay,.yui-effect-fade .yui-tt-shadow{display:none;}.yui-tt-shadow{position:absolute;}.yui-override-padding{padding:0!important;}.yui-panel-container .container-close{overflow:hidden;text-indent:-10000em;text-!
 decoration:none;}.yui-overlay.yui-force-redraw,.yui-panel-container.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-panel-container{padding:0 1px;*padding:2px;}.yui-skin-sam .yui-panel{position:relative;left:0;top:0;border-style:solid;border-width:1px 0;border-color:#808080;z-index:1;*border-width:1px;*zoom:1;_zoom:normal;}.yui-skin-sam .yui-panel .hd,.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{border-style:solid;border-width:0 1px;border-color:#808080;margin:0 -1px;*margin:0;*border:0;}.yui-skin-sam .yui-panel .hd{border-bottom:solid 1px #ccc;}.yui-skin-sam .yui-panel .bd,.yui-skin-sam .yui-panel .ft{background-color:#F2F2F2;}.yui-skin-sam .yui-panel .hd{padding:0 10px;font-size:93%;line-height:2;*line-height:1.9;font-weight:bold;color:#000;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;}.yui-skin-sam .yui-panel .bd{padding:10px;}.yui-skin-sam .yu!
 i-panel .ft{border-top:solid 1px #808080;padding:5px 10px;font!
 -size:77
%;}.yui-skin-sam .container-close{position:absolute;top:5px;right:6px;width:25px;height:15px;background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;}.yui-skin-sam .yui-panel-container .underlay{right:-1px;left:-1px;}.yui-skin-sam .yui-panel-container.matte{padding:9px 10px;background-color:#fff;}.yui-skin-sam .yui-panel-container.shadow{_padding:2px 4px 0 2px;}.yui-skin-sam .yui-panel-container.shadow .underlay{position:absolute;top:2px;left:-3px;right:-3px;bottom:-3px;*top:4px;*left:-1px;*right:-1px;*bottom:-1px;_top:0;_left:0;_right:0;_bottom:0;_margin-top:3px;_margin-left:-1px;background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yui-dialog .ft{border-top:none;padding:0 10px 10px 10px;font-size:100%;}.yui-skin-sam .yui-dialog .ft .button-group{display:block;text-align:right;}.yui-skin-sam .yui-dialog .ft button.default{font-weight:bold;}.yui-skin-sam .yui-dialog .ft span.default{border-color:#304369;background-positi!
 on:0 -1400px;}.yui-skin-sam .yui-dialog .ft span.default .first-child{border-color:#304369;}.yui-skin-sam .yui-dialog .ft span.default button{color:#fff;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled{background-position:0 -1500px;border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-dialog .ft span.yui-button-disabled button{color:#a6a6a6;}.yui-skin-sam .yui-simple-dialog .bd .yui-icon{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 0;width:16px;height:16px;margin-right:10px;float:left;}.yui-skin-sam .yui-simple-dialog .bd span.blckicon{background-position:0 -1100px;}.yui-skin-sam .yui-simple-dialog .bd span.alrticon{background-position:0 -1050px;}.yui-skin-sam .yui-simple-dialog .bd span.hlpicon{background-position:0 -1150px;}.yui-skin-sam .yui-simple-dialog .bd span.infoicon{background-position:0 -1200px;}.yui-skin-sam .yui-simple-dialog .bd span.warnicon{background-positio!
 n:0 -1900px;}.yui-skin-sam .yui-simple-dialog .bd span.tipicon!
 {backgro
und-position:0 -1250px;}.yui-skin-sam .yui-tt .bd{position:relative;top:0;left:0;z-index:1;color:#000;padding:2px 5px;border-color:#D4C237 #A6982B #A6982B #A6982B;border-width:1px;border-style:solid;background-color:#FFEE69;}.yui-skin-sam .yui-tt.show-scrollbars .bd{overflow:auto;}.yui-skin-sam .yui-tt-shadow{top:2px;right:-3px;left:-3px;bottom:-3px;background-color:#000;}.yui-skin-sam .yui-tt-shadow-visible{opacity:.12;filter:alpha(opacity=12);}

Modified: trunk/root/static/yui/container/container-debug.js
===================================================================
--- trunk/root/static/yui/container/container-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -741,6 +741,7 @@
         Event = YAHOO.util.Event,
         CustomEvent = YAHOO.util.CustomEvent,
         Module = YAHOO.widget.Module,
+        UA = YAHOO.env.ua,
 
         m_oModuleTemplate,
         m_oHeaderTemplate,
@@ -785,24 +786,24 @@
                 value: true, 
                 validator: YAHOO.lang.isBoolean 
             },
-        
-            "EFFECT": { 
-                key: "effect", 
-                suppressEvent: true, 
-                supercedes: ["visible"] 
+
+            "EFFECT": {
+                key: "effect",
+                suppressEvent: true,
+                supercedes: ["visible"]
             },
 
-            "MONITOR_RESIZE": { 
-                key: "monitorresize", 
-                value: true  
+            "MONITOR_RESIZE": {
+                key: "monitorresize",
+                value: true
             },
 
-            "APPEND_TO_DOCUMENT_BODY": { 
-                key: "appendtodocumentbody", 
+            "APPEND_TO_DOCUMENT_BODY": {
+                key: "appendtodocumentbody",
                 value: false
             }
         };
-    
+
     /**
     * Constant representing the prefix path to use for non-secure images
     * @property YAHOO.widget.Module.IMG_ROOT
@@ -866,8 +867,20 @@
     * @type String
     */
     Module.RESIZE_MONITOR_SECURE_URL = "javascript:false;";
-    
+
     /**
+    * Constant representing the buffer amount (in pixels) to use when positioning
+    * the text resize monitor offscreen. The resize monitor is positioned
+    * offscreen by an amount eqaul to its offsetHeight + the buffer value.
+    * 
+    * @property YAHOO.widget.Module.RESIZE_MONITOR_BUFFER
+    * @static
+    * @type Number
+    */
+    // Set to 1, to work around pixel offset in IE8, which increases when zoom is used
+    Module.RESIZE_MONITOR_BUFFER = 1;
+
+    /**
     * Singleton CustomEvent fired when the font size is changed in the browser.
     * Opera's "zoom" functionality currently does not support text 
     * size detection.
@@ -875,6 +888,22 @@
     */
     Module.textResizeEvent = new CustomEvent("textResize");
 
+    /**
+     * Helper utility method, which forces a document level 
+     * redraw for Opera, which can help remove repaint
+     * irregularities after applying DOM changes.
+     *
+     * @method YAHOO.widget.Module.forceDocumentRedraw
+     * @static
+     */
+    Module.forceDocumentRedraw = function() {
+        var docEl = document.documentElement;
+        if (docEl) {
+            docEl.className += " ";
+            docEl.className = YAHOO.lang.trim(docEl.className);
+        }
+    };
+
     function createModuleTemplate() {
 
         if (!m_oModuleTemplate) {
@@ -1223,6 +1252,10 @@
         * called by the constructor, and  sets up all DOM references for 
         * pre-existing markup, and creates required markup if it is not 
         * already present.
+        * <p>
+        * If the element passed in does not have an id, one will be generated
+        * for it.
+        * </p>
         * @method init
         * @param {String} el The element ID representing the Module <em>OR</em>
         * @param {HTMLElement} el The element representing the Module
@@ -1258,12 +1291,9 @@
                 }
             }
 
+            this.id = Dom.generateId(el);
             this.element = el;
 
-            if (el.id) {
-                this.id = el.id;
-            }
-
             child = this.element.firstChild;
 
             if (child) {
@@ -1313,7 +1343,7 @@
         */
         initResizeMonitor: function () {
 
-            var isGeckoWin = (YAHOO.env.ua.gecko && this.platform == "windows");
+            var isGeckoWin = (UA.gecko && this.platform == "windows");
             if (isGeckoWin) {
                 // Help prevent spinning loading icon which 
                 // started with FireFox 2.0.0.8/Win
@@ -1340,7 +1370,7 @@
                 Module.textResizeEvent.fire();
             }
 
-            if (!YAHOO.env.ua.opera) {
+            if (!UA.opera) {
                 oIFrame = Dom.get("_yuiResizeMonitor");
 
                 var supportsCWResize = this._supportsCWResize();
@@ -1348,7 +1378,7 @@
                 if (!oIFrame) {
                     oIFrame = document.createElement("iframe");
 
-                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && YAHOO.env.ua.ie) {
+                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && UA.ie) {
                         oIFrame.src = Module.RESIZE_MONITOR_SECURE_URL;
                     }
 
@@ -1384,10 +1414,10 @@
                         db.appendChild(oIFrame);
                     }
 
-                    oIFrame.style.width = "10em";
-                    oIFrame.style.height = "10em";
-                    oIFrame.style.top = (-1 * oIFrame.offsetHeight) + "px";
-                    oIFrame.style.left = (-1 * oIFrame.offsetWidth) + "px";
+                    oIFrame.style.width = "2em";
+                    oIFrame.style.height = "2em";
+                    oIFrame.style.top = (-1 * (oIFrame.offsetHeight + Module.RESIZE_MONITOR_BUFFER)) + "px";
+                    oIFrame.style.left = "0";
                     oIFrame.style.borderWidth = "0";
                     oIFrame.style.visibility = "visible";
 
@@ -1395,7 +1425,7 @@
                        Don't open/close the document for Gecko like we used to, since it
                        leads to duplicate cookies. (See SourceForge bug #1721755)
                     */
-                    if (YAHOO.env.ua.webkit) {
+                    if (UA.webkit) {
                         oDoc = oIFrame.contentWindow.document;
                         oDoc.open();
                         oDoc.close();
@@ -1436,22 +1466,11 @@
                 Gecko 1.8.1.6+ (FF2.0.0.6+) and all other browsers will fire resize on contentWindow.
 
                 We don't want to start sniffing for patch versions, so fire textResize the same
-                way on all FF, until 1.9 (3.x) is out
+                way on all FF2 flavors
              */
             var bSupported = true;
-            if (YAHOO.env.ua.gecko && YAHOO.env.ua.gecko <= 1.8) {
+            if (UA.gecko && UA.gecko <= 1.8) {
                 bSupported = false;
-                /*
-                var v = navigator.userAgent.match(/rv:([^\s\)]*)/); // From YAHOO.env.ua
-                if (v && v[0]) {
-                    var sv = v[0].match(/\d\.\d\.(\d)/);
-                    if (sv && sv[1]) {
-                        if (parseInt(sv[1], 10) > 0) {
-                            bSupported = true;
-                        }
-                    }
-                }
-                */
             }
             return bSupported;
         },
@@ -1464,12 +1483,10 @@
         */
         onDomResize: function (e, obj) {
 
-            var nLeft = -1 * this.resizeMonitor.offsetWidth,
-                nTop = -1 * this.resizeMonitor.offsetHeight;
-        
+            var nTop = -1 * (this.resizeMonitor.offsetHeight + Module.RESIZE_MONITOR_BUFFER);
+
             this.resizeMonitor.style.top = nTop + "px";
-            this.resizeMonitor.style.left =  nLeft + "px";
-
+            this.resizeMonitor.style.left = "0";
         },
 
         /**
@@ -1719,8 +1736,7 @@
         */
         destroy: function () {
 
-            var parent,
-                e;
+            var parent;
 
             if (this.element) {
                 Event.purgeElement(this.element, true);
@@ -1789,7 +1805,7 @@
                 this.hideEvent.fire();
             }
         },
-        
+
         /**
         * Default event handler for the "monitorresize" configuration property
         * @param {String} type The CustomEvent type (usually the property name)
@@ -1882,6 +1898,7 @@
 
         _SUBSCRIBE = "subscribe",
         _UNSUBSCRIBE = "unsubscribe",
+        _CONTAINED = "contained",
 
         m_oIFrameTemplate,
 
@@ -1935,7 +1952,6 @@
             "FIXED_CENTER": { 
                 key: "fixedcenter", 
                 value: false, 
-                validator: Lang.isBoolean, 
                 supercedes: ["iframe", "visible"] 
             },
 
@@ -1953,7 +1969,6 @@
 
             "AUTO_FILL_HEIGHT" : {
                 key: "autofillheight",
-                supressEvent: true,
                 supercedes: ["height"],
                 value:"body"
             },
@@ -1976,14 +1991,14 @@
                 validator: Lang.isBoolean, 
                 supercedes: ["zindex"] 
             },
-            
+
             "PREVENT_CONTEXT_OVERLAP": {
                 key: "preventcontextoverlap",
                 value: false,
                 validator: Lang.isBoolean,  
                 supercedes: ["constraintoviewport"]
             }
-            
+
         };
 
     /**
@@ -2395,10 +2410,47 @@
             });
 
             /**
-            * True if the Overlay should be anchored to the center of 
-            * the viewport.
+            * Determines whether or not the Overlay should be anchored 
+            * to the center of the viewport.
+            * 
+            * <p>This property can be set to:</p>
+            * 
+            * <dl>
+            * <dt>true</dt>
+            * <dd>
+            * To enable fixed center positioning
+            * <p>
+            * When enabled, the overlay will 
+            * be positioned in the center of viewport when initially displayed, and 
+            * will remain in the center of the viewport whenever the window is 
+            * scrolled or resized.
+            * </p>
+            * <p>
+            * If the overlay is too big for the viewport, 
+            * it's top left corner will be aligned with the top left corner of the viewport.
+            * </p>
+            * </dd>
+            * <dt>false</dt>
+            * <dd>
+            * To disable fixed center positioning.
+            * <p>In this case the overlay can still be 
+            * centered as a one-off operation, by invoking the <code>center()</code> method,
+            * however it will not remain centered when the window is scrolled/resized.
+            * </dd>
+            * <dt>"contained"<dt>
+            * <dd>To enable fixed center positioning, as with the <code>true</code> option.
+            * <p>However, unlike setting the property to <code>true</code>, 
+            * when the property is set to <code>"contained"</code>, if the overlay is 
+            * too big for the viewport, it will not get automatically centered when the 
+            * user scrolls or resizes the window (until the window is large enough to contain the 
+            * overlay). This is useful in cases where the Overlay has both header and footer 
+            * UI controls which the user may need to access.
+            * </p>
+            * </dd>
+            * </dl>
+            *
             * @config fixedcenter
-            * @type Boolean
+            * @type Boolean | String
             * @default false
             */
             cfg.addProperty(DEFAULT_CONFIG.FIXED_CENTER.key, {
@@ -2444,7 +2496,6 @@
                 handler: this.configAutoFillHeight, 
                 value : DEFAULT_CONFIG.AUTO_FILL_HEIGHT.value,
                 validator : this._validateAutoFill,
-                suppressEvent: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.suppressEvent, 
                 supercedes: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.supercedes
             });
 
@@ -2543,6 +2594,23 @@
             Dom.replaceClass(this.element, "hide-scrollbars", "show-scrollbars");
         },
 
+        /**
+         * Internal implementation to set the visibility of the overlay in the DOM.
+         *
+         * @method _setDomVisibility
+         * @param {boolean} visible Whether to show or hide the Overlay's outer element
+         * @protected
+         */
+        _setDomVisibility : function(show) {
+            Dom.setStyle(this.element, "visibility", (show) ? "visible" : "hidden");
+
+            if (show) {
+                Dom.removeClass(this.element, "yui-overlay-hidden");
+            } else {
+                Dom.addClass(this.element, "yui-overlay-hidden");
+            }
+        },
+
         // BEGIN BUILT-IN PROPERTY EVENT HANDLERS //
         /**
         * The default event handler fired when the "visible" property is 
@@ -2573,8 +2641,8 @@
                 while (e.nodeType != 9 && e.nodeType != 11) {
                     currentVis = Dom.getStyle(e, "visibility");
 
-                    if (currentVis != "inherit") { 
-                        break; 
+                    if (currentVis != "inherit") {
+                        break;
                     }
 
                     e = e.parentNode;
@@ -2601,7 +2669,6 @@
                 }
             }
 
-
             if (visible) { // Show
                 if (isMacGecko) {
                     this.showMacGeckoScrollbars();
@@ -2635,10 +2702,12 @@
                     if (currentVis != "visible" || currentVis === "") {
                         this.beforeShowEvent.fire();
 
-                        Dom.setStyle(this.element, "visibility", "visible");
+                        this._setDomVisibility(true);
 
                         this.cfg.refireEvent("iframe");
                         this.showEvent.fire();
+                    } else {
+                        this._setDomVisibility(true);
                     }
                 }
             } else { // Hide
@@ -2646,7 +2715,7 @@
                 if (isMacGecko) {
                     this.hideMacGeckoScrollbars();
                 }
-                    
+
                 if (effect) { // Animate out if showing
                     if (currentVis == "visible") {
                         this.beforeHideEvent.fire();
@@ -2672,32 +2741,59 @@
                         }
 
                     } else if (currentVis === "") {
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                     }
 
                 } else { // Simple hide
 
                     if (currentVis == "visible" || currentVis === "") {
                         this.beforeHideEvent.fire();
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                         this.hideEvent.fire();
+                    } else {
+                        this._setDomVisibility(false);
                     }
                 }
             }
         },
 
         /**
-        * Center event handler used for centering on scroll/resize, but only if 
-        * the Overlay is visible
+        * Fixed center event handler used for centering on scroll/resize, but only if 
+        * the overlay is visible and, if "fixedcenter" is set to "contained", only if 
+        * the overlay fits within the viewport.
+        *
         * @method doCenterOnDOMEvent
         */
         doCenterOnDOMEvent: function () {
-            if (this.cfg.getProperty("visible")) {
-                this.center();
+            var cfg = this.cfg,
+                fc = cfg.getProperty("fixedcenter");
+
+            if (cfg.getProperty("visible")) {
+                if (fc && (fc !== _CONTAINED || this.fitsInViewport())) {
+                    this.center();
+                }
             }
         },
 
         /**
+         * Determines if the Overlay (including the offset value defined by Overlay.VIEWPORT_OFFSET) 
+         * will fit entirely inside the viewport, in both dimensions - width and height.
+         * 
+         * @method fitsInViewport
+         * @return boolean true if the Overlay will fit, false if not
+         */
+        fitsInViewport : function() {
+            var nViewportOffset = Overlay.VIEWPORT_OFFSET,
+                element = this.element,
+                elementWidth = element.offsetWidth,
+                elementHeight = element.offsetHeight,
+                viewportWidth = Dom.getViewportWidth(),
+                viewportHeight = Dom.getViewportHeight();
+
+            return ((elementWidth + nViewportOffset < viewportWidth) && (elementHeight + nViewportOffset < viewportHeight));
+        },
+
+        /**
         * The default event handler fired when the "fixedcenter" property 
         * is changed.
         * @method configFixedCenter
@@ -2717,7 +2813,7 @@
             if (val) {
                 this.center();
 
-                if (!alreadySubscribed(this.beforeShowEvent, this.center, this)) {
+                if (!alreadySubscribed(this.beforeShowEvent, this.center)) {
                     this.beforeShowEvent.subscribe(this.center);
                 }
 
@@ -2736,7 +2832,7 @@
                 windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent, this);
             }
         },
-        
+
         /**
         * The default event handler fired when the "height" property is changed.
         * @method configHeight
@@ -2767,22 +2863,28 @@
          */
         configAutoFillHeight: function (type, args, obj) {
             var fillEl = args[0],
-                currEl = this.cfg.getProperty("autofillheight");
+                cfg = this.cfg,
+                autoFillHeight = "autofillheight",
+                height = "height",
+                currEl = cfg.getProperty(autoFillHeight),
+                autoFill = this._autoFillOnHeightChange;
 
-            this.cfg.unsubscribeFromConfigEvent("height", this._autoFillOnHeightChange);
-            Module.textResizeEvent.unsubscribe("height", this._autoFillOnHeightChange);
+            cfg.unsubscribeFromConfigEvent(height, autoFill);
+            Module.textResizeEvent.unsubscribe(autoFill);
+            this.changeContentEvent.unsubscribe(autoFill);
 
             if (currEl && fillEl !== currEl && this[currEl]) {
-                Dom.setStyle(this[currEl], "height", "");
+                Dom.setStyle(this[currEl], height, "");
             }
 
             if (fillEl) {
                 fillEl = Lang.trim(fillEl.toLowerCase());
 
-                this.cfg.subscribeToConfigEvent("height", this._autoFillOnHeightChange, this[fillEl], this);
-                Module.textResizeEvent.subscribe(this._autoFillOnHeightChange, this[fillEl], this);
+                cfg.subscribeToConfigEvent(height, autoFill, this[fillEl], this);
+                Module.textResizeEvent.subscribe(autoFill, this[fillEl], this);
+                this.changeContentEvent.subscribe(autoFill, this[fillEl], this);
 
-                this.cfg.setProperty("autofillheight", fillEl, true);
+                cfg.setProperty(autoFillHeight, fillEl, true);
             }
         },
 
@@ -3059,6 +3161,7 @@
                         m_oIFrameTemplate.style.margin = "0";
                         m_oIFrameTemplate.style.padding = "0";
                         m_oIFrameTemplate.style.display = "none";
+                        m_oIFrameTemplate.tabIndex = -1;
                     }
 
                     oIFrame = m_oIFrameTemplate.cloneNode(false);
@@ -3430,8 +3533,8 @@
                 nLeftRegionWidth,
                 nRightRegionWidth,
 
-                leftConstraint,
-                rightConstraint,
+                leftConstraint = scrollX + nViewportOffset,
+                rightConstraint = scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset,
 
                 xNew = x,
 
@@ -3523,42 +3626,52 @@
             
             };
 
+            // Determine if the current value for the Overlay's "x" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
+            
+            if (x < leftConstraint || x > rightConstraint) {
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-				oOverlapPositions[(aContext[1] + aContext[2])]) {
+                // The current value for the Overlay's "x" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
                 if (bCanConstrain) {
 
-                    oContextEl = aContext[0];
-                    nContextElX = Dom.getX(oContextEl) - scrollX;
-                    nContextElWidth = oContextEl.offsetWidth;
-                    nLeftRegionWidth = nContextElX;
-                    nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
     
-                    setHorizontalPosition();
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElX = Dom.getX(oContextEl) - scrollX;
+                        nContextElWidth = oContextEl.offsetWidth;
+                        nLeftRegionWidth = nContextElX;
+                        nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+        
+                        setHorizontalPosition();
+                        
+                        xNew = this.cfg.getProperty("x");
+                    
+                    }
+                    else {
 
-                }
-                
-                xNew = this.cfg.getProperty("x");
-            
-            }
-            else {
+                        if (x < leftConstraint) {
+                            xNew = leftConstraint;
+                        } else if (x > rightConstraint) {
+                            xNew = rightConstraint;
+                        }
 
-                if (bCanConstrain) {
-    
-                    leftConstraint = scrollX + nViewportOffset;
-                    rightConstraint = 
-                        scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset;
-    
-                    if (x < leftConstraint) {
-                        xNew = leftConstraint;
-                    } else if (x > rightConstraint) {
-                        xNew = rightConstraint;
                     }
+
                 } else {
+                    //	The "x" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "x" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.                
                     xNew = nViewportOffset + scrollX;
                 }
-            
+
             }
 
             return xNew;
@@ -3596,8 +3709,8 @@
                 nTopRegionHeight,
                 nBottomRegionHeight,
 
-                topConstraint,
-                bottomConstraint,
+                topConstraint = scrollY + nViewportOffset,
+                bottomConstraint = scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset,
 
                 yNew = y,
                 
@@ -3688,42 +3801,56 @@
             };
 
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-            	oOverlapPositions[(aContext[1] + aContext[2])]) {
+            // Determine if the current value for the Overlay's "y" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
 
-                if (bCanConstrain) {
+            if (y < topConstraint || y  > bottomConstraint) {
+        
+                // The current value for the Overlay's "y" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
-                    oContextEl = aContext[0];
-                    nContextElHeight = oContextEl.offsetHeight;
-                    nContextElY = (Dom.getY(oContextEl) - scrollY);
-    
-                    nTopRegionHeight = nContextElY;
-                    nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
-    
-                    setVerticalPosition();
-                
-                }
+                if (bCanConstrain) {	
 
-                yNew = oOverlay.cfg.getProperty("y");
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
+        
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElHeight = oContextEl.offsetHeight;
+                        nContextElY = (Dom.getY(oContextEl) - scrollY);
+        
+                        nTopRegionHeight = nContextElY;
+                        nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+        
+                        setVerticalPosition();
+        
+                        yNew = oOverlay.cfg.getProperty("y");
+        
+                    }
+                    else {
 
-            }
-            else {
-
-                if (bCanConstrain) {
-    
-                    topConstraint = scrollY + nViewportOffset;
-                    bottomConstraint = 
-                        scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset;
-    
-                    if (y < topConstraint) {
-                        yNew  = topConstraint;
-                    } else if (y  > bottomConstraint) {
-                        yNew  = bottomConstraint;
+                        if (y < topConstraint) {
+                            yNew  = topConstraint;
+                        } else if (y  > bottomConstraint) {
+                            yNew  = bottomConstraint;
+                        }
+                    
                     }
-                } else {
+                
+                }
+                else {
+                
+                    //	The "y" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "y" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.
+                
                     yNew = nViewportOffset + scrollY;
                 }
-
+        
             }
 
             return yNew;
@@ -3771,6 +3898,10 @@
 
             this.cfg.setProperty("xy", [parseInt(x, 10), parseInt(y, 10)]);
             this.cfg.refireEvent("iframe");
+
+            if (UA.webkit) {
+                this.forceContainerRedraw();
+            }
         },
 
         /**
@@ -3865,7 +3996,10 @@
          * out the containers height
          */
         _autoFillOnHeightChange : function(type, args, el) {
-            this.fillHeight(el);
+            var height = this.cfg.getProperty("height");
+            if ((height && height !== "auto") || (height === 0)) {
+                this.fillHeight(el);
+            }
         },
 
         /**
@@ -3941,13 +4075,13 @@
                         Dom.removeClass(container, "yui-override-padding");
                     }
     
-                    remaining = total - filled;
+                    remaining = Math.max(total - filled, 0);
     
                     Dom.setStyle(el, "height", remaining + "px");
     
                     // Re-adjust height if required, to account for el padding and border
                     if (el.offsetHeight != remaining) {
-                        remaining = remaining - (el.offsetHeight - remaining);
+                        remaining = Math.max(remaining - (el.offsetHeight - remaining), 0);
                     }
                     Dom.setStyle(el, "height", remaining + "px");
                 }
@@ -4049,6 +4183,26 @@
         },
 
         /**
+         * Can be used to force the container to repaint/redraw it's contents.
+         * <p>
+         * By default applies and then removes a 1px bottom margin through the 
+         * application/removal of a "yui-force-redraw" class.
+         * </p>
+         * <p>
+         * It is currently used by Overlay to force a repaint for webkit 
+         * browsers, when centering.
+         * </p>
+         * @method forceContainerRedraw
+         */
+        forceContainerRedraw : function() {
+            var c = this;
+            Dom.addClass(c.element, "yui-force-redraw");
+            setTimeout(function() {
+                Dom.removeClass(c.element, "yui-force-redraw");
+            }, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Overlay.
@@ -4495,8 +4649,7 @@
         */
         register: function (overlay) {
 
-            var zIndex,
-                registered = false,
+            var registered = false,
                 i,
                 n;
 
@@ -4695,6 +4848,8 @@
         CustomEvent = YAHOO.util.CustomEvent,
         Dom = YAHOO.util.Dom,
         Tooltip = YAHOO.widget.Tooltip,
+        UA = YAHOO.env.ua,
+        bIEQuirks = (UA.ie && (UA.ie <= 6 || document.compatMode == "BackCompat")),
 
         m_oShadowTemplate,
 
@@ -4770,31 +4925,28 @@
     */
     Tooltip.CSS_TOOLTIP = "yui-tt";
 
-    /* 
-        "hide" event handler that sets a Tooltip instance's "width"
-        configuration property back to its original value before 
-        "setWidthToOffsetWidth" was called.
-    */
-    function restoreOriginalWidth(p_sType, p_aArgs, p_oObject) {
+    function restoreOriginalWidth(sOriginalWidth, sForcedWidth) {
 
-        var sOriginalWidth = p_oObject[0],
-            sNewWidth = p_oObject[1],
-            oConfig = this.cfg,
+        var oConfig = this.cfg,
             sCurrentWidth = oConfig.getProperty("width");
 
-        if (sCurrentWidth == sNewWidth) {
+        if (sCurrentWidth == sForcedWidth) {
             oConfig.setProperty("width", sOriginalWidth);
         }
     }
 
     /* 
-        "beforeShow" event handler that sets a Tooltip instance's "width"
+        changeContent event handler that sets a Tooltip instance's "width"
         configuration property to the value of its root HTML 
-        elements's offsetWidth
+        elements's offsetWidth if a specific width has not been set.
     */
 
     function setWidthToOffsetWidth(p_sType, p_aArgs) {
 
+        if ("_originalWidth" in this) {
+            restoreOriginalWidth.call(this, this._originalWidth, this._forcedWidth);
+        }
+
         var oBody = document.body,
             oConfig = this.cfg,
             sOriginalWidth = oConfig.getProperty("width"),
@@ -4821,7 +4973,8 @@
             oConfig.setProperty("width", sNewWidth);
             oConfig.refireEvent("xy");
 
-            this.subscribe("hide", restoreOriginalWidth, [(sOriginalWidth || ""), sNewWidth]);
+            this._originalWidth = sOriginalWidth || "";
+            this._forcedWidth = sNewWidth;
         }
     }
 
@@ -4870,7 +5023,7 @@
 
             this.setBody("");
 
-            this.subscribe("beforeShow", setWidthToOffsetWidth);
+            this.subscribe("changeContent", setWidthToOffsetWidth);
             this.subscribe("init", onInit);
             this.subscribe("render", this.onRender);
 
@@ -5146,7 +5299,7 @@
         * this will usually equal the owner.
         */
         configContext: function (type, args, obj) {
-        
+
             var context = args[0],
                 aElements,
                 nElements,
@@ -5293,7 +5446,7 @@
             var yOffset = 25,
                 me = this;
 
-            if (YAHOO.env.ua.opera && context.tagName && 
+            if (UA.opera && context.tagName && 
                 context.tagName.toUpperCase() == "A") {
                 yOffset += 12;
             }
@@ -5348,7 +5501,7 @@
             }, this.cfg.getProperty("autodismissdelay"));
 
         },
-        
+
         /**
         * Fired when the Tooltip is moved, this event handler is used to 
         * prevent the Tooltip from overlapping with its context element.
@@ -5390,7 +5543,7 @@
             function sizeShadow() {
     
                 var oElement = this.element,
-                    oShadow = this._shadow;
+                    oShadow = this.underlay;
             
                 if (oShadow) {
                     oShadow.style.width = (oElement.offsetWidth + 6) + "px";
@@ -5400,17 +5553,20 @@
             }
 
             function addShadowVisibleClass() {
-                Dom.addClass(this._shadow, "yui-tt-shadow-visible");
+                Dom.addClass(this.underlay, "yui-tt-shadow-visible");
+
+                if (UA.ie) {
+                    this.forceUnderlayRedraw();
+                }
             }
-            
 
             function removeShadowVisibleClass() {
-                Dom.removeClass(this._shadow, "yui-tt-shadow-visible");
+                Dom.removeClass(this.underlay, "yui-tt-shadow-visible");
             }
 
             function createShadow() {
     
-                var oShadow = this._shadow,
+                var oShadow = this.underlay,
                     oElement,
                     Module,
                     nIE,
@@ -5420,7 +5576,7 @@
     
                     oElement = this.element;
                     Module = YAHOO.widget.Module;
-                    nIE = YAHOO.env.ua.ie;
+                    nIE = UA.ie;
                     me = this;
 
                     if (!m_oShadowTemplate) {
@@ -5432,14 +5588,18 @@
 
                     oElement.appendChild(oShadow);
 
-                    this._shadow = oShadow;
+                    this.underlay = oShadow;
 
+                    // Backward compatibility, even though it's probably 
+                    // intended to be "private", it isn't marked as such in the api docs
+                    this._shadow = this.underlay;
+
                     addShadowVisibleClass.call(this);
 
                     this.subscribe("beforeShow", addShadowVisibleClass);
-                    this.subscribe("beforeHide", removeShadowVisibleClass);
+                    this.subscribe("hide", removeShadowVisibleClass);
 
-                    if (nIE == 6 || (nIE == 7 && document.compatMode == "BackCompat")) {
+                    if (bIEQuirks) {
                         window.setTimeout(function () { 
                             sizeShadow.call(me); 
                         }, 0);
@@ -5468,8 +5628,20 @@
             }
         
         },
-        
+
         /**
+         * Forces the underlay element to be repainted, through the application/removal
+         * of a yui-force-redraw class to the underlay element.
+         * 
+         * @method forceUnderlayRedraw
+         */
+        forceUnderlayRedraw : function() {
+            var tt = this;
+            Dom.addClass(tt.underlay, "yui-force-redraw");
+            setTimeout(function() {Dom.removeClass(tt.underlay, "yui-force-redraw");}, 0);
+        },
+
+        /**
         * Removes the Tooltip element from the DOM and sets all child 
         * elements to null.
         * @method destroy
@@ -5528,7 +5700,7 @@
         Panel = YAHOO.widget.Panel,
         UA = YAHOO.env.ua,
 
-        bIEQuirks = (UA.ie == 6 || (UA.ie == 7 && document.compatMode == "BackCompat")),
+        bIEQuirks = (UA.ie && (UA.ie <= 6 || document.compatMode == "BackCompat")),
 
         m_oMaskTemplate,
         m_oUnderlayTemplate,
@@ -5685,12 +5857,11 @@
 
     function setWidthToOffsetWidth(p_sType, p_aArgs) {
 
-        var nIE = YAHOO.env.ua.ie,
-            oConfig,
+        var oConfig,
             sOriginalWidth,
             sNewWidth;
 
-        if (nIE == 6 || (nIE == 7 && document.compatMode == "BackCompat")) {
+        if (bIEQuirks) {
 
             oConfig = this.cfg;
             sOriginalWidth = oConfig.getProperty("width");
@@ -5700,7 +5871,7 @@
                 sNewWidth = (this.element.offsetWidth + "px");
     
                 oConfig.setProperty("width", sNewWidth);
-                
+
                 this.subscribe("hide", restoreOriginalWidth, 
                     [(sOriginalWidth || ""), sNewWidth]);
             
@@ -5766,26 +5937,33 @@
          */
         _onElementFocus : function(e){
 
-            var target = Event.getTarget(e);
+            if(_currentModal === this) {
 
-            if (target !== this.element && !Dom.isAncestor(this.element, target) && _currentModal == this) {
-                try {
-                    if (this.firstElement) {
-                        this.firstElement.focus();
-                    } else {
-                        if (this._modalFocus) {
-                            this._modalFocus.focus();
+                var target = Event.getTarget(e),
+                    doc = document.documentElement,
+                    insideDoc = (target !== doc && target !== window);
+
+                // mask and documentElement checks added for IE, which focuses on the mask when it's clicked on, and focuses on 
+                // the documentElement, when the document scrollbars are clicked on
+                if (insideDoc && target !== this.element && target !== this.mask && !Dom.isAncestor(this.element, target)) {
+                    try {
+                        if (this.firstElement) {
+                            this.firstElement.focus();
                         } else {
-                            this.innerElement.focus();
+                            if (this._modalFocus) {
+                                this._modalFocus.focus();
+                            } else {
+                                this.innerElement.focus();
+                            }
                         }
+                    } catch(err){
+                        // Just in case we fail to focus
+                        try {
+                            if (insideDoc && target !== document.body) {
+                                target.blur();
+                            }
+                        } catch(err2) { }
                     }
-                } catch(err){
-                    // Just in case we fail to focus
-                    try {
-                        if (target !== document && target !== document.body && target !== window) {
-                            target.blur();
-                        }
-                    } catch(err2) { }
                 }
             }
         },
@@ -5831,7 +6009,7 @@
             e.style.position = "absolute";
             e.style.left = "-10000em";
             e.style.opacity = 0;
-            e.tabIndex = "-1";
+            e.tabIndex = -1;
             this.innerElement.appendChild(e);
             this._modalFocus = e;
         },
@@ -6293,20 +6471,7 @@
                 sUnderlay = args[0].toLowerCase(),
                 oUnderlay = this.underlay,
                 oElement = this.element;
-                
-            function fixWebkitUnderlay() {
-                // Webkit 419.3 (Safari 2.x) does not update
-                // it's Render Tree for the Container when content changes. 
-                // We need to force it to update using this contentChange 
-                // listener
 
-                // Webkit 523.6 doesn't have this problem and doesn't 
-                // need the fix
-                var u = this.underlay;
-                Dom.addClass(u, "yui-force-redraw");
-                window.setTimeout(function(){Dom.removeClass(u, "yui-force-redraw");}, 0);
-            }
-
             function createUnderlay() {
                 var bNew = false;
                 if (!oUnderlay) { // create if not already in DOM
@@ -6331,8 +6496,9 @@
                     }
 
                     if (UA.webkit && UA.webkit < 420) {
-                        this.changeContentEvent.subscribe(fixWebkitUnderlay);
+                        this.changeContentEvent.subscribe(this.forceUnderlayRedraw);
                     }
+
                     bNew = true;
                 }
             }
@@ -6356,7 +6522,7 @@
                     this.cfg.unsubscribeFromConfigEvent("width", this.sizeUnderlay);
                     this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);
                     this.changeContentEvent.unsubscribe(this.sizeUnderlay);
-                    this.changeContentEvent.unsubscribe(fixWebkitUnderlay);
+                    this.changeContentEvent.unsubscribe(this.forceUnderlayRedraw);
                     YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay, this, true);
 
                     this.element.removeChild(oUnderlay);
@@ -6585,7 +6751,10 @@
         _autoFillOnHeightChange : function(type, args, el) {
             Panel.superclass._autoFillOnHeightChange.apply(this, arguments);
             if (bIEQuirks) {
-                this.sizeUnderlay();
+                var panel = this;
+                setTimeout(function() {
+                    panel.sizeUnderlay();
+                },0);
             }
         },
 
@@ -6680,7 +6849,6 @@
             }
         },
 
-        
         /**
         * Registers the Panel's header for drag & drop capability.
         * @method registerDragDrop
@@ -6850,17 +7018,17 @@
                     viewWidth = Dom.getViewportWidth(),
                     viewHeight = Dom.getViewportHeight();
 
-                if (this.mask.offsetHeight > viewHeight) {
-                    this.mask.style.height = viewHeight + "px";
+                if (mask.offsetHeight > viewHeight) {
+                    mask.style.height = viewHeight + "px";
                 }
 
-                if (this.mask.offsetWidth > viewWidth) {
-                    this.mask.style.width = viewWidth + "px";
+                if (mask.offsetWidth > viewWidth) {
+                    mask.style.width = viewWidth + "px";
                 }
 
                 // Then size it to the document
-                this.mask.style.height = Dom.getDocumentHeight() + "px";
-                this.mask.style.width = Dom.getDocumentWidth() + "px";
+                mask.style.height = Dom.getDocumentHeight() + "px";
+                mask.style.width = Dom.getDocumentWidth() + "px";
             }
         },
 
@@ -6920,8 +7088,20 @@
             }
             Panel.superclass.destroy.call(this);  
         },
-        
+
         /**
+         * Forces the underlay element to be repainted through the application/removal 
+         * of a yui-force-redraw class to the underlay element.
+         *
+         * @method forceUnderlayRedraw
+         */
+        forceUnderlayRedraw : function () {
+            var u = this.underlay;
+            Dom.addClass(u, "yui-force-redraw");
+            setTimeout(function(){Dom.removeClass(u, "yui-force-redraw");}, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Panel.
@@ -7003,6 +7183,11 @@
                 value: "async"
             },
 
+            "POST_DATA" : {
+                key: "postdata",
+                value: null
+            },
+
             "BUTTONS": {
                 key: "buttons",
                 value: "none",
@@ -7013,6 +7198,7 @@
                 key: "hideaftersubmit",
                 value: true
             }
+
         };
 
     /**
@@ -7102,7 +7288,7 @@
                 failure: null,
 
                 /**
-                 *<p>
+                *<p>
                 * The function to execute upon success of the 
                 * Connection submission, when the form contains
                 * a file input element.
@@ -7153,6 +7339,20 @@
             });
 
             /**
+            * Any additional post data which needs to be sent when using the 
+            * <a href="#config_postmethod">async</a> postmethod for dialog POST submissions.
+            * The format for the post data string is defined by Connection Manager's 
+            * <a href="YAHOO.util.Connect.html#method_asyncRequest">asyncRequest</a> 
+            * method.
+            * @config postdata
+            * @type String
+            * @default null
+            */
+            this.cfg.addProperty(DEFAULT_CONFIG.POST_DATA.key, {
+                value: DEFAULT_CONFIG.POST_DATA.value
+            });
+
+            /**
             * This property is used to configure whether or not the 
             * dialog should be automatically hidden after submit.
             * 
@@ -7162,41 +7362,60 @@
             */
             this.cfg.addProperty(DEFAULT_CONFIG.HIDEAFTERSUBMIT.key, {
                 value: DEFAULT_CONFIG.HIDEAFTERSUBMIT.value
-            }); 
+            });
 
             /**
             * Array of object literals, each containing a set of properties 
             * defining a button to be appended into the Dialog's footer.
-            * 
-            * Each button object in the buttons array can have three properties:
-            * <dt>text:</dt>
-            * <dd>The text that will display on the face of the button. The text can 
-            * include HTML, as long as it is compliant with HTML Button specifications.
-            * </dd>
-            * <dt>handler:</dt>
-            * <dd>Can be either:
-            *     <ol>
-            *         <li>A reference to a function that should fire when the 
-            * button is clicked.  (In this case scope of this function is 
-            * always its Dialog instance.)</li>
-            *         <li>An object literal representing the code to be 
-            * executed when the button is clicked.  Format:<br> <code> {<br>
-            * <strong>fn:</strong> Function,   // The handler to call 
-            * when  the event fires.<br> <strong>obj:</strong> Object,
-            * // An  object to pass back to the handler.<br> <strong>
-            * scope:</strong>  Object // The object to use for the 
-            * scope of the handler. <br> } </code> <br></li>
+            *
+            * <p>Each button object in the buttons array can have three properties:</p>
+            * <dl>
+            *    <dt>text:</dt>
+            *    <dd>
+            *       The text that will display on the face of the button. The text can 
+            *       include HTML, as long as it is compliant with HTML Button specifications.
+            *    </dd>
+            *    <dt>handler:</dt>
+            *    <dd>Can be either:
+            *    <ol>
+            *       <li>A reference to a function that should fire when the 
+            *       button is clicked.  (In this case scope of this function is 
+            *       always its Dialog instance.)</li>
+            *
+            *       <li>An object literal representing the code to be 
+            *       executed when the button is clicked.
+            *       
+            *       <p>Format:</p>
+            *
+            *       <p>
+            *       <code>{
+            *       <br>
+            *       <strong>fn:</strong> Function, //
+            *       The handler to call when  the event fires.
+            *       <br>
+            *       <strong>obj:</strong> Object, // 
+            *       An  object to pass back to the handler.
+            *       <br>
+            *       <strong>scope:</strong> Object // 
+            *       The object to use for the scope of the handler.
+            *       <br>
+            *       }</code>
+            *       </p>
+            *       </li>
             *     </ol>
-            * </dd>
-            * <dt>isDefault:</dt>
-            * <dd>An optional boolean value that specifies that a button 
-            * should be highlighted and focused by default.</dd>
-            * 
+            *     </dd>
+            *     <dt>isDefault:</dt>
+            *     <dd>
+            *        An optional boolean value that specifies that a button 
+            *        should be highlighted and focused by default.
+            *     </dd>
+            * </dl>
+            *
             * <em>NOTE:</em>If the YUI Button Widget is included on the page, 
             * the buttons created will be instances of YAHOO.widget.Button. 
             * Otherwise, HTML Buttons (<code><BUTTON></code>) will be 
             * created.
-            * 
+            *
             * @config buttons
             * @type {Array|String}
             * @default "none"
@@ -7235,27 +7454,29 @@
             this.submitEvent.signature = SIGNATURE;
         
             /**
-            * CustomEvent fired prior to manual submission
+            * CustomEvent fired for manual submission, before the generic submit event is fired
             * @event manualSubmitEvent
             */
             this.manualSubmitEvent = 
                 this.createEvent(EVENT_TYPES.MANUAL_SUBMIT);
             this.manualSubmitEvent.signature = SIGNATURE;
-        
+
             /**
-            * CustomEvent fired prior to asynchronous submission
+            * CustomEvent fired after asynchronous submission, before the generic submit event is fired
+            *
             * @event asyncSubmitEvent
-            */ 
+            * @param {Object} conn The connection object, returned by YAHOO.util.Connect.asyncRequest
+            */
             this.asyncSubmitEvent = this.createEvent(EVENT_TYPES.ASYNC_SUBMIT);
             this.asyncSubmitEvent.signature = SIGNATURE;
-        
+
             /**
-            * CustomEvent fired prior to form-based submission
+            * CustomEvent fired after form-based submission, before the generic submit event is fired
             * @event formSubmitEvent
             */
             this.formSubmitEvent = this.createEvent(EVENT_TYPES.FORM_SUBMIT);
             this.formSubmitEvent.signature = SIGNATURE;
-        
+
             /**
             * CustomEvent fired after cancel
             * @event cancelEvent
@@ -7270,6 +7491,7 @@
         * all of its subclasses. This method is automatically called by the 
         * constructor, and  sets up all DOM references for pre-existing markup, 
         * and creates required markup if it is not already present.
+        * 
         * @method init
         * @param {String} el The element ID representing the Dialog <em>OR</em>
         * @param {HTMLElement} el The element representing the Dialog
@@ -7353,10 +7575,12 @@
                     formAttrs = this._getFormAttributes(oForm);
 
                     Connect.setForm(oForm, bUseFileUpload, bUseSecureFileUpload);
-                    Connect.asyncRequest(formAttrs.method, formAttrs.action, this.callback);
 
-                    this.asyncSubmitEvent.fire();
+                    var postData = this.cfg.getProperty("postdata");
+                    var c = Connect.asyncRequest(formAttrs.method, formAttrs.action, this.callback, postData);
 
+                    this.asyncSubmitEvent.fire(c);
+
                     break;
 
                 case "form":
@@ -7669,13 +7893,7 @@
                 }
             }
 
-            // Everything which needs to be done if content changed
-            // TODO: Should we be firing contentChange here?
-
-            this.setFirstLastFocusable();
-
-            this.cfg.refireEvent("iframe");
-            this.cfg.refireEvent("underlay");
+            this.changeContentEvent.fire();
         },
 
         /**
@@ -7693,11 +7911,16 @@
         },
 
         /**
-        * Sets focus to the first element in the Dialog's form or the first 
-        * button defined via the "buttons" configuration property. Called 
-        * when the Dialog is made visible.
-        * @method focusFirst
-        */
+         * <p>
+         * Sets focus to the first focusable element in the Dialog's form if found, 
+         * else, the default button if found, else the first button defined via the 
+         * "buttons" configuration property.
+         * </p>
+         * <p>
+         * This method is invoked when the Dialog is made visible.
+         * </p>
+         * @method focusFirst
+         */
         focusFirst: function (type, args, obj) {
 
             var el = this.firstFormElement;
@@ -7713,7 +7936,11 @@
                     // Ignore
                 }
             } else {
-                this.focusFirstButton();
+                if (this.defaultHtmlButton) {
+                    this.focusDefaultButton();
+                } else {
+                    this.focusFirstButton();
+                }
             }
         },
 
@@ -8594,7 +8821,7 @@
 
             obj.handleUnderlayStart();
 
-            Dom.setStyle(obj.overlay.element, "visibility", "visible");
+            obj.overlay._setDomVisibility(true);
             Dom.setStyle(obj.overlay.element, "opacity", 0);
         };
 
@@ -8621,7 +8848,7 @@
             if (obj.overlay.element.style.filter) {
                 obj.overlay.element.style.filter = null;
             }
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
+            obj.overlay._setDomVisibility(false);
             Dom.setStyle(obj.overlay.element, "opacity", 1);
 
             obj.handleUnderlayComplete();
@@ -8680,7 +8907,7 @@
             if (Dom.getStyle(obj.overlay.element, "visibility") == 
                 "hidden" && currentX < x) {
 
-                Dom.setStyle(obj.overlay.element, "visibility", "visible");
+                obj.overlay._setDomVisibility(true);
 
             }
         
@@ -8716,8 +8943,8 @@
         };
         
         slide.handleCompleteAnimateOut = function (type, args, obj) {
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
-        
+            obj.overlay._setDomVisibility(false);
+
             obj.overlay.cfg.setProperty("xy", [x, y]);
             obj.animateOutCompleteEvent.fire();
         };
@@ -8858,4 +9085,4 @@
 
 })();
 
-YAHOO.register("container", YAHOO.widget.Module, {version: "2.6.0", build: "1321"});
+YAHOO.register("container", YAHOO.widget.Module, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/container/container-min.js
===================================================================
--- trunk/root/static/yui/container/container-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,19 +1,19 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.!
 unsubscribeAll();this.configChangedEvent=null;this.owner=null;!
 this.con
fig=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(Q,P){if(Q){this.init(Q,P);}else{}};var F=YAHOO.util.Dom,D=YAHOO.util.Config,M=YAHOO.util.Event,L=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,H,O,N,E,A={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTORY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},I={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"monitorresize",valu!
 e:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};G.IMG_ROOT=null;G.IMG_ROOT_SSL=null;G.CSS_MODULE="yui-module";G.CSS_HEADER="hd";G.CSS_BODY="bd";G.CSS_FOOTER="ft";G.RESIZE_MONITOR_SECURE_URL="javascript:false;";G.textResizeEvent=new L("textResize");function K(){if(!H){H=document.createElement("div");H.innerHTML=('<div class="'+G.CSS_HEADER+'"></div>'+'<div class="'+G.CSS_BODY+'"></div><div class="'+G.CSS_FOOTER+'"></div>');O=H.firstChild;N=O.nextSibling;E=N.nextSibling;}return H;}function J(){if(!O){K();}return(O.cloneNode(false));}function B(){if(!N){K();}return(N.cloneNode(false));}function C(){if(!E){K();}return(E.cloneNode(false));}G.prototype={constructor:G,element:null,header:null,body:null,footer:null,id:null,imageRoot:G.IMG_ROOT,initEvents:function(){var P=L.LIST;this.beforeInitEvent=this.createEvent(A.BEFORE_INIT);this.beforeInitEvent.signature=P;this.initEvent=this.createEvent(A.INIT);
-this.initEvent.signature=P;this.appendEvent=this.createEvent(A.APPEND);this.appendEvent.signature=P;this.beforeRenderEvent=this.createEvent(A.BEFORE_RENDER);this.beforeRenderEvent.signature=P;this.renderEvent=this.createEvent(A.RENDER);this.renderEvent.signature=P;this.changeHeaderEvent=this.createEvent(A.CHANGE_HEADER);this.changeHeaderEvent.signature=P;this.changeBodyEvent=this.createEvent(A.CHANGE_BODY);this.changeBodyEvent.signature=P;this.changeFooterEvent=this.createEvent(A.CHANGE_FOOTER);this.changeFooterEvent.signature=P;this.changeContentEvent=this.createEvent(A.CHANGE_CONTENT);this.changeContentEvent.signature=P;this.destroyEvent=this.createEvent(A.DESTORY);this.destroyEvent.signature=P;this.beforeShowEvent=this.createEvent(A.BEFORE_SHOW);this.beforeShowEvent.signature=P;this.showEvent=this.createEvent(A.SHOW);this.showEvent.signature=P;this.beforeHideEvent=this.createEvent(A.BEFORE_HIDE);this.beforeHideEvent.signature=P;this.hideEvent=this.createEvent(A.HIDE);thi!
 s.hideEvent.signature=P;},platform:function(){var P=navigator.userAgent.toLowerCase();if(P.indexOf("windows")!=-1||P.indexOf("win32")!=-1){return"windows";}else{if(P.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var P=navigator.userAgent.toLowerCase();if(P.indexOf("opera")!=-1){return"opera";}else{if(P.indexOf("msie 7")!=-1){return"ie7";}else{if(P.indexOf("msie")!=-1){return"ie";}else{if(P.indexOf("safari")!=-1){return"safari";}else{if(P.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(I.VISIBLE.key,{handler:this.configVisible,value:I.VISIBLE.value,validator:I.VISIBLE.validator});this.cfg.addProperty(I.EFFECT.key,{suppressEvent:I.EFFECT.suppressEvent,supercedes:I.EFFECT.supercedes});this.cfg.addProperty(I.MONITOR_RESIZE.key,{handler:this.configMonitorResize,val!
 ue:I.MONITOR_RESIZE.value});this.cfg.addProperty(I.APPEND_TO_D!
 OCUMENT_
BODY.key,{value:I.APPEND_TO_DOCUMENT_BODY.value});},init:function(U,T){var R,V;this.initEvents();this.beforeInitEvent.fire(G);this.cfg=new D(this);if(this.isSecure){this.imageRoot=G.IMG_ROOT_SSL;}if(typeof U=="string"){R=U;U=document.getElementById(U);if(!U){U=(K()).cloneNode(false);U.id=R;}}this.element=U;if(U.id){this.id=U.id;}V=this.element.firstChild;if(V){var Q=false,P=false,S=false;do{if(1==V.nodeType){if(!Q&&F.hasClass(V,G.CSS_HEADER)){this.header=V;Q=true;}else{if(!P&&F.hasClass(V,G.CSS_BODY)){this.body=V;P=true;}else{if(!S&&F.hasClass(V,G.CSS_FOOTER)){this.footer=V;S=true;}}}}}while((V=V.nextSibling));}this.initDefaultConfig();F.addClass(this.element,G.CSS_MODULE);if(T){this.cfg.applyConfig(T,true);}if(!D.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEvent.fire(G);},initResizeMonitor:function(){var Q=(YAHOO.env.ua.gecko&&this.platform=="windows");if(Q){var P=this;setTimeout(fun!
 ction(){P._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var P,R,T;function V(){G.textResizeEvent.fire();}if(!YAHOO.env.ua.opera){R=F.get("_yuiResizeMonitor");var U=this._supportsCWResize();if(!R){R=document.createElement("iframe");if(this.isSecure&&G.RESIZE_MONITOR_SECURE_URL&&YAHOO.env.ua.ie){R.src=G.RESIZE_MONITOR_SECURE_URL;}if(!U){T=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");R.src="data:text/html;charset=utf-8,"+encodeURIComponent(T);}R.id="_yuiResizeMonitor";R.title="Text Resize Monitor";R.style.position="absolute";R.style.visibility="hidden";var Q=document.body,S=Q.firstChild;if(S){Q.insertBefore(R,S);}else{Q.appendChild(R);}R.style.width="10em";R.style.height="10em";R.style.top=(-1*R.offsetHeight)+"px";R.style.left=(-1*R.offsetWidth)+"px";R.style.borderWidth="0";R.style.v!
 isibility="visible";if(YAHOO.env.ua.webkit){P=R.contentWindow.!
 document
;P.open();P.close();}}if(R&&R.contentWindow){G.textResizeEvent.subscribe(this.onDomResize,this,true);if(!G.textResizeInitialized){if(U){if(!M.on(R.contentWindow,"resize",V)){M.on(R,"resize",V);}}G.textResizeInitialized=true;}this.resizeMonitor=R;}}},_supportsCWResize:function(){var P=true;if(YAHOO.env.ua.gecko&&YAHOO.env.ua.gecko<=1.8){P=false;}return P;},onDomResize:function(S,R){var Q=-1*this.resizeMonitor.offsetWidth,P=-1*this.resizeMonitor.offsetHeight;this.resizeMonitor.style.top=P+"px";this.resizeMonitor.style.left=Q+"px";},setHeader:function(Q){var P=this.header||(this.header=J());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML=Q;}this.changeHeaderEvent.fire(Q);this.changeContentEvent.fire();},appendToHeader:function(Q){var P=this.header||(this.header=J());P.appendChild(Q);this.changeHeaderEvent.fire(Q);this.changeContentEvent.fire();},setBody:function(Q){var P=this.body||(this.body=B());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML!
 =Q;}this.changeBodyEvent.fire(Q);this.changeContentEvent.fire();},appendToBody:function(Q){var P=this.body||(this.body=B());P.appendChild(Q);this.changeBodyEvent.fire(Q);this.changeContentEvent.fire();},setFooter:function(Q){var P=this.footer||(this.footer=C());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML=Q;}this.changeFooterEvent.fire(Q);this.changeContentEvent.fire();},appendToFooter:function(Q){var P=this.footer||(this.footer=C());P.appendChild(Q);this.changeFooterEvent.fire(Q);this.changeContentEvent.fire();},render:function(R,P){var S=this,T;function Q(U){if(typeof U=="string"){U=document.getElementById(U);}if(U){S._addToParent(U,S.element);S.appendEvent.fire();}}this.beforeRenderEvent.fire();if(!P){P=this.element;}if(R){Q(R);}else{if(!F.inDocument(this.element)){return false;}}if(this.header&&!F.inDocument(this.header)){T=P.firstChild;if(T){P.insertBefore(this.header,T);}else{P.appendChild(this.header);
-}}if(this.body&&!F.inDocument(this.body)){if(this.footer&&F.isAncestor(this.moduleElement,this.footer)){P.insertBefore(this.body,this.footer);}else{P.appendChild(this.body);}}if(this.footer&&!F.inDocument(this.footer)){P.appendChild(this.footer);}this.renderEvent.fire();return true;},destroy:function(){var P,Q;if(this.element){M.purgeElement(this.element,true);P=this.element.parentNode;}if(P){P.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;G.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(Q,P,R){var S=P[0];if(S){this.beforeShowEvent.fire();F.setStyle(this.element,"display","block");this.showEvent.fire();}else{this.beforeHideEvent.fire();F.setStyle(this.element,"display","none");this.hideEvent.fire();}},configMonitorResize:function(R,!
 Q,S){var P=Q[0];if(P){this.initResizeMonitor();}else{G.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(P,Q){if(!this.cfg.getProperty("appendtodocumentbody")&&P===document.body&&P.firstChild){P.insertBefore(Q,P.firstChild);}else{P.appendChild(Q);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(G,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(O,N){YAHOO.widget.Overlay.superclass.constructor.call(this,O,N);};var H=YAHOO.lang,L=YAHOO.util.CustomEvent,F=YAHOO.widget.Module,M=YAHOO.util.Event,E=YAHOO.util.Dom,C=YAHOO.util.Config,J=YAHOO.env.ua,B=YAHOO.widget.Overlay,G="subscribe",D="unsubscribe",I,A={"BEFORE_MOVE":"beforeMove","MOVE":"move"},K={"X":{key:"x",validator:H.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:H.isNumber,suppressEvent:true,supercedes:["iframe"]},"XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONTEXT":{key:"context"!
 ,suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key!
 :"fixedc
enter",value:false,validator:H.isBoolean,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supressEvent:true,supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:H.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(J.ie==6?true:false),validator:H.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:H.isBoolean,supercedes:["constraintoviewport"]}};B.IFRAME_SRC="javascript:false;";B.IFRAME_OFFSET=3;B.VIEWPORT_OFFSET=10;B.TOP_LEFT="tl";B.TOP_RIGHT="tr";B.BOTTOM_LEFT="bl";B.BOTTOM_RIGHT="br";B.CSS_OVERLAY="yui-overlay";B.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;B.windowScrollEvent=new L("windowScroll");B.wind!
 owResizeEvent=new L("windowResize");B.windowScrollHandler=function(O){var N=M.getTarget(O);if(!N||N===window||N===window.document){if(J.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){B.windowScrollEvent.fire();},1);}else{B.windowScrollEvent.fire();}}};B.windowResizeHandler=function(N){if(J.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){B.windowResizeEvent.fire();},100);}else{B.windowResizeEvent.fire();}};B._initialized=null;if(B._initialized===null){M.on(window,"scroll",B.windowScrollHandler);M.on(window,"resize",B.windowResizeHandler);B._initialized=true;}B._TRIGGER_MAP={"windowScroll":B.windowScrollEvent,"windowResize":B.windowResizeEvent,"textResize":F.textResizeEvent};YAHOO.extend(B,F,{CONTEXT_TRIGGERS:[],init:function(O,N){B.superclass.init.call(this,O);this.beforeInitEvent.fire(B);E.addClass(this.element,B.CSS_OVERLAY);if(N){this.!
 cfg.applyConfig(N,true);}if(this.platform=="mac"&&J.gecko){if(!
 !C.alrea
dySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!C.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(B);},initEvents:function(){B.superclass.initEvents.call(this);var N=L.LIST;this.beforeMoveEvent=this.createEvent(A.BEFORE_MOVE);this.beforeMoveEvent.signature=N;this.moveEvent=this.createEvent(A.MOVE);this.moveEvent.signature=N;},initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);var N=this.cfg;N.addProperty(K.X.key,{handler:this.configX,validator:K.X.validator,suppressEvent:K.X.suppressEvent,supercedes:K.X.supercedes});N.addProperty(K.Y.key,{handler:this.configY,validator:K.Y.validator,suppressEvent:K.Y.suppressEvent,supercedes:K.Y.supercedes});N.addProperty(K.XY.key,{handler:this.configXY,suppressEvent:K.XY.suppressEvent,supercedes:K.XY.supercedes});N.addProperty(K.CONTE!
 XT.key,{handler:this.configContext,suppressEvent:K.CONTEXT.suppressEvent,supercedes:K.CONTEXT.supercedes});N.addProperty(K.FIXED_CENTER.key,{handler:this.configFixedCenter,value:K.FIXED_CENTER.value,validator:K.FIXED_CENTER.validator,supercedes:K.FIXED_CENTER.supercedes});N.addProperty(K.WIDTH.key,{handler:this.configWidth,suppressEvent:K.WIDTH.suppressEvent,supercedes:K.WIDTH.supercedes});N.addProperty(K.HEIGHT.key,{handler:this.configHeight,suppressEvent:K.HEIGHT.suppressEvent,supercedes:K.HEIGHT.supercedes});N.addProperty(K.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:K.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,suppressEvent:K.AUTO_FILL_HEIGHT.suppressEvent,supercedes:K.AUTO_FILL_HEIGHT.supercedes});N.addProperty(K.ZINDEX.key,{handler:this.configzIndex,value:K.ZINDEX.value});N.addProperty(K.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:K.CONSTRAIN_TO_VIEWPORT.value,validator:K.CONSTRAIN_TO_VIEWPORT.validator,superc!
 edes:K.CONSTRAIN_TO_VIEWPORT.supercedes});
-N.addProperty(K.IFRAME.key,{handler:this.configIframe,value:K.IFRAME.value,validator:K.IFRAME.validator,supercedes:K.IFRAME.supercedes});N.addProperty(K.PREVENT_CONTEXT_OVERLAP.key,{value:K.PREVENT_CONTEXT_OVERLAP.value,validator:K.PREVENT_CONTEXT_OVERLAP.validator,supercedes:K.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(N,O){this.cfg.setProperty("xy",[N,O]);},hideMacGeckoScrollbars:function(){E.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){E.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},configVisible:function(Q,N,W){var P=N[0],R=E.getStyle(this.element,"visibility"),X=this.cfg.getProperty("effect"),U=[],T=(this.platform=="mac"&&J.gecko),f=C.alreadySubscribed,V,O,d,b,a,Z,c,Y,S;if(R=="inherit"){d=this.element.parentNode;while(d.nodeType!=9&&d.nodeType!=11){R=E.getStyle(d,"visibility");if(R!="inherit"){break;}d=d.parentNode;}if(R=="inherit"){R="visible";}}if(X){if(X instanceof Array){Y=X.length!
 ;for(b=0;b<Y;b++){V=X[b];U[U.length]=V.effect(this,V.duration);}}else{U[U.length]=X.effect(this,X.duration);}}if(P){if(T){this.showMacGeckoScrollbars();}if(X){if(P){if(R!="visible"||R===""){this.beforeShowEvent.fire();S=U.length;for(a=0;a<S;a++){O=U[a];if(a===0&&!f(O.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){O.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}O.animateIn();}}}}else{if(R!="visible"||R===""){this.beforeShowEvent.fire();E.setStyle(this.element,"visibility","visible");this.cfg.refireEvent("iframe");this.showEvent.fire();}}}else{if(T){this.hideMacGeckoScrollbars();}if(X){if(R=="visible"){this.beforeHideEvent.fire();S=U.length;for(Z=0;Z<S;Z++){c=U[Z];if(Z===0&&!f(c.animateOutCompleteEvent,this.hideEvent.fire,this.hideEvent)){c.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,true);}c.animateOut();}}else{if(R===""){E.setStyle(this.element,"visibility","hidden");}}}else{if(R=="visible"||R===""){this.bef!
 oreHideEvent.fire();E.setStyle(this.element,"visibility","hidd!
 en");thi
s.hideEvent.fire();}}}},doCenterOnDOMEvent:function(){if(this.cfg.getProperty("visible")){this.center();}},configFixedCenter:function(R,P,S){var T=P[0],O=C.alreadySubscribed,Q=B.windowResizeEvent,N=B.windowScrollEvent;if(T){this.center();if(!O(this.beforeShowEvent,this.center,this)){this.beforeShowEvent.subscribe(this.center);}if(!O(Q,this.doCenterOnDOMEvent,this)){Q.subscribe(this.doCenterOnDOMEvent,this,true);}if(!O(N,this.doCenterOnDOMEvent,this)){N.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowEvent.unsubscribe(this.center);Q.unsubscribe(this.doCenterOnDOMEvent,this);N.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(Q,O,R){var N=O[0],P=this.element;E.setStyle(P,"height",N);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(Q,P,R){var O=P[0],N=this.cfg.getProperty("autofillheight");this.cfg.unsubscribeFromConfigEvent("height",this._autoFillOnHeightChange);F.textResizeEvent.unsubscribe("height",this._autoFillOnHeightChang!
 e);if(N&&O!==N&&this[N]){E.setStyle(this[N],"height","");}if(O){O=H.trim(O.toLowerCase());this.cfg.subscribeToConfigEvent("height",this._autoFillOnHeightChange,this[O],this);F.textResizeEvent.subscribe(this._autoFillOnHeightChange,this[O],this);this.cfg.setProperty("autofillheight",O,true);}},configWidth:function(Q,N,R){var P=N[0],O=this.element;E.setStyle(O,"width",P);this.cfg.refireEvent("iframe");},configzIndex:function(P,N,Q){var R=N[0],O=this.element;if(!R){R=E.getStyle(O,"zIndex");if(!R||isNaN(R)){R=0;}}if(this.iframe||this.cfg.getProperty("iframe")===true){if(R<=0){R=1;}}E.setStyle(O,"zIndex",R);this.cfg.setProperty("zIndex",R,true);if(this.iframe){this.stackIframe();}},configXY:function(P,O,Q){var S=O[0],N=S[0],R=S[1];this.cfg.setProperty("x",N);this.cfg.setProperty("y",R);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},configX:function(P,O,Q){var N=O[0],R=this.cfg.g!
 etProperty("y");this.cfg.setProperty("x",N,true);this.cfg.setP!
 roperty(
"y",R,true);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");E.setX(this.element,N,true);this.cfg.setProperty("xy",[N,R],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},configY:function(P,O,Q){var N=this.cfg.getProperty("x"),R=O[0];this.cfg.setProperty("x",N,true);this.cfg.setProperty("y",R,true);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");E.setY(this.element,R,true);this.cfg.setProperty("xy",[N,R],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},showIframe:function(){var O=this.iframe,N;if(O){N=this.element.parentNode;if(N!=O.parentNode){this._addToParent(N,O);}O.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var N=this.iframe,P=this.element,R=B.IFRAME_OFFSET,O=(R*2),Q;if(N){N.style.width=(P.offsetWidth+O+"px");N.style.height=(P.offsetHeight+O+"px");Q=this.cfg.getProperty("xy");if(!H!
 .isArray(Q)||(isNaN(Q[0])||isNaN(Q[1]))){this.syncPosition();Q=this.cfg.getProperty("xy");}E.setXY(N,[(Q[0]-R),(Q[1]-R)]);}},stackIframe:function(){if(this.iframe){var N=E.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(N)&&!isNaN(N)){E.setStyle(this.iframe,"zIndex",(N-1));}}},configIframe:function(Q,P,R){var N=P[0];function S(){var U=this.iframe,V=this.element,W;if(!U){if(!I){I=document.createElement("iframe");if(this.isSecure){I.src=B.IFRAME_SRC;}if(J.ie){I.style.filter="alpha(opacity=0)";I.frameBorder=0;}else{I.style.opacity="0";}I.style.position="absolute";I.style.border="none";I.style.margin="0";I.style.padding="0";I.style.display="none";}U=I.cloneNode(false);W=V.parentNode;var T=W||document.body;this._addToParent(T,U);this.iframe=U;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);
-this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function O(){S.call(this);this.beforeShowEvent.unsubscribe(O);this._iframeDeferred=false;}if(N){if(this.cfg.getProperty("visible")){S.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(O);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventListeners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(O,N,P){var Q=N[0];if(Q){if(!C.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!C.alreadySubscribed(this.befo!
 reShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(S,R,O){var V=R[0],P,N,T,Q,U=this.CONTEXT_TRIGGERS;if(V){P=V[0];N=V[1];T=V[2];Q=V[3];if(U&&U.length>0){Q=(Q||[]).concat(U);}if(P){if(typeof P=="string"){this.cfg.setProperty("context",[document.getElementById(P),N,T,Q],true);}if(N&&T){this.align(N,T);}if(this._contextTriggers){this._processTriggers(this._contextTriggers,D,this._alignOnTrigger);}if(Q){this._processTriggers(Q,G,this._alignOnTrigger);this._contextTriggers=Q;}}}},_alignOnTrigger:function(O,N){this.align();},_findTriggerCE:function(N){var O=null;if(N instanceof L){O=N;}else{if(B._TRIGGER_MAP[N]){O=B._TRIGGER_MAP[N];}}return O;},_processTriggers:function(R,T,Q){var P,S;for(var O=0,N=R.length;O<N;++O){P=R[O];S=this._findTriggerCE(P);if(S){S[T](Q,this,true);}else{this[T](P,Q);}}},a!
 lign:function(O,N){var T=this.cfg.getProperty("context"),S=thi!
 s,R,Q,U;
function P(V,W){switch(O){case B.TOP_LEFT:S.moveTo(W,V);break;case B.TOP_RIGHT:S.moveTo((W-Q.offsetWidth),V);break;case B.BOTTOM_LEFT:S.moveTo(W,(V-Q.offsetHeight));break;case B.BOTTOM_RIGHT:S.moveTo((W-Q.offsetWidth),(V-Q.offsetHeight));break;}}if(T){R=T[0];Q=this.element;S=this;if(!O){O=T[1];}if(!N){N=T[2];}if(Q&&R){U=E.getRegion(R);switch(N){case B.TOP_LEFT:P(U.top,U.left);break;case B.TOP_RIGHT:P(U.top,U.right);break;case B.BOTTOM_LEFT:P(U.bottom,U.left);break;case B.BOTTOM_RIGHT:P(U.bottom,U.right);break;}}}},enforceConstraints:function(O,N,P){var R=N[0];var Q=this.getConstrainedXY(R[0],R[1]);this.cfg.setProperty("x",Q[0],true);this.cfg.setProperty("y",Q[1],true);this.cfg.setProperty("xy",Q,true);},getConstrainedX:function(U){var R=this,N=R.element,d=N.offsetWidth,b=B.VIEWPORT_OFFSET,g=E.getViewportWidth(),c=E.getDocumentScrollLeft(),X=(d+b<g),a=this.cfg.getProperty("context"),P,W,i,S=false,e,V,f,O,h=U,T={"tltr":true,"blbr":true,"brbl":true,"trtl":true};var Y=function()!
 {var j;if((R.cfg.getProperty("x")-c)>W){j=(W-d);}else{j=(W+i);}R.cfg.setProperty("x",(j+c),true);return j;};var Q=function(){if((R.cfg.getProperty("x")-c)>W){return(V-b);}else{return(e-b);}};var Z=function(){var j=Q(),k;if(d>j){if(S){Y();}else{Y();S=true;k=Z();}}return k;};if(this.cfg.getProperty("preventcontextoverlap")&&a&&T[(a[1]+a[2])]){if(X){P=a[0];W=E.getX(P)-c;i=P.offsetWidth;e=W;V=(g-(W+i));Z();}h=this.cfg.getProperty("x");}else{if(X){f=c+b;O=c+g-d-b;if(U<f){h=f;}else{if(U>O){h=O;}}}else{h=b+c;}}return h;},getConstrainedY:function(Y){var V=this,O=V.element,h=O.offsetHeight,g=B.VIEWPORT_OFFSET,c=E.getViewportHeight(),f=E.getDocumentScrollTop(),d=(h+g<c),e=this.cfg.getProperty("context"),T,Z,a,W=false,U,P,b,R,N=Y,X={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};var S=function(){var j;if((V.cfg.getProperty("y")-f)>Z){j=(Z-h);}else{j=(Z+a);}V.cfg.setProperty("y",(j+f),true);return j;};var Q=function(){if((V.cfg.getProperty("y")-f)>Z){return(P-g);}else{return(U-g);}};!
 var i=function(){var k=Q(),j;if(h>k){if(W){S();}else{S();W=tru!
 e;j=i();
}}return j;};if(this.cfg.getProperty("preventcontextoverlap")&&e&&X[(e[1]+e[2])]){if(d){T=e[0];a=T.offsetHeight;Z=(E.getY(T)-f);U=Z;P=(c-(Z+a));i();}N=V.cfg.getProperty("y");}else{if(d){b=f+g;R=f+c-h-g;if(Y<b){N=b;}else{if(Y>R){N=R;}}}else{N=g+f;}}return N;},getConstrainedXY:function(N,O){return[this.getConstrainedX(N),this.getConstrainedY(O)];},center:function(){var Q=B.VIEWPORT_OFFSET,R=this.element.offsetWidth,P=this.element.offsetHeight,O=E.getViewportWidth(),S=E.getViewportHeight(),N,T;if(R<O){N=(O/2)-(R/2)+E.getDocumentScrollLeft();}else{N=Q+E.getDocumentScrollLeft();}if(P<S){T=(S/2)-(P/2)+E.getDocumentScrollTop();}else{T=Q+E.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(N,10),parseInt(T,10)]);this.cfg.refireEvent("iframe");},syncPosition:function(){var N=E.getXY(this.element);this.cfg.setProperty("x",N[0],true);this.cfg.setProperty("y",N[1],true);this.cfg.setProperty("xy",N,true);},onDomResize:function(P,O){var N=this;B.superclass.onDomResize.call(this,P!
 ,O);setTimeout(function(){N.syncPosition();N.cfg.refireEvent("iframe");N.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(O){var N=null;if(O.ownerDocument&&O.ownerDocument.defaultView){var P=O.ownerDocument.defaultView.getComputedStyle(O,"");if(P){N=parseInt(P.height,10);}}return(H.isNumber(N))?N:null;};}else{return function(O){var N=null;if(O.style.pixelHeight){N=O.style.pixelHeight;}return(H.isNumber(N))?N:null;};}})(),_validateAutoFillHeight:function(N){return(!N)||(H.isString(N)&&B.STD_MOD_RE.test(N));},_autoFillOnHeightChange:function(P,N,O){this.fillHeight(O);},_getPreciseHeight:function(O){var N=O.offsetHeight;if(O.getBoundingClientRect){var P=O.getBoundingClientRect();N=P.bottom-P.top;}return N;},fillHeight:function(Q){if(Q){var O=this.innerElement||this.element,N=[this.header,this.body,this.footer],U,V=0,W=0,S=0,P=false;
-for(var T=0,R=N.length;T<R;T++){U=N[T];if(U){if(Q!==U){W+=this._getPreciseHeight(U);}else{P=true;}}}if(P){if(J.ie||J.opera){E.setStyle(Q,"height",0+"px");}V=this._getComputedHeight(O);if(V===null){E.addClass(O,"yui-override-padding");V=O.clientHeight;E.removeClass(O,"yui-override-padding");}S=V-W;E.setStyle(Q,"height",S+"px");if(Q.offsetHeight!=S){S=S-(Q.offsetHeight-S);}E.setStyle(Q,"height",S+"px");}}},bringToTop:function(){var R=[],Q=this.element;function U(Y,X){var a=E.getStyle(Y,"zIndex"),Z=E.getStyle(X,"zIndex"),W=(!a||isNaN(a))?0:parseInt(a,10),V=(!Z||isNaN(Z))?0:parseInt(Z,10);if(W>V){return -1;}else{if(W<V){return 1;}else{return 0;}}}function P(X){var W=E.hasClass(X,B.CSS_OVERLAY),V=YAHOO.widget.Panel;if(W&&!E.isAncestor(Q,X)){if(V&&E.hasClass(X,V.CSS_PANEL)){R[R.length]=X.parentNode;}else{R[R.length]=X;}}}E.getElementsBy(P,"DIV",document.body);R.sort(U);var N=R[0],T;if(N){T=E.getStyle(N,"zIndex");if(!isNaN(T)){var S=false;if(N!=Q){S=true;}else{if(R.length>1){var O!
 =E.getStyle(R[1],"zIndex");if(!isNaN(O)&&(T==O)){S=true;}}}if(S){this.cfg.setProperty("zindex",(parseInt(T,10)+2));}}}},destroy:function(){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;B.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);B.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);F.textResizeEvent.unsubscribe(this._autoFillOnHeightChange);B.superclass.destroy.call(this);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(G){this.init(G);};var D=YAHOO.widget.Overlay,C=YAHOO.util.Event,E=YAHOO.util.Dom,B=YAHOO.util.Config,F=YAHOO.util.CustomEvent,A=YAHOO.widget.OverlayManager;A.CSS_FOCUSED="focused";A.prototype={constructor:A,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(I){this.cfg=new B(this);this.initDefaultConfig();if(I){this.cfg.applyCo!
 nfig(I,true);}this.cfg.fireQueue();var H=null;this.getActive=f!
 unction(
){return H;};this.focus=function(J){var K=this.find(J);if(K){K.focus();}};this.remove=function(K){var M=this.find(K),J;if(M){if(H==M){H=null;}var L=(M.element===null&&M.cfg===null)?true:false;if(!L){J=E.getStyle(M.element,"zIndex");M.cfg.setProperty("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));M.hideEvent.unsubscribe(M.blur);M.destroyEvent.unsubscribe(this._onOverlayDestroy,M);M.focusEvent.unsubscribe(this._onOverlayFocusHandler,M);M.blurEvent.unsubscribe(this._onOverlayBlurHandler,M);if(!L){C.removeListener(M.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);M.cfg.setProperty("zIndex",J,true);M.cfg.setProperty("manager",null);}if(M.focusEvent._managed){M.focusEvent=null;}if(M.blurEvent._managed){M.blurEvent=null;}if(M.focus._managed){M.focus=null;}if(M.blur._managed){M.blur=null;}}};this.blurAll=function(){var K=this.overlays.length,J;if(K>0){J=K-1;do{this.overlays[J].blu!
 r();}while(J--);}};this._manageBlur=function(J){var K=false;if(H==J){E.removeClass(H.element,A.CSS_FOCUSED);H=null;K=true;}return K;};this._manageFocus=function(J){var K=false;if(H!=J){if(H){H.blur();}H=J;this.bringToTop(H);E.addClass(H.element,A.CSS_FOCUSED);K=true;}return K;};var G=this.cfg.getProperty("overlays");if(!this.overlays){this.overlays=[];}if(G){this.register(G);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(I){var G=C.getTarget(I),H=this.close;if(H&&(G==H||E.isAncestor(H,G))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(H,G,I){this.remove(I);},_onOverlayFocusHandler:function(H,G,I){this._manageFocus(I);},_onOverlayBlurHandler:function(H,G,I){this._manageBlur(I);},_bindFocus:function(G){var H=this;if(!G.focusEvent){G.focusEvent=G.createEvent("focus");G.focusEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.focusEvent.subscribe(H._onOverlayFocusHandler,G,H);}if(!G.focus){C.on(G.element,H.cfg.getProperty("foc!
 usevent"),H._onOverlayElementFocus,null,G);G.focus=function(){!
 if(H._ma
nageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};G.focus._managed=true;}},_bindBlur:function(G){var H=this;if(!G.blurEvent){G.blurEvent=G.createEvent("blur");G.blurEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.blurEvent.subscribe(H._onOverlayBlurHandler,G,H);}if(!G.blur){G.blur=function(){if(H._manageBlur(this)){this.blurEvent.fire();}};G.blur._managed=true;}G.hideEvent.subscribe(G.blur);},_bindDestroy:function(G){var H=this;G.destroyEvent.subscribe(H._onOverlayDestroy,G,H);},_syncZIndex:function(G){var H=E.getStyle(G.element,"zIndex");if(!isNaN(H)){G.cfg.setProperty("zIndex",parseInt(H,10));}else{G.cfg.setProperty("zIndex",0);}},register:function(G){var K,J=false,H,I;if(G instanceof D){G.cfg.addProperty("manager",{value:this});this._bindFocus(G);this._bindBlur(G);this._bindDestroy(G);this._syncZIndex(G);this.overlays.push(G);this.bringToTop(G);J=true;}else{if(G instanceof Array){for(H=0,I=G.length!
 ;H<I;H++){J=this.register(G[H])||J;}}}return J;},bringToTop:function(M){var I=this.find(M),L,G,J;if(I){J=this.overlays;J.sort(this.compareZIndexDesc);G=J[0];if(G){L=E.getStyle(G.element,"zIndex");if(!isNaN(L)){var K=false;if(G!==I){K=true;}else{if(J.length>1){var H=E.getStyle(J[1].element,"zIndex");if(!isNaN(H)&&(L==H)){K=true;}}}if(K){I.cfg.setProperty("zindex",(parseInt(L,10)+2));}}J.sort(this.compareZIndexDesc);}}},find:function(G){var K=G instanceof D,I=this.overlays,M=I.length,J=null,L,H;if(K||typeof G=="string"){for(H=M-1;H>=0;H--){L=I[H];if((K&&(L===G))||(L.id==G)){J=L;break;}}}return J;},compareZIndexDesc:function(J,I){var H=(J.cfg)?J.cfg.getProperty("zIndex"):null,G=(I.cfg)?I.cfg.getProperty("zIndex"):null;if(H===null&&G===null){return 0;}else{if(H===null){return 1;}else{if(G===null){return -1;}else{if(H>G){return -1;}else{if(H<G){return 1;}else{return 0;}}}}}},showAll:function(){var H=this.overlays,I=H.length,G;
-for(G=I-1;G>=0;G--){H[G].show();}},hideAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.Tooltip=function(N,M){YAHOO.widget.Tooltip.superclass.constructor.call(this,N,M);};var E=YAHOO.lang,L=YAHOO.util.Event,K=YAHOO.util.CustomEvent,C=YAHOO.util.Dom,G=YAHOO.widget.Tooltip,F,H={"PREVENT_OVERLAP":{key:"preventoverlap",value:true,validator:E.isBoolean,supercedes:["x","y","xy"]},"SHOW_DELAY":{key:"showdelay",value:200,validator:E.isNumber},"AUTO_DISMISS_DELAY":{key:"autodismissdelay",value:5000,validator:E.isNumber},"HIDE_DELAY":{key:"hidedelay",value:250,validator:E.isNumber},"TEXT":{key:"text",suppressEvent:true},"CONTAINER":{key:"container"},"DISABLED":{key:"disabled",value:false,suppressEvent:true}},A={"CONTEXT_MOUSE_OVER":"contextMouseOver","CONTEXT_MOUSE_OUT":"contextMouseOut","CONTEXT_TRIGGER":"contextTrigger"};G.CSS_TOOLTIP="yui-tt";function I(N,M,O){var R=O[0],P!
 =O[1],Q=this.cfg,S=Q.getProperty("width");if(S==P){Q.setProperty("width",R);}}function D(N,M){var O=document.body,S=this.cfg,R=S.getProperty("width"),P,Q;if((!R||R=="auto")&&(S.getProperty("container")!=O||S.getProperty("x")>=C.getViewportWidth()||S.getProperty("y")>=C.getViewportHeight())){Q=this.element.cloneNode(true);Q.style.visibility="hidden";Q.style.top="0px";Q.style.left="0px";O.appendChild(Q);P=(Q.offsetWidth+"px");O.removeChild(Q);Q=null;S.setProperty("width",P);S.refireEvent("xy");this.subscribe("hide",I,[(R||""),P]);}}function B(N,M,O){this.render(O);}function J(){L.onDOMReady(B,this.cfg.getProperty("container"),this);}YAHOO.extend(G,YAHOO.widget.Overlay,{init:function(N,M){G.superclass.init.call(this,N);this.beforeInitEvent.fire(G);C.addClass(this.element,G.CSS_TOOLTIP);if(M){this.cfg.applyConfig(M,true);}this.cfg.queueProperty("visible",false);this.cfg.queueProperty("constraintoviewport",true);this.setBody("");this.subscribe("beforeShow",D);this.subscribe("ini!
 t",J);this.subscribe("render",this.onRender);this.initEvent.fi!
 re(G);},
initEvents:function(){G.superclass.initEvents.call(this);var M=K.LIST;this.contextMouseOverEvent=this.createEvent(A.CONTEXT_MOUSE_OVER);this.contextMouseOverEvent.signature=M;this.contextMouseOutEvent=this.createEvent(A.CONTEXT_MOUSE_OUT);this.contextMouseOutEvent.signature=M;this.contextTriggerEvent=this.createEvent(A.CONTEXT_TRIGGER);this.contextTriggerEvent.signature=M;},initDefaultConfig:function(){G.superclass.initDefaultConfig.call(this);this.cfg.addProperty(H.PREVENT_OVERLAP.key,{value:H.PREVENT_OVERLAP.value,validator:H.PREVENT_OVERLAP.validator,supercedes:H.PREVENT_OVERLAP.supercedes});this.cfg.addProperty(H.SHOW_DELAY.key,{handler:this.configShowDelay,value:200,validator:H.SHOW_DELAY.validator});this.cfg.addProperty(H.AUTO_DISMISS_DELAY.key,{handler:this.configAutoDismissDelay,value:H.AUTO_DISMISS_DELAY.value,validator:H.AUTO_DISMISS_DELAY.validator});this.cfg.addProperty(H.HIDE_DELAY.key,{handler:this.configHideDelay,value:H.HIDE_DELAY.value,validator:H.HIDE_DELAY!
 .validator});this.cfg.addProperty(H.TEXT.key,{handler:this.configText,suppressEvent:H.TEXT.suppressEvent});this.cfg.addProperty(H.CONTAINER.key,{handler:this.configContainer,value:document.body});this.cfg.addProperty(H.DISABLED.key,{handler:this.configContainer,value:H.DISABLED.value,supressEvent:H.DISABLED.suppressEvent});},configText:function(N,M,O){var P=M[0];if(P){this.setBody(P);}},configContainer:function(O,N,P){var M=N[0];if(typeof M=="string"){this.cfg.setProperty("container",document.getElementById(M),true);}},_removeEventListeners:function(){var P=this._context,M,O,N;if(P){M=P.length;if(M>0){N=M-1;do{O=P[N];L.removeListener(O,"mouseover",this.onContextMouseOver);L.removeListener(O,"mousemove",this.onContextMouseMove);L.removeListener(O,"mouseout",this.onContextMouseOut);}while(N--);}}},configContext:function(R,N,S){var Q=N[0],T,M,P,O;if(Q){if(!(Q instanceof Array)){if(typeof Q=="string"){this.cfg.setProperty("context",[document.getElementById(Q)],true);}else{this.!
 cfg.setProperty("context",[Q],true);}Q=this.cfg.getProperty("c!
 ontext")
;}this._removeEventListeners();this._context=Q;T=this._context;if(T){M=T.length;if(M>0){O=M-1;do{P=T[O];L.on(P,"mouseover",this.onContextMouseOver,this);L.on(P,"mousemove",this.onContextMouseMove,this);L.on(P,"mouseout",this.onContextMouseOut,this);}while(O--);}}}},onContextMouseMove:function(N,M){M.pageX=L.getPageX(N);M.pageY=L.getPageY(N);},onContextMouseOver:function(O,N){var M=this;if(M.title){N._tempTitle=M.title;M.title="";}if(N.fireEvent("contextMouseOver",M,O)!==false&&!N.cfg.getProperty("disabled")){if(N.hideProcId){clearTimeout(N.hideProcId);N.hideProcId=null;}L.on(M,"mousemove",N.onContextMouseMove,N);N.showProcId=N.doShow(O,M);}},onContextMouseOut:function(O,N){var M=this;if(N._tempTitle){M.title=N._tempTitle;N._tempTitle=null;}if(N.showProcId){clearTimeout(N.showProcId);N.showProcId=null;}if(N.hideProcId){clearTimeout(N.hideProcId);N.hideProcId=null;}N.fireEvent("contextMouseOut",M,O);N.hideProcId=setTimeout(function(){N.hide();},N.cfg.getProperty("hidedelay"));!
 },doShow:function(O,M){var P=25,N=this;if(YAHOO.env.ua.opera&&M.tagName&&M.tagName.toUpperCase()=="A"){P+=12;}return setTimeout(function(){var Q=N.cfg.getProperty("text");if(N._tempTitle&&(Q===""||YAHOO.lang.isUndefined(Q)||YAHOO.lang.isNull(Q))){N.setBody(N._tempTitle);}else{N.cfg.refireEvent("text");}N.moveTo(N.pageX,N.pageY+P);if(N.cfg.getProperty("preventoverlap")){N.preventOverlap(N.pageX,N.pageY);}L.removeListener(M,"mousemove",N.onContextMouseMove);N.contextTriggerEvent.fire(M);N.show();N.hideProcId=N.doHide();},this.cfg.getProperty("showdelay"));},doHide:function(){var M=this;return setTimeout(function(){M.hide();},this.cfg.getProperty("autodismissdelay"));},preventOverlap:function(Q,P){var M=this.element.offsetHeight,O=new YAHOO.util.Point(Q,P),N=C.getRegion(this.element);N.top-=5;N.left-=5;N.right+=5;N.bottom+=5;if(N.contains(O)){this.cfg.setProperty("y",(P-M-5));}},onRender:function(Q,P){function R(){var U=this.element,T=this._shadow;
-if(T){T.style.width=(U.offsetWidth+6)+"px";T.style.height=(U.offsetHeight+1)+"px";}}function N(){C.addClass(this._shadow,"yui-tt-shadow-visible");}function M(){C.removeClass(this._shadow,"yui-tt-shadow-visible");}function S(){var V=this._shadow,U,T,X,W;if(!V){U=this.element;T=YAHOO.widget.Module;X=YAHOO.env.ua.ie;W=this;if(!F){F=document.createElement("div");F.className="yui-tt-shadow";}V=F.cloneNode(false);U.appendChild(V);this._shadow=V;N.call(this);this.subscribe("beforeShow",N);this.subscribe("beforeHide",M);if(X==6||(X==7&&document.compatMode=="BackCompat")){window.setTimeout(function(){R.call(W);},0);this.cfg.subscribeToConfigEvent("width",R);this.cfg.subscribeToConfigEvent("height",R);this.subscribe("changeContent",R);T.textResizeEvent.subscribe(R,this,true);this.subscribe("destroy",function(){T.textResizeEvent.unsubscribe(R,this);});}}}function O(){S.call(this);this.unsubscribe("beforeShow",O);}if(this.cfg.getProperty("visible")){S.call(this);}else{this.subscribe("b!
 eforeShow",O);}},destroy:function(){this._removeEventListeners();G.superclass.destroy.call(this);},toString:function(){return"Tooltip "+this.id;}});}());(function(){YAHOO.widget.Panel=function(V,U){YAHOO.widget.Panel.superclass.constructor.call(this,V,U);};var S=null;var E=YAHOO.lang,F=YAHOO.util,A=F.Dom,T=F.Event,M=F.CustomEvent,K=YAHOO.util.KeyListener,I=F.Config,H=YAHOO.widget.Overlay,O=YAHOO.widget.Panel,L=YAHOO.env.ua,P=(L.ie==6||(L.ie==7&&document.compatMode=="BackCompat")),G,Q,C,D={"SHOW_MASK":"showMask","HIDE_MASK":"hideMask","DRAG":"drag"},N={"CLOSE":{key:"close",value:true,validator:E.isBoolean,supercedes:["visible"]},"DRAGGABLE":{key:"draggable",value:(F.DD?true:false),validator:E.isBoolean,supercedes:["visible"]},"DRAG_ONLY":{key:"dragonly",value:false,validator:E.isBoolean,supercedes:["draggable"]},"UNDERLAY":{key:"underlay",value:"shadow",supercedes:["visible"]},"MODAL":{key:"modal",value:false,validator:E.isBoolean,supercedes:["visible","zindex"]},"KEY_LISTEN!
 ERS":{key:"keylisteners",suppressEvent:true,supercedes:["visib!
 le"]},"S
TRINGS":{key:"strings",supercedes:["close"],validator:E.isObject,value:{close:"Close"}}};O.CSS_PANEL="yui-panel";O.CSS_PANEL_CONTAINER="yui-panel-container";O.FOCUSABLE=["a","button","select","textarea","input","iframe"];function J(V,U){if(!this.header&&this.cfg.getProperty("draggable")){this.setHeader(" ");}}function R(V,U,W){var Z=W[0],X=W[1],Y=this.cfg,a=Y.getProperty("width");if(a==X){Y.setProperty("width",Z);}this.unsubscribe("hide",R,W);}function B(V,U){var Z=YAHOO.env.ua.ie,Y,X,W;if(Z==6||(Z==7&&document.compatMode=="BackCompat")){Y=this.cfg;X=Y.getProperty("width");if(!X||X=="auto"){W=(this.element.offsetWidth+"px");Y.setProperty("width",W);this.subscribe("hide",R,[(X||""),W]);}}}YAHOO.extend(O,H,{init:function(V,U){O.superclass.init.call(this,V);this.beforeInitEvent.fire(O);A.addClass(this.element,O.CSS_PANEL);this.buildWrapper();if(U){this.cfg.applyConfig(U,true);}this.subscribe("showMask",this._addFocusHandlers);this.subscribe("hideMask",this._removeFocusHand!
 lers);this.subscribe("beforeRender",J);this.subscribe("render",function(){this.setFirstLastFocusable();this.subscribe("changeContent",this.setFirstLastFocusable);});this.subscribe("show",this.focusFirst);this.initEvent.fire(O);},_onElementFocus:function(X){var W=T.getTarget(X);if(W!==this.element&&!A.isAncestor(this.element,W)&&S==this){try{if(this.firstElement){this.firstElement.focus();}else{if(this._modalFocus){this._modalFocus.focus();}else{this.innerElement.focus();}}}catch(V){try{if(W!==document&&W!==document.body&&W!==window){W.blur();}}catch(U){}}}},_addFocusHandlers:function(V,U){if(!this.firstElement){if(L.webkit||L.opera){if(!this._modalFocus){this._createHiddenFocusElement();}}else{this.innerElement.tabIndex=0;}}this.setTabLoop(this.firstElement,this.lastElement);T.onFocus(document.documentElement,this._onElementFocus,this,true);S=this;},_createHiddenFocusElement:function(){var U=document.createElement("button");U.style.height="1px";U.style.width="1px";U.style.p!
 osition="absolute";U.style.left="-10000em";U.style.opacity=0;U!
 .tabInde
x="-1";this.innerElement.appendChild(U);this._modalFocus=U;},_removeFocusHandlers:function(V,U){T.removeFocusListener(document.documentElement,this._onElementFocus,this);if(S==this){S=null;}},focusFirst:function(W,U,Y){var V=this.firstElement;if(U&&U[1]){T.stopEvent(U[1]);}if(V){try{V.focus();}catch(X){}}},focusLast:function(W,U,Y){var V=this.lastElement;if(U&&U[1]){T.stopEvent(U[1]);}if(V){try{V.focus();}catch(X){}}},setTabLoop:function(X,Z){var V=this.preventBackTab,W=this.preventTabOut,U=this.showEvent,Y=this.hideEvent;if(V){V.disable();U.unsubscribe(V.enable,V);Y.unsubscribe(V.disable,V);V=this.preventBackTab=null;}if(W){W.disable();U.unsubscribe(W.enable,W);Y.unsubscribe(W.disable,W);W=this.preventTabOut=null;}if(X){this.preventBackTab=new K(X,{shift:true,keys:9},{fn:this.focusLast,scope:this,correctScope:true});V=this.preventBackTab;U.subscribe(V.enable,V,true);Y.subscribe(V.disable,V,true);}if(Z){this.preventTabOut=new K(Z,{shift:false,keys:9},{fn:this.focusFirst,scop!
 e:this,correctScope:true});W=this.preventTabOut;U.subscribe(W.enable,W,true);Y.subscribe(W.disable,W,true);}},getFocusableElements:function(U){U=U||this.innerElement;var X={};for(var W=0;W<O.FOCUSABLE.length;W++){X[O.FOCUSABLE[W]]=true;}function V(Y){if(Y.focus&&Y.type!=="hidden"&&!Y.disabled&&X[Y.tagName.toLowerCase()]){return true;}return false;}return A.getElementsBy(V,null,U);},setFirstLastFocusable:function(){this.firstElement=null;this.lastElement=null;var U=this.getFocusableElements();this.focusableElements=U;if(U.length>0){this.firstElement=U[0];this.lastElement=U[U.length-1];}if(this.cfg.getProperty("modal")){this.setTabLoop(this.firstElement,this.lastElement);}},initEvents:function(){O.superclass.initEvents.call(this);var U=M.LIST;this.showMaskEvent=this.createEvent(D.SHOW_MASK);this.showMaskEvent.signature=U;this.hideMaskEvent=this.createEvent(D.HIDE_MASK);this.hideMaskEvent.signature=U;this.dragEvent=this.createEvent(D.DRAG);
-this.dragEvent.signature=U;},initDefaultConfig:function(){O.superclass.initDefaultConfig.call(this);this.cfg.addProperty(N.CLOSE.key,{handler:this.configClose,value:N.CLOSE.value,validator:N.CLOSE.validator,supercedes:N.CLOSE.supercedes});this.cfg.addProperty(N.DRAGGABLE.key,{handler:this.configDraggable,value:(F.DD)?true:false,validator:N.DRAGGABLE.validator,supercedes:N.DRAGGABLE.supercedes});this.cfg.addProperty(N.DRAG_ONLY.key,{value:N.DRAG_ONLY.value,validator:N.DRAG_ONLY.validator,supercedes:N.DRAG_ONLY.supercedes});this.cfg.addProperty(N.UNDERLAY.key,{handler:this.configUnderlay,value:N.UNDERLAY.value,supercedes:N.UNDERLAY.supercedes});this.cfg.addProperty(N.MODAL.key,{handler:this.configModal,value:N.MODAL.value,validator:N.MODAL.validator,supercedes:N.MODAL.supercedes});this.cfg.addProperty(N.KEY_LISTENERS.key,{handler:this.configKeyListeners,suppressEvent:N.KEY_LISTENERS.suppressEvent,supercedes:N.KEY_LISTENERS.supercedes});this.cfg.addProperty(N.STRINGS.key,{valu!
 e:N.STRINGS.value,handler:this.configStrings,validator:N.STRINGS.validator,supercedes:N.STRINGS.supercedes});},configClose:function(X,V,Y){var Z=V[0],W=this.close,U=this.cfg.getProperty("strings");if(Z){if(!W){if(!C){C=document.createElement("a");C.className="container-close";C.href="#";}W=C.cloneNode(true);this.innerElement.appendChild(W);W.innerHTML=(U&&U.close)?U.close:" ";T.on(W,"click",this._doClose,this,true);this.close=W;}else{W.style.display="block";}}else{if(W){W.style.display="none";}}},_doClose:function(U){T.preventDefault(U);this.hide();},configDraggable:function(V,U,W){var X=U[0];if(X){if(!F.DD){this.cfg.setProperty("draggable",false);return ;}if(this.header){A.setStyle(this.header,"cursor","move");this.registerDragDrop();}this.subscribe("beforeShow",B);}else{if(this.dd){this.dd.unreg();}if(this.header){A.setStyle(this.header,"cursor","auto");}this.unsubscribe("beforeShow",B);}},configUnderlay:function(d,c,Z){var b=(this.platform=="mac"&&L.gecko),e=c[0].to!
 LowerCase(),V=this.underlay,W=this.element;function f(){var g=!
 this.und
erlay;A.addClass(g,"yui-force-redraw");window.setTimeout(function(){A.removeClass(g,"yui-force-redraw");},0);}function X(){var g=false;if(!V){if(!Q){Q=document.createElement("div");Q.className="underlay";}V=Q.cloneNode(false);this.element.appendChild(V);this.underlay=V;if(P){this.sizeUnderlay();this.cfg.subscribeToConfigEvent("width",this.sizeUnderlay);this.cfg.subscribeToConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.subscribe(this.sizeUnderlay);YAHOO.widget.Module.textResizeEvent.subscribe(this.sizeUnderlay,this,true);}if(L.webkit&&L.webkit<420){this.changeContentEvent.subscribe(f);}g=true;}}function a(){var g=X.call(this);if(!g&&P){this.sizeUnderlay();}this._underlayDeferred=false;this.beforeShowEvent.unsubscribe(a);}function Y(){if(this._underlayDeferred){this.beforeShowEvent.unsubscribe(a);this._underlayDeferred=false;}if(V){this.cfg.unsubscribeFromConfigEvent("width",this.sizeUnderlay);this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);thi!
 s.changeContentEvent.unsubscribe(this.sizeUnderlay);this.changeContentEvent.unsubscribe(f);YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay,this,true);this.element.removeChild(V);this.underlay=null;}}switch(e){case"shadow":A.removeClass(W,"matte");A.addClass(W,"shadow");break;case"matte":if(!b){Y.call(this);}A.removeClass(W,"shadow");A.addClass(W,"matte");break;default:if(!b){Y.call(this);}A.removeClass(W,"shadow");A.removeClass(W,"matte");break;}if((e=="shadow")||(b&&!V)){if(this.cfg.getProperty("visible")){var U=X.call(this);if(!U&&P){this.sizeUnderlay();}}else{if(!this._underlayDeferred){this.beforeShowEvent.subscribe(a);this._underlayDeferred=true;}}}},configModal:function(V,U,X){var W=U[0];if(W){if(!this._hasModalityEventListeners){this.subscribe("beforeShow",this.buildMask);this.subscribe("beforeShow",this.bringToTop);this.subscribe("beforeShow",this.showMask);this.subscribe("hide",this.hideMask);H.windowResizeEvent.subscribe(this.sizeMask,this,true);!
 this._hasModalityEventListeners=true;}}else{if(this._hasModali!
 tyEventL
isteners){if(this.cfg.getProperty("visible")){this.hideMask();this.removeMask();}this.unsubscribe("beforeShow",this.buildMask);this.unsubscribe("beforeShow",this.bringToTop);this.unsubscribe("beforeShow",this.showMask);this.unsubscribe("hide",this.hideMask);H.windowResizeEvent.unsubscribe(this.sizeMask,this);this._hasModalityEventListeners=false;}}},removeMask:function(){var V=this.mask,U;if(V){this.hideMask();U=V.parentNode;if(U){U.removeChild(V);}this.mask=null;}},configKeyListeners:function(X,U,a){var W=U[0],Z,Y,V;if(W){if(W instanceof Array){Y=W.length;for(V=0;V<Y;V++){Z=W[V];if(!I.alreadySubscribed(this.showEvent,Z.enable,Z)){this.showEvent.subscribe(Z.enable,Z,true);}if(!I.alreadySubscribed(this.hideEvent,Z.disable,Z)){this.hideEvent.subscribe(Z.disable,Z,true);this.destroyEvent.subscribe(Z.disable,Z,true);}}}else{if(!I.alreadySubscribed(this.showEvent,W.enable,W)){this.showEvent.subscribe(W.enable,W,true);}if(!I.alreadySubscribed(this.hideEvent,W.disable,W)){this.hide!
 Event.subscribe(W.disable,W,true);this.destroyEvent.subscribe(W.disable,W,true);}}}},configStrings:function(V,U,W){var X=E.merge(N.STRINGS.value,U[0]);this.cfg.setProperty(N.STRINGS.key,X,true);},configHeight:function(X,V,Y){var U=V[0],W=this.innerElement;A.setStyle(W,"height",U);this.cfg.refireEvent("iframe");},_autoFillOnHeightChange:function(W,U,V){O.superclass._autoFillOnHeightChange.apply(this,arguments);if(P){this.sizeUnderlay();}},configWidth:function(X,U,Y){var W=U[0],V=this.innerElement;A.setStyle(V,"width",W);this.cfg.refireEvent("iframe");},configzIndex:function(V,U,X){O.superclass.configzIndex.call(this,V,U,X);if(this.mask||this.cfg.getProperty("modal")===true){var W=A.getStyle(this.element,"zIndex");if(!W||isNaN(W)){W=0;}if(W===0){this.cfg.setProperty("zIndex",1);}else{this.stackMask();}}},buildWrapper:function(){var W=this.element.parentNode,U=this.element,V=document.createElement("div");V.className=O.CSS_PANEL_CONTAINER;
-V.id=U.id+"_c";if(W){W.insertBefore(V,U);}V.appendChild(U);this.element=V;this.innerElement=U;A.setStyle(this.innerElement,"visibility","inherit");},sizeUnderlay:function(){var V=this.underlay,U;if(V){U=this.element;V.style.width=U.offsetWidth+"px";V.style.height=U.offsetHeight+"px";}},registerDragDrop:function(){var V=this;if(this.header){if(!F.DD){return ;}var U=(this.cfg.getProperty("dragonly")===true);this.dd=new F.DD(this.element.id,this.id,{dragOnly:U});if(!this.header.id){this.header.id=this.id+"_h";}this.dd.startDrag=function(){var X,Z,W,c,b,a;if(YAHOO.env.ua.ie==6){A.addClass(V.element,"drag");}if(V.cfg.getProperty("constraintoviewport")){var Y=H.VIEWPORT_OFFSET;X=V.element.offsetHeight;Z=V.element.offsetWidth;W=A.getViewportWidth();c=A.getViewportHeight();b=A.getDocumentScrollLeft();a=A.getDocumentScrollTop();if(X+Y<c){this.minY=a+Y;this.maxY=a+c-X-Y;}else{this.minY=a+Y;this.maxY=a+Y;}if(Z+Y<W){this.minX=b+Y;this.maxX=b+W-Z-Y;}else{this.minX=b+Y;this.maxX=b+Y;}thi!
 s.constrainX=true;this.constrainY=true;}else{this.constrainX=false;this.constrainY=false;}V.dragEvent.fire("startDrag",arguments);};this.dd.onDrag=function(){V.syncPosition();V.cfg.refireEvent("iframe");if(this.platform=="mac"&&YAHOO.env.ua.gecko){this.showMacGeckoScrollbars();}V.dragEvent.fire("onDrag",arguments);};this.dd.endDrag=function(){if(YAHOO.env.ua.ie==6){A.removeClass(V.element,"drag");}V.dragEvent.fire("endDrag",arguments);V.moveEvent.fire(V.cfg.getProperty("xy"));};this.dd.setHandleElId(this.header.id);this.dd.addInvalidHandleType("INPUT");this.dd.addInvalidHandleType("SELECT");this.dd.addInvalidHandleType("TEXTAREA");}},buildMask:function(){var U=this.mask;if(!U){if(!G){G=document.createElement("div");G.className="mask";G.innerHTML=" ";}U=G.cloneNode(true);U.id=this.id+"_mask";document.body.insertBefore(U,document.body.firstChild);this.mask=U;if(YAHOO.env.ua.gecko&&this.platform=="mac"){A.addClass(this.mask,"block-scrollbars");}this.stackMask();}},hideMas!
 k:function(){if(this.cfg.getProperty("modal")&&this.mask){this!
 .mask.st
yle.display="none";A.removeClass(document.body,"masked");this.hideMaskEvent.fire();}},showMask:function(){if(this.cfg.getProperty("modal")&&this.mask){A.addClass(document.body,"masked");this.sizeMask();this.mask.style.display="block";this.showMaskEvent.fire();}},sizeMask:function(){if(this.mask){var V=this.mask,W=A.getViewportWidth(),U=A.getViewportHeight();if(this.mask.offsetHeight>U){this.mask.style.height=U+"px";}if(this.mask.offsetWidth>W){this.mask.style.width=W+"px";}this.mask.style.height=A.getDocumentHeight()+"px";this.mask.style.width=A.getDocumentWidth()+"px";}},stackMask:function(){if(this.mask){var U=A.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(U)&&!isNaN(U)){A.setStyle(this.mask,"zIndex",U-1);}}},render:function(U){return O.superclass.render.call(this,U,this.innerElement);},destroy:function(){H.windowResizeEvent.unsubscribe(this.sizeMask,this);this.removeMask();if(this.close){T.purgeElement(this.close);}O.superclass.destroy.call(this);},toString:!
 function(){return"Panel "+this.id;}});}());(function(){YAHOO.widget.Dialog=function(J,I){YAHOO.widget.Dialog.superclass.constructor.call(this,J,I);};var B=YAHOO.util.Event,G=YAHOO.util.CustomEvent,E=YAHOO.util.Dom,A=YAHOO.widget.Dialog,F=YAHOO.lang,H={"BEFORE_SUBMIT":"beforeSubmit","SUBMIT":"submit","MANUAL_SUBMIT":"manualSubmit","ASYNC_SUBMIT":"asyncSubmit","FORM_SUBMIT":"formSubmit","CANCEL":"cancel"},C={"POST_METHOD":{key:"postmethod",value:"async"},"BUTTONS":{key:"buttons",value:"none",supercedes:["visible"]},"HIDEAFTERSUBMIT":{key:"hideaftersubmit",value:true}};A.CSS_DIALOG="yui-dialog";function D(){var L=this._aButtons,J,K,I;if(F.isArray(L)){J=L.length;if(J>0){I=J-1;do{K=L[I];if(YAHOO.widget.Button&&K instanceof YAHOO.widget.Button){K.destroy();}else{if(K.tagName.toUpperCase()=="BUTTON"){B.purgeElement(K);B.purgeElement(K,false);}}}while(I--);}}}YAHOO.extend(A,YAHOO.widget.Panel,{form:null,initDefaultConfig:function(){A.superclass.initDefaultConfig.call(this);this.cal!
 lback={success:null,failure:null,argument:null};this.cfg.addPr!
 operty(C
.POST_METHOD.key,{handler:this.configPostMethod,value:C.POST_METHOD.value,validator:function(I){if(I!="form"&&I!="async"&&I!="none"&&I!="manual"){return false;}else{return true;}}});this.cfg.addProperty(C.HIDEAFTERSUBMIT.key,{value:C.HIDEAFTERSUBMIT.value});this.cfg.addProperty(C.BUTTONS.key,{handler:this.configButtons,value:C.BUTTONS.value,supercedes:C.BUTTONS.supercedes});},initEvents:function(){A.superclass.initEvents.call(this);var I=G.LIST;this.beforeSubmitEvent=this.createEvent(H.BEFORE_SUBMIT);this.beforeSubmitEvent.signature=I;this.submitEvent=this.createEvent(H.SUBMIT);this.submitEvent.signature=I;this.manualSubmitEvent=this.createEvent(H.MANUAL_SUBMIT);this.manualSubmitEvent.signature=I;this.asyncSubmitEvent=this.createEvent(H.ASYNC_SUBMIT);this.asyncSubmitEvent.signature=I;this.formSubmitEvent=this.createEvent(H.FORM_SUBMIT);this.formSubmitEvent.signature=I;this.cancelEvent=this.createEvent(H.CANCEL);this.cancelEvent.signature=I;},init:function(J,I){A.superclass.i!
 nit.call(this,J);this.beforeInitEvent.fire(A);E.addClass(this.element,A.CSS_DIALOG);this.cfg.setProperty("visible",false);if(I){this.cfg.applyConfig(I,true);}this.showEvent.subscribe(this.focusFirst,this,true);this.beforeHideEvent.subscribe(this.blurButtons,this,true);this.subscribe("changeBody",this.registerForm);this.initEvent.fire(A);},doSubmit:function(){var J=YAHOO.util.Connect,P=this.form,N=false,M=false,O,I,L,K;switch(this.cfg.getProperty("postmethod")){case"async":O=P.elements;I=O.length;if(I>0){L=I-1;do{if(O[L].type=="file"){N=true;break;}}while(L--);}if(N&&YAHOO.env.ua.ie&&this.isSecure){M=true;}K=this._getFormAttributes(P);J.setForm(P,N,M);J.asyncRequest(K.method,K.action,this.callback);this.asyncSubmitEvent.fire();break;case"form":P.submit();this.formSubmitEvent.fire();break;case"none":case"manual":this.manualSubmitEvent.fire();break;}},_getFormAttributes:function(K){var I={method:null,action:null};
-if(K){if(K.getAttributeNode){var J=K.getAttributeNode("action");var L=K.getAttributeNode("method");if(J){I.action=J.value;}if(L){I.method=L.value;}}else{I.action=K.getAttribute("action");I.method=K.getAttribute("method");}}I.method=(F.isString(I.method)?I.method:"POST").toUpperCase();I.action=F.isString(I.action)?I.action:"";return I;},registerForm:function(){var I=this.element.getElementsByTagName("form")[0];if(this.form){if(this.form==I&&E.isAncestor(this.element,this.form)){return ;}else{B.purgeElement(this.form);this.form=null;}}if(!I){I=document.createElement("form");I.name="frm_"+this.id;this.body.appendChild(I);}if(I){this.form=I;B.on(I,"submit",this._submitHandler,this,true);}},_submitHandler:function(I){B.stopEvent(I);this.submit();this.form.blur();},setTabLoop:function(I,J){I=I||this.firstButton;J=this.lastButton||J;A.superclass.setTabLoop.call(this,I,J);},setFirstLastFocusable:function(){A.superclass.setFirstLastFocusable.call(this);var J,I,K,L=this.focusableElem!
 ents;this.firstFormElement=null;this.lastFormElement=null;if(this.form&&L&&L.length>0){I=L.length;for(J=0;J<I;++J){K=L[J];if(this.form===K.form){this.firstFormElement=K;break;}}for(J=I-1;J>=0;--J){K=L[J];if(this.form===K.form){this.lastFormElement=K;break;}}}},configClose:function(J,I,K){A.superclass.configClose.apply(this,arguments);},_doClose:function(I){B.preventDefault(I);this.cancel();},configButtons:function(S,R,M){var N=YAHOO.widget.Button,U=R[0],K=this.innerElement,T,P,J,Q,O,I,L;D.call(this);this._aButtons=null;if(F.isArray(U)){O=document.createElement("span");O.className="button-group";Q=U.length;this._aButtons=[];this.defaultHtmlButton=null;for(L=0;L<Q;L++){T=U[L];if(N){J=new N({label:T.text});J.appendTo(O);P=J.get("element");if(T.isDefault){J.addClass("default");this.defaultHtmlButton=P;}if(F.isFunction(T.handler)){J.set("onclick",{fn:T.handler,obj:this,scope:this});}else{if(F.isObject(T.handler)&&F.isFunction(T.handler.fn)){J.set("onclick",{fn:T.handler.fn,obj:(!
 (!F.isUndefined(T.handler.obj))?T.handler.obj:this),scope:(T.h!
 andler.s
cope||this)});}}this._aButtons[this._aButtons.length]=J;}else{P=document.createElement("button");P.setAttribute("type","button");if(T.isDefault){P.className="default";this.defaultHtmlButton=P;}P.innerHTML=T.text;if(F.isFunction(T.handler)){B.on(P,"click",T.handler,this,true);}else{if(F.isObject(T.handler)&&F.isFunction(T.handler.fn)){B.on(P,"click",T.handler.fn,((!F.isUndefined(T.handler.obj))?T.handler.obj:this),(T.handler.scope||this));}}O.appendChild(P);this._aButtons[this._aButtons.length]=P;}T.htmlButton=P;if(L===0){this.firstButton=P;}if(L==(Q-1)){this.lastButton=P;}}this.setFooter(O);I=this.footer;if(E.inDocument(this.element)&&!E.isAncestor(K,I)){K.appendChild(I);}this.buttonSpan=O;}else{O=this.buttonSpan;I=this.footer;if(O&&I){I.removeChild(O);this.buttonSpan=null;this.firstButton=null;this.lastButton=null;this.defaultHtmlButton=null;}}this.setFirstLastFocusable();this.cfg.refireEvent("iframe");this.cfg.refireEvent("underlay");},getButtons:function(){return this._aB!
 uttons||null;},focusFirst:function(K,I,M){var J=this.firstFormElement;if(I&&I[1]){B.stopEvent(I[1]);}if(J){try{J.focus();}catch(L){}}else{this.focusFirstButton();}},focusLast:function(K,I,M){var N=this.cfg.getProperty("buttons"),J=this.lastFormElement;if(I&&I[1]){B.stopEvent(I[1]);}if(N&&F.isArray(N)){this.focusLastButton();}else{if(J){try{J.focus();}catch(L){}}}},_getButton:function(J){var I=YAHOO.widget.Button;if(I&&J&&J.nodeName&&J.id){J=I.getButton(J.id)||J;}return J;},focusDefaultButton:function(){var I=this._getButton(this.defaultHtmlButton);if(I){try{I.focus();}catch(J){}}},blurButtons:function(){var N=this.cfg.getProperty("buttons"),K,M,J,I;if(N&&F.isArray(N)){K=N.length;if(K>0){I=(K-1);do{M=N[I];if(M){J=this._getButton(M.htmlButton);if(J){try{J.blur();}catch(L){}}}}while(I--);}}},focusFirstButton:function(){var L=this.cfg.getProperty("buttons"),K,I;if(L&&F.isArray(L)){K=L[0];if(K){I=this._getButton(K.htmlButton);if(I){try{I.focus();}catch(J){}}}}},focusLastButton:f!
 unction(){var M=this.cfg.getProperty("buttons"),J,L,I;if(M&&F.!
 isArray(
M)){J=M.length;if(J>0){L=M[(J-1)];if(L){I=this._getButton(L.htmlButton);if(I){try{I.focus();}catch(K){}}}}}},configPostMethod:function(J,I,K){this.registerForm();},validate:function(){return true;},submit:function(){if(this.validate()){this.beforeSubmitEvent.fire();this.doSubmit();this.submitEvent.fire();if(this.cfg.getProperty("hideaftersubmit")){this.hide();}return true;}else{return false;}},cancel:function(){this.cancelEvent.fire();this.hide();},getData:function(){var Y=this.form,K,R,U,M,S,P,O,J,V,L,W,Z,I,N,a,X,T;function Q(c){var b=c.tagName.toUpperCase();return((b=="INPUT"||b=="TEXTAREA"||b=="SELECT")&&c.name==M);}if(Y){K=Y.elements;R=K.length;U={};for(X=0;X<R;X++){M=K[X].name;S=E.getElementsBy(Q,"*",Y);P=S.length;if(P>0){if(P==1){S=S[0];O=S.type;J=S.tagName.toUpperCase();switch(J){case"INPUT":if(O=="checkbox"){U[M]=S.checked;}else{if(O!="radio"){U[M]=S.value;}}break;case"TEXTAREA":U[M]=S.value;break;case"SELECT":V=S.options;L=V.length;W=[];for(T=0;T<L;T++){Z=V[T];if(Z.!
 selected){I=Z.value;if(!I||I===""){I=Z.text;}W[W.length]=I;}}U[M]=W;break;}}else{O=S[0].type;switch(O){case"radio":for(T=0;T<P;T++){N=S[T];if(N.checked){U[M]=N.value;break;}}break;case"checkbox":W=[];for(T=0;T<P;T++){a=S[T];if(a.checked){W[W.length]=a.value;}}U[M]=W;break;}}}}}return U;},destroy:function(){D.call(this);this._aButtons=null;var I=this.element.getElementsByTagName("form"),J;if(I.length>0){J=I[0];if(J){B.purgeElement(J);if(J.parentNode){J.parentNode.removeChild(J);}this.form=null;}}A.superclass.destroy.call(this);},toString:function(){return"Dialog "+this.id;}});}());(function(){YAHOO.widget.SimpleDialog=function(E,D){YAHOO.widget.SimpleDialog.superclass.constructor.call(this,E,D);};var C=YAHOO.util.Dom,B=YAHOO.widget.SimpleDialog,A={"ICON":{key:"icon",value:"none",suppressEvent:true},"TEXT":{key:"text",value:"",suppressEvent:true,supercedes:["icon"]}};B.ICON_BLOCK="blckicon";B.ICON_ALARM="alrticon";
-B.ICON_HELP="hlpicon";B.ICON_INFO="infoicon";B.ICON_WARN="warnicon";B.ICON_TIP="tipicon";B.ICON_CSS_CLASSNAME="yui-icon";B.CSS_SIMPLEDIALOG="yui-simple-dialog";YAHOO.extend(B,YAHOO.widget.Dialog,{initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);this.cfg.addProperty(A.ICON.key,{handler:this.configIcon,value:A.ICON.value,suppressEvent:A.ICON.suppressEvent});this.cfg.addProperty(A.TEXT.key,{handler:this.configText,value:A.TEXT.value,suppressEvent:A.TEXT.suppressEvent,supercedes:A.TEXT.supercedes});},init:function(E,D){B.superclass.init.call(this,E);this.beforeInitEvent.fire(B);C.addClass(this.element,B.CSS_SIMPLEDIALOG);this.cfg.queueProperty("postmethod","manual");if(D){this.cfg.applyConfig(D,true);}this.beforeRenderEvent.subscribe(function(){if(!this.body){this.setBody("");}},this,true);this.initEvent.fire(B);},registerForm:function(){B.superclass.registerForm.call(this);this.form.innerHTML+='<input type="hidden" name="'+this.id+'" value=""/>';},configI!
 con:function(F,E,J){var K=E[0],D=this.body,I=B.ICON_CSS_CLASSNAME,H,G;if(K&&K!="none"){H=C.getElementsByClassName(I,"*",D);if(H){G=H.parentNode;if(G){G.removeChild(H);H=null;}}if(K.indexOf(".")==-1){H=document.createElement("span");H.className=(I+" "+K);H.innerHTML=" ";}else{H=document.createElement("img");H.src=(this.imageRoot+K);H.className=I;}if(H){D.insertBefore(H,D.firstChild);}}},configText:function(E,D,F){var G=D[0];if(G){this.setBody(G);this.cfg.refireEvent("icon");}},toString:function(){return"SimpleDialog "+this.id;}});}());(function(){YAHOO.widget.ContainerEffect=function(E,H,G,D,F){if(!F){F=YAHOO.util.Anim;}this.overlay=E;this.attrIn=H;this.attrOut=G;this.targetElement=D||E.element;this.animClass=F;};var B=YAHOO.util.Dom,C=YAHOO.util.CustomEvent,A=YAHOO.widget.ContainerEffect;A.FADE=function(D,F){var G=YAHOO.util.Easing,I={attributes:{opacity:{from:0,to:1}},duration:F,method:G.easeIn},E={attributes:{opacity:{to:0}},duration:F,method:G.easeOut},H=new A(D,I,E!
 ,D.element);H.handleUnderlayStart=function(){var K=this.overla!
 y.underl
ay;if(K&&YAHOO.env.ua.ie){var J=(K.filters&&K.filters.length>0);if(J){B.addClass(D.element,"yui-effect-fade");}}};H.handleUnderlayComplete=function(){var J=this.overlay.underlay;if(J&&YAHOO.env.ua.ie){B.removeClass(D.element,"yui-effect-fade");}};H.handleStartAnimateIn=function(K,J,L){B.addClass(L.overlay.element,"hide-select");if(!L.overlay.underlay){L.overlay.cfg.refireEvent("underlay");}L.handleUnderlayStart();B.setStyle(L.overlay.element,"visibility","visible");B.setStyle(L.overlay.element,"opacity",0);};H.handleCompleteAnimateIn=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateInCompleteEvent.fire();};H.handleStartAnimateOut=function(K,J,L){B.addClass(L.overlay.element,"hide-select");L.handleUnderlayStart();};H.handleCompleteAnimateOut=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.elem!
 ent.style.filter){L.overlay.element.style.filter=null;}B.setStyle(L.overlay.element,"visibility","hidden");B.setStyle(L.overlay.element,"opacity",1);L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateOutCompleteEvent.fire();};H.init();return H;};A.SLIDE=function(F,D){var I=YAHOO.util.Easing,L=F.cfg.getProperty("x")||B.getX(F.element),K=F.cfg.getProperty("y")||B.getY(F.element),M=B.getClientWidth(),H=F.element.offsetWidth,J={attributes:{points:{to:[L,K]}},duration:D,method:I.easeIn},E={attributes:{points:{to:[(M+25),K]}},duration:D,method:I.easeOut},G=new A(F,J,E,F.element,YAHOO.util.Motion);G.handleStartAnimateIn=function(O,N,P){P.overlay.element.style.left=((-25)-H)+"px";P.overlay.element.style.top=K+"px";};G.handleTweenAnimateIn=function(Q,P,R){var S=B.getXY(R.overlay.element),O=S[0],N=S[1];if(B.getStyle(R.overlay.element,"visibility")=="hidden"&&O<L){B.setStyle(R.overlay.element,"visibility","visible");}R.overlay.cfg.setProperty("xy",[O,N],true);R.ov!
 erlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateIn=fu!
 nction(O
,N,P){P.overlay.cfg.setProperty("xy",[L,K],true);P.startX=L;P.startY=K;P.overlay.cfg.refireEvent("iframe");P.animateInCompleteEvent.fire();};G.handleStartAnimateOut=function(O,N,R){var P=B.getViewportWidth(),S=B.getXY(R.overlay.element),Q=S[1];R.animOut.attributes.points.to=[(P+25),Q];};G.handleTweenAnimateOut=function(P,O,Q){var S=B.getXY(Q.overlay.element),N=S[0],R=S[1];Q.overlay.cfg.setProperty("xy",[N,R],true);Q.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateOut=function(O,N,P){B.setStyle(P.overlay.element,"visibility","hidden");P.overlay.cfg.setProperty("xy",[L,K]);P.animateOutCompleteEvent.fire();};G.init();return G;};A.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=C.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=C.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature!
 =C.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=C.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:function(){this.beforeAnimateOutEvent.fire();this.animOut.animate();},handleStartAnimateIn:function(E,D,F){},handleTweenAnimateIn:function(E,D,F){},handl!
 eCompleteAnimateIn:function(E,D,F){},handleStartAnimateOut:fun!
 ction(E,
D,F){},handleTweenAnimateOut:function(E,D,F){},handleCompleteAnimateOut:function(E,D,F){},toString:function(){var D="ContainerEffect";
-if(this.overlay){D+=" ["+this.overlay.toString()+"]";}return D;}};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);})();YAHOO.register("container",YAHOO.widget.Module,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.!
 unsubscribeAll();this.configChangedEvent=null;this.owner=null;!
 this.con
fig=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(R,Q){if(R){this.init(R,Q);}else{}};var F=YAHOO.util.Dom,D=YAHOO.util.Config,N=YAHOO.util.Event,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,I=YAHOO.env.ua,H,P,O,E,A={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTORY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},J={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"moni!
 torresize",value:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};G.IMG_ROOT=null;G.IMG_ROOT_SSL=null;G.CSS_MODULE="yui-module";G.CSS_HEADER="hd";G.CSS_BODY="bd";G.CSS_FOOTER="ft";G.RESIZE_MONITOR_SECURE_URL="javascript:false;";G.RESIZE_MONITOR_BUFFER=1;G.textResizeEvent=new M("textResize");G.forceDocumentRedraw=function(){var Q=document.documentElement;if(Q){Q.className+=" ";Q.className=YAHOO.lang.trim(Q.className);}};function L(){if(!H){H=document.createElement("div");H.innerHTML=('<div class="'+G.CSS_HEADER+'"></div>'+'<div class="'+G.CSS_BODY+'"></div><div class="'+G.CSS_FOOTER+'"></div>');P=H.firstChild;O=P.nextSibling;E=O.nextSibling;}return H;}function K(){if(!P){L();}return(P.cloneNode(false));}function B(){if(!O){L();}return(O.cloneNode(false));}function C(){if(!E){L();}return(E.cloneNode(false));}G.prototype={constructor:G,element:null,header:null,body:null,footer:null,id:null,imageRoot:G.IMG_ROOT,initEvents:function(){var Q=M.LIST;
+this.beforeInitEvent=this.createEvent(A.BEFORE_INIT);this.beforeInitEvent.signature=Q;this.initEvent=this.createEvent(A.INIT);this.initEvent.signature=Q;this.appendEvent=this.createEvent(A.APPEND);this.appendEvent.signature=Q;this.beforeRenderEvent=this.createEvent(A.BEFORE_RENDER);this.beforeRenderEvent.signature=Q;this.renderEvent=this.createEvent(A.RENDER);this.renderEvent.signature=Q;this.changeHeaderEvent=this.createEvent(A.CHANGE_HEADER);this.changeHeaderEvent.signature=Q;this.changeBodyEvent=this.createEvent(A.CHANGE_BODY);this.changeBodyEvent.signature=Q;this.changeFooterEvent=this.createEvent(A.CHANGE_FOOTER);this.changeFooterEvent.signature=Q;this.changeContentEvent=this.createEvent(A.CHANGE_CONTENT);this.changeContentEvent.signature=Q;this.destroyEvent=this.createEvent(A.DESTORY);this.destroyEvent.signature=Q;this.beforeShowEvent=this.createEvent(A.BEFORE_SHOW);this.beforeShowEvent.signature=Q;this.showEvent=this.createEvent(A.SHOW);this.showEvent.signature=Q;thi!
 s.beforeHideEvent=this.createEvent(A.BEFORE_HIDE);this.beforeHideEvent.signature=Q;this.hideEvent=this.createEvent(A.HIDE);this.hideEvent.signature=Q;},platform:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("windows")!=-1||Q.indexOf("win32")!=-1){return"windows";}else{if(Q.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("opera")!=-1){return"opera";}else{if(Q.indexOf("msie 7")!=-1){return"ie7";}else{if(Q.indexOf("msie")!=-1){return"ie";}else{if(Q.indexOf("safari")!=-1){return"safari";}else{if(Q.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(J.VISIBLE.key,{handler:this.configVisible,value:J.VISIBLE.value,validator:J.VISIBLE.validator});this.cfg.addProperty(J.EFFECT.key,{suppressEvent:J.EFFECT.!
 suppressEvent,supercedes:J.EFFECT.supercedes});this.cfg.addPro!
 perty(J.
MONITOR_RESIZE.key,{handler:this.configMonitorResize,value:J.MONITOR_RESIZE.value});this.cfg.addProperty(J.APPEND_TO_DOCUMENT_BODY.key,{value:J.APPEND_TO_DOCUMENT_BODY.value});},init:function(V,U){var S,W;this.initEvents();this.beforeInitEvent.fire(G);this.cfg=new D(this);if(this.isSecure){this.imageRoot=G.IMG_ROOT_SSL;}if(typeof V=="string"){S=V;V=document.getElementById(V);if(!V){V=(L()).cloneNode(false);V.id=S;}}this.id=F.generateId(V);this.element=V;W=this.element.firstChild;if(W){var R=false,Q=false,T=false;do{if(1==W.nodeType){if(!R&&F.hasClass(W,G.CSS_HEADER)){this.header=W;R=true;}else{if(!Q&&F.hasClass(W,G.CSS_BODY)){this.body=W;Q=true;}else{if(!T&&F.hasClass(W,G.CSS_FOOTER)){this.footer=W;T=true;}}}}}while((W=W.nextSibling));}this.initDefaultConfig();F.addClass(this.element,G.CSS_MODULE);if(U){this.cfg.applyConfig(U,true);}if(!D.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEv!
 ent.fire(G);},initResizeMonitor:function(){var R=(I.gecko&&this.platform=="windows");if(R){var Q=this;setTimeout(function(){Q._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var Q,S,U;function W(){G.textResizeEvent.fire();}if(!I.opera){S=F.get("_yuiResizeMonitor");var V=this._supportsCWResize();if(!S){S=document.createElement("iframe");if(this.isSecure&&G.RESIZE_MONITOR_SECURE_URL&&I.ie){S.src=G.RESIZE_MONITOR_SECURE_URL;}if(!V){U=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");S.src="data:text/html;charset=utf-8,"+encodeURIComponent(U);}S.id="_yuiResizeMonitor";S.title="Text Resize Monitor";S.style.position="absolute";S.style.visibility="hidden";var R=document.body,T=R.firstChild;if(T){R.insertBefore(S,T);}else{R.appendChild(S);}S.style.width="2em";S.style.height="2em";S.style.top=(-1!
 *(S.offsetHeight+G.RESIZE_MONITOR_BUFFER))+"px";S.style.left="!
 0";S.sty
le.borderWidth="0";S.style.visibility="visible";if(I.webkit){Q=S.contentWindow.document;Q.open();Q.close();}}if(S&&S.contentWindow){G.textResizeEvent.subscribe(this.onDomResize,this,true);if(!G.textResizeInitialized){if(V){if(!N.on(S.contentWindow,"resize",W)){N.on(S,"resize",W);}}G.textResizeInitialized=true;}this.resizeMonitor=S;}}},_supportsCWResize:function(){var Q=true;if(I.gecko&&I.gecko<=1.8){Q=false;}return Q;},onDomResize:function(S,R){var Q=-1*(this.resizeMonitor.offsetHeight+G.RESIZE_MONITOR_BUFFER);this.resizeMonitor.style.top=Q+"px";this.resizeMonitor.style.left="0";},setHeader:function(R){var Q=this.header||(this.header=K());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},appendToHeader:function(R){var Q=this.header||(this.header=K());Q.appendChild(R);this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},setBody:function(R){var Q=this.body||(this.body=B());if(R.nodeNam!
 e){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},appendToBody:function(R){var Q=this.body||(this.body=B());Q.appendChild(R);this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},setFooter:function(R){var Q=this.footer||(this.footer=C());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},appendToFooter:function(R){var Q=this.footer||(this.footer=C());Q.appendChild(R);this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},render:function(S,Q){var T=this,U;function R(V){if(typeof V=="string"){V=document.getElementById(V);}if(V){T._addToParent(V,T.element);T.appendEvent.fire();}}this.beforeRenderEvent.fire();if(!Q){Q=this.element;}if(S){R(S);}else{if(!F.inDocument(this.element)){return false;}}if(this.header&&!F.inDocument(this.header)){U=Q.firstChild;
+if(U){Q.insertBefore(this.header,U);}else{Q.appendChild(this.header);}}if(this.body&&!F.inDocument(this.body)){if(this.footer&&F.isAncestor(this.moduleElement,this.footer)){Q.insertBefore(this.body,this.footer);}else{Q.appendChild(this.body);}}if(this.footer&&!F.inDocument(this.footer)){Q.appendChild(this.footer);}this.renderEvent.fire();return true;},destroy:function(){var Q;if(this.element){N.purgeElement(this.element,true);Q=this.element.parentNode;}if(Q){Q.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;G.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(R,Q,S){var T=Q[0];if(T){this.beforeShowEvent.fire();F.setStyle(this.element,"display","block");this.showEvent.fire();}else{this.beforeHideEvent.fire();F.setStyle(this.element,"displa!
 y","none");this.hideEvent.fire();}},configMonitorResize:function(S,R,T){var Q=R[0];if(Q){this.initResizeMonitor();}else{G.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(Q,R){if(!this.cfg.getProperty("appendtodocumentbody")&&Q===document.body&&Q.firstChild){Q.insertBefore(R,Q.firstChild);}else{Q.appendChild(R);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(G,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(P,O){YAHOO.widget.Overlay.superclass.constructor.call(this,P,O);};var I=YAHOO.lang,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,N=YAHOO.util.Event,F=YAHOO.util.Dom,D=YAHOO.util.Config,K=YAHOO.env.ua,B=YAHOO.widget.Overlay,H="subscribe",E="unsubscribe",C="contained",J,A={"BEFORE_MOVE":"beforeMove","MOVE":"move"},L={"X":{key:"x",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},!
 "XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONT!
 EXT":{ke
y:"context",suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key:"fixedcenter",value:false,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:I.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(K.ie==6?true:false),validator:I.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:I.isBoolean,supercedes:["constraintoviewport"]}};B.IFRAME_SRC="javascript:false;";B.IFRAME_OFFSET=3;B.VIEWPORT_OFFSET=10;B.TOP_LEFT="tl";B.TOP_RIGHT="tr";B.BOTTOM_LEFT="bl";B.BOTTOM_RIGHT="br";B.CSS_OVERLAY="yui-overlay";B.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;B.windo!
 wScrollEvent=new M("windowScroll");B.windowResizeEvent=new M("windowResize");B.windowScrollHandler=function(P){var O=N.getTarget(P);if(!O||O===window||O===window.document){if(K.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){B.windowScrollEvent.fire();},1);}else{B.windowScrollEvent.fire();}}};B.windowResizeHandler=function(O){if(K.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){B.windowResizeEvent.fire();},100);}else{B.windowResizeEvent.fire();}};B._initialized=null;if(B._initialized===null){N.on(window,"scroll",B.windowScrollHandler);N.on(window,"resize",B.windowResizeHandler);B._initialized=true;}B._TRIGGER_MAP={"windowScroll":B.windowScrollEvent,"windowResize":B.windowResizeEvent,"textResize":G.textResizeEvent};YAHOO.extend(B,G,{CONTEXT_TRIGGERS:[],init:function(P,O){B.superclass.init.call(this,P);this.beforeInitEvent.fire(B);F.addClas!
 s(this.element,B.CSS_OVERLAY);if(O){this.cfg.applyConfig(O,tru!
 e);}if(t
his.platform=="mac"&&K.gecko){if(!D.alreadySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!D.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(B);},initEvents:function(){B.superclass.initEvents.call(this);var O=M.LIST;this.beforeMoveEvent=this.createEvent(A.BEFORE_MOVE);this.beforeMoveEvent.signature=O;this.moveEvent=this.createEvent(A.MOVE);this.moveEvent.signature=O;},initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);var O=this.cfg;O.addProperty(L.X.key,{handler:this.configX,validator:L.X.validator,suppressEvent:L.X.suppressEvent,supercedes:L.X.supercedes});O.addProperty(L.Y.key,{handler:this.configY,validator:L.Y.validator,suppressEvent:L.Y.suppressEvent,supercedes:L.Y.supercedes});O.addProperty(L.XY.key,{handler:this.configXY,suppressEvent:L.XY.suppressEvent,supercede!
 s:L.XY.supercedes});O.addProperty(L.CONTEXT.key,{handler:this.configContext,suppressEvent:L.CONTEXT.suppressEvent,supercedes:L.CONTEXT.supercedes});O.addProperty(L.FIXED_CENTER.key,{handler:this.configFixedCenter,value:L.FIXED_CENTER.value,validator:L.FIXED_CENTER.validator,supercedes:L.FIXED_CENTER.supercedes});O.addProperty(L.WIDTH.key,{handler:this.configWidth,suppressEvent:L.WIDTH.suppressEvent,supercedes:L.WIDTH.supercedes});O.addProperty(L.HEIGHT.key,{handler:this.configHeight,suppressEvent:L.HEIGHT.suppressEvent,supercedes:L.HEIGHT.supercedes});O.addProperty(L.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:L.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,supercedes:L.AUTO_FILL_HEIGHT.supercedes});O.addProperty(L.ZINDEX.key,{handler:this.configzIndex,value:L.ZINDEX.value});O.addProperty(L.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:L.CONSTRAIN_TO_VIEWPORT.value,validator:L.CONSTRAIN_TO_VIEWPORT.validator,supercedes:L!
 .CONSTRAIN_TO_VIEWPORT.supercedes});
+O.addProperty(L.IFRAME.key,{handler:this.configIframe,value:L.IFRAME.value,validator:L.IFRAME.validator,supercedes:L.IFRAME.supercedes});O.addProperty(L.PREVENT_CONTEXT_OVERLAP.key,{value:L.PREVENT_CONTEXT_OVERLAP.value,validator:L.PREVENT_CONTEXT_OVERLAP.validator,supercedes:L.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(O,P){this.cfg.setProperty("xy",[O,P]);},hideMacGeckoScrollbars:function(){F.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){F.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},_setDomVisibility:function(O){F.setStyle(this.element,"visibility",(O)?"visible":"hidden");if(O){F.removeClass(this.element,"yui-overlay-hidden");}else{F.addClass(this.element,"yui-overlay-hidden");}},configVisible:function(R,O,X){var Q=O[0],S=F.getStyle(this.element,"visibility"),Y=this.cfg.getProperty("effect"),V=[],U=(this.platform=="mac"&&K.gecko),g=D.alreadySubscribed,W,P,f,c,b,a,d,Z,T;if(S=="inherit"){f!
 =this.element.parentNode;while(f.nodeType!=9&&f.nodeType!=11){S=F.getStyle(f,"visibility");if(S!="inherit"){break;}f=f.parentNode;}if(S=="inherit"){S="visible";}}if(Y){if(Y instanceof Array){Z=Y.length;for(c=0;c<Z;c++){W=Y[c];V[V.length]=W.effect(this,W.duration);}}else{V[V.length]=Y.effect(this,Y.duration);}}if(Q){if(U){this.showMacGeckoScrollbars();}if(Y){if(Q){if(S!="visible"||S===""){this.beforeShowEvent.fire();T=V.length;for(b=0;b<T;b++){P=V[b];if(b===0&&!g(P.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){P.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}P.animateIn();}}}}else{if(S!="visible"||S===""){this.beforeShowEvent.fire();this._setDomVisibility(true);this.cfg.refireEvent("iframe");this.showEvent.fire();}else{this._setDomVisibility(true);}}}else{if(U){this.hideMacGeckoScrollbars();}if(Y){if(S=="visible"){this.beforeHideEvent.fire();T=V.length;for(a=0;a<T;a++){d=V[a];if(a===0&&!g(d.animateOutCompleteEvent,this.hideEvent.fire!
 ,this.hideEvent)){d.animateOutCompleteEvent.subscribe(this.hid!
 eEvent.f
ire,this.hideEvent,true);}d.animateOut();}}else{if(S===""){this._setDomVisibility(false);}}}else{if(S=="visible"||S===""){this.beforeHideEvent.fire();this._setDomVisibility(false);this.hideEvent.fire();}else{this._setDomVisibility(false);}}}},doCenterOnDOMEvent:function(){var O=this.cfg,P=O.getProperty("fixedcenter");if(O.getProperty("visible")){if(P&&(P!==C||this.fitsInViewport())){this.center();}}},fitsInViewport:function(){var S=B.VIEWPORT_OFFSET,Q=this.element,T=Q.offsetWidth,R=Q.offsetHeight,O=F.getViewportWidth(),P=F.getViewportHeight();return((T+S<O)&&(R+S<P));},configFixedCenter:function(S,Q,T){var U=Q[0],P=D.alreadySubscribed,R=B.windowResizeEvent,O=B.windowScrollEvent;if(U){this.center();if(!P(this.beforeShowEvent,this.center)){this.beforeShowEvent.subscribe(this.center);}if(!P(R,this.doCenterOnDOMEvent,this)){R.subscribe(this.doCenterOnDOMEvent,this,true);}if(!P(O,this.doCenterOnDOMEvent,this)){O.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowE!
 vent.unsubscribe(this.center);R.unsubscribe(this.doCenterOnDOMEvent,this);O.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(R,P,S){var O=P[0],Q=this.element;F.setStyle(Q,"height",O);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(T,S,P){var V=S[0],Q=this.cfg,U="autofillheight",W="height",R=Q.getProperty(U),O=this._autoFillOnHeightChange;Q.unsubscribeFromConfigEvent(W,O);G.textResizeEvent.unsubscribe(O);this.changeContentEvent.unsubscribe(O);if(R&&V!==R&&this[R]){F.setStyle(this[R],W,"");}if(V){V=I.trim(V.toLowerCase());Q.subscribeToConfigEvent(W,O,this[V],this);G.textResizeEvent.subscribe(O,this[V],this);this.changeContentEvent.subscribe(O,this[V],this);Q.setProperty(U,V,true);}},configWidth:function(R,O,S){var Q=O[0],P=this.element;F.setStyle(P,"width",Q);this.cfg.refireEvent("iframe");},configzIndex:function(Q,O,R){var S=O[0],P=this.element;if(!S){S=F.getStyle(P,"zIndex");if(!S||isNaN(S)){S=0;}}if(this.iframe||this.cfg.getProperty("iframe!
 ")===true){if(S<=0){S=1;}}F.setStyle(P,"zIndex",S);this.cfg.se!
 tPropert
y("zIndex",S,true);if(this.iframe){this.stackIframe();}},configXY:function(Q,P,R){var T=P[0],O=T[0],S=T[1];this.cfg.setProperty("x",O);this.cfg.setProperty("y",S);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configX:function(Q,P,R){var O=P[0],S=this.cfg.getProperty("y");this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setX(this.element,O,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configY:function(Q,P,R){var O=this.cfg.getProperty("x"),S=P[0];this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setY(this.element,S,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fir!
 e([O,S]);},showIframe:function(){var P=this.iframe,O;if(P){O=this.element.parentNode;if(O!=P.parentNode){this._addToParent(O,P);}P.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var O=this.iframe,Q=this.element,S=B.IFRAME_OFFSET,P=(S*2),R;if(O){O.style.width=(Q.offsetWidth+P+"px");O.style.height=(Q.offsetHeight+P+"px");R=this.cfg.getProperty("xy");if(!I.isArray(R)||(isNaN(R[0])||isNaN(R[1]))){this.syncPosition();R=this.cfg.getProperty("xy");}F.setXY(O,[(R[0]-S),(R[1]-S)]);}},stackIframe:function(){if(this.iframe){var O=F.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(O)&&!isNaN(O)){F.setStyle(this.iframe,"zIndex",(O-1));}}},configIframe:function(R,Q,S){var O=Q[0];function T(){var V=this.iframe,W=this.element,X;if(!V){if(!J){J=document.createElement("iframe");if(this.isSecure){J.src=B.IFRAME_SRC;}if(K.ie){J.style.filter="alpha(opacity=0)";
+J.frameBorder=0;}else{J.style.opacity="0";}J.style.position="absolute";J.style.border="none";J.style.margin="0";J.style.padding="0";J.style.display="none";J.tabIndex=-1;}V=J.cloneNode(false);X=W.parentNode;var U=X||document.body;this._addToParent(U,V);this.iframe=V;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function P(){T.call(this);this.beforeShowEvent.unsubscribe(P);this._iframeDeferred=false;}if(O){if(this.cfg.getProperty("visible")){T.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(P);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventL!
 isteners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(P,O,Q){var R=O[0];if(R){if(!D.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!D.alreadySubscribed(this.beforeShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(T,S,P){var W=S[0],Q,O,U,R,V=this.CONTEXT_TRIGGERS;if(W){Q=W[0];O=W[1];U=W[2];R=W[3];if(V&&V.length>0){R=(R||[]).concat(V);}if(Q){if(typeof Q=="string"){this.cfg.setProperty("context",[document.getElementById(Q),O,U,R],true);}if(O&&U){this.align(O,U);}if(this._contextTriggers){this._processTriggers(this._con!
 textTriggers,E,this._alignOnTrigger);}if(R){this._processTrigg!
 ers(R,H,
this._alignOnTrigger);this._contextTriggers=R;}}}},_alignOnTrigger:function(P,O){this.align();},_findTriggerCE:function(O){var P=null;if(O instanceof M){P=O;}else{if(B._TRIGGER_MAP[O]){P=B._TRIGGER_MAP[O];}}return P;},_processTriggers:function(S,U,R){var Q,T;for(var P=0,O=S.length;P<O;++P){Q=S[P];T=this._findTriggerCE(Q);if(T){T[U](R,this,true);}else{this[U](Q,R);}}},align:function(P,O){var U=this.cfg.getProperty("context"),T=this,S,R,V;function Q(W,X){switch(P){case B.TOP_LEFT:T.moveTo(X,W);break;case B.TOP_RIGHT:T.moveTo((X-R.offsetWidth),W);break;case B.BOTTOM_LEFT:T.moveTo(X,(W-R.offsetHeight));break;case B.BOTTOM_RIGHT:T.moveTo((X-R.offsetWidth),(W-R.offsetHeight));break;}}if(U){S=U[0];R=this.element;T=this;if(!P){P=U[1];}if(!O){O=U[2];}if(R&&S){V=F.getRegion(S);switch(O){case B.TOP_LEFT:Q(V.top,V.left);break;case B.TOP_RIGHT:Q(V.top,V.right);break;case B.BOTTOM_LEFT:Q(V.bottom,V.left);break;case B.BOTTOM_RIGHT:Q(V.bottom,V.right);break;}}}},enforceConstraints:function(!
 P,O,Q){var S=O[0];var R=this.getConstrainedXY(S[0],S[1]);this.cfg.setProperty("x",R[0],true);this.cfg.setProperty("y",R[1],true);this.cfg.setProperty("xy",R,true);},getConstrainedX:function(V){var S=this,O=S.element,e=O.offsetWidth,c=B.VIEWPORT_OFFSET,h=F.getViewportWidth(),d=F.getDocumentScrollLeft(),Y=(e+c<h),b=this.cfg.getProperty("context"),Q,X,j,T=false,f,W,g=d+c,P=d+h-e-c,i=V,U={"tltr":true,"blbr":true,"brbl":true,"trtl":true};var Z=function(){var k;if((S.cfg.getProperty("x")-d)>X){k=(X-e);}else{k=(X+j);}S.cfg.setProperty("x",(k+d),true);return k;};var R=function(){if((S.cfg.getProperty("x")-d)>X){return(W-c);}else{return(f-c);}};var a=function(){var k=R(),l;if(e>k){if(T){Z();}else{Z();T=true;l=a();}}return l;};if(V<g||V>P){if(Y){if(this.cfg.getProperty("preventcontextoverlap")&&b&&U[(b[1]+b[2])]){Q=b[0];X=F.getX(Q)-d;j=Q.offsetWidth;f=X;W=(h-(X+j));a();i=this.cfg.getProperty("x");}else{if(V<g){i=g;}else{if(V>P){i=P;}}}}else{i=c+d;}}return i;},getConstrainedY:function!
 (Z){var W=this,P=W.element,i=P.offsetHeight,h=B.VIEWPORT_OFFSE!
 T,d=F.ge
tViewportHeight(),g=F.getDocumentScrollTop(),e=(i+h<d),f=this.cfg.getProperty("context"),U,a,b,X=false,V,Q,c=g+h,S=g+d-i-h,O=Z,Y={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};var T=function(){var k;if((W.cfg.getProperty("y")-g)>a){k=(a-i);}else{k=(a+b);}W.cfg.setProperty("y",(k+g),true);return k;};var R=function(){if((W.cfg.getProperty("y")-g)>a){return(Q-h);}else{return(V-h);}};var j=function(){var l=R(),k;if(i>l){if(X){T();}else{T();X=true;k=j();}}return k;};if(Z<c||Z>S){if(e){if(this.cfg.getProperty("preventcontextoverlap")&&f&&Y[(f[1]+f[2])]){U=f[0];b=U.offsetHeight;a=(F.getY(U)-g);V=a;Q=(d-(a+b));j();O=W.cfg.getProperty("y");}else{if(Z<c){O=c;}else{if(Z>S){O=S;}}}}else{O=h+g;}}return O;},getConstrainedXY:function(O,P){return[this.getConstrainedX(O),this.getConstrainedY(P)];},center:function(){var R=B.VIEWPORT_OFFSET,S=this.element.offsetWidth,Q=this.element.offsetHeight,P=F.getViewportWidth(),T=F.getViewportHeight(),O,U;if(S<P){O=(P/2)-(S/2)+F.getDocumentScrollLeft(!
 );}else{O=R+F.getDocumentScrollLeft();}if(Q<T){U=(T/2)-(Q/2)+F.getDocumentScrollTop();}else{U=R+F.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(O,10),parseInt(U,10)]);this.cfg.refireEvent("iframe");if(K.webkit){this.forceContainerRedraw();}},syncPosition:function(){var O=F.getXY(this.element);this.cfg.setProperty("x",O[0],true);this.cfg.setProperty("y",O[1],true);this.cfg.setProperty("xy",O,true);},onDomResize:function(Q,P){var O=this;B.superclass.onDomResize.call(this,Q,P);setTimeout(function(){O.syncPosition();O.cfg.refireEvent("iframe");O.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(P){var O=null;if(P.ownerDocument&&P.ownerDocument.defaultView){var Q=P.ownerDocument.defaultView.getComputedStyle(P,"");if(Q){O=parseInt(Q.height,10);}}return(I.isNumber(O))?O:null;};}else{return function(P){var O=null;
+if(P.style.pixelHeight){O=P.style.pixelHeight;}return(I.isNumber(O))?O:null;};}})(),_validateAutoFillHeight:function(O){return(!O)||(I.isString(O)&&B.STD_MOD_RE.test(O));},_autoFillOnHeightChange:function(R,P,Q){var O=this.cfg.getProperty("height");if((O&&O!=="auto")||(O===0)){this.fillHeight(Q);}},_getPreciseHeight:function(P){var O=P.offsetHeight;if(P.getBoundingClientRect){var Q=P.getBoundingClientRect();O=Q.bottom-Q.top;}return O;},fillHeight:function(R){if(R){var P=this.innerElement||this.element,O=[this.header,this.body,this.footer],V,W=0,X=0,T=0,Q=false;for(var U=0,S=O.length;U<S;U++){V=O[U];if(V){if(R!==V){X+=this._getPreciseHeight(V);}else{Q=true;}}}if(Q){if(K.ie||K.opera){F.setStyle(R,"height",0+"px");}W=this._getComputedHeight(P);if(W===null){F.addClass(P,"yui-override-padding");W=P.clientHeight;F.removeClass(P,"yui-override-padding");}T=Math.max(W-X,0);F.setStyle(R,"height",T+"px");if(R.offsetHeight!=T){T=Math.max(T-(R.offsetHeight-T),0);}F.setStyle(R,"height",T!
 +"px");}}},bringToTop:function(){var S=[],R=this.element;function V(Z,Y){var b=F.getStyle(Z,"zIndex"),a=F.getStyle(Y,"zIndex"),X=(!b||isNaN(b))?0:parseInt(b,10),W=(!a||isNaN(a))?0:parseInt(a,10);if(X>W){return -1;}else{if(X<W){return 1;}else{return 0;}}}function Q(Y){var X=F.hasClass(Y,B.CSS_OVERLAY),W=YAHOO.widget.Panel;if(X&&!F.isAncestor(R,Y)){if(W&&F.hasClass(Y,W.CSS_PANEL)){S[S.length]=Y.parentNode;}else{S[S.length]=Y;}}}F.getElementsBy(Q,"DIV",document.body);S.sort(V);var O=S[0],U;if(O){U=F.getStyle(O,"zIndex");if(!isNaN(U)){var T=false;if(O!=R){T=true;}else{if(S.length>1){var P=F.getStyle(S[1],"zIndex");if(!isNaN(P)&&(U==P)){T=true;}}}if(T){this.cfg.setProperty("zindex",(parseInt(U,10)+2));}}}},destroy:function(){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;B.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);B.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);G.textResizeEvent.unsubscribe(this._autoFillOnHeight!
 Change);B.superclass.destroy.call(this);},forceContainerRedraw!
 :functio
n(){var O=this;F.addClass(O.element,"yui-force-redraw");setTimeout(function(){F.removeClass(O.element,"yui-force-redraw");},0);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(G){this.init(G);};var D=YAHOO.widget.Overlay,C=YAHOO.util.Event,E=YAHOO.util.Dom,B=YAHOO.util.Config,F=YAHOO.util.CustomEvent,A=YAHOO.widget.OverlayManager;A.CSS_FOCUSED="focused";A.prototype={constructor:A,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(I){this.cfg=new B(this);this.initDefaultConfig();if(I){this.cfg.applyConfig(I,true);}this.cfg.fireQueue();var H=null;this.getActive=function(){return H;};this.focus=function(J){var K=this.find(J);if(K){K.focus();}};this.remove=function(K){var M=this.find(K),J;if(M){if(H==M){H=null;}var L=(M.element===null&&M.cfg===null)?true:false;if(!L){J=E.getStyle(M.element,"zIndex");M.cfg.set!
 Property("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));M.hideEvent.unsubscribe(M.blur);M.destroyEvent.unsubscribe(this._onOverlayDestroy,M);M.focusEvent.unsubscribe(this._onOverlayFocusHandler,M);M.blurEvent.unsubscribe(this._onOverlayBlurHandler,M);if(!L){C.removeListener(M.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);M.cfg.setProperty("zIndex",J,true);M.cfg.setProperty("manager",null);}if(M.focusEvent._managed){M.focusEvent=null;}if(M.blurEvent._managed){M.blurEvent=null;}if(M.focus._managed){M.focus=null;}if(M.blur._managed){M.blur=null;}}};this.blurAll=function(){var K=this.overlays.length,J;if(K>0){J=K-1;do{this.overlays[J].blur();}while(J--);}};this._manageBlur=function(J){var K=false;if(H==J){E.removeClass(H.element,A.CSS_FOCUSED);H=null;K=true;}return K;};this._manageFocus=function(J){var K=false;if(H!=J){if(H){H.blur();}H=J;this.bringToTop(H);E.addClass(H.ele!
 ment,A.CSS_FOCUSED);K=true;}return K;};var G=this.cfg.getPrope!
 rty("ove
rlays");if(!this.overlays){this.overlays=[];}if(G){this.register(G);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(I){var G=C.getTarget(I),H=this.close;if(H&&(G==H||E.isAncestor(H,G))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(H,G,I){this.remove(I);},_onOverlayFocusHandler:function(H,G,I){this._manageFocus(I);},_onOverlayBlurHandler:function(H,G,I){this._manageBlur(I);},_bindFocus:function(G){var H=this;if(!G.focusEvent){G.focusEvent=G.createEvent("focus");G.focusEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.focusEvent.subscribe(H._onOverlayFocusHandler,G,H);}if(!G.focus){C.on(G.element,H.cfg.getProperty("focusevent"),H._onOverlayElementFocus,null,G);G.focus=function(){if(H._manageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};G.focus._managed=true;}},_bindBlur:function(G){var H=this;if(!G.blurEvent){G.blurEvent=G.createEvent("blur");G.blurEvent.signa!
 ture=F.LIST;G.focusEvent._managed=true;}else{G.blurEvent.subscribe(H._onOverlayBlurHandler,G,H);}if(!G.blur){G.blur=function(){if(H._manageBlur(this)){this.blurEvent.fire();}};G.blur._managed=true;}G.hideEvent.subscribe(G.blur);},_bindDestroy:function(G){var H=this;G.destroyEvent.subscribe(H._onOverlayDestroy,G,H);},_syncZIndex:function(G){var H=E.getStyle(G.element,"zIndex");if(!isNaN(H)){G.cfg.setProperty("zIndex",parseInt(H,10));}else{G.cfg.setProperty("zIndex",0);}},register:function(G){var J=false,H,I;if(G instanceof D){G.cfg.addProperty("manager",{value:this});this._bindFocus(G);this._bindBlur(G);this._bindDestroy(G);this._syncZIndex(G);this.overlays.push(G);this.bringToTop(G);J=true;}else{if(G instanceof Array){for(H=0,I=G.length;H<I;H++){J=this.register(G[H])||J;}}}return J;},bringToTop:function(M){var I=this.find(M),L,G,J;if(I){J=this.overlays;J.sort(this.compareZIndexDesc);G=J[0];if(G){L=E.getStyle(G.element,"zIndex");
+if(!isNaN(L)){var K=false;if(G!==I){K=true;}else{if(J.length>1){var H=E.getStyle(J[1].element,"zIndex");if(!isNaN(H)&&(L==H)){K=true;}}}if(K){I.cfg.setProperty("zindex",(parseInt(L,10)+2));}}J.sort(this.compareZIndexDesc);}}},find:function(G){var K=G instanceof D,I=this.overlays,M=I.length,J=null,L,H;if(K||typeof G=="string"){for(H=M-1;H>=0;H--){L=I[H];if((K&&(L===G))||(L.id==G)){J=L;break;}}}return J;},compareZIndexDesc:function(J,I){var H=(J.cfg)?J.cfg.getProperty("zIndex"):null,G=(I.cfg)?I.cfg.getProperty("zIndex"):null;if(H===null&&G===null){return 0;}else{if(H===null){return 1;}else{if(G===null){return -1;}else{if(H>G){return -1;}else{if(H<G){return 1;}else{return 0;}}}}}},showAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].show();}},hideAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.Tooltip=function(P,O){YAHOO.widget.Tooltip.supercla!
 ss.constructor.call(this,P,O);};var E=YAHOO.lang,N=YAHOO.util.Event,M=YAHOO.util.CustomEvent,C=YAHOO.util.Dom,J=YAHOO.widget.Tooltip,H=YAHOO.env.ua,G=(H.ie&&(H.ie<=6||document.compatMode=="BackCompat")),F,I={"PREVENT_OVERLAP":{key:"preventoverlap",value:true,validator:E.isBoolean,supercedes:["x","y","xy"]},"SHOW_DELAY":{key:"showdelay",value:200,validator:E.isNumber},"AUTO_DISMISS_DELAY":{key:"autodismissdelay",value:5000,validator:E.isNumber},"HIDE_DELAY":{key:"hidedelay",value:250,validator:E.isNumber},"TEXT":{key:"text",suppressEvent:true},"CONTAINER":{key:"container"},"DISABLED":{key:"disabled",value:false,suppressEvent:true}},A={"CONTEXT_MOUSE_OVER":"contextMouseOver","CONTEXT_MOUSE_OUT":"contextMouseOut","CONTEXT_TRIGGER":"contextTrigger"};J.CSS_TOOLTIP="yui-tt";function K(Q,O){var P=this.cfg,R=P.getProperty("width");if(R==O){P.setProperty("width",Q);}}function D(P,O){if("_originalWidth" in this){K.call(this,this._originalWidth,this._forcedWidth);}var Q=document.body,!
 U=this.cfg,T=U.getProperty("width"),R,S;if((!T||T=="auto")&&(U!
 .getProp
erty("container")!=Q||U.getProperty("x")>=C.getViewportWidth()||U.getProperty("y")>=C.getViewportHeight())){S=this.element.cloneNode(true);S.style.visibility="hidden";S.style.top="0px";S.style.left="0px";Q.appendChild(S);R=(S.offsetWidth+"px");Q.removeChild(S);S=null;U.setProperty("width",R);U.refireEvent("xy");this._originalWidth=T||"";this._forcedWidth=R;}}function B(P,O,Q){this.render(Q);}function L(){N.onDOMReady(B,this.cfg.getProperty("container"),this);}YAHOO.extend(J,YAHOO.widget.Overlay,{init:function(P,O){J.superclass.init.call(this,P);this.beforeInitEvent.fire(J);C.addClass(this.element,J.CSS_TOOLTIP);if(O){this.cfg.applyConfig(O,true);}this.cfg.queueProperty("visible",false);this.cfg.queueProperty("constraintoviewport",true);this.setBody("");this.subscribe("changeContent",D);this.subscribe("init",L);this.subscribe("render",this.onRender);this.initEvent.fire(J);},initEvents:function(){J.superclass.initEvents.call(this);var O=M.LIST;this.contextMouseOverEvent=this.c!
 reateEvent(A.CONTEXT_MOUSE_OVER);this.contextMouseOverEvent.signature=O;this.contextMouseOutEvent=this.createEvent(A.CONTEXT_MOUSE_OUT);this.contextMouseOutEvent.signature=O;this.contextTriggerEvent=this.createEvent(A.CONTEXT_TRIGGER);this.contextTriggerEvent.signature=O;},initDefaultConfig:function(){J.superclass.initDefaultConfig.call(this);this.cfg.addProperty(I.PREVENT_OVERLAP.key,{value:I.PREVENT_OVERLAP.value,validator:I.PREVENT_OVERLAP.validator,supercedes:I.PREVENT_OVERLAP.supercedes});this.cfg.addProperty(I.SHOW_DELAY.key,{handler:this.configShowDelay,value:200,validator:I.SHOW_DELAY.validator});this.cfg.addProperty(I.AUTO_DISMISS_DELAY.key,{handler:this.configAutoDismissDelay,value:I.AUTO_DISMISS_DELAY.value,validator:I.AUTO_DISMISS_DELAY.validator});this.cfg.addProperty(I.HIDE_DELAY.key,{handler:this.configHideDelay,value:I.HIDE_DELAY.value,validator:I.HIDE_DELAY.validator});this.cfg.addProperty(I.TEXT.key,{handler:this.configText,suppressEvent:I.TEXT.suppressEve!
 nt});this.cfg.addProperty(I.CONTAINER.key,{handler:this.config!
 Containe
r,value:document.body});this.cfg.addProperty(I.DISABLED.key,{handler:this.configContainer,value:I.DISABLED.value,supressEvent:I.DISABLED.suppressEvent});},configText:function(P,O,Q){var R=O[0];if(R){this.setBody(R);}},configContainer:function(Q,P,R){var O=P[0];if(typeof O=="string"){this.cfg.setProperty("container",document.getElementById(O),true);}},_removeEventListeners:function(){var R=this._context,O,Q,P;if(R){O=R.length;if(O>0){P=O-1;do{Q=R[P];N.removeListener(Q,"mouseover",this.onContextMouseOver);N.removeListener(Q,"mousemove",this.onContextMouseMove);N.removeListener(Q,"mouseout",this.onContextMouseOut);}while(P--);}}},configContext:function(T,P,U){var S=P[0],V,O,R,Q;if(S){if(!(S instanceof Array)){if(typeof S=="string"){this.cfg.setProperty("context",[document.getElementById(S)],true);}else{this.cfg.setProperty("context",[S],true);}S=this.cfg.getProperty("context");}this._removeEventListeners();this._context=S;V=this._context;if(V){O=V.length;if(O>0){Q=O-1;do{R=V[Q]!
 ;N.on(R,"mouseover",this.onContextMouseOver,this);N.on(R,"mousemove",this.onContextMouseMove,this);N.on(R,"mouseout",this.onContextMouseOut,this);}while(Q--);}}}},onContextMouseMove:function(P,O){O.pageX=N.getPageX(P);O.pageY=N.getPageY(P);},onContextMouseOver:function(Q,P){var O=this;if(O.title){P._tempTitle=O.title;O.title="";}if(P.fireEvent("contextMouseOver",O,Q)!==false&&!P.cfg.getProperty("disabled")){if(P.hideProcId){clearTimeout(P.hideProcId);P.hideProcId=null;}N.on(O,"mousemove",P.onContextMouseMove,P);P.showProcId=P.doShow(Q,O);}},onContextMouseOut:function(Q,P){var O=this;if(P._tempTitle){O.title=P._tempTitle;P._tempTitle=null;}if(P.showProcId){clearTimeout(P.showProcId);P.showProcId=null;}if(P.hideProcId){clearTimeout(P.hideProcId);P.hideProcId=null;}P.fireEvent("contextMouseOut",O,Q);P.hideProcId=setTimeout(function(){P.hide();},P.cfg.getProperty("hidedelay"));},doShow:function(Q,O){var R=25,P=this;
+if(H.opera&&O.tagName&&O.tagName.toUpperCase()=="A"){R+=12;}return setTimeout(function(){var S=P.cfg.getProperty("text");if(P._tempTitle&&(S===""||YAHOO.lang.isUndefined(S)||YAHOO.lang.isNull(S))){P.setBody(P._tempTitle);}else{P.cfg.refireEvent("text");}P.moveTo(P.pageX,P.pageY+R);if(P.cfg.getProperty("preventoverlap")){P.preventOverlap(P.pageX,P.pageY);}N.removeListener(O,"mousemove",P.onContextMouseMove);P.contextTriggerEvent.fire(O);P.show();P.hideProcId=P.doHide();},this.cfg.getProperty("showdelay"));},doHide:function(){var O=this;return setTimeout(function(){O.hide();},this.cfg.getProperty("autodismissdelay"));},preventOverlap:function(S,R){var O=this.element.offsetHeight,Q=new YAHOO.util.Point(S,R),P=C.getRegion(this.element);P.top-=5;P.left-=5;P.right+=5;P.bottom+=5;if(P.contains(Q)){this.cfg.setProperty("y",(R-O-5));}},onRender:function(S,R){function T(){var W=this.element,V=this.underlay;if(V){V.style.width=(W.offsetWidth+6)+"px";V.style.height=(W.offsetHeight+1)+"!
 px";}}function P(){C.addClass(this.underlay,"yui-tt-shadow-visible");if(H.ie){this.forceUnderlayRedraw();}}function O(){C.removeClass(this.underlay,"yui-tt-shadow-visible");}function U(){var X=this.underlay,W,V,Z,Y;if(!X){W=this.element;V=YAHOO.widget.Module;Z=H.ie;Y=this;if(!F){F=document.createElement("div");F.className="yui-tt-shadow";}X=F.cloneNode(false);W.appendChild(X);this.underlay=X;this._shadow=this.underlay;P.call(this);this.subscribe("beforeShow",P);this.subscribe("hide",O);if(G){window.setTimeout(function(){T.call(Y);},0);this.cfg.subscribeToConfigEvent("width",T);this.cfg.subscribeToConfigEvent("height",T);this.subscribe("changeContent",T);V.textResizeEvent.subscribe(T,this,true);this.subscribe("destroy",function(){V.textResizeEvent.unsubscribe(T,this);});}}}function Q(){U.call(this);this.unsubscribe("beforeShow",Q);}if(this.cfg.getProperty("visible")){U.call(this);}else{this.subscribe("beforeShow",Q);}},forceUnderlayRedraw:function(){var O=this;C.addClass(O.u!
 nderlay,"yui-force-redraw");setTimeout(function(){C.removeClas!
 s(O.unde
rlay,"yui-force-redraw");},0);},destroy:function(){this._removeEventListeners();J.superclass.destroy.call(this);},toString:function(){return"Tooltip "+this.id;}});}());(function(){YAHOO.widget.Panel=function(V,U){YAHOO.widget.Panel.superclass.constructor.call(this,V,U);};var S=null;var E=YAHOO.lang,F=YAHOO.util,A=F.Dom,T=F.Event,M=F.CustomEvent,K=YAHOO.util.KeyListener,I=F.Config,H=YAHOO.widget.Overlay,O=YAHOO.widget.Panel,L=YAHOO.env.ua,P=(L.ie&&(L.ie<=6||document.compatMode=="BackCompat")),G,Q,C,D={"SHOW_MASK":"showMask","HIDE_MASK":"hideMask","DRAG":"drag"},N={"CLOSE":{key:"close",value:true,validator:E.isBoolean,supercedes:["visible"]},"DRAGGABLE":{key:"draggable",value:(F.DD?true:false),validator:E.isBoolean,supercedes:["visible"]},"DRAG_ONLY":{key:"dragonly",value:false,validator:E.isBoolean,supercedes:["draggable"]},"UNDERLAY":{key:"underlay",value:"shadow",supercedes:["visible"]},"MODAL":{key:"modal",value:false,validator:E.isBoolean,supercedes:["visible","zindex"]},!
 "KEY_LISTENERS":{key:"keylisteners",suppressEvent:true,supercedes:["visible"]},"STRINGS":{key:"strings",supercedes:["close"],validator:E.isObject,value:{close:"Close"}}};O.CSS_PANEL="yui-panel";O.CSS_PANEL_CONTAINER="yui-panel-container";O.FOCUSABLE=["a","button","select","textarea","input","iframe"];function J(V,U){if(!this.header&&this.cfg.getProperty("draggable")){this.setHeader(" ");}}function R(V,U,W){var Z=W[0],X=W[1],Y=this.cfg,a=Y.getProperty("width");if(a==X){Y.setProperty("width",Z);}this.unsubscribe("hide",R,W);}function B(V,U){var Y,X,W;if(P){Y=this.cfg;X=Y.getProperty("width");if(!X||X=="auto"){W=(this.element.offsetWidth+"px");Y.setProperty("width",W);this.subscribe("hide",R,[(X||""),W]);}}}YAHOO.extend(O,H,{init:function(V,U){O.superclass.init.call(this,V);this.beforeInitEvent.fire(O);A.addClass(this.element,O.CSS_PANEL);this.buildWrapper();if(U){this.cfg.applyConfig(U,true);}this.subscribe("showMask",this._addFocusHandlers);this.subscribe("hideMask",thi!
 s._removeFocusHandlers);this.subscribe("beforeRender",J);this.!
 subscrib
e("render",function(){this.setFirstLastFocusable();this.subscribe("changeContent",this.setFirstLastFocusable);});this.subscribe("show",this.focusFirst);this.initEvent.fire(O);},_onElementFocus:function(Z){if(S===this){var Y=T.getTarget(Z),X=document.documentElement,V=(Y!==X&&Y!==window);if(V&&Y!==this.element&&Y!==this.mask&&!A.isAncestor(this.element,Y)){try{if(this.firstElement){this.firstElement.focus();}else{if(this._modalFocus){this._modalFocus.focus();}else{this.innerElement.focus();}}}catch(W){try{if(V&&Y!==document.body){Y.blur();}}catch(U){}}}}},_addFocusHandlers:function(V,U){if(!this.firstElement){if(L.webkit||L.opera){if(!this._modalFocus){this._createHiddenFocusElement();}}else{this.innerElement.tabIndex=0;}}this.setTabLoop(this.firstElement,this.lastElement);T.onFocus(document.documentElement,this._onElementFocus,this,true);S=this;},_createHiddenFocusElement:function(){var U=document.createElement("button");U.style.height="1px";U.style.width="1px";U.style.posit!
 ion="absolute";U.style.left="-10000em";U.style.opacity=0;U.tabIndex=-1;this.innerElement.appendChild(U);this._modalFocus=U;},_removeFocusHandlers:function(V,U){T.removeFocusListener(document.documentElement,this._onElementFocus,this);if(S==this){S=null;}},focusFirst:function(W,U,Y){var V=this.firstElement;if(U&&U[1]){T.stopEvent(U[1]);}if(V){try{V.focus();}catch(X){}}},focusLast:function(W,U,Y){var V=this.lastElement;if(U&&U[1]){T.stopEvent(U[1]);}if(V){try{V.focus();}catch(X){}}},setTabLoop:function(X,Z){var V=this.preventBackTab,W=this.preventTabOut,U=this.showEvent,Y=this.hideEvent;if(V){V.disable();U.unsubscribe(V.enable,V);Y.unsubscribe(V.disable,V);V=this.preventBackTab=null;}if(W){W.disable();U.unsubscribe(W.enable,W);Y.unsubscribe(W.disable,W);W=this.preventTabOut=null;}if(X){this.preventBackTab=new K(X,{shift:true,keys:9},{fn:this.focusLast,scope:this,correctScope:true});V=this.preventBackTab;U.subscribe(V.enable,V,true);
+Y.subscribe(V.disable,V,true);}if(Z){this.preventTabOut=new K(Z,{shift:false,keys:9},{fn:this.focusFirst,scope:this,correctScope:true});W=this.preventTabOut;U.subscribe(W.enable,W,true);Y.subscribe(W.disable,W,true);}},getFocusableElements:function(U){U=U||this.innerElement;var X={};for(var W=0;W<O.FOCUSABLE.length;W++){X[O.FOCUSABLE[W]]=true;}function V(Y){if(Y.focus&&Y.type!=="hidden"&&!Y.disabled&&X[Y.tagName.toLowerCase()]){return true;}return false;}return A.getElementsBy(V,null,U);},setFirstLastFocusable:function(){this.firstElement=null;this.lastElement=null;var U=this.getFocusableElements();this.focusableElements=U;if(U.length>0){this.firstElement=U[0];this.lastElement=U[U.length-1];}if(this.cfg.getProperty("modal")){this.setTabLoop(this.firstElement,this.lastElement);}},initEvents:function(){O.superclass.initEvents.call(this);var U=M.LIST;this.showMaskEvent=this.createEvent(D.SHOW_MASK);this.showMaskEvent.signature=U;this.hideMaskEvent=this.createEvent(D.HIDE_MASK)!
 ;this.hideMaskEvent.signature=U;this.dragEvent=this.createEvent(D.DRAG);this.dragEvent.signature=U;},initDefaultConfig:function(){O.superclass.initDefaultConfig.call(this);this.cfg.addProperty(N.CLOSE.key,{handler:this.configClose,value:N.CLOSE.value,validator:N.CLOSE.validator,supercedes:N.CLOSE.supercedes});this.cfg.addProperty(N.DRAGGABLE.key,{handler:this.configDraggable,value:(F.DD)?true:false,validator:N.DRAGGABLE.validator,supercedes:N.DRAGGABLE.supercedes});this.cfg.addProperty(N.DRAG_ONLY.key,{value:N.DRAG_ONLY.value,validator:N.DRAG_ONLY.validator,supercedes:N.DRAG_ONLY.supercedes});this.cfg.addProperty(N.UNDERLAY.key,{handler:this.configUnderlay,value:N.UNDERLAY.value,supercedes:N.UNDERLAY.supercedes});this.cfg.addProperty(N.MODAL.key,{handler:this.configModal,value:N.MODAL.value,validator:N.MODAL.validator,supercedes:N.MODAL.supercedes});this.cfg.addProperty(N.KEY_LISTENERS.key,{handler:this.configKeyListeners,suppressEvent:N.KEY_LISTENERS.suppressEvent,superced!
 es:N.KEY_LISTENERS.supercedes});this.cfg.addProperty(N.STRINGS!
 .key,{va
lue:N.STRINGS.value,handler:this.configStrings,validator:N.STRINGS.validator,supercedes:N.STRINGS.supercedes});},configClose:function(X,V,Y){var Z=V[0],W=this.close,U=this.cfg.getProperty("strings");if(Z){if(!W){if(!C){C=document.createElement("a");C.className="container-close";C.href="#";}W=C.cloneNode(true);this.innerElement.appendChild(W);W.innerHTML=(U&&U.close)?U.close:" ";T.on(W,"click",this._doClose,this,true);this.close=W;}else{W.style.display="block";}}else{if(W){W.style.display="none";}}},_doClose:function(U){T.preventDefault(U);this.hide();},configDraggable:function(V,U,W){var X=U[0];if(X){if(!F.DD){this.cfg.setProperty("draggable",false);return;}if(this.header){A.setStyle(this.header,"cursor","move");this.registerDragDrop();}this.subscribe("beforeShow",B);}else{if(this.dd){this.dd.unreg();}if(this.header){A.setStyle(this.header,"cursor","auto");}this.unsubscribe("beforeShow",B);}},configUnderlay:function(d,c,Z){var b=(this.platform=="mac"&&L.gecko),e=c[0].to!
 LowerCase(),V=this.underlay,W=this.element;function X(){var f=false;if(!V){if(!Q){Q=document.createElement("div");Q.className="underlay";}V=Q.cloneNode(false);this.element.appendChild(V);this.underlay=V;if(P){this.sizeUnderlay();this.cfg.subscribeToConfigEvent("width",this.sizeUnderlay);this.cfg.subscribeToConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.subscribe(this.sizeUnderlay);YAHOO.widget.Module.textResizeEvent.subscribe(this.sizeUnderlay,this,true);}if(L.webkit&&L.webkit<420){this.changeContentEvent.subscribe(this.forceUnderlayRedraw);}f=true;}}function a(){var f=X.call(this);if(!f&&P){this.sizeUnderlay();}this._underlayDeferred=false;this.beforeShowEvent.unsubscribe(a);}function Y(){if(this._underlayDeferred){this.beforeShowEvent.unsubscribe(a);this._underlayDeferred=false;}if(V){this.cfg.unsubscribeFromConfigEvent("width",this.sizeUnderlay);this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);this.changeContentEvent.unsubscribe(this.sizeU!
 nderlay);this.changeContentEvent.unsubscribe(this.forceUnderla!
 yRedraw)
;YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay,this,true);this.element.removeChild(V);this.underlay=null;}}switch(e){case"shadow":A.removeClass(W,"matte");A.addClass(W,"shadow");break;case"matte":if(!b){Y.call(this);}A.removeClass(W,"shadow");A.addClass(W,"matte");break;default:if(!b){Y.call(this);}A.removeClass(W,"shadow");A.removeClass(W,"matte");break;}if((e=="shadow")||(b&&!V)){if(this.cfg.getProperty("visible")){var U=X.call(this);if(!U&&P){this.sizeUnderlay();}}else{if(!this._underlayDeferred){this.beforeShowEvent.subscribe(a);this._underlayDeferred=true;}}}},configModal:function(V,U,X){var W=U[0];if(W){if(!this._hasModalityEventListeners){this.subscribe("beforeShow",this.buildMask);this.subscribe("beforeShow",this.bringToTop);this.subscribe("beforeShow",this.showMask);this.subscribe("hide",this.hideMask);H.windowResizeEvent.subscribe(this.sizeMask,this,true);this._hasModalityEventListeners=true;}}else{if(this._hasModalityEventListeners){if(this.cfg!
 .getProperty("visible")){this.hideMask();this.removeMask();}this.unsubscribe("beforeShow",this.buildMask);this.unsubscribe("beforeShow",this.bringToTop);this.unsubscribe("beforeShow",this.showMask);this.unsubscribe("hide",this.hideMask);H.windowResizeEvent.unsubscribe(this.sizeMask,this);this._hasModalityEventListeners=false;}}},removeMask:function(){var V=this.mask,U;if(V){this.hideMask();U=V.parentNode;if(U){U.removeChild(V);}this.mask=null;}},configKeyListeners:function(X,U,a){var W=U[0],Z,Y,V;if(W){if(W instanceof Array){Y=W.length;for(V=0;V<Y;V++){Z=W[V];if(!I.alreadySubscribed(this.showEvent,Z.enable,Z)){this.showEvent.subscribe(Z.enable,Z,true);}if(!I.alreadySubscribed(this.hideEvent,Z.disable,Z)){this.hideEvent.subscribe(Z.disable,Z,true);this.destroyEvent.subscribe(Z.disable,Z,true);}}}else{if(!I.alreadySubscribed(this.showEvent,W.enable,W)){this.showEvent.subscribe(W.enable,W,true);}if(!I.alreadySubscribed(this.hideEvent,W.disable,W)){this.hideEvent.subscribe(W.di!
 sable,W,true);
+this.destroyEvent.subscribe(W.disable,W,true);}}}},configStrings:function(V,U,W){var X=E.merge(N.STRINGS.value,U[0]);this.cfg.setProperty(N.STRINGS.key,X,true);},configHeight:function(X,V,Y){var U=V[0],W=this.innerElement;A.setStyle(W,"height",U);this.cfg.refireEvent("iframe");},_autoFillOnHeightChange:function(X,V,W){O.superclass._autoFillOnHeightChange.apply(this,arguments);if(P){var U=this;setTimeout(function(){U.sizeUnderlay();},0);}},configWidth:function(X,U,Y){var W=U[0],V=this.innerElement;A.setStyle(V,"width",W);this.cfg.refireEvent("iframe");},configzIndex:function(V,U,X){O.superclass.configzIndex.call(this,V,U,X);if(this.mask||this.cfg.getProperty("modal")===true){var W=A.getStyle(this.element,"zIndex");if(!W||isNaN(W)){W=0;}if(W===0){this.cfg.setProperty("zIndex",1);}else{this.stackMask();}}},buildWrapper:function(){var W=this.element.parentNode,U=this.element,V=document.createElement("div");V.className=O.CSS_PANEL_CONTAINER;V.id=U.id+"_c";if(W){W.insertBefore(V,!
 U);}V.appendChild(U);this.element=V;this.innerElement=U;A.setStyle(this.innerElement,"visibility","inherit");},sizeUnderlay:function(){var V=this.underlay,U;if(V){U=this.element;V.style.width=U.offsetWidth+"px";V.style.height=U.offsetHeight+"px";}},registerDragDrop:function(){var V=this;if(this.header){if(!F.DD){return;}var U=(this.cfg.getProperty("dragonly")===true);this.dd=new F.DD(this.element.id,this.id,{dragOnly:U});if(!this.header.id){this.header.id=this.id+"_h";}this.dd.startDrag=function(){var X,Z,W,c,b,a;if(YAHOO.env.ua.ie==6){A.addClass(V.element,"drag");}if(V.cfg.getProperty("constraintoviewport")){var Y=H.VIEWPORT_OFFSET;X=V.element.offsetHeight;Z=V.element.offsetWidth;W=A.getViewportWidth();c=A.getViewportHeight();b=A.getDocumentScrollLeft();a=A.getDocumentScrollTop();if(X+Y<c){this.minY=a+Y;this.maxY=a+c-X-Y;}else{this.minY=a+Y;this.maxY=a+Y;}if(Z+Y<W){this.minX=b+Y;this.maxX=b+W-Z-Y;}else{this.minX=b+Y;this.maxX=b+Y;}this.constrainX=true;this.constrainY=true;!
 }else{this.constrainX=false;this.constrainY=false;}V.dragEvent!
 .fire("s
tartDrag",arguments);};this.dd.onDrag=function(){V.syncPosition();V.cfg.refireEvent("iframe");if(this.platform=="mac"&&YAHOO.env.ua.gecko){this.showMacGeckoScrollbars();}V.dragEvent.fire("onDrag",arguments);};this.dd.endDrag=function(){if(YAHOO.env.ua.ie==6){A.removeClass(V.element,"drag");}V.dragEvent.fire("endDrag",arguments);V.moveEvent.fire(V.cfg.getProperty("xy"));};this.dd.setHandleElId(this.header.id);this.dd.addInvalidHandleType("INPUT");this.dd.addInvalidHandleType("SELECT");this.dd.addInvalidHandleType("TEXTAREA");}},buildMask:function(){var U=this.mask;if(!U){if(!G){G=document.createElement("div");G.className="mask";G.innerHTML=" ";}U=G.cloneNode(true);U.id=this.id+"_mask";document.body.insertBefore(U,document.body.firstChild);this.mask=U;if(YAHOO.env.ua.gecko&&this.platform=="mac"){A.addClass(this.mask,"block-scrollbars");}this.stackMask();}},hideMask:function(){if(this.cfg.getProperty("modal")&&this.mask){this.mask.style.display="none";A.removeClass(documen!
 t.body,"masked");this.hideMaskEvent.fire();}},showMask:function(){if(this.cfg.getProperty("modal")&&this.mask){A.addClass(document.body,"masked");this.sizeMask();this.mask.style.display="block";this.showMaskEvent.fire();}},sizeMask:function(){if(this.mask){var V=this.mask,W=A.getViewportWidth(),U=A.getViewportHeight();if(V.offsetHeight>U){V.style.height=U+"px";}if(V.offsetWidth>W){V.style.width=W+"px";}V.style.height=A.getDocumentHeight()+"px";V.style.width=A.getDocumentWidth()+"px";}},stackMask:function(){if(this.mask){var U=A.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(U)&&!isNaN(U)){A.setStyle(this.mask,"zIndex",U-1);}}},render:function(U){return O.superclass.render.call(this,U,this.innerElement);},destroy:function(){H.windowResizeEvent.unsubscribe(this.sizeMask,this);this.removeMask();if(this.close){T.purgeElement(this.close);}O.superclass.destroy.call(this);},forceUnderlayRedraw:function(){var U=this.underlay;A.addClass(U,"yui-force-redraw");setTimeout(f!
 unction(){A.removeClass(U,"yui-force-redraw");},0);},toString:!
 function
(){return"Panel "+this.id;}});}());(function(){YAHOO.widget.Dialog=function(J,I){YAHOO.widget.Dialog.superclass.constructor.call(this,J,I);};var B=YAHOO.util.Event,G=YAHOO.util.CustomEvent,E=YAHOO.util.Dom,A=YAHOO.widget.Dialog,F=YAHOO.lang,H={"BEFORE_SUBMIT":"beforeSubmit","SUBMIT":"submit","MANUAL_SUBMIT":"manualSubmit","ASYNC_SUBMIT":"asyncSubmit","FORM_SUBMIT":"formSubmit","CANCEL":"cancel"},C={"POST_METHOD":{key:"postmethod",value:"async"},"POST_DATA":{key:"postdata",value:null},"BUTTONS":{key:"buttons",value:"none",supercedes:["visible"]},"HIDEAFTERSUBMIT":{key:"hideaftersubmit",value:true}};A.CSS_DIALOG="yui-dialog";function D(){var L=this._aButtons,J,K,I;if(F.isArray(L)){J=L.length;if(J>0){I=J-1;do{K=L[I];if(YAHOO.widget.Button&&K instanceof YAHOO.widget.Button){K.destroy();}else{if(K.tagName.toUpperCase()=="BUTTON"){B.purgeElement(K);B.purgeElement(K,false);}}}while(I--);}}}YAHOO.extend(A,YAHOO.widget.Panel,{form:null,initDefaultConfig:function(){A.superclass.initDe!
 faultConfig.call(this);this.callback={success:null,failure:null,argument:null};this.cfg.addProperty(C.POST_METHOD.key,{handler:this.configPostMethod,value:C.POST_METHOD.value,validator:function(I){if(I!="form"&&I!="async"&&I!="none"&&I!="manual"){return false;}else{return true;}}});this.cfg.addProperty(C.POST_DATA.key,{value:C.POST_DATA.value});this.cfg.addProperty(C.HIDEAFTERSUBMIT.key,{value:C.HIDEAFTERSUBMIT.value});this.cfg.addProperty(C.BUTTONS.key,{handler:this.configButtons,value:C.BUTTONS.value,supercedes:C.BUTTONS.supercedes});},initEvents:function(){A.superclass.initEvents.call(this);var I=G.LIST;this.beforeSubmitEvent=this.createEvent(H.BEFORE_SUBMIT);this.beforeSubmitEvent.signature=I;this.submitEvent=this.createEvent(H.SUBMIT);this.submitEvent.signature=I;this.manualSubmitEvent=this.createEvent(H.MANUAL_SUBMIT);this.manualSubmitEvent.signature=I;this.asyncSubmitEvent=this.createEvent(H.ASYNC_SUBMIT);
+this.asyncSubmitEvent.signature=I;this.formSubmitEvent=this.createEvent(H.FORM_SUBMIT);this.formSubmitEvent.signature=I;this.cancelEvent=this.createEvent(H.CANCEL);this.cancelEvent.signature=I;},init:function(J,I){A.superclass.init.call(this,J);this.beforeInitEvent.fire(A);E.addClass(this.element,A.CSS_DIALOG);this.cfg.setProperty("visible",false);if(I){this.cfg.applyConfig(I,true);}this.showEvent.subscribe(this.focusFirst,this,true);this.beforeHideEvent.subscribe(this.blurButtons,this,true);this.subscribe("changeBody",this.registerForm);this.initEvent.fire(A);},doSubmit:function(){var P=YAHOO.util.Connect,Q=this.form,K=false,N=false,R,M,L,I;switch(this.cfg.getProperty("postmethod")){case"async":R=Q.elements;M=R.length;if(M>0){L=M-1;do{if(R[L].type=="file"){K=true;break;}}while(L--);}if(K&&YAHOO.env.ua.ie&&this.isSecure){N=true;}I=this._getFormAttributes(Q);P.setForm(Q,K,N);var J=this.cfg.getProperty("postdata");var O=P.asyncRequest(I.method,I.action,this.callback,J);this.a!
 syncSubmitEvent.fire(O);break;case"form":Q.submit();this.formSubmitEvent.fire();break;case"none":case"manual":this.manualSubmitEvent.fire();break;}},_getFormAttributes:function(K){var I={method:null,action:null};if(K){if(K.getAttributeNode){var J=K.getAttributeNode("action");var L=K.getAttributeNode("method");if(J){I.action=J.value;}if(L){I.method=L.value;}}else{I.action=K.getAttribute("action");I.method=K.getAttribute("method");}}I.method=(F.isString(I.method)?I.method:"POST").toUpperCase();I.action=F.isString(I.action)?I.action:"";return I;},registerForm:function(){var I=this.element.getElementsByTagName("form")[0];if(this.form){if(this.form==I&&E.isAncestor(this.element,this.form)){return;}else{B.purgeElement(this.form);this.form=null;}}if(!I){I=document.createElement("form");I.name="frm_"+this.id;this.body.appendChild(I);}if(I){this.form=I;B.on(I,"submit",this._submitHandler,this,true);}},_submitHandler:function(I){B.stopEvent(I);this.submit();this.form.blur();},setTabL!
 oop:function(I,J){I=I||this.firstButton;J=this.lastButton||J;A!
 .supercl
ass.setTabLoop.call(this,I,J);},setFirstLastFocusable:function(){A.superclass.setFirstLastFocusable.call(this);var J,I,K,L=this.focusableElements;this.firstFormElement=null;this.lastFormElement=null;if(this.form&&L&&L.length>0){I=L.length;for(J=0;J<I;++J){K=L[J];if(this.form===K.form){this.firstFormElement=K;break;}}for(J=I-1;J>=0;--J){K=L[J];if(this.form===K.form){this.lastFormElement=K;break;}}}},configClose:function(J,I,K){A.superclass.configClose.apply(this,arguments);},_doClose:function(I){B.preventDefault(I);this.cancel();},configButtons:function(S,R,M){var N=YAHOO.widget.Button,U=R[0],K=this.innerElement,T,P,J,Q,O,I,L;D.call(this);this._aButtons=null;if(F.isArray(U)){O=document.createElement("span");O.className="button-group";Q=U.length;this._aButtons=[];this.defaultHtmlButton=null;for(L=0;L<Q;L++){T=U[L];if(N){J=new N({label:T.text});J.appendTo(O);P=J.get("element");if(T.isDefault){J.addClass("default");this.defaultHtmlButton=P;}if(F.isFunction(T.handler)){J.set("onc!
 lick",{fn:T.handler,obj:this,scope:this});}else{if(F.isObject(T.handler)&&F.isFunction(T.handler.fn)){J.set("onclick",{fn:T.handler.fn,obj:((!F.isUndefined(T.handler.obj))?T.handler.obj:this),scope:(T.handler.scope||this)});}}this._aButtons[this._aButtons.length]=J;}else{P=document.createElement("button");P.setAttribute("type","button");if(T.isDefault){P.className="default";this.defaultHtmlButton=P;}P.innerHTML=T.text;if(F.isFunction(T.handler)){B.on(P,"click",T.handler,this,true);}else{if(F.isObject(T.handler)&&F.isFunction(T.handler.fn)){B.on(P,"click",T.handler.fn,((!F.isUndefined(T.handler.obj))?T.handler.obj:this),(T.handler.scope||this));}}O.appendChild(P);this._aButtons[this._aButtons.length]=P;}T.htmlButton=P;if(L===0){this.firstButton=P;}if(L==(Q-1)){this.lastButton=P;}}this.setFooter(O);I=this.footer;if(E.inDocument(this.element)&&!E.isAncestor(K,I)){K.appendChild(I);}this.buttonSpan=O;}else{O=this.buttonSpan;I=this.footer;if(O&&I){I.removeChild(O);this.buttonSpan!
 =null;this.firstButton=null;this.lastButton=null;this.defaultH!
 tmlButto
n=null;}}this.changeContentEvent.fire();},getButtons:function(){return this._aButtons||null;},focusFirst:function(K,I,M){var J=this.firstFormElement;if(I&&I[1]){B.stopEvent(I[1]);}if(J){try{J.focus();}catch(L){}}else{if(this.defaultHtmlButton){this.focusDefaultButton();}else{this.focusFirstButton();}}},focusLast:function(K,I,M){var N=this.cfg.getProperty("buttons"),J=this.lastFormElement;if(I&&I[1]){B.stopEvent(I[1]);}if(N&&F.isArray(N)){this.focusLastButton();}else{if(J){try{J.focus();}catch(L){}}}},_getButton:function(J){var I=YAHOO.widget.Button;if(I&&J&&J.nodeName&&J.id){J=I.getButton(J.id)||J;}return J;},focusDefaultButton:function(){var I=this._getButton(this.defaultHtmlButton);if(I){try{I.focus();}catch(J){}}},blurButtons:function(){var N=this.cfg.getProperty("buttons"),K,M,J,I;if(N&&F.isArray(N)){K=N.length;if(K>0){I=(K-1);do{M=N[I];if(M){J=this._getButton(M.htmlButton);if(J){try{J.blur();}catch(L){}}}}while(I--);}}},focusFirstButton:function(){var L=this.cfg.getProp!
 erty("buttons"),K,I;if(L&&F.isArray(L)){K=L[0];if(K){I=this._getButton(K.htmlButton);if(I){try{I.focus();}catch(J){}}}}},focusLastButton:function(){var M=this.cfg.getProperty("buttons"),J,L,I;if(M&&F.isArray(M)){J=M.length;if(J>0){L=M[(J-1)];if(L){I=this._getButton(L.htmlButton);if(I){try{I.focus();}catch(K){}}}}}},configPostMethod:function(J,I,K){this.registerForm();},validate:function(){return true;},submit:function(){if(this.validate()){this.beforeSubmitEvent.fire();this.doSubmit();this.submitEvent.fire();if(this.cfg.getProperty("hideaftersubmit")){this.hide();}return true;}else{return false;}},cancel:function(){this.cancelEvent.fire();this.hide();},getData:function(){var Y=this.form,K,R,U,M,S,P,O,J,V,L,W,Z,I,N,a,X,T;function Q(c){var b=c.tagName.toUpperCase();return((b=="INPUT"||b=="TEXTAREA"||b=="SELECT")&&c.name==M);}if(Y){K=Y.elements;R=K.length;U={};for(X=0;X<R;X++){M=K[X].name;S=E.getElementsBy(Q,"*",Y);
+P=S.length;if(P>0){if(P==1){S=S[0];O=S.type;J=S.tagName.toUpperCase();switch(J){case"INPUT":if(O=="checkbox"){U[M]=S.checked;}else{if(O!="radio"){U[M]=S.value;}}break;case"TEXTAREA":U[M]=S.value;break;case"SELECT":V=S.options;L=V.length;W=[];for(T=0;T<L;T++){Z=V[T];if(Z.selected){I=Z.value;if(!I||I===""){I=Z.text;}W[W.length]=I;}}U[M]=W;break;}}else{O=S[0].type;switch(O){case"radio":for(T=0;T<P;T++){N=S[T];if(N.checked){U[M]=N.value;break;}}break;case"checkbox":W=[];for(T=0;T<P;T++){a=S[T];if(a.checked){W[W.length]=a.value;}}U[M]=W;break;}}}}}return U;},destroy:function(){D.call(this);this._aButtons=null;var I=this.element.getElementsByTagName("form"),J;if(I.length>0){J=I[0];if(J){B.purgeElement(J);if(J.parentNode){J.parentNode.removeChild(J);}this.form=null;}}A.superclass.destroy.call(this);},toString:function(){return"Dialog "+this.id;}});}());(function(){YAHOO.widget.SimpleDialog=function(E,D){YAHOO.widget.SimpleDialog.superclass.constructor.call(this,E,D);};var C=YAHOO.!
 util.Dom,B=YAHOO.widget.SimpleDialog,A={"ICON":{key:"icon",value:"none",suppressEvent:true},"TEXT":{key:"text",value:"",suppressEvent:true,supercedes:["icon"]}};B.ICON_BLOCK="blckicon";B.ICON_ALARM="alrticon";B.ICON_HELP="hlpicon";B.ICON_INFO="infoicon";B.ICON_WARN="warnicon";B.ICON_TIP="tipicon";B.ICON_CSS_CLASSNAME="yui-icon";B.CSS_SIMPLEDIALOG="yui-simple-dialog";YAHOO.extend(B,YAHOO.widget.Dialog,{initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);this.cfg.addProperty(A.ICON.key,{handler:this.configIcon,value:A.ICON.value,suppressEvent:A.ICON.suppressEvent});this.cfg.addProperty(A.TEXT.key,{handler:this.configText,value:A.TEXT.value,suppressEvent:A.TEXT.suppressEvent,supercedes:A.TEXT.supercedes});},init:function(E,D){B.superclass.init.call(this,E);this.beforeInitEvent.fire(B);C.addClass(this.element,B.CSS_SIMPLEDIALOG);this.cfg.queueProperty("postmethod","manual");if(D){this.cfg.applyConfig(D,true);}this.beforeRenderEvent.subscribe(function(){if(!th!
 is.body){this.setBody("");}},this,true);this.initEvent.fire(B)!
 ;},regis
terForm:function(){B.superclass.registerForm.call(this);this.form.innerHTML+='<input type="hidden" name="'+this.id+'" value=""/>';},configIcon:function(F,E,J){var K=E[0],D=this.body,I=B.ICON_CSS_CLASSNAME,H,G;if(K&&K!="none"){H=C.getElementsByClassName(I,"*",D);if(H){G=H.parentNode;if(G){G.removeChild(H);H=null;}}if(K.indexOf(".")==-1){H=document.createElement("span");H.className=(I+" "+K);H.innerHTML=" ";}else{H=document.createElement("img");H.src=(this.imageRoot+K);H.className=I;}if(H){D.insertBefore(H,D.firstChild);}}},configText:function(E,D,F){var G=D[0];if(G){this.setBody(G);this.cfg.refireEvent("icon");}},toString:function(){return"SimpleDialog "+this.id;}});}());(function(){YAHOO.widget.ContainerEffect=function(E,H,G,D,F){if(!F){F=YAHOO.util.Anim;}this.overlay=E;this.attrIn=H;this.attrOut=G;this.targetElement=D||E.element;this.animClass=F;};var B=YAHOO.util.Dom,C=YAHOO.util.CustomEvent,A=YAHOO.widget.ContainerEffect;A.FADE=function(D,F){var G=YAHOO.util.Easing,I!
 ={attributes:{opacity:{from:0,to:1}},duration:F,method:G.easeIn},E={attributes:{opacity:{to:0}},duration:F,method:G.easeOut},H=new A(D,I,E,D.element);H.handleUnderlayStart=function(){var K=this.overlay.underlay;if(K&&YAHOO.env.ua.ie){var J=(K.filters&&K.filters.length>0);if(J){B.addClass(D.element,"yui-effect-fade");}}};H.handleUnderlayComplete=function(){var J=this.overlay.underlay;if(J&&YAHOO.env.ua.ie){B.removeClass(D.element,"yui-effect-fade");}};H.handleStartAnimateIn=function(K,J,L){B.addClass(L.overlay.element,"hide-select");if(!L.overlay.underlay){L.overlay.cfg.refireEvent("underlay");}L.handleUnderlayStart();L.overlay._setDomVisibility(true);B.setStyle(L.overlay.element,"opacity",0);};H.handleCompleteAnimateIn=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateInCompleteEvent.fire();};H.handleStartAnimateOut=fun!
 ction(K,J,L){B.addClass(L.overlay.element,"hide-select");L.han!
 dleUnder
layStart();};H.handleCompleteAnimateOut=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.overlay._setDomVisibility(false);B.setStyle(L.overlay.element,"opacity",1);L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateOutCompleteEvent.fire();};H.init();return H;};A.SLIDE=function(F,D){var I=YAHOO.util.Easing,L=F.cfg.getProperty("x")||B.getX(F.element),K=F.cfg.getProperty("y")||B.getY(F.element),M=B.getClientWidth(),H=F.element.offsetWidth,J={attributes:{points:{to:[L,K]}},duration:D,method:I.easeIn},E={attributes:{points:{to:[(M+25),K]}},duration:D,method:I.easeOut},G=new A(F,J,E,F.element,YAHOO.util.Motion);G.handleStartAnimateIn=function(O,N,P){P.overlay.element.style.left=((-25)-H)+"px";P.overlay.element.style.top=K+"px";};G.handleTweenAnimateIn=function(Q,P,R){var S=B.getXY(R.overlay.element),O=S[0],N=S[1];if(B.getStyle(R.overlay.element,"visibility")=="hidden"&&O<L)!
 {R.overlay._setDomVisibility(true);}R.overlay.cfg.setProperty("xy",[O,N],true);R.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateIn=function(O,N,P){P.overlay.cfg.setProperty("xy",[L,K],true);P.startX=L;P.startY=K;P.overlay.cfg.refireEvent("iframe");P.animateInCompleteEvent.fire();};G.handleStartAnimateOut=function(O,N,R){var P=B.getViewportWidth(),S=B.getXY(R.overlay.element),Q=S[1];R.animOut.attributes.points.to=[(P+25),Q];};G.handleTweenAnimateOut=function(P,O,Q){var S=B.getXY(Q.overlay.element),N=S[0],R=S[1];Q.overlay.cfg.setProperty("xy",[N,R],true);Q.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateOut=function(O,N,P){P.overlay._setDomVisibility(false);P.overlay.cfg.setProperty("xy",[L,K]);P.animateOutCompleteEvent.fire();};G.init();return G;};A.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=C.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");
+this.beforeAnimateOutEvent.signature=C.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=C.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=C.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:functi!
 on(){this.beforeAnimateOutEvent.fire();this.animOut.animate();},handleStartAnimateIn:function(E,D,F){},handleTweenAnimateIn:function(E,D,F){},handleCompleteAnimateIn:function(E,D,F){},handleStartAnimateOut:function(E,D,F){},handleTweenAnimateOut:function(E,D,F){},handleCompleteAnimateOut:function(E,D,F){},toString:function(){var D="ContainerEffect";if(this.overlay){D+=" ["+this.overlay.toString()+"]";}return D;}};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);})();YAHOO.register("container",YAHOO.widget.Module,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/container/container.js
===================================================================
--- trunk/root/static/yui/container/container.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -733,6 +733,7 @@
         Event = YAHOO.util.Event,
         CustomEvent = YAHOO.util.CustomEvent,
         Module = YAHOO.widget.Module,
+        UA = YAHOO.env.ua,
 
         m_oModuleTemplate,
         m_oHeaderTemplate,
@@ -777,24 +778,24 @@
                 value: true, 
                 validator: YAHOO.lang.isBoolean 
             },
-        
-            "EFFECT": { 
-                key: "effect", 
-                suppressEvent: true, 
-                supercedes: ["visible"] 
+
+            "EFFECT": {
+                key: "effect",
+                suppressEvent: true,
+                supercedes: ["visible"]
             },
 
-            "MONITOR_RESIZE": { 
-                key: "monitorresize", 
-                value: true  
+            "MONITOR_RESIZE": {
+                key: "monitorresize",
+                value: true
             },
 
-            "APPEND_TO_DOCUMENT_BODY": { 
-                key: "appendtodocumentbody", 
+            "APPEND_TO_DOCUMENT_BODY": {
+                key: "appendtodocumentbody",
                 value: false
             }
         };
-    
+
     /**
     * Constant representing the prefix path to use for non-secure images
     * @property YAHOO.widget.Module.IMG_ROOT
@@ -858,8 +859,20 @@
     * @type String
     */
     Module.RESIZE_MONITOR_SECURE_URL = "javascript:false;";
-    
+
     /**
+    * Constant representing the buffer amount (in pixels) to use when positioning
+    * the text resize monitor offscreen. The resize monitor is positioned
+    * offscreen by an amount eqaul to its offsetHeight + the buffer value.
+    * 
+    * @property YAHOO.widget.Module.RESIZE_MONITOR_BUFFER
+    * @static
+    * @type Number
+    */
+    // Set to 1, to work around pixel offset in IE8, which increases when zoom is used
+    Module.RESIZE_MONITOR_BUFFER = 1;
+
+    /**
     * Singleton CustomEvent fired when the font size is changed in the browser.
     * Opera's "zoom" functionality currently does not support text 
     * size detection.
@@ -867,6 +880,22 @@
     */
     Module.textResizeEvent = new CustomEvent("textResize");
 
+    /**
+     * Helper utility method, which forces a document level 
+     * redraw for Opera, which can help remove repaint
+     * irregularities after applying DOM changes.
+     *
+     * @method YAHOO.widget.Module.forceDocumentRedraw
+     * @static
+     */
+    Module.forceDocumentRedraw = function() {
+        var docEl = document.documentElement;
+        if (docEl) {
+            docEl.className += " ";
+            docEl.className = YAHOO.lang.trim(docEl.className);
+        }
+    };
+
     function createModuleTemplate() {
 
         if (!m_oModuleTemplate) {
@@ -1215,6 +1244,10 @@
         * called by the constructor, and  sets up all DOM references for 
         * pre-existing markup, and creates required markup if it is not 
         * already present.
+        * <p>
+        * If the element passed in does not have an id, one will be generated
+        * for it.
+        * </p>
         * @method init
         * @param {String} el The element ID representing the Module <em>OR</em>
         * @param {HTMLElement} el The element representing the Module
@@ -1250,12 +1283,9 @@
                 }
             }
 
+            this.id = Dom.generateId(el);
             this.element = el;
 
-            if (el.id) {
-                this.id = el.id;
-            }
-
             child = this.element.firstChild;
 
             if (child) {
@@ -1305,7 +1335,7 @@
         */
         initResizeMonitor: function () {
 
-            var isGeckoWin = (YAHOO.env.ua.gecko && this.platform == "windows");
+            var isGeckoWin = (UA.gecko && this.platform == "windows");
             if (isGeckoWin) {
                 // Help prevent spinning loading icon which 
                 // started with FireFox 2.0.0.8/Win
@@ -1332,7 +1362,7 @@
                 Module.textResizeEvent.fire();
             }
 
-            if (!YAHOO.env.ua.opera) {
+            if (!UA.opera) {
                 oIFrame = Dom.get("_yuiResizeMonitor");
 
                 var supportsCWResize = this._supportsCWResize();
@@ -1340,7 +1370,7 @@
                 if (!oIFrame) {
                     oIFrame = document.createElement("iframe");
 
-                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && YAHOO.env.ua.ie) {
+                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && UA.ie) {
                         oIFrame.src = Module.RESIZE_MONITOR_SECURE_URL;
                     }
 
@@ -1376,10 +1406,10 @@
                         db.appendChild(oIFrame);
                     }
 
-                    oIFrame.style.width = "10em";
-                    oIFrame.style.height = "10em";
-                    oIFrame.style.top = (-1 * oIFrame.offsetHeight) + "px";
-                    oIFrame.style.left = (-1 * oIFrame.offsetWidth) + "px";
+                    oIFrame.style.width = "2em";
+                    oIFrame.style.height = "2em";
+                    oIFrame.style.top = (-1 * (oIFrame.offsetHeight + Module.RESIZE_MONITOR_BUFFER)) + "px";
+                    oIFrame.style.left = "0";
                     oIFrame.style.borderWidth = "0";
                     oIFrame.style.visibility = "visible";
 
@@ -1387,7 +1417,7 @@
                        Don't open/close the document for Gecko like we used to, since it
                        leads to duplicate cookies. (See SourceForge bug #1721755)
                     */
-                    if (YAHOO.env.ua.webkit) {
+                    if (UA.webkit) {
                         oDoc = oIFrame.contentWindow.document;
                         oDoc.open();
                         oDoc.close();
@@ -1428,22 +1458,11 @@
                 Gecko 1.8.1.6+ (FF2.0.0.6+) and all other browsers will fire resize on contentWindow.
 
                 We don't want to start sniffing for patch versions, so fire textResize the same
-                way on all FF, until 1.9 (3.x) is out
+                way on all FF2 flavors
              */
             var bSupported = true;
-            if (YAHOO.env.ua.gecko && YAHOO.env.ua.gecko <= 1.8) {
+            if (UA.gecko && UA.gecko <= 1.8) {
                 bSupported = false;
-                /*
-                var v = navigator.userAgent.match(/rv:([^\s\)]*)/); // From YAHOO.env.ua
-                if (v && v[0]) {
-                    var sv = v[0].match(/\d\.\d\.(\d)/);
-                    if (sv && sv[1]) {
-                        if (parseInt(sv[1], 10) > 0) {
-                            bSupported = true;
-                        }
-                    }
-                }
-                */
             }
             return bSupported;
         },
@@ -1456,12 +1475,10 @@
         */
         onDomResize: function (e, obj) {
 
-            var nLeft = -1 * this.resizeMonitor.offsetWidth,
-                nTop = -1 * this.resizeMonitor.offsetHeight;
-        
+            var nTop = -1 * (this.resizeMonitor.offsetHeight + Module.RESIZE_MONITOR_BUFFER);
+
             this.resizeMonitor.style.top = nTop + "px";
-            this.resizeMonitor.style.left =  nLeft + "px";
-
+            this.resizeMonitor.style.left = "0";
         },
 
         /**
@@ -1710,8 +1727,7 @@
         */
         destroy: function () {
 
-            var parent,
-                e;
+            var parent;
 
             if (this.element) {
                 Event.purgeElement(this.element, true);
@@ -1780,7 +1796,7 @@
                 this.hideEvent.fire();
             }
         },
-        
+
         /**
         * Default event handler for the "monitorresize" configuration property
         * @param {String} type The CustomEvent type (usually the property name)
@@ -1873,6 +1889,7 @@
 
         _SUBSCRIBE = "subscribe",
         _UNSUBSCRIBE = "unsubscribe",
+        _CONTAINED = "contained",
 
         m_oIFrameTemplate,
 
@@ -1926,7 +1943,6 @@
             "FIXED_CENTER": { 
                 key: "fixedcenter", 
                 value: false, 
-                validator: Lang.isBoolean, 
                 supercedes: ["iframe", "visible"] 
             },
 
@@ -1944,7 +1960,6 @@
 
             "AUTO_FILL_HEIGHT" : {
                 key: "autofillheight",
-                supressEvent: true,
                 supercedes: ["height"],
                 value:"body"
             },
@@ -1967,14 +1982,14 @@
                 validator: Lang.isBoolean, 
                 supercedes: ["zindex"] 
             },
-            
+
             "PREVENT_CONTEXT_OVERLAP": {
                 key: "preventcontextoverlap",
                 value: false,
                 validator: Lang.isBoolean,  
                 supercedes: ["constraintoviewport"]
             }
-            
+
         };
 
     /**
@@ -2386,10 +2401,47 @@
             });
 
             /**
-            * True if the Overlay should be anchored to the center of 
-            * the viewport.
+            * Determines whether or not the Overlay should be anchored 
+            * to the center of the viewport.
+            * 
+            * <p>This property can be set to:</p>
+            * 
+            * <dl>
+            * <dt>true</dt>
+            * <dd>
+            * To enable fixed center positioning
+            * <p>
+            * When enabled, the overlay will 
+            * be positioned in the center of viewport when initially displayed, and 
+            * will remain in the center of the viewport whenever the window is 
+            * scrolled or resized.
+            * </p>
+            * <p>
+            * If the overlay is too big for the viewport, 
+            * it's top left corner will be aligned with the top left corner of the viewport.
+            * </p>
+            * </dd>
+            * <dt>false</dt>
+            * <dd>
+            * To disable fixed center positioning.
+            * <p>In this case the overlay can still be 
+            * centered as a one-off operation, by invoking the <code>center()</code> method,
+            * however it will not remain centered when the window is scrolled/resized.
+            * </dd>
+            * <dt>"contained"<dt>
+            * <dd>To enable fixed center positioning, as with the <code>true</code> option.
+            * <p>However, unlike setting the property to <code>true</code>, 
+            * when the property is set to <code>"contained"</code>, if the overlay is 
+            * too big for the viewport, it will not get automatically centered when the 
+            * user scrolls or resizes the window (until the window is large enough to contain the 
+            * overlay). This is useful in cases where the Overlay has both header and footer 
+            * UI controls which the user may need to access.
+            * </p>
+            * </dd>
+            * </dl>
+            *
             * @config fixedcenter
-            * @type Boolean
+            * @type Boolean | String
             * @default false
             */
             cfg.addProperty(DEFAULT_CONFIG.FIXED_CENTER.key, {
@@ -2435,7 +2487,6 @@
                 handler: this.configAutoFillHeight, 
                 value : DEFAULT_CONFIG.AUTO_FILL_HEIGHT.value,
                 validator : this._validateAutoFill,
-                suppressEvent: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.suppressEvent, 
                 supercedes: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.supercedes
             });
 
@@ -2534,6 +2585,23 @@
             Dom.replaceClass(this.element, "hide-scrollbars", "show-scrollbars");
         },
 
+        /**
+         * Internal implementation to set the visibility of the overlay in the DOM.
+         *
+         * @method _setDomVisibility
+         * @param {boolean} visible Whether to show or hide the Overlay's outer element
+         * @protected
+         */
+        _setDomVisibility : function(show) {
+            Dom.setStyle(this.element, "visibility", (show) ? "visible" : "hidden");
+
+            if (show) {
+                Dom.removeClass(this.element, "yui-overlay-hidden");
+            } else {
+                Dom.addClass(this.element, "yui-overlay-hidden");
+            }
+        },
+
         // BEGIN BUILT-IN PROPERTY EVENT HANDLERS //
         /**
         * The default event handler fired when the "visible" property is 
@@ -2564,8 +2632,8 @@
                 while (e.nodeType != 9 && e.nodeType != 11) {
                     currentVis = Dom.getStyle(e, "visibility");
 
-                    if (currentVis != "inherit") { 
-                        break; 
+                    if (currentVis != "inherit") {
+                        break;
                     }
 
                     e = e.parentNode;
@@ -2592,7 +2660,6 @@
                 }
             }
 
-
             if (visible) { // Show
                 if (isMacGecko) {
                     this.showMacGeckoScrollbars();
@@ -2626,10 +2693,12 @@
                     if (currentVis != "visible" || currentVis === "") {
                         this.beforeShowEvent.fire();
 
-                        Dom.setStyle(this.element, "visibility", "visible");
+                        this._setDomVisibility(true);
 
                         this.cfg.refireEvent("iframe");
                         this.showEvent.fire();
+                    } else {
+                        this._setDomVisibility(true);
                     }
                 }
             } else { // Hide
@@ -2637,7 +2706,7 @@
                 if (isMacGecko) {
                     this.hideMacGeckoScrollbars();
                 }
-                    
+
                 if (effect) { // Animate out if showing
                     if (currentVis == "visible") {
                         this.beforeHideEvent.fire();
@@ -2663,32 +2732,59 @@
                         }
 
                     } else if (currentVis === "") {
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                     }
 
                 } else { // Simple hide
 
                     if (currentVis == "visible" || currentVis === "") {
                         this.beforeHideEvent.fire();
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                         this.hideEvent.fire();
+                    } else {
+                        this._setDomVisibility(false);
                     }
                 }
             }
         },
 
         /**
-        * Center event handler used for centering on scroll/resize, but only if 
-        * the Overlay is visible
+        * Fixed center event handler used for centering on scroll/resize, but only if 
+        * the overlay is visible and, if "fixedcenter" is set to "contained", only if 
+        * the overlay fits within the viewport.
+        *
         * @method doCenterOnDOMEvent
         */
         doCenterOnDOMEvent: function () {
-            if (this.cfg.getProperty("visible")) {
-                this.center();
+            var cfg = this.cfg,
+                fc = cfg.getProperty("fixedcenter");
+
+            if (cfg.getProperty("visible")) {
+                if (fc && (fc !== _CONTAINED || this.fitsInViewport())) {
+                    this.center();
+                }
             }
         },
 
         /**
+         * Determines if the Overlay (including the offset value defined by Overlay.VIEWPORT_OFFSET) 
+         * will fit entirely inside the viewport, in both dimensions - width and height.
+         * 
+         * @method fitsInViewport
+         * @return boolean true if the Overlay will fit, false if not
+         */
+        fitsInViewport : function() {
+            var nViewportOffset = Overlay.VIEWPORT_OFFSET,
+                element = this.element,
+                elementWidth = element.offsetWidth,
+                elementHeight = element.offsetHeight,
+                viewportWidth = Dom.getViewportWidth(),
+                viewportHeight = Dom.getViewportHeight();
+
+            return ((elementWidth + nViewportOffset < viewportWidth) && (elementHeight + nViewportOffset < viewportHeight));
+        },
+
+        /**
         * The default event handler fired when the "fixedcenter" property 
         * is changed.
         * @method configFixedCenter
@@ -2708,7 +2804,7 @@
             if (val) {
                 this.center();
 
-                if (!alreadySubscribed(this.beforeShowEvent, this.center, this)) {
+                if (!alreadySubscribed(this.beforeShowEvent, this.center)) {
                     this.beforeShowEvent.subscribe(this.center);
                 }
 
@@ -2727,7 +2823,7 @@
                 windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent, this);
             }
         },
-        
+
         /**
         * The default event handler fired when the "height" property is changed.
         * @method configHeight
@@ -2758,22 +2854,28 @@
          */
         configAutoFillHeight: function (type, args, obj) {
             var fillEl = args[0],
-                currEl = this.cfg.getProperty("autofillheight");
+                cfg = this.cfg,
+                autoFillHeight = "autofillheight",
+                height = "height",
+                currEl = cfg.getProperty(autoFillHeight),
+                autoFill = this._autoFillOnHeightChange;
 
-            this.cfg.unsubscribeFromConfigEvent("height", this._autoFillOnHeightChange);
-            Module.textResizeEvent.unsubscribe("height", this._autoFillOnHeightChange);
+            cfg.unsubscribeFromConfigEvent(height, autoFill);
+            Module.textResizeEvent.unsubscribe(autoFill);
+            this.changeContentEvent.unsubscribe(autoFill);
 
             if (currEl && fillEl !== currEl && this[currEl]) {
-                Dom.setStyle(this[currEl], "height", "");
+                Dom.setStyle(this[currEl], height, "");
             }
 
             if (fillEl) {
                 fillEl = Lang.trim(fillEl.toLowerCase());
 
-                this.cfg.subscribeToConfigEvent("height", this._autoFillOnHeightChange, this[fillEl], this);
-                Module.textResizeEvent.subscribe(this._autoFillOnHeightChange, this[fillEl], this);
+                cfg.subscribeToConfigEvent(height, autoFill, this[fillEl], this);
+                Module.textResizeEvent.subscribe(autoFill, this[fillEl], this);
+                this.changeContentEvent.subscribe(autoFill, this[fillEl], this);
 
-                this.cfg.setProperty("autofillheight", fillEl, true);
+                cfg.setProperty(autoFillHeight, fillEl, true);
             }
         },
 
@@ -3049,6 +3151,7 @@
                         m_oIFrameTemplate.style.margin = "0";
                         m_oIFrameTemplate.style.padding = "0";
                         m_oIFrameTemplate.style.display = "none";
+                        m_oIFrameTemplate.tabIndex = -1;
                     }
 
                     oIFrame = m_oIFrameTemplate.cloneNode(false);
@@ -3420,8 +3523,8 @@
                 nLeftRegionWidth,
                 nRightRegionWidth,
 
-                leftConstraint,
-                rightConstraint,
+                leftConstraint = scrollX + nViewportOffset,
+                rightConstraint = scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset,
 
                 xNew = x,
 
@@ -3513,42 +3616,52 @@
             
             };
 
+            // Determine if the current value for the Overlay's "x" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
+            
+            if (x < leftConstraint || x > rightConstraint) {
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-				oOverlapPositions[(aContext[1] + aContext[2])]) {
+                // The current value for the Overlay's "x" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
                 if (bCanConstrain) {
 
-                    oContextEl = aContext[0];
-                    nContextElX = Dom.getX(oContextEl) - scrollX;
-                    nContextElWidth = oContextEl.offsetWidth;
-                    nLeftRegionWidth = nContextElX;
-                    nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
     
-                    setHorizontalPosition();
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElX = Dom.getX(oContextEl) - scrollX;
+                        nContextElWidth = oContextEl.offsetWidth;
+                        nLeftRegionWidth = nContextElX;
+                        nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+        
+                        setHorizontalPosition();
+                        
+                        xNew = this.cfg.getProperty("x");
+                    
+                    }
+                    else {
 
-                }
-                
-                xNew = this.cfg.getProperty("x");
-            
-            }
-            else {
+                        if (x < leftConstraint) {
+                            xNew = leftConstraint;
+                        } else if (x > rightConstraint) {
+                            xNew = rightConstraint;
+                        }
 
-                if (bCanConstrain) {
-    
-                    leftConstraint = scrollX + nViewportOffset;
-                    rightConstraint = 
-                        scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset;
-    
-                    if (x < leftConstraint) {
-                        xNew = leftConstraint;
-                    } else if (x > rightConstraint) {
-                        xNew = rightConstraint;
                     }
+
                 } else {
+                    //	The "x" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "x" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.                
                     xNew = nViewportOffset + scrollX;
                 }
-            
+
             }
 
             return xNew;
@@ -3586,8 +3699,8 @@
                 nTopRegionHeight,
                 nBottomRegionHeight,
 
-                topConstraint,
-                bottomConstraint,
+                topConstraint = scrollY + nViewportOffset,
+                bottomConstraint = scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset,
 
                 yNew = y,
                 
@@ -3678,42 +3791,56 @@
             };
 
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-            	oOverlapPositions[(aContext[1] + aContext[2])]) {
+            // Determine if the current value for the Overlay's "y" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
 
-                if (bCanConstrain) {
+            if (y < topConstraint || y  > bottomConstraint) {
+        
+                // The current value for the Overlay's "y" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
-                    oContextEl = aContext[0];
-                    nContextElHeight = oContextEl.offsetHeight;
-                    nContextElY = (Dom.getY(oContextEl) - scrollY);
-    
-                    nTopRegionHeight = nContextElY;
-                    nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
-    
-                    setVerticalPosition();
-                
-                }
+                if (bCanConstrain) {	
 
-                yNew = oOverlay.cfg.getProperty("y");
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
+        
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElHeight = oContextEl.offsetHeight;
+                        nContextElY = (Dom.getY(oContextEl) - scrollY);
+        
+                        nTopRegionHeight = nContextElY;
+                        nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+        
+                        setVerticalPosition();
+        
+                        yNew = oOverlay.cfg.getProperty("y");
+        
+                    }
+                    else {
 
-            }
-            else {
-
-                if (bCanConstrain) {
-    
-                    topConstraint = scrollY + nViewportOffset;
-                    bottomConstraint = 
-                        scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset;
-    
-                    if (y < topConstraint) {
-                        yNew  = topConstraint;
-                    } else if (y  > bottomConstraint) {
-                        yNew  = bottomConstraint;
+                        if (y < topConstraint) {
+                            yNew  = topConstraint;
+                        } else if (y  > bottomConstraint) {
+                            yNew  = bottomConstraint;
+                        }
+                    
                     }
-                } else {
+                
+                }
+                else {
+                
+                    //	The "y" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "y" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.
+                
                     yNew = nViewportOffset + scrollY;
                 }
-
+        
             }
 
             return yNew;
@@ -3761,6 +3888,10 @@
 
             this.cfg.setProperty("xy", [parseInt(x, 10), parseInt(y, 10)]);
             this.cfg.refireEvent("iframe");
+
+            if (UA.webkit) {
+                this.forceContainerRedraw();
+            }
         },
 
         /**
@@ -3855,7 +3986,10 @@
          * out the containers height
          */
         _autoFillOnHeightChange : function(type, args, el) {
-            this.fillHeight(el);
+            var height = this.cfg.getProperty("height");
+            if ((height && height !== "auto") || (height === 0)) {
+                this.fillHeight(el);
+            }
         },
 
         /**
@@ -3931,13 +4065,13 @@
                         Dom.removeClass(container, "yui-override-padding");
                     }
     
-                    remaining = total - filled;
+                    remaining = Math.max(total - filled, 0);
     
                     Dom.setStyle(el, "height", remaining + "px");
     
                     // Re-adjust height if required, to account for el padding and border
                     if (el.offsetHeight != remaining) {
-                        remaining = remaining - (el.offsetHeight - remaining);
+                        remaining = Math.max(remaining - (el.offsetHeight - remaining), 0);
                     }
                     Dom.setStyle(el, "height", remaining + "px");
                 }
@@ -4039,6 +4173,26 @@
         },
 
         /**
+         * Can be used to force the container to repaint/redraw it's contents.
+         * <p>
+         * By default applies and then removes a 1px bottom margin through the 
+         * application/removal of a "yui-force-redraw" class.
+         * </p>
+         * <p>
+         * It is currently used by Overlay to force a repaint for webkit 
+         * browsers, when centering.
+         * </p>
+         * @method forceContainerRedraw
+         */
+        forceContainerRedraw : function() {
+            var c = this;
+            Dom.addClass(c.element, "yui-force-redraw");
+            setTimeout(function() {
+                Dom.removeClass(c.element, "yui-force-redraw");
+            }, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Overlay.
@@ -4485,8 +4639,7 @@
         */
         register: function (overlay) {
 
-            var zIndex,
-                registered = false,
+            var registered = false,
                 i,
                 n;
 
@@ -4685,6 +4838,8 @@
         CustomEvent = YAHOO.util.CustomEvent,
         Dom = YAHOO.util.Dom,
         Tooltip = YAHOO.widget.Tooltip,
+        UA = YAHOO.env.ua,
+        bIEQuirks = (UA.ie && (UA.ie <= 6 || document.compatMode == "BackCompat")),
 
         m_oShadowTemplate,
 
@@ -4760,31 +4915,28 @@
     */
     Tooltip.CSS_TOOLTIP = "yui-tt";
 
-    /* 
-        "hide" event handler that sets a Tooltip instance's "width"
-        configuration property back to its original value before 
-        "setWidthToOffsetWidth" was called.
-    */
-    function restoreOriginalWidth(p_sType, p_aArgs, p_oObject) {
+    function restoreOriginalWidth(sOriginalWidth, sForcedWidth) {
 
-        var sOriginalWidth = p_oObject[0],
-            sNewWidth = p_oObject[1],
-            oConfig = this.cfg,
+        var oConfig = this.cfg,
             sCurrentWidth = oConfig.getProperty("width");
 
-        if (sCurrentWidth == sNewWidth) {
+        if (sCurrentWidth == sForcedWidth) {
             oConfig.setProperty("width", sOriginalWidth);
         }
     }
 
     /* 
-        "beforeShow" event handler that sets a Tooltip instance's "width"
+        changeContent event handler that sets a Tooltip instance's "width"
         configuration property to the value of its root HTML 
-        elements's offsetWidth
+        elements's offsetWidth if a specific width has not been set.
     */
 
     function setWidthToOffsetWidth(p_sType, p_aArgs) {
 
+        if ("_originalWidth" in this) {
+            restoreOriginalWidth.call(this, this._originalWidth, this._forcedWidth);
+        }
+
         var oBody = document.body,
             oConfig = this.cfg,
             sOriginalWidth = oConfig.getProperty("width"),
@@ -4811,7 +4963,8 @@
             oConfig.setProperty("width", sNewWidth);
             oConfig.refireEvent("xy");
 
-            this.subscribe("hide", restoreOriginalWidth, [(sOriginalWidth || ""), sNewWidth]);
+            this._originalWidth = sOriginalWidth || "";
+            this._forcedWidth = sNewWidth;
         }
     }
 
@@ -4859,7 +5012,7 @@
 
             this.setBody("");
 
-            this.subscribe("beforeShow", setWidthToOffsetWidth);
+            this.subscribe("changeContent", setWidthToOffsetWidth);
             this.subscribe("init", onInit);
             this.subscribe("render", this.onRender);
 
@@ -5135,7 +5288,7 @@
         * this will usually equal the owner.
         */
         configContext: function (type, args, obj) {
-        
+
             var context = args[0],
                 aElements,
                 nElements,
@@ -5278,7 +5431,7 @@
             var yOffset = 25,
                 me = this;
 
-            if (YAHOO.env.ua.opera && context.tagName && 
+            if (UA.opera && context.tagName && 
                 context.tagName.toUpperCase() == "A") {
                 yOffset += 12;
             }
@@ -5329,7 +5482,7 @@
             }, this.cfg.getProperty("autodismissdelay"));
 
         },
-        
+
         /**
         * Fired when the Tooltip is moved, this event handler is used to 
         * prevent the Tooltip from overlapping with its context element.
@@ -5368,7 +5521,7 @@
             function sizeShadow() {
     
                 var oElement = this.element,
-                    oShadow = this._shadow;
+                    oShadow = this.underlay;
             
                 if (oShadow) {
                     oShadow.style.width = (oElement.offsetWidth + 6) + "px";
@@ -5378,17 +5531,20 @@
             }
 
             function addShadowVisibleClass() {
-                Dom.addClass(this._shadow, "yui-tt-shadow-visible");
+                Dom.addClass(this.underlay, "yui-tt-shadow-visible");
+
+                if (UA.ie) {
+                    this.forceUnderlayRedraw();
+                }
             }
-            
 
             function removeShadowVisibleClass() {
-                Dom.removeClass(this._shadow, "yui-tt-shadow-visible");
+                Dom.removeClass(this.underlay, "yui-tt-shadow-visible");
             }
 
             function createShadow() {
     
-                var oShadow = this._shadow,
+                var oShadow = this.underlay,
                     oElement,
                     Module,
                     nIE,
@@ -5398,7 +5554,7 @@
     
                     oElement = this.element;
                     Module = YAHOO.widget.Module;
-                    nIE = YAHOO.env.ua.ie;
+                    nIE = UA.ie;
                     me = this;
 
                     if (!m_oShadowTemplate) {
@@ -5410,14 +5566,18 @@
 
                     oElement.appendChild(oShadow);
 
-                    this._shadow = oShadow;
+                    this.underlay = oShadow;
 
+                    // Backward compatibility, even though it's probably 
+                    // intended to be "private", it isn't marked as such in the api docs
+                    this._shadow = this.underlay;
+
                     addShadowVisibleClass.call(this);
 
                     this.subscribe("beforeShow", addShadowVisibleClass);
-                    this.subscribe("beforeHide", removeShadowVisibleClass);
+                    this.subscribe("hide", removeShadowVisibleClass);
 
-                    if (nIE == 6 || (nIE == 7 && document.compatMode == "BackCompat")) {
+                    if (bIEQuirks) {
                         window.setTimeout(function () { 
                             sizeShadow.call(me); 
                         }, 0);
@@ -5446,8 +5606,20 @@
             }
         
         },
-        
+
         /**
+         * Forces the underlay element to be repainted, through the application/removal
+         * of a yui-force-redraw class to the underlay element.
+         * 
+         * @method forceUnderlayRedraw
+         */
+        forceUnderlayRedraw : function() {
+            var tt = this;
+            Dom.addClass(tt.underlay, "yui-force-redraw");
+            setTimeout(function() {Dom.removeClass(tt.underlay, "yui-force-redraw");}, 0);
+        },
+
+        /**
         * Removes the Tooltip element from the DOM and sets all child 
         * elements to null.
         * @method destroy
@@ -5506,7 +5678,7 @@
         Panel = YAHOO.widget.Panel,
         UA = YAHOO.env.ua,
 
-        bIEQuirks = (UA.ie == 6 || (UA.ie == 7 && document.compatMode == "BackCompat")),
+        bIEQuirks = (UA.ie && (UA.ie <= 6 || document.compatMode == "BackCompat")),
 
         m_oMaskTemplate,
         m_oUnderlayTemplate,
@@ -5663,12 +5835,11 @@
 
     function setWidthToOffsetWidth(p_sType, p_aArgs) {
 
-        var nIE = YAHOO.env.ua.ie,
-            oConfig,
+        var oConfig,
             sOriginalWidth,
             sNewWidth;
 
-        if (nIE == 6 || (nIE == 7 && document.compatMode == "BackCompat")) {
+        if (bIEQuirks) {
 
             oConfig = this.cfg;
             sOriginalWidth = oConfig.getProperty("width");
@@ -5678,7 +5849,7 @@
                 sNewWidth = (this.element.offsetWidth + "px");
     
                 oConfig.setProperty("width", sNewWidth);
-                
+
                 this.subscribe("hide", restoreOriginalWidth, 
                     [(sOriginalWidth || ""), sNewWidth]);
             
@@ -5744,26 +5915,33 @@
          */
         _onElementFocus : function(e){
 
-            var target = Event.getTarget(e);
+            if(_currentModal === this) {
 
-            if (target !== this.element && !Dom.isAncestor(this.element, target) && _currentModal == this) {
-                try {
-                    if (this.firstElement) {
-                        this.firstElement.focus();
-                    } else {
-                        if (this._modalFocus) {
-                            this._modalFocus.focus();
+                var target = Event.getTarget(e),
+                    doc = document.documentElement,
+                    insideDoc = (target !== doc && target !== window);
+
+                // mask and documentElement checks added for IE, which focuses on the mask when it's clicked on, and focuses on 
+                // the documentElement, when the document scrollbars are clicked on
+                if (insideDoc && target !== this.element && target !== this.mask && !Dom.isAncestor(this.element, target)) {
+                    try {
+                        if (this.firstElement) {
+                            this.firstElement.focus();
                         } else {
-                            this.innerElement.focus();
+                            if (this._modalFocus) {
+                                this._modalFocus.focus();
+                            } else {
+                                this.innerElement.focus();
+                            }
                         }
+                    } catch(err){
+                        // Just in case we fail to focus
+                        try {
+                            if (insideDoc && target !== document.body) {
+                                target.blur();
+                            }
+                        } catch(err2) { }
                     }
-                } catch(err){
-                    // Just in case we fail to focus
-                    try {
-                        if (target !== document && target !== document.body && target !== window) {
-                            target.blur();
-                        }
-                    } catch(err2) { }
                 }
             }
         },
@@ -5809,7 +5987,7 @@
             e.style.position = "absolute";
             e.style.left = "-10000em";
             e.style.opacity = 0;
-            e.tabIndex = "-1";
+            e.tabIndex = -1;
             this.innerElement.appendChild(e);
             this._modalFocus = e;
         },
@@ -6270,20 +6448,7 @@
                 sUnderlay = args[0].toLowerCase(),
                 oUnderlay = this.underlay,
                 oElement = this.element;
-                
-            function fixWebkitUnderlay() {
-                // Webkit 419.3 (Safari 2.x) does not update
-                // it's Render Tree for the Container when content changes. 
-                // We need to force it to update using this contentChange 
-                // listener
 
-                // Webkit 523.6 doesn't have this problem and doesn't 
-                // need the fix
-                var u = this.underlay;
-                Dom.addClass(u, "yui-force-redraw");
-                window.setTimeout(function(){Dom.removeClass(u, "yui-force-redraw");}, 0);
-            }
-
             function createUnderlay() {
                 var bNew = false;
                 if (!oUnderlay) { // create if not already in DOM
@@ -6308,8 +6473,9 @@
                     }
 
                     if (UA.webkit && UA.webkit < 420) {
-                        this.changeContentEvent.subscribe(fixWebkitUnderlay);
+                        this.changeContentEvent.subscribe(this.forceUnderlayRedraw);
                     }
+
                     bNew = true;
                 }
             }
@@ -6333,7 +6499,7 @@
                     this.cfg.unsubscribeFromConfigEvent("width", this.sizeUnderlay);
                     this.cfg.unsubscribeFromConfigEvent("height",this.sizeUnderlay);
                     this.changeContentEvent.unsubscribe(this.sizeUnderlay);
-                    this.changeContentEvent.unsubscribe(fixWebkitUnderlay);
+                    this.changeContentEvent.unsubscribe(this.forceUnderlayRedraw);
                     YAHOO.widget.Module.textResizeEvent.unsubscribe(this.sizeUnderlay, this, true);
 
                     this.element.removeChild(oUnderlay);
@@ -6562,7 +6728,10 @@
         _autoFillOnHeightChange : function(type, args, el) {
             Panel.superclass._autoFillOnHeightChange.apply(this, arguments);
             if (bIEQuirks) {
-                this.sizeUnderlay();
+                var panel = this;
+                setTimeout(function() {
+                    panel.sizeUnderlay();
+                },0);
             }
         },
 
@@ -6657,7 +6826,6 @@
             }
         },
 
-        
         /**
         * Registers the Panel's header for drag & drop capability.
         * @method registerDragDrop
@@ -6826,17 +6994,17 @@
                     viewWidth = Dom.getViewportWidth(),
                     viewHeight = Dom.getViewportHeight();
 
-                if (this.mask.offsetHeight > viewHeight) {
-                    this.mask.style.height = viewHeight + "px";
+                if (mask.offsetHeight > viewHeight) {
+                    mask.style.height = viewHeight + "px";
                 }
 
-                if (this.mask.offsetWidth > viewWidth) {
-                    this.mask.style.width = viewWidth + "px";
+                if (mask.offsetWidth > viewWidth) {
+                    mask.style.width = viewWidth + "px";
                 }
 
                 // Then size it to the document
-                this.mask.style.height = Dom.getDocumentHeight() + "px";
-                this.mask.style.width = Dom.getDocumentWidth() + "px";
+                mask.style.height = Dom.getDocumentHeight() + "px";
+                mask.style.width = Dom.getDocumentWidth() + "px";
             }
         },
 
@@ -6896,8 +7064,20 @@
             }
             Panel.superclass.destroy.call(this);  
         },
-        
+
         /**
+         * Forces the underlay element to be repainted through the application/removal 
+         * of a yui-force-redraw class to the underlay element.
+         *
+         * @method forceUnderlayRedraw
+         */
+        forceUnderlayRedraw : function () {
+            var u = this.underlay;
+            Dom.addClass(u, "yui-force-redraw");
+            setTimeout(function(){Dom.removeClass(u, "yui-force-redraw");}, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Panel.
@@ -6979,6 +7159,11 @@
                 value: "async"
             },
 
+            "POST_DATA" : {
+                key: "postdata",
+                value: null
+            },
+
             "BUTTONS": {
                 key: "buttons",
                 value: "none",
@@ -6989,6 +7174,7 @@
                 key: "hideaftersubmit",
                 value: true
             }
+
         };
 
     /**
@@ -7078,7 +7264,7 @@
                 failure: null,
 
                 /**
-                 *<p>
+                *<p>
                 * The function to execute upon success of the 
                 * Connection submission, when the form contains
                 * a file input element.
@@ -7129,6 +7315,20 @@
             });
 
             /**
+            * Any additional post data which needs to be sent when using the 
+            * <a href="#config_postmethod">async</a> postmethod for dialog POST submissions.
+            * The format for the post data string is defined by Connection Manager's 
+            * <a href="YAHOO.util.Connect.html#method_asyncRequest">asyncRequest</a> 
+            * method.
+            * @config postdata
+            * @type String
+            * @default null
+            */
+            this.cfg.addProperty(DEFAULT_CONFIG.POST_DATA.key, {
+                value: DEFAULT_CONFIG.POST_DATA.value
+            });
+
+            /**
             * This property is used to configure whether or not the 
             * dialog should be automatically hidden after submit.
             * 
@@ -7138,41 +7338,60 @@
             */
             this.cfg.addProperty(DEFAULT_CONFIG.HIDEAFTERSUBMIT.key, {
                 value: DEFAULT_CONFIG.HIDEAFTERSUBMIT.value
-            }); 
+            });
 
             /**
             * Array of object literals, each containing a set of properties 
             * defining a button to be appended into the Dialog's footer.
-            * 
-            * Each button object in the buttons array can have three properties:
-            * <dt>text:</dt>
-            * <dd>The text that will display on the face of the button. The text can 
-            * include HTML, as long as it is compliant with HTML Button specifications.
-            * </dd>
-            * <dt>handler:</dt>
-            * <dd>Can be either:
-            *     <ol>
-            *         <li>A reference to a function that should fire when the 
-            * button is clicked.  (In this case scope of this function is 
-            * always its Dialog instance.)</li>
-            *         <li>An object literal representing the code to be 
-            * executed when the button is clicked.  Format:<br> <code> {<br>
-            * <strong>fn:</strong> Function,   // The handler to call 
-            * when  the event fires.<br> <strong>obj:</strong> Object,
-            * // An  object to pass back to the handler.<br> <strong>
-            * scope:</strong>  Object // The object to use for the 
-            * scope of the handler. <br> } </code> <br></li>
+            *
+            * <p>Each button object in the buttons array can have three properties:</p>
+            * <dl>
+            *    <dt>text:</dt>
+            *    <dd>
+            *       The text that will display on the face of the button. The text can 
+            *       include HTML, as long as it is compliant with HTML Button specifications.
+            *    </dd>
+            *    <dt>handler:</dt>
+            *    <dd>Can be either:
+            *    <ol>
+            *       <li>A reference to a function that should fire when the 
+            *       button is clicked.  (In this case scope of this function is 
+            *       always its Dialog instance.)</li>
+            *
+            *       <li>An object literal representing the code to be 
+            *       executed when the button is clicked.
+            *       
+            *       <p>Format:</p>
+            *
+            *       <p>
+            *       <code>{
+            *       <br>
+            *       <strong>fn:</strong> Function, //
+            *       The handler to call when  the event fires.
+            *       <br>
+            *       <strong>obj:</strong> Object, // 
+            *       An  object to pass back to the handler.
+            *       <br>
+            *       <strong>scope:</strong> Object // 
+            *       The object to use for the scope of the handler.
+            *       <br>
+            *       }</code>
+            *       </p>
+            *       </li>
             *     </ol>
-            * </dd>
-            * <dt>isDefault:</dt>
-            * <dd>An optional boolean value that specifies that a button 
-            * should be highlighted and focused by default.</dd>
-            * 
+            *     </dd>
+            *     <dt>isDefault:</dt>
+            *     <dd>
+            *        An optional boolean value that specifies that a button 
+            *        should be highlighted and focused by default.
+            *     </dd>
+            * </dl>
+            *
             * <em>NOTE:</em>If the YUI Button Widget is included on the page, 
             * the buttons created will be instances of YAHOO.widget.Button. 
             * Otherwise, HTML Buttons (<code><BUTTON></code>) will be 
             * created.
-            * 
+            *
             * @config buttons
             * @type {Array|String}
             * @default "none"
@@ -7211,27 +7430,29 @@
             this.submitEvent.signature = SIGNATURE;
         
             /**
-            * CustomEvent fired prior to manual submission
+            * CustomEvent fired for manual submission, before the generic submit event is fired
             * @event manualSubmitEvent
             */
             this.manualSubmitEvent = 
                 this.createEvent(EVENT_TYPES.MANUAL_SUBMIT);
             this.manualSubmitEvent.signature = SIGNATURE;
-        
+
             /**
-            * CustomEvent fired prior to asynchronous submission
+            * CustomEvent fired after asynchronous submission, before the generic submit event is fired
+            *
             * @event asyncSubmitEvent
-            */ 
+            * @param {Object} conn The connection object, returned by YAHOO.util.Connect.asyncRequest
+            */
             this.asyncSubmitEvent = this.createEvent(EVENT_TYPES.ASYNC_SUBMIT);
             this.asyncSubmitEvent.signature = SIGNATURE;
-        
+
             /**
-            * CustomEvent fired prior to form-based submission
+            * CustomEvent fired after form-based submission, before the generic submit event is fired
             * @event formSubmitEvent
             */
             this.formSubmitEvent = this.createEvent(EVENT_TYPES.FORM_SUBMIT);
             this.formSubmitEvent.signature = SIGNATURE;
-        
+
             /**
             * CustomEvent fired after cancel
             * @event cancelEvent
@@ -7246,6 +7467,7 @@
         * all of its subclasses. This method is automatically called by the 
         * constructor, and  sets up all DOM references for pre-existing markup, 
         * and creates required markup if it is not already present.
+        * 
         * @method init
         * @param {String} el The element ID representing the Dialog <em>OR</em>
         * @param {HTMLElement} el The element representing the Dialog
@@ -7329,10 +7551,12 @@
                     formAttrs = this._getFormAttributes(oForm);
 
                     Connect.setForm(oForm, bUseFileUpload, bUseSecureFileUpload);
-                    Connect.asyncRequest(formAttrs.method, formAttrs.action, this.callback);
 
-                    this.asyncSubmitEvent.fire();
+                    var postData = this.cfg.getProperty("postdata");
+                    var c = Connect.asyncRequest(formAttrs.method, formAttrs.action, this.callback, postData);
 
+                    this.asyncSubmitEvent.fire(c);
+
                     break;
 
                 case "form":
@@ -7645,13 +7869,7 @@
                 }
             }
 
-            // Everything which needs to be done if content changed
-            // TODO: Should we be firing contentChange here?
-
-            this.setFirstLastFocusable();
-
-            this.cfg.refireEvent("iframe");
-            this.cfg.refireEvent("underlay");
+            this.changeContentEvent.fire();
         },
 
         /**
@@ -7669,11 +7887,16 @@
         },
 
         /**
-        * Sets focus to the first element in the Dialog's form or the first 
-        * button defined via the "buttons" configuration property. Called 
-        * when the Dialog is made visible.
-        * @method focusFirst
-        */
+         * <p>
+         * Sets focus to the first focusable element in the Dialog's form if found, 
+         * else, the default button if found, else the first button defined via the 
+         * "buttons" configuration property.
+         * </p>
+         * <p>
+         * This method is invoked when the Dialog is made visible.
+         * </p>
+         * @method focusFirst
+         */
         focusFirst: function (type, args, obj) {
 
             var el = this.firstFormElement;
@@ -7689,7 +7912,11 @@
                     // Ignore
                 }
             } else {
-                this.focusFirstButton();
+                if (this.defaultHtmlButton) {
+                    this.focusDefaultButton();
+                } else {
+                    this.focusFirstButton();
+                }
             }
         },
 
@@ -8570,7 +8797,7 @@
 
             obj.handleUnderlayStart();
 
-            Dom.setStyle(obj.overlay.element, "visibility", "visible");
+            obj.overlay._setDomVisibility(true);
             Dom.setStyle(obj.overlay.element, "opacity", 0);
         };
 
@@ -8597,7 +8824,7 @@
             if (obj.overlay.element.style.filter) {
                 obj.overlay.element.style.filter = null;
             }
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
+            obj.overlay._setDomVisibility(false);
             Dom.setStyle(obj.overlay.element, "opacity", 1);
 
             obj.handleUnderlayComplete();
@@ -8656,7 +8883,7 @@
             if (Dom.getStyle(obj.overlay.element, "visibility") == 
                 "hidden" && currentX < x) {
 
-                Dom.setStyle(obj.overlay.element, "visibility", "visible");
+                obj.overlay._setDomVisibility(true);
 
             }
         
@@ -8692,8 +8919,8 @@
         };
         
         slide.handleCompleteAnimateOut = function (type, args, obj) {
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
-        
+            obj.overlay._setDomVisibility(false);
+
             obj.overlay.cfg.setProperty("xy", [x, y]);
             obj.animateOutCompleteEvent.fire();
         };
@@ -8834,4 +9061,4 @@
 
 })();
 
-YAHOO.register("container", YAHOO.widget.Module, {version: "2.6.0", build: "1321"});
+YAHOO.register("container", YAHOO.widget.Module, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/container/container_core-debug.js
===================================================================
--- trunk/root/static/yui/container/container_core-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container_core-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -741,6 +741,7 @@
         Event = YAHOO.util.Event,
         CustomEvent = YAHOO.util.CustomEvent,
         Module = YAHOO.widget.Module,
+        UA = YAHOO.env.ua,
 
         m_oModuleTemplate,
         m_oHeaderTemplate,
@@ -785,24 +786,24 @@
                 value: true, 
                 validator: YAHOO.lang.isBoolean 
             },
-        
-            "EFFECT": { 
-                key: "effect", 
-                suppressEvent: true, 
-                supercedes: ["visible"] 
+
+            "EFFECT": {
+                key: "effect",
+                suppressEvent: true,
+                supercedes: ["visible"]
             },
 
-            "MONITOR_RESIZE": { 
-                key: "monitorresize", 
-                value: true  
+            "MONITOR_RESIZE": {
+                key: "monitorresize",
+                value: true
             },
 
-            "APPEND_TO_DOCUMENT_BODY": { 
-                key: "appendtodocumentbody", 
+            "APPEND_TO_DOCUMENT_BODY": {
+                key: "appendtodocumentbody",
                 value: false
             }
         };
-    
+
     /**
     * Constant representing the prefix path to use for non-secure images
     * @property YAHOO.widget.Module.IMG_ROOT
@@ -866,8 +867,20 @@
     * @type String
     */
     Module.RESIZE_MONITOR_SECURE_URL = "javascript:false;";
-    
+
     /**
+    * Constant representing the buffer amount (in pixels) to use when positioning
+    * the text resize monitor offscreen. The resize monitor is positioned
+    * offscreen by an amount eqaul to its offsetHeight + the buffer value.
+    * 
+    * @property YAHOO.widget.Module.RESIZE_MONITOR_BUFFER
+    * @static
+    * @type Number
+    */
+    // Set to 1, to work around pixel offset in IE8, which increases when zoom is used
+    Module.RESIZE_MONITOR_BUFFER = 1;
+
+    /**
     * Singleton CustomEvent fired when the font size is changed in the browser.
     * Opera's "zoom" functionality currently does not support text 
     * size detection.
@@ -875,6 +888,22 @@
     */
     Module.textResizeEvent = new CustomEvent("textResize");
 
+    /**
+     * Helper utility method, which forces a document level 
+     * redraw for Opera, which can help remove repaint
+     * irregularities after applying DOM changes.
+     *
+     * @method YAHOO.widget.Module.forceDocumentRedraw
+     * @static
+     */
+    Module.forceDocumentRedraw = function() {
+        var docEl = document.documentElement;
+        if (docEl) {
+            docEl.className += " ";
+            docEl.className = YAHOO.lang.trim(docEl.className);
+        }
+    };
+
     function createModuleTemplate() {
 
         if (!m_oModuleTemplate) {
@@ -1223,6 +1252,10 @@
         * called by the constructor, and  sets up all DOM references for 
         * pre-existing markup, and creates required markup if it is not 
         * already present.
+        * <p>
+        * If the element passed in does not have an id, one will be generated
+        * for it.
+        * </p>
         * @method init
         * @param {String} el The element ID representing the Module <em>OR</em>
         * @param {HTMLElement} el The element representing the Module
@@ -1258,12 +1291,9 @@
                 }
             }
 
+            this.id = Dom.generateId(el);
             this.element = el;
 
-            if (el.id) {
-                this.id = el.id;
-            }
-
             child = this.element.firstChild;
 
             if (child) {
@@ -1313,7 +1343,7 @@
         */
         initResizeMonitor: function () {
 
-            var isGeckoWin = (YAHOO.env.ua.gecko && this.platform == "windows");
+            var isGeckoWin = (UA.gecko && this.platform == "windows");
             if (isGeckoWin) {
                 // Help prevent spinning loading icon which 
                 // started with FireFox 2.0.0.8/Win
@@ -1340,7 +1370,7 @@
                 Module.textResizeEvent.fire();
             }
 
-            if (!YAHOO.env.ua.opera) {
+            if (!UA.opera) {
                 oIFrame = Dom.get("_yuiResizeMonitor");
 
                 var supportsCWResize = this._supportsCWResize();
@@ -1348,7 +1378,7 @@
                 if (!oIFrame) {
                     oIFrame = document.createElement("iframe");
 
-                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && YAHOO.env.ua.ie) {
+                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && UA.ie) {
                         oIFrame.src = Module.RESIZE_MONITOR_SECURE_URL;
                     }
 
@@ -1384,10 +1414,10 @@
                         db.appendChild(oIFrame);
                     }
 
-                    oIFrame.style.width = "10em";
-                    oIFrame.style.height = "10em";
-                    oIFrame.style.top = (-1 * oIFrame.offsetHeight) + "px";
-                    oIFrame.style.left = (-1 * oIFrame.offsetWidth) + "px";
+                    oIFrame.style.width = "2em";
+                    oIFrame.style.height = "2em";
+                    oIFrame.style.top = (-1 * (oIFrame.offsetHeight + Module.RESIZE_MONITOR_BUFFER)) + "px";
+                    oIFrame.style.left = "0";
                     oIFrame.style.borderWidth = "0";
                     oIFrame.style.visibility = "visible";
 
@@ -1395,7 +1425,7 @@
                        Don't open/close the document for Gecko like we used to, since it
                        leads to duplicate cookies. (See SourceForge bug #1721755)
                     */
-                    if (YAHOO.env.ua.webkit) {
+                    if (UA.webkit) {
                         oDoc = oIFrame.contentWindow.document;
                         oDoc.open();
                         oDoc.close();
@@ -1436,22 +1466,11 @@
                 Gecko 1.8.1.6+ (FF2.0.0.6+) and all other browsers will fire resize on contentWindow.
 
                 We don't want to start sniffing for patch versions, so fire textResize the same
-                way on all FF, until 1.9 (3.x) is out
+                way on all FF2 flavors
              */
             var bSupported = true;
-            if (YAHOO.env.ua.gecko && YAHOO.env.ua.gecko <= 1.8) {
+            if (UA.gecko && UA.gecko <= 1.8) {
                 bSupported = false;
-                /*
-                var v = navigator.userAgent.match(/rv:([^\s\)]*)/); // From YAHOO.env.ua
-                if (v && v[0]) {
-                    var sv = v[0].match(/\d\.\d\.(\d)/);
-                    if (sv && sv[1]) {
-                        if (parseInt(sv[1], 10) > 0) {
-                            bSupported = true;
-                        }
-                    }
-                }
-                */
             }
             return bSupported;
         },
@@ -1464,12 +1483,10 @@
         */
         onDomResize: function (e, obj) {
 
-            var nLeft = -1 * this.resizeMonitor.offsetWidth,
-                nTop = -1 * this.resizeMonitor.offsetHeight;
-        
+            var nTop = -1 * (this.resizeMonitor.offsetHeight + Module.RESIZE_MONITOR_BUFFER);
+
             this.resizeMonitor.style.top = nTop + "px";
-            this.resizeMonitor.style.left =  nLeft + "px";
-
+            this.resizeMonitor.style.left = "0";
         },
 
         /**
@@ -1719,8 +1736,7 @@
         */
         destroy: function () {
 
-            var parent,
-                e;
+            var parent;
 
             if (this.element) {
                 Event.purgeElement(this.element, true);
@@ -1789,7 +1805,7 @@
                 this.hideEvent.fire();
             }
         },
-        
+
         /**
         * Default event handler for the "monitorresize" configuration property
         * @param {String} type The CustomEvent type (usually the property name)
@@ -1882,6 +1898,7 @@
 
         _SUBSCRIBE = "subscribe",
         _UNSUBSCRIBE = "unsubscribe",
+        _CONTAINED = "contained",
 
         m_oIFrameTemplate,
 
@@ -1935,7 +1952,6 @@
             "FIXED_CENTER": { 
                 key: "fixedcenter", 
                 value: false, 
-                validator: Lang.isBoolean, 
                 supercedes: ["iframe", "visible"] 
             },
 
@@ -1953,7 +1969,6 @@
 
             "AUTO_FILL_HEIGHT" : {
                 key: "autofillheight",
-                supressEvent: true,
                 supercedes: ["height"],
                 value:"body"
             },
@@ -1976,14 +1991,14 @@
                 validator: Lang.isBoolean, 
                 supercedes: ["zindex"] 
             },
-            
+
             "PREVENT_CONTEXT_OVERLAP": {
                 key: "preventcontextoverlap",
                 value: false,
                 validator: Lang.isBoolean,  
                 supercedes: ["constraintoviewport"]
             }
-            
+
         };
 
     /**
@@ -2395,10 +2410,47 @@
             });
 
             /**
-            * True if the Overlay should be anchored to the center of 
-            * the viewport.
+            * Determines whether or not the Overlay should be anchored 
+            * to the center of the viewport.
+            * 
+            * <p>This property can be set to:</p>
+            * 
+            * <dl>
+            * <dt>true</dt>
+            * <dd>
+            * To enable fixed center positioning
+            * <p>
+            * When enabled, the overlay will 
+            * be positioned in the center of viewport when initially displayed, and 
+            * will remain in the center of the viewport whenever the window is 
+            * scrolled or resized.
+            * </p>
+            * <p>
+            * If the overlay is too big for the viewport, 
+            * it's top left corner will be aligned with the top left corner of the viewport.
+            * </p>
+            * </dd>
+            * <dt>false</dt>
+            * <dd>
+            * To disable fixed center positioning.
+            * <p>In this case the overlay can still be 
+            * centered as a one-off operation, by invoking the <code>center()</code> method,
+            * however it will not remain centered when the window is scrolled/resized.
+            * </dd>
+            * <dt>"contained"<dt>
+            * <dd>To enable fixed center positioning, as with the <code>true</code> option.
+            * <p>However, unlike setting the property to <code>true</code>, 
+            * when the property is set to <code>"contained"</code>, if the overlay is 
+            * too big for the viewport, it will not get automatically centered when the 
+            * user scrolls or resizes the window (until the window is large enough to contain the 
+            * overlay). This is useful in cases where the Overlay has both header and footer 
+            * UI controls which the user may need to access.
+            * </p>
+            * </dd>
+            * </dl>
+            *
             * @config fixedcenter
-            * @type Boolean
+            * @type Boolean | String
             * @default false
             */
             cfg.addProperty(DEFAULT_CONFIG.FIXED_CENTER.key, {
@@ -2444,7 +2496,6 @@
                 handler: this.configAutoFillHeight, 
                 value : DEFAULT_CONFIG.AUTO_FILL_HEIGHT.value,
                 validator : this._validateAutoFill,
-                suppressEvent: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.suppressEvent, 
                 supercedes: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.supercedes
             });
 
@@ -2543,6 +2594,23 @@
             Dom.replaceClass(this.element, "hide-scrollbars", "show-scrollbars");
         },
 
+        /**
+         * Internal implementation to set the visibility of the overlay in the DOM.
+         *
+         * @method _setDomVisibility
+         * @param {boolean} visible Whether to show or hide the Overlay's outer element
+         * @protected
+         */
+        _setDomVisibility : function(show) {
+            Dom.setStyle(this.element, "visibility", (show) ? "visible" : "hidden");
+
+            if (show) {
+                Dom.removeClass(this.element, "yui-overlay-hidden");
+            } else {
+                Dom.addClass(this.element, "yui-overlay-hidden");
+            }
+        },
+
         // BEGIN BUILT-IN PROPERTY EVENT HANDLERS //
         /**
         * The default event handler fired when the "visible" property is 
@@ -2573,8 +2641,8 @@
                 while (e.nodeType != 9 && e.nodeType != 11) {
                     currentVis = Dom.getStyle(e, "visibility");
 
-                    if (currentVis != "inherit") { 
-                        break; 
+                    if (currentVis != "inherit") {
+                        break;
                     }
 
                     e = e.parentNode;
@@ -2601,7 +2669,6 @@
                 }
             }
 
-
             if (visible) { // Show
                 if (isMacGecko) {
                     this.showMacGeckoScrollbars();
@@ -2635,10 +2702,12 @@
                     if (currentVis != "visible" || currentVis === "") {
                         this.beforeShowEvent.fire();
 
-                        Dom.setStyle(this.element, "visibility", "visible");
+                        this._setDomVisibility(true);
 
                         this.cfg.refireEvent("iframe");
                         this.showEvent.fire();
+                    } else {
+                        this._setDomVisibility(true);
                     }
                 }
             } else { // Hide
@@ -2646,7 +2715,7 @@
                 if (isMacGecko) {
                     this.hideMacGeckoScrollbars();
                 }
-                    
+
                 if (effect) { // Animate out if showing
                     if (currentVis == "visible") {
                         this.beforeHideEvent.fire();
@@ -2672,32 +2741,59 @@
                         }
 
                     } else if (currentVis === "") {
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                     }
 
                 } else { // Simple hide
 
                     if (currentVis == "visible" || currentVis === "") {
                         this.beforeHideEvent.fire();
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                         this.hideEvent.fire();
+                    } else {
+                        this._setDomVisibility(false);
                     }
                 }
             }
         },
 
         /**
-        * Center event handler used for centering on scroll/resize, but only if 
-        * the Overlay is visible
+        * Fixed center event handler used for centering on scroll/resize, but only if 
+        * the overlay is visible and, if "fixedcenter" is set to "contained", only if 
+        * the overlay fits within the viewport.
+        *
         * @method doCenterOnDOMEvent
         */
         doCenterOnDOMEvent: function () {
-            if (this.cfg.getProperty("visible")) {
-                this.center();
+            var cfg = this.cfg,
+                fc = cfg.getProperty("fixedcenter");
+
+            if (cfg.getProperty("visible")) {
+                if (fc && (fc !== _CONTAINED || this.fitsInViewport())) {
+                    this.center();
+                }
             }
         },
 
         /**
+         * Determines if the Overlay (including the offset value defined by Overlay.VIEWPORT_OFFSET) 
+         * will fit entirely inside the viewport, in both dimensions - width and height.
+         * 
+         * @method fitsInViewport
+         * @return boolean true if the Overlay will fit, false if not
+         */
+        fitsInViewport : function() {
+            var nViewportOffset = Overlay.VIEWPORT_OFFSET,
+                element = this.element,
+                elementWidth = element.offsetWidth,
+                elementHeight = element.offsetHeight,
+                viewportWidth = Dom.getViewportWidth(),
+                viewportHeight = Dom.getViewportHeight();
+
+            return ((elementWidth + nViewportOffset < viewportWidth) && (elementHeight + nViewportOffset < viewportHeight));
+        },
+
+        /**
         * The default event handler fired when the "fixedcenter" property 
         * is changed.
         * @method configFixedCenter
@@ -2717,7 +2813,7 @@
             if (val) {
                 this.center();
 
-                if (!alreadySubscribed(this.beforeShowEvent, this.center, this)) {
+                if (!alreadySubscribed(this.beforeShowEvent, this.center)) {
                     this.beforeShowEvent.subscribe(this.center);
                 }
 
@@ -2736,7 +2832,7 @@
                 windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent, this);
             }
         },
-        
+
         /**
         * The default event handler fired when the "height" property is changed.
         * @method configHeight
@@ -2767,22 +2863,28 @@
          */
         configAutoFillHeight: function (type, args, obj) {
             var fillEl = args[0],
-                currEl = this.cfg.getProperty("autofillheight");
+                cfg = this.cfg,
+                autoFillHeight = "autofillheight",
+                height = "height",
+                currEl = cfg.getProperty(autoFillHeight),
+                autoFill = this._autoFillOnHeightChange;
 
-            this.cfg.unsubscribeFromConfigEvent("height", this._autoFillOnHeightChange);
-            Module.textResizeEvent.unsubscribe("height", this._autoFillOnHeightChange);
+            cfg.unsubscribeFromConfigEvent(height, autoFill);
+            Module.textResizeEvent.unsubscribe(autoFill);
+            this.changeContentEvent.unsubscribe(autoFill);
 
             if (currEl && fillEl !== currEl && this[currEl]) {
-                Dom.setStyle(this[currEl], "height", "");
+                Dom.setStyle(this[currEl], height, "");
             }
 
             if (fillEl) {
                 fillEl = Lang.trim(fillEl.toLowerCase());
 
-                this.cfg.subscribeToConfigEvent("height", this._autoFillOnHeightChange, this[fillEl], this);
-                Module.textResizeEvent.subscribe(this._autoFillOnHeightChange, this[fillEl], this);
+                cfg.subscribeToConfigEvent(height, autoFill, this[fillEl], this);
+                Module.textResizeEvent.subscribe(autoFill, this[fillEl], this);
+                this.changeContentEvent.subscribe(autoFill, this[fillEl], this);
 
-                this.cfg.setProperty("autofillheight", fillEl, true);
+                cfg.setProperty(autoFillHeight, fillEl, true);
             }
         },
 
@@ -3059,6 +3161,7 @@
                         m_oIFrameTemplate.style.margin = "0";
                         m_oIFrameTemplate.style.padding = "0";
                         m_oIFrameTemplate.style.display = "none";
+                        m_oIFrameTemplate.tabIndex = -1;
                     }
 
                     oIFrame = m_oIFrameTemplate.cloneNode(false);
@@ -3430,8 +3533,8 @@
                 nLeftRegionWidth,
                 nRightRegionWidth,
 
-                leftConstraint,
-                rightConstraint,
+                leftConstraint = scrollX + nViewportOffset,
+                rightConstraint = scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset,
 
                 xNew = x,
 
@@ -3523,42 +3626,52 @@
             
             };
 
+            // Determine if the current value for the Overlay's "x" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
+            
+            if (x < leftConstraint || x > rightConstraint) {
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-				oOverlapPositions[(aContext[1] + aContext[2])]) {
+                // The current value for the Overlay's "x" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
                 if (bCanConstrain) {
 
-                    oContextEl = aContext[0];
-                    nContextElX = Dom.getX(oContextEl) - scrollX;
-                    nContextElWidth = oContextEl.offsetWidth;
-                    nLeftRegionWidth = nContextElX;
-                    nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
     
-                    setHorizontalPosition();
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElX = Dom.getX(oContextEl) - scrollX;
+                        nContextElWidth = oContextEl.offsetWidth;
+                        nLeftRegionWidth = nContextElX;
+                        nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+        
+                        setHorizontalPosition();
+                        
+                        xNew = this.cfg.getProperty("x");
+                    
+                    }
+                    else {
 
-                }
-                
-                xNew = this.cfg.getProperty("x");
-            
-            }
-            else {
+                        if (x < leftConstraint) {
+                            xNew = leftConstraint;
+                        } else if (x > rightConstraint) {
+                            xNew = rightConstraint;
+                        }
 
-                if (bCanConstrain) {
-    
-                    leftConstraint = scrollX + nViewportOffset;
-                    rightConstraint = 
-                        scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset;
-    
-                    if (x < leftConstraint) {
-                        xNew = leftConstraint;
-                    } else if (x > rightConstraint) {
-                        xNew = rightConstraint;
                     }
+
                 } else {
+                    //	The "x" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "x" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.                
                     xNew = nViewportOffset + scrollX;
                 }
-            
+
             }
 
             return xNew;
@@ -3596,8 +3709,8 @@
                 nTopRegionHeight,
                 nBottomRegionHeight,
 
-                topConstraint,
-                bottomConstraint,
+                topConstraint = scrollY + nViewportOffset,
+                bottomConstraint = scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset,
 
                 yNew = y,
                 
@@ -3688,42 +3801,56 @@
             };
 
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-            	oOverlapPositions[(aContext[1] + aContext[2])]) {
+            // Determine if the current value for the Overlay's "y" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
 
-                if (bCanConstrain) {
+            if (y < topConstraint || y  > bottomConstraint) {
+        
+                // The current value for the Overlay's "y" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
-                    oContextEl = aContext[0];
-                    nContextElHeight = oContextEl.offsetHeight;
-                    nContextElY = (Dom.getY(oContextEl) - scrollY);
-    
-                    nTopRegionHeight = nContextElY;
-                    nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
-    
-                    setVerticalPosition();
-                
-                }
+                if (bCanConstrain) {	
 
-                yNew = oOverlay.cfg.getProperty("y");
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
+        
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElHeight = oContextEl.offsetHeight;
+                        nContextElY = (Dom.getY(oContextEl) - scrollY);
+        
+                        nTopRegionHeight = nContextElY;
+                        nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+        
+                        setVerticalPosition();
+        
+                        yNew = oOverlay.cfg.getProperty("y");
+        
+                    }
+                    else {
 
-            }
-            else {
-
-                if (bCanConstrain) {
-    
-                    topConstraint = scrollY + nViewportOffset;
-                    bottomConstraint = 
-                        scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset;
-    
-                    if (y < topConstraint) {
-                        yNew  = topConstraint;
-                    } else if (y  > bottomConstraint) {
-                        yNew  = bottomConstraint;
+                        if (y < topConstraint) {
+                            yNew  = topConstraint;
+                        } else if (y  > bottomConstraint) {
+                            yNew  = bottomConstraint;
+                        }
+                    
                     }
-                } else {
+                
+                }
+                else {
+                
+                    //	The "y" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "y" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.
+                
                     yNew = nViewportOffset + scrollY;
                 }
-
+        
             }
 
             return yNew;
@@ -3771,6 +3898,10 @@
 
             this.cfg.setProperty("xy", [parseInt(x, 10), parseInt(y, 10)]);
             this.cfg.refireEvent("iframe");
+
+            if (UA.webkit) {
+                this.forceContainerRedraw();
+            }
         },
 
         /**
@@ -3865,7 +3996,10 @@
          * out the containers height
          */
         _autoFillOnHeightChange : function(type, args, el) {
-            this.fillHeight(el);
+            var height = this.cfg.getProperty("height");
+            if ((height && height !== "auto") || (height === 0)) {
+                this.fillHeight(el);
+            }
         },
 
         /**
@@ -3941,13 +4075,13 @@
                         Dom.removeClass(container, "yui-override-padding");
                     }
     
-                    remaining = total - filled;
+                    remaining = Math.max(total - filled, 0);
     
                     Dom.setStyle(el, "height", remaining + "px");
     
                     // Re-adjust height if required, to account for el padding and border
                     if (el.offsetHeight != remaining) {
-                        remaining = remaining - (el.offsetHeight - remaining);
+                        remaining = Math.max(remaining - (el.offsetHeight - remaining), 0);
                     }
                     Dom.setStyle(el, "height", remaining + "px");
                 }
@@ -4049,6 +4183,26 @@
         },
 
         /**
+         * Can be used to force the container to repaint/redraw it's contents.
+         * <p>
+         * By default applies and then removes a 1px bottom margin through the 
+         * application/removal of a "yui-force-redraw" class.
+         * </p>
+         * <p>
+         * It is currently used by Overlay to force a repaint for webkit 
+         * browsers, when centering.
+         * </p>
+         * @method forceContainerRedraw
+         */
+        forceContainerRedraw : function() {
+            var c = this;
+            Dom.addClass(c.element, "yui-force-redraw");
+            setTimeout(function() {
+                Dom.removeClass(c.element, "yui-force-redraw");
+            }, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Overlay.
@@ -4495,8 +4649,7 @@
         */
         register: function (overlay) {
 
-            var zIndex,
-                registered = false,
+            var registered = false,
                 i,
                 n;
 
@@ -4792,7 +4945,7 @@
 
             obj.handleUnderlayStart();
 
-            Dom.setStyle(obj.overlay.element, "visibility", "visible");
+            obj.overlay._setDomVisibility(true);
             Dom.setStyle(obj.overlay.element, "opacity", 0);
         };
 
@@ -4819,7 +4972,7 @@
             if (obj.overlay.element.style.filter) {
                 obj.overlay.element.style.filter = null;
             }
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
+            obj.overlay._setDomVisibility(false);
             Dom.setStyle(obj.overlay.element, "opacity", 1);
 
             obj.handleUnderlayComplete();
@@ -4878,7 +5031,7 @@
             if (Dom.getStyle(obj.overlay.element, "visibility") == 
                 "hidden" && currentX < x) {
 
-                Dom.setStyle(obj.overlay.element, "visibility", "visible");
+                obj.overlay._setDomVisibility(true);
 
             }
         
@@ -4914,8 +5067,8 @@
         };
         
         slide.handleCompleteAnimateOut = function (type, args, obj) {
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
-        
+            obj.overlay._setDomVisibility(false);
+
             obj.overlay.cfg.setProperty("xy", [x, y]);
             obj.animateOutCompleteEvent.fire();
         };
@@ -5056,4 +5209,4 @@
 
 })();
 
-YAHOO.register("containercore", YAHOO.widget.Module, {version: "2.6.0", build: "1321"});
+YAHOO.register("containercore", YAHOO.widget.Module, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/container/container_core-min.js
===================================================================
--- trunk/root/static/yui/container/container_core-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container_core-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,13 +1,13 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.!
 unsubscribeAll();this.configChangedEvent=null;this.owner=null;!
 this.con
fig=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(Q,P){if(Q){this.init(Q,P);}else{}};var F=YAHOO.util.Dom,D=YAHOO.util.Config,M=YAHOO.util.Event,L=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,H,O,N,E,A={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTORY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},I={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"monitorresize",valu!
 e:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};G.IMG_ROOT=null;G.IMG_ROOT_SSL=null;G.CSS_MODULE="yui-module";G.CSS_HEADER="hd";G.CSS_BODY="bd";G.CSS_FOOTER="ft";G.RESIZE_MONITOR_SECURE_URL="javascript:false;";G.textResizeEvent=new L("textResize");function K(){if(!H){H=document.createElement("div");H.innerHTML=('<div class="'+G.CSS_HEADER+'"></div>'+'<div class="'+G.CSS_BODY+'"></div><div class="'+G.CSS_FOOTER+'"></div>');O=H.firstChild;N=O.nextSibling;E=N.nextSibling;}return H;}function J(){if(!O){K();}return(O.cloneNode(false));}function B(){if(!N){K();}return(N.cloneNode(false));}function C(){if(!E){K();}return(E.cloneNode(false));}G.prototype={constructor:G,element:null,header:null,body:null,footer:null,id:null,imageRoot:G.IMG_ROOT,initEvents:function(){var P=L.LIST;this.beforeInitEvent=this.createEvent(A.BEFORE_INIT);this.beforeInitEvent.signature=P;this.initEvent=this.createEvent(A.INIT);
-this.initEvent.signature=P;this.appendEvent=this.createEvent(A.APPEND);this.appendEvent.signature=P;this.beforeRenderEvent=this.createEvent(A.BEFORE_RENDER);this.beforeRenderEvent.signature=P;this.renderEvent=this.createEvent(A.RENDER);this.renderEvent.signature=P;this.changeHeaderEvent=this.createEvent(A.CHANGE_HEADER);this.changeHeaderEvent.signature=P;this.changeBodyEvent=this.createEvent(A.CHANGE_BODY);this.changeBodyEvent.signature=P;this.changeFooterEvent=this.createEvent(A.CHANGE_FOOTER);this.changeFooterEvent.signature=P;this.changeContentEvent=this.createEvent(A.CHANGE_CONTENT);this.changeContentEvent.signature=P;this.destroyEvent=this.createEvent(A.DESTORY);this.destroyEvent.signature=P;this.beforeShowEvent=this.createEvent(A.BEFORE_SHOW);this.beforeShowEvent.signature=P;this.showEvent=this.createEvent(A.SHOW);this.showEvent.signature=P;this.beforeHideEvent=this.createEvent(A.BEFORE_HIDE);this.beforeHideEvent.signature=P;this.hideEvent=this.createEvent(A.HIDE);thi!
 s.hideEvent.signature=P;},platform:function(){var P=navigator.userAgent.toLowerCase();if(P.indexOf("windows")!=-1||P.indexOf("win32")!=-1){return"windows";}else{if(P.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var P=navigator.userAgent.toLowerCase();if(P.indexOf("opera")!=-1){return"opera";}else{if(P.indexOf("msie 7")!=-1){return"ie7";}else{if(P.indexOf("msie")!=-1){return"ie";}else{if(P.indexOf("safari")!=-1){return"safari";}else{if(P.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(I.VISIBLE.key,{handler:this.configVisible,value:I.VISIBLE.value,validator:I.VISIBLE.validator});this.cfg.addProperty(I.EFFECT.key,{suppressEvent:I.EFFECT.suppressEvent,supercedes:I.EFFECT.supercedes});this.cfg.addProperty(I.MONITOR_RESIZE.key,{handler:this.configMonitorResize,val!
 ue:I.MONITOR_RESIZE.value});this.cfg.addProperty(I.APPEND_TO_D!
 OCUMENT_
BODY.key,{value:I.APPEND_TO_DOCUMENT_BODY.value});},init:function(U,T){var R,V;this.initEvents();this.beforeInitEvent.fire(G);this.cfg=new D(this);if(this.isSecure){this.imageRoot=G.IMG_ROOT_SSL;}if(typeof U=="string"){R=U;U=document.getElementById(U);if(!U){U=(K()).cloneNode(false);U.id=R;}}this.element=U;if(U.id){this.id=U.id;}V=this.element.firstChild;if(V){var Q=false,P=false,S=false;do{if(1==V.nodeType){if(!Q&&F.hasClass(V,G.CSS_HEADER)){this.header=V;Q=true;}else{if(!P&&F.hasClass(V,G.CSS_BODY)){this.body=V;P=true;}else{if(!S&&F.hasClass(V,G.CSS_FOOTER)){this.footer=V;S=true;}}}}}while((V=V.nextSibling));}this.initDefaultConfig();F.addClass(this.element,G.CSS_MODULE);if(T){this.cfg.applyConfig(T,true);}if(!D.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEvent.fire(G);},initResizeMonitor:function(){var Q=(YAHOO.env.ua.gecko&&this.platform=="windows");if(Q){var P=this;setTimeout(fun!
 ction(){P._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var P,R,T;function V(){G.textResizeEvent.fire();}if(!YAHOO.env.ua.opera){R=F.get("_yuiResizeMonitor");var U=this._supportsCWResize();if(!R){R=document.createElement("iframe");if(this.isSecure&&G.RESIZE_MONITOR_SECURE_URL&&YAHOO.env.ua.ie){R.src=G.RESIZE_MONITOR_SECURE_URL;}if(!U){T=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");R.src="data:text/html;charset=utf-8,"+encodeURIComponent(T);}R.id="_yuiResizeMonitor";R.title="Text Resize Monitor";R.style.position="absolute";R.style.visibility="hidden";var Q=document.body,S=Q.firstChild;if(S){Q.insertBefore(R,S);}else{Q.appendChild(R);}R.style.width="10em";R.style.height="10em";R.style.top=(-1*R.offsetHeight)+"px";R.style.left=(-1*R.offsetWidth)+"px";R.style.borderWidth="0";R.style.v!
 isibility="visible";if(YAHOO.env.ua.webkit){P=R.contentWindow.!
 document
;P.open();P.close();}}if(R&&R.contentWindow){G.textResizeEvent.subscribe(this.onDomResize,this,true);if(!G.textResizeInitialized){if(U){if(!M.on(R.contentWindow,"resize",V)){M.on(R,"resize",V);}}G.textResizeInitialized=true;}this.resizeMonitor=R;}}},_supportsCWResize:function(){var P=true;if(YAHOO.env.ua.gecko&&YAHOO.env.ua.gecko<=1.8){P=false;}return P;},onDomResize:function(S,R){var Q=-1*this.resizeMonitor.offsetWidth,P=-1*this.resizeMonitor.offsetHeight;this.resizeMonitor.style.top=P+"px";this.resizeMonitor.style.left=Q+"px";},setHeader:function(Q){var P=this.header||(this.header=J());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML=Q;}this.changeHeaderEvent.fire(Q);this.changeContentEvent.fire();},appendToHeader:function(Q){var P=this.header||(this.header=J());P.appendChild(Q);this.changeHeaderEvent.fire(Q);this.changeContentEvent.fire();},setBody:function(Q){var P=this.body||(this.body=B());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML!
 =Q;}this.changeBodyEvent.fire(Q);this.changeContentEvent.fire();},appendToBody:function(Q){var P=this.body||(this.body=B());P.appendChild(Q);this.changeBodyEvent.fire(Q);this.changeContentEvent.fire();},setFooter:function(Q){var P=this.footer||(this.footer=C());if(Q.nodeName){P.innerHTML="";P.appendChild(Q);}else{P.innerHTML=Q;}this.changeFooterEvent.fire(Q);this.changeContentEvent.fire();},appendToFooter:function(Q){var P=this.footer||(this.footer=C());P.appendChild(Q);this.changeFooterEvent.fire(Q);this.changeContentEvent.fire();},render:function(R,P){var S=this,T;function Q(U){if(typeof U=="string"){U=document.getElementById(U);}if(U){S._addToParent(U,S.element);S.appendEvent.fire();}}this.beforeRenderEvent.fire();if(!P){P=this.element;}if(R){Q(R);}else{if(!F.inDocument(this.element)){return false;}}if(this.header&&!F.inDocument(this.header)){T=P.firstChild;if(T){P.insertBefore(this.header,T);}else{P.appendChild(this.header);
-}}if(this.body&&!F.inDocument(this.body)){if(this.footer&&F.isAncestor(this.moduleElement,this.footer)){P.insertBefore(this.body,this.footer);}else{P.appendChild(this.body);}}if(this.footer&&!F.inDocument(this.footer)){P.appendChild(this.footer);}this.renderEvent.fire();return true;},destroy:function(){var P,Q;if(this.element){M.purgeElement(this.element,true);P=this.element.parentNode;}if(P){P.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;G.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(Q,P,R){var S=P[0];if(S){this.beforeShowEvent.fire();F.setStyle(this.element,"display","block");this.showEvent.fire();}else{this.beforeHideEvent.fire();F.setStyle(this.element,"display","none");this.hideEvent.fire();}},configMonitorResize:function(R,!
 Q,S){var P=Q[0];if(P){this.initResizeMonitor();}else{G.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(P,Q){if(!this.cfg.getProperty("appendtodocumentbody")&&P===document.body&&P.firstChild){P.insertBefore(Q,P.firstChild);}else{P.appendChild(Q);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(G,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(O,N){YAHOO.widget.Overlay.superclass.constructor.call(this,O,N);};var H=YAHOO.lang,L=YAHOO.util.CustomEvent,F=YAHOO.widget.Module,M=YAHOO.util.Event,E=YAHOO.util.Dom,C=YAHOO.util.Config,J=YAHOO.env.ua,B=YAHOO.widget.Overlay,G="subscribe",D="unsubscribe",I,A={"BEFORE_MOVE":"beforeMove","MOVE":"move"},K={"X":{key:"x",validator:H.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:H.isNumber,suppressEvent:true,supercedes:["iframe"]},"XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONTEXT":{key:"context"!
 ,suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key!
 :"fixedc
enter",value:false,validator:H.isBoolean,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supressEvent:true,supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:H.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(J.ie==6?true:false),validator:H.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:H.isBoolean,supercedes:["constraintoviewport"]}};B.IFRAME_SRC="javascript:false;";B.IFRAME_OFFSET=3;B.VIEWPORT_OFFSET=10;B.TOP_LEFT="tl";B.TOP_RIGHT="tr";B.BOTTOM_LEFT="bl";B.BOTTOM_RIGHT="br";B.CSS_OVERLAY="yui-overlay";B.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;B.windowScrollEvent=new L("windowScroll");B.wind!
 owResizeEvent=new L("windowResize");B.windowScrollHandler=function(O){var N=M.getTarget(O);if(!N||N===window||N===window.document){if(J.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){B.windowScrollEvent.fire();},1);}else{B.windowScrollEvent.fire();}}};B.windowResizeHandler=function(N){if(J.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){B.windowResizeEvent.fire();},100);}else{B.windowResizeEvent.fire();}};B._initialized=null;if(B._initialized===null){M.on(window,"scroll",B.windowScrollHandler);M.on(window,"resize",B.windowResizeHandler);B._initialized=true;}B._TRIGGER_MAP={"windowScroll":B.windowScrollEvent,"windowResize":B.windowResizeEvent,"textResize":F.textResizeEvent};YAHOO.extend(B,F,{CONTEXT_TRIGGERS:[],init:function(O,N){B.superclass.init.call(this,O);this.beforeInitEvent.fire(B);E.addClass(this.element,B.CSS_OVERLAY);if(N){this.!
 cfg.applyConfig(N,true);}if(this.platform=="mac"&&J.gecko){if(!
 !C.alrea
dySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!C.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(B);},initEvents:function(){B.superclass.initEvents.call(this);var N=L.LIST;this.beforeMoveEvent=this.createEvent(A.BEFORE_MOVE);this.beforeMoveEvent.signature=N;this.moveEvent=this.createEvent(A.MOVE);this.moveEvent.signature=N;},initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);var N=this.cfg;N.addProperty(K.X.key,{handler:this.configX,validator:K.X.validator,suppressEvent:K.X.suppressEvent,supercedes:K.X.supercedes});N.addProperty(K.Y.key,{handler:this.configY,validator:K.Y.validator,suppressEvent:K.Y.suppressEvent,supercedes:K.Y.supercedes});N.addProperty(K.XY.key,{handler:this.configXY,suppressEvent:K.XY.suppressEvent,supercedes:K.XY.supercedes});N.addProperty(K.CONTE!
 XT.key,{handler:this.configContext,suppressEvent:K.CONTEXT.suppressEvent,supercedes:K.CONTEXT.supercedes});N.addProperty(K.FIXED_CENTER.key,{handler:this.configFixedCenter,value:K.FIXED_CENTER.value,validator:K.FIXED_CENTER.validator,supercedes:K.FIXED_CENTER.supercedes});N.addProperty(K.WIDTH.key,{handler:this.configWidth,suppressEvent:K.WIDTH.suppressEvent,supercedes:K.WIDTH.supercedes});N.addProperty(K.HEIGHT.key,{handler:this.configHeight,suppressEvent:K.HEIGHT.suppressEvent,supercedes:K.HEIGHT.supercedes});N.addProperty(K.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:K.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,suppressEvent:K.AUTO_FILL_HEIGHT.suppressEvent,supercedes:K.AUTO_FILL_HEIGHT.supercedes});N.addProperty(K.ZINDEX.key,{handler:this.configzIndex,value:K.ZINDEX.value});N.addProperty(K.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:K.CONSTRAIN_TO_VIEWPORT.value,validator:K.CONSTRAIN_TO_VIEWPORT.validator,superc!
 edes:K.CONSTRAIN_TO_VIEWPORT.supercedes});
-N.addProperty(K.IFRAME.key,{handler:this.configIframe,value:K.IFRAME.value,validator:K.IFRAME.validator,supercedes:K.IFRAME.supercedes});N.addProperty(K.PREVENT_CONTEXT_OVERLAP.key,{value:K.PREVENT_CONTEXT_OVERLAP.value,validator:K.PREVENT_CONTEXT_OVERLAP.validator,supercedes:K.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(N,O){this.cfg.setProperty("xy",[N,O]);},hideMacGeckoScrollbars:function(){E.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){E.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},configVisible:function(Q,N,W){var P=N[0],R=E.getStyle(this.element,"visibility"),X=this.cfg.getProperty("effect"),U=[],T=(this.platform=="mac"&&J.gecko),f=C.alreadySubscribed,V,O,d,b,a,Z,c,Y,S;if(R=="inherit"){d=this.element.parentNode;while(d.nodeType!=9&&d.nodeType!=11){R=E.getStyle(d,"visibility");if(R!="inherit"){break;}d=d.parentNode;}if(R=="inherit"){R="visible";}}if(X){if(X instanceof Array){Y=X.length!
 ;for(b=0;b<Y;b++){V=X[b];U[U.length]=V.effect(this,V.duration);}}else{U[U.length]=X.effect(this,X.duration);}}if(P){if(T){this.showMacGeckoScrollbars();}if(X){if(P){if(R!="visible"||R===""){this.beforeShowEvent.fire();S=U.length;for(a=0;a<S;a++){O=U[a];if(a===0&&!f(O.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){O.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}O.animateIn();}}}}else{if(R!="visible"||R===""){this.beforeShowEvent.fire();E.setStyle(this.element,"visibility","visible");this.cfg.refireEvent("iframe");this.showEvent.fire();}}}else{if(T){this.hideMacGeckoScrollbars();}if(X){if(R=="visible"){this.beforeHideEvent.fire();S=U.length;for(Z=0;Z<S;Z++){c=U[Z];if(Z===0&&!f(c.animateOutCompleteEvent,this.hideEvent.fire,this.hideEvent)){c.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,true);}c.animateOut();}}else{if(R===""){E.setStyle(this.element,"visibility","hidden");}}}else{if(R=="visible"||R===""){this.bef!
 oreHideEvent.fire();E.setStyle(this.element,"visibility","hidd!
 en");thi
s.hideEvent.fire();}}}},doCenterOnDOMEvent:function(){if(this.cfg.getProperty("visible")){this.center();}},configFixedCenter:function(R,P,S){var T=P[0],O=C.alreadySubscribed,Q=B.windowResizeEvent,N=B.windowScrollEvent;if(T){this.center();if(!O(this.beforeShowEvent,this.center,this)){this.beforeShowEvent.subscribe(this.center);}if(!O(Q,this.doCenterOnDOMEvent,this)){Q.subscribe(this.doCenterOnDOMEvent,this,true);}if(!O(N,this.doCenterOnDOMEvent,this)){N.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowEvent.unsubscribe(this.center);Q.unsubscribe(this.doCenterOnDOMEvent,this);N.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(Q,O,R){var N=O[0],P=this.element;E.setStyle(P,"height",N);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(Q,P,R){var O=P[0],N=this.cfg.getProperty("autofillheight");this.cfg.unsubscribeFromConfigEvent("height",this._autoFillOnHeightChange);F.textResizeEvent.unsubscribe("height",this._autoFillOnHeightChang!
 e);if(N&&O!==N&&this[N]){E.setStyle(this[N],"height","");}if(O){O=H.trim(O.toLowerCase());this.cfg.subscribeToConfigEvent("height",this._autoFillOnHeightChange,this[O],this);F.textResizeEvent.subscribe(this._autoFillOnHeightChange,this[O],this);this.cfg.setProperty("autofillheight",O,true);}},configWidth:function(Q,N,R){var P=N[0],O=this.element;E.setStyle(O,"width",P);this.cfg.refireEvent("iframe");},configzIndex:function(P,N,Q){var R=N[0],O=this.element;if(!R){R=E.getStyle(O,"zIndex");if(!R||isNaN(R)){R=0;}}if(this.iframe||this.cfg.getProperty("iframe")===true){if(R<=0){R=1;}}E.setStyle(O,"zIndex",R);this.cfg.setProperty("zIndex",R,true);if(this.iframe){this.stackIframe();}},configXY:function(P,O,Q){var S=O[0],N=S[0],R=S[1];this.cfg.setProperty("x",N);this.cfg.setProperty("y",R);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},configX:function(P,O,Q){var N=O[0],R=this.cfg.g!
 etProperty("y");this.cfg.setProperty("x",N,true);this.cfg.setP!
 roperty(
"y",R,true);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");E.setX(this.element,N,true);this.cfg.setProperty("xy",[N,R],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},configY:function(P,O,Q){var N=this.cfg.getProperty("x"),R=O[0];this.cfg.setProperty("x",N,true);this.cfg.setProperty("y",R,true);this.beforeMoveEvent.fire([N,R]);N=this.cfg.getProperty("x");R=this.cfg.getProperty("y");E.setY(this.element,R,true);this.cfg.setProperty("xy",[N,R],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([N,R]);},showIframe:function(){var O=this.iframe,N;if(O){N=this.element.parentNode;if(N!=O.parentNode){this._addToParent(N,O);}O.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var N=this.iframe,P=this.element,R=B.IFRAME_OFFSET,O=(R*2),Q;if(N){N.style.width=(P.offsetWidth+O+"px");N.style.height=(P.offsetHeight+O+"px");Q=this.cfg.getProperty("xy");if(!H!
 .isArray(Q)||(isNaN(Q[0])||isNaN(Q[1]))){this.syncPosition();Q=this.cfg.getProperty("xy");}E.setXY(N,[(Q[0]-R),(Q[1]-R)]);}},stackIframe:function(){if(this.iframe){var N=E.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(N)&&!isNaN(N)){E.setStyle(this.iframe,"zIndex",(N-1));}}},configIframe:function(Q,P,R){var N=P[0];function S(){var U=this.iframe,V=this.element,W;if(!U){if(!I){I=document.createElement("iframe");if(this.isSecure){I.src=B.IFRAME_SRC;}if(J.ie){I.style.filter="alpha(opacity=0)";I.frameBorder=0;}else{I.style.opacity="0";}I.style.position="absolute";I.style.border="none";I.style.margin="0";I.style.padding="0";I.style.display="none";}U=I.cloneNode(false);W=V.parentNode;var T=W||document.body;this._addToParent(T,U);this.iframe=U;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);
-this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function O(){S.call(this);this.beforeShowEvent.unsubscribe(O);this._iframeDeferred=false;}if(N){if(this.cfg.getProperty("visible")){S.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(O);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventListeners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(O,N,P){var Q=N[0];if(Q){if(!C.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!C.alreadySubscribed(this.befo!
 reShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(S,R,O){var V=R[0],P,N,T,Q,U=this.CONTEXT_TRIGGERS;if(V){P=V[0];N=V[1];T=V[2];Q=V[3];if(U&&U.length>0){Q=(Q||[]).concat(U);}if(P){if(typeof P=="string"){this.cfg.setProperty("context",[document.getElementById(P),N,T,Q],true);}if(N&&T){this.align(N,T);}if(this._contextTriggers){this._processTriggers(this._contextTriggers,D,this._alignOnTrigger);}if(Q){this._processTriggers(Q,G,this._alignOnTrigger);this._contextTriggers=Q;}}}},_alignOnTrigger:function(O,N){this.align();},_findTriggerCE:function(N){var O=null;if(N instanceof L){O=N;}else{if(B._TRIGGER_MAP[N]){O=B._TRIGGER_MAP[N];}}return O;},_processTriggers:function(R,T,Q){var P,S;for(var O=0,N=R.length;O<N;++O){P=R[O];S=this._findTriggerCE(P);if(S){S[T](Q,this,true);}else{this[T](P,Q);}}},a!
 lign:function(O,N){var T=this.cfg.getProperty("context"),S=thi!
 s,R,Q,U;
function P(V,W){switch(O){case B.TOP_LEFT:S.moveTo(W,V);break;case B.TOP_RIGHT:S.moveTo((W-Q.offsetWidth),V);break;case B.BOTTOM_LEFT:S.moveTo(W,(V-Q.offsetHeight));break;case B.BOTTOM_RIGHT:S.moveTo((W-Q.offsetWidth),(V-Q.offsetHeight));break;}}if(T){R=T[0];Q=this.element;S=this;if(!O){O=T[1];}if(!N){N=T[2];}if(Q&&R){U=E.getRegion(R);switch(N){case B.TOP_LEFT:P(U.top,U.left);break;case B.TOP_RIGHT:P(U.top,U.right);break;case B.BOTTOM_LEFT:P(U.bottom,U.left);break;case B.BOTTOM_RIGHT:P(U.bottom,U.right);break;}}}},enforceConstraints:function(O,N,P){var R=N[0];var Q=this.getConstrainedXY(R[0],R[1]);this.cfg.setProperty("x",Q[0],true);this.cfg.setProperty("y",Q[1],true);this.cfg.setProperty("xy",Q,true);},getConstrainedX:function(U){var R=this,N=R.element,d=N.offsetWidth,b=B.VIEWPORT_OFFSET,g=E.getViewportWidth(),c=E.getDocumentScrollLeft(),X=(d+b<g),a=this.cfg.getProperty("context"),P,W,i,S=false,e,V,f,O,h=U,T={"tltr":true,"blbr":true,"brbl":true,"trtl":true};var Y=function()!
 {var j;if((R.cfg.getProperty("x")-c)>W){j=(W-d);}else{j=(W+i);}R.cfg.setProperty("x",(j+c),true);return j;};var Q=function(){if((R.cfg.getProperty("x")-c)>W){return(V-b);}else{return(e-b);}};var Z=function(){var j=Q(),k;if(d>j){if(S){Y();}else{Y();S=true;k=Z();}}return k;};if(this.cfg.getProperty("preventcontextoverlap")&&a&&T[(a[1]+a[2])]){if(X){P=a[0];W=E.getX(P)-c;i=P.offsetWidth;e=W;V=(g-(W+i));Z();}h=this.cfg.getProperty("x");}else{if(X){f=c+b;O=c+g-d-b;if(U<f){h=f;}else{if(U>O){h=O;}}}else{h=b+c;}}return h;},getConstrainedY:function(Y){var V=this,O=V.element,h=O.offsetHeight,g=B.VIEWPORT_OFFSET,c=E.getViewportHeight(),f=E.getDocumentScrollTop(),d=(h+g<c),e=this.cfg.getProperty("context"),T,Z,a,W=false,U,P,b,R,N=Y,X={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};var S=function(){var j;if((V.cfg.getProperty("y")-f)>Z){j=(Z-h);}else{j=(Z+a);}V.cfg.setProperty("y",(j+f),true);return j;};var Q=function(){if((V.cfg.getProperty("y")-f)>Z){return(P-g);}else{return(U-g);}};!
 var i=function(){var k=Q(),j;if(h>k){if(W){S();}else{S();W=tru!
 e;j=i();
}}return j;};if(this.cfg.getProperty("preventcontextoverlap")&&e&&X[(e[1]+e[2])]){if(d){T=e[0];a=T.offsetHeight;Z=(E.getY(T)-f);U=Z;P=(c-(Z+a));i();}N=V.cfg.getProperty("y");}else{if(d){b=f+g;R=f+c-h-g;if(Y<b){N=b;}else{if(Y>R){N=R;}}}else{N=g+f;}}return N;},getConstrainedXY:function(N,O){return[this.getConstrainedX(N),this.getConstrainedY(O)];},center:function(){var Q=B.VIEWPORT_OFFSET,R=this.element.offsetWidth,P=this.element.offsetHeight,O=E.getViewportWidth(),S=E.getViewportHeight(),N,T;if(R<O){N=(O/2)-(R/2)+E.getDocumentScrollLeft();}else{N=Q+E.getDocumentScrollLeft();}if(P<S){T=(S/2)-(P/2)+E.getDocumentScrollTop();}else{T=Q+E.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(N,10),parseInt(T,10)]);this.cfg.refireEvent("iframe");},syncPosition:function(){var N=E.getXY(this.element);this.cfg.setProperty("x",N[0],true);this.cfg.setProperty("y",N[1],true);this.cfg.setProperty("xy",N,true);},onDomResize:function(P,O){var N=this;B.superclass.onDomResize.call(this,P!
 ,O);setTimeout(function(){N.syncPosition();N.cfg.refireEvent("iframe");N.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(O){var N=null;if(O.ownerDocument&&O.ownerDocument.defaultView){var P=O.ownerDocument.defaultView.getComputedStyle(O,"");if(P){N=parseInt(P.height,10);}}return(H.isNumber(N))?N:null;};}else{return function(O){var N=null;if(O.style.pixelHeight){N=O.style.pixelHeight;}return(H.isNumber(N))?N:null;};}})(),_validateAutoFillHeight:function(N){return(!N)||(H.isString(N)&&B.STD_MOD_RE.test(N));},_autoFillOnHeightChange:function(P,N,O){this.fillHeight(O);},_getPreciseHeight:function(O){var N=O.offsetHeight;if(O.getBoundingClientRect){var P=O.getBoundingClientRect();N=P.bottom-P.top;}return N;},fillHeight:function(Q){if(Q){var O=this.innerElement||this.element,N=[this.header,this.body,this.footer],U,V=0,W=0,S=0,P=false;
-for(var T=0,R=N.length;T<R;T++){U=N[T];if(U){if(Q!==U){W+=this._getPreciseHeight(U);}else{P=true;}}}if(P){if(J.ie||J.opera){E.setStyle(Q,"height",0+"px");}V=this._getComputedHeight(O);if(V===null){E.addClass(O,"yui-override-padding");V=O.clientHeight;E.removeClass(O,"yui-override-padding");}S=V-W;E.setStyle(Q,"height",S+"px");if(Q.offsetHeight!=S){S=S-(Q.offsetHeight-S);}E.setStyle(Q,"height",S+"px");}}},bringToTop:function(){var R=[],Q=this.element;function U(Y,X){var a=E.getStyle(Y,"zIndex"),Z=E.getStyle(X,"zIndex"),W=(!a||isNaN(a))?0:parseInt(a,10),V=(!Z||isNaN(Z))?0:parseInt(Z,10);if(W>V){return -1;}else{if(W<V){return 1;}else{return 0;}}}function P(X){var W=E.hasClass(X,B.CSS_OVERLAY),V=YAHOO.widget.Panel;if(W&&!E.isAncestor(Q,X)){if(V&&E.hasClass(X,V.CSS_PANEL)){R[R.length]=X.parentNode;}else{R[R.length]=X;}}}E.getElementsBy(P,"DIV",document.body);R.sort(U);var N=R[0],T;if(N){T=E.getStyle(N,"zIndex");if(!isNaN(T)){var S=false;if(N!=Q){S=true;}else{if(R.length>1){var O!
 =E.getStyle(R[1],"zIndex");if(!isNaN(O)&&(T==O)){S=true;}}}if(S){this.cfg.setProperty("zindex",(parseInt(T,10)+2));}}}},destroy:function(){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;B.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);B.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);F.textResizeEvent.unsubscribe(this._autoFillOnHeightChange);B.superclass.destroy.call(this);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(G){this.init(G);};var D=YAHOO.widget.Overlay,C=YAHOO.util.Event,E=YAHOO.util.Dom,B=YAHOO.util.Config,F=YAHOO.util.CustomEvent,A=YAHOO.widget.OverlayManager;A.CSS_FOCUSED="focused";A.prototype={constructor:A,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(I){this.cfg=new B(this);this.initDefaultConfig();if(I){this.cfg.applyCo!
 nfig(I,true);}this.cfg.fireQueue();var H=null;this.getActive=f!
 unction(
){return H;};this.focus=function(J){var K=this.find(J);if(K){K.focus();}};this.remove=function(K){var M=this.find(K),J;if(M){if(H==M){H=null;}var L=(M.element===null&&M.cfg===null)?true:false;if(!L){J=E.getStyle(M.element,"zIndex");M.cfg.setProperty("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));M.hideEvent.unsubscribe(M.blur);M.destroyEvent.unsubscribe(this._onOverlayDestroy,M);M.focusEvent.unsubscribe(this._onOverlayFocusHandler,M);M.blurEvent.unsubscribe(this._onOverlayBlurHandler,M);if(!L){C.removeListener(M.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);M.cfg.setProperty("zIndex",J,true);M.cfg.setProperty("manager",null);}if(M.focusEvent._managed){M.focusEvent=null;}if(M.blurEvent._managed){M.blurEvent=null;}if(M.focus._managed){M.focus=null;}if(M.blur._managed){M.blur=null;}}};this.blurAll=function(){var K=this.overlays.length,J;if(K>0){J=K-1;do{this.overlays[J].blu!
 r();}while(J--);}};this._manageBlur=function(J){var K=false;if(H==J){E.removeClass(H.element,A.CSS_FOCUSED);H=null;K=true;}return K;};this._manageFocus=function(J){var K=false;if(H!=J){if(H){H.blur();}H=J;this.bringToTop(H);E.addClass(H.element,A.CSS_FOCUSED);K=true;}return K;};var G=this.cfg.getProperty("overlays");if(!this.overlays){this.overlays=[];}if(G){this.register(G);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(I){var G=C.getTarget(I),H=this.close;if(H&&(G==H||E.isAncestor(H,G))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(H,G,I){this.remove(I);},_onOverlayFocusHandler:function(H,G,I){this._manageFocus(I);},_onOverlayBlurHandler:function(H,G,I){this._manageBlur(I);},_bindFocus:function(G){var H=this;if(!G.focusEvent){G.focusEvent=G.createEvent("focus");G.focusEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.focusEvent.subscribe(H._onOverlayFocusHandler,G,H);}if(!G.focus){C.on(G.element,H.cfg.getProperty("foc!
 usevent"),H._onOverlayElementFocus,null,G);G.focus=function(){!
 if(H._ma
nageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};G.focus._managed=true;}},_bindBlur:function(G){var H=this;if(!G.blurEvent){G.blurEvent=G.createEvent("blur");G.blurEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.blurEvent.subscribe(H._onOverlayBlurHandler,G,H);}if(!G.blur){G.blur=function(){if(H._manageBlur(this)){this.blurEvent.fire();}};G.blur._managed=true;}G.hideEvent.subscribe(G.blur);},_bindDestroy:function(G){var H=this;G.destroyEvent.subscribe(H._onOverlayDestroy,G,H);},_syncZIndex:function(G){var H=E.getStyle(G.element,"zIndex");if(!isNaN(H)){G.cfg.setProperty("zIndex",parseInt(H,10));}else{G.cfg.setProperty("zIndex",0);}},register:function(G){var K,J=false,H,I;if(G instanceof D){G.cfg.addProperty("manager",{value:this});this._bindFocus(G);this._bindBlur(G);this._bindDestroy(G);this._syncZIndex(G);this.overlays.push(G);this.bringToTop(G);J=true;}else{if(G instanceof Array){for(H=0,I=G.length!
 ;H<I;H++){J=this.register(G[H])||J;}}}return J;},bringToTop:function(M){var I=this.find(M),L,G,J;if(I){J=this.overlays;J.sort(this.compareZIndexDesc);G=J[0];if(G){L=E.getStyle(G.element,"zIndex");if(!isNaN(L)){var K=false;if(G!==I){K=true;}else{if(J.length>1){var H=E.getStyle(J[1].element,"zIndex");if(!isNaN(H)&&(L==H)){K=true;}}}if(K){I.cfg.setProperty("zindex",(parseInt(L,10)+2));}}J.sort(this.compareZIndexDesc);}}},find:function(G){var K=G instanceof D,I=this.overlays,M=I.length,J=null,L,H;if(K||typeof G=="string"){for(H=M-1;H>=0;H--){L=I[H];if((K&&(L===G))||(L.id==G)){J=L;break;}}}return J;},compareZIndexDesc:function(J,I){var H=(J.cfg)?J.cfg.getProperty("zIndex"):null,G=(I.cfg)?I.cfg.getProperty("zIndex"):null;if(H===null&&G===null){return 0;}else{if(H===null){return 1;}else{if(G===null){return -1;}else{if(H>G){return -1;}else{if(H<G){return 1;}else{return 0;}}}}}},showAll:function(){var H=this.overlays,I=H.length,G;
-for(G=I-1;G>=0;G--){H[G].show();}},hideAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.ContainerEffect=function(E,H,G,D,F){if(!F){F=YAHOO.util.Anim;}this.overlay=E;this.attrIn=H;this.attrOut=G;this.targetElement=D||E.element;this.animClass=F;};var B=YAHOO.util.Dom,C=YAHOO.util.CustomEvent,A=YAHOO.widget.ContainerEffect;A.FADE=function(D,F){var G=YAHOO.util.Easing,I={attributes:{opacity:{from:0,to:1}},duration:F,method:G.easeIn},E={attributes:{opacity:{to:0}},duration:F,method:G.easeOut},H=new A(D,I,E,D.element);H.handleUnderlayStart=function(){var K=this.overlay.underlay;if(K&&YAHOO.env.ua.ie){var J=(K.filters&&K.filters.length>0);if(J){B.addClass(D.element,"yui-effect-fade");}}};H.handleUnderlayComplete=function(){var J=this.overlay.underlay;if(J&&YAHOO.env.ua.ie){B.removeClass(D.element,"yui-effect-fade");}};H.handleStartAnimateIn=function(K,J,L){B.addClass(L.ove!
 rlay.element,"hide-select");if(!L.overlay.underlay){L.overlay.cfg.refireEvent("underlay");}L.handleUnderlayStart();B.setStyle(L.overlay.element,"visibility","visible");B.setStyle(L.overlay.element,"opacity",0);};H.handleCompleteAnimateIn=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateInCompleteEvent.fire();};H.handleStartAnimateOut=function(K,J,L){B.addClass(L.overlay.element,"hide-select");L.handleUnderlayStart();};H.handleCompleteAnimateOut=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}B.setStyle(L.overlay.element,"visibility","hidden");B.setStyle(L.overlay.element,"opacity",1);L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateOutCompleteEvent.fire();};H.init();return H;};A.SLIDE=function(F,D){var I=YAHOO.!
 util.Easing,L=F.cfg.getProperty("x")||B.getX(F.element),K=F.cf!
 g.getPro
perty("y")||B.getY(F.element),M=B.getClientWidth(),H=F.element.offsetWidth,J={attributes:{points:{to:[L,K]}},duration:D,method:I.easeIn},E={attributes:{points:{to:[(M+25),K]}},duration:D,method:I.easeOut},G=new A(F,J,E,F.element,YAHOO.util.Motion);G.handleStartAnimateIn=function(O,N,P){P.overlay.element.style.left=((-25)-H)+"px";P.overlay.element.style.top=K+"px";};G.handleTweenAnimateIn=function(Q,P,R){var S=B.getXY(R.overlay.element),O=S[0],N=S[1];if(B.getStyle(R.overlay.element,"visibility")=="hidden"&&O<L){B.setStyle(R.overlay.element,"visibility","visible");}R.overlay.cfg.setProperty("xy",[O,N],true);R.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateIn=function(O,N,P){P.overlay.cfg.setProperty("xy",[L,K],true);P.startX=L;P.startY=K;P.overlay.cfg.refireEvent("iframe");P.animateInCompleteEvent.fire();};G.handleStartAnimateOut=function(O,N,R){var P=B.getViewportWidth(),S=B.getXY(R.overlay.element),Q=S[1];R.animOut.attributes.points.to=[(P+25),Q];};G.handleTweenA!
 nimateOut=function(P,O,Q){var S=B.getXY(Q.overlay.element),N=S[0],R=S[1];Q.overlay.cfg.setProperty("xy",[N,R],true);Q.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateOut=function(O,N,P){B.setStyle(P.overlay.element,"visibility","hidden");P.overlay.cfg.setProperty("xy",[L,K]);P.animateOutCompleteEvent.fire();};G.init();return G;};A.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=C.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=C.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=C.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=C.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);thi!
 s.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);thi!
 s.animIn
.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:function(){this.beforeAnimateOutEvent.fire();this.animOut.animate();},handleStartAnimateIn:function(E,D,F){},handleTweenAnimateIn:function(E,D,F){},handleCompleteAnimateIn:function(E,D,F){},handleStartAnimateOut:function(E,D,F){},handleTweenAnimateOut:function(E,D,F){},handleCompleteAnimateOut:function(E,D,F){},toString:function(){var D="ContainerEffect";if(this.overlay){D+=" ["+this.overlay.toString()+"]";}return D;}};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);})();YAHOO.register("containercore",YAHOO.widget.M!
 odule,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.valu!
 e);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.!
 isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.even!
 tQueue.l
ength;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},!
 fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(E,F,H,D){var G=this.config[E.toLowerCase()];if(G&&G.event){if(!A.alreadySubscribed(G.event,F,H)){G.event.subscribe(F,H,D);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.!
 unsubscribeAll();this.configChangedEvent=null;this.owner=null;!
 this.con
fig=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(R,Q){if(R){this.init(R,Q);}else{}};var F=YAHOO.util.Dom,D=YAHOO.util.Config,N=YAHOO.util.Event,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,I=YAHOO.env.ua,H,P,O,E,A={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTORY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},J={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"moni!
 torresize",value:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};G.IMG_ROOT=null;G.IMG_ROOT_SSL=null;G.CSS_MODULE="yui-module";G.CSS_HEADER="hd";G.CSS_BODY="bd";G.CSS_FOOTER="ft";G.RESIZE_MONITOR_SECURE_URL="javascript:false;";G.RESIZE_MONITOR_BUFFER=1;G.textResizeEvent=new M("textResize");G.forceDocumentRedraw=function(){var Q=document.documentElement;if(Q){Q.className+=" ";Q.className=YAHOO.lang.trim(Q.className);}};function L(){if(!H){H=document.createElement("div");H.innerHTML=('<div class="'+G.CSS_HEADER+'"></div>'+'<div class="'+G.CSS_BODY+'"></div><div class="'+G.CSS_FOOTER+'"></div>');P=H.firstChild;O=P.nextSibling;E=O.nextSibling;}return H;}function K(){if(!P){L();}return(P.cloneNode(false));}function B(){if(!O){L();}return(O.cloneNode(false));}function C(){if(!E){L();}return(E.cloneNode(false));}G.prototype={constructor:G,element:null,header:null,body:null,footer:null,id:null,imageRoot:G.IMG_ROOT,initEvents:function(){var Q=M.LIST;
+this.beforeInitEvent=this.createEvent(A.BEFORE_INIT);this.beforeInitEvent.signature=Q;this.initEvent=this.createEvent(A.INIT);this.initEvent.signature=Q;this.appendEvent=this.createEvent(A.APPEND);this.appendEvent.signature=Q;this.beforeRenderEvent=this.createEvent(A.BEFORE_RENDER);this.beforeRenderEvent.signature=Q;this.renderEvent=this.createEvent(A.RENDER);this.renderEvent.signature=Q;this.changeHeaderEvent=this.createEvent(A.CHANGE_HEADER);this.changeHeaderEvent.signature=Q;this.changeBodyEvent=this.createEvent(A.CHANGE_BODY);this.changeBodyEvent.signature=Q;this.changeFooterEvent=this.createEvent(A.CHANGE_FOOTER);this.changeFooterEvent.signature=Q;this.changeContentEvent=this.createEvent(A.CHANGE_CONTENT);this.changeContentEvent.signature=Q;this.destroyEvent=this.createEvent(A.DESTORY);this.destroyEvent.signature=Q;this.beforeShowEvent=this.createEvent(A.BEFORE_SHOW);this.beforeShowEvent.signature=Q;this.showEvent=this.createEvent(A.SHOW);this.showEvent.signature=Q;thi!
 s.beforeHideEvent=this.createEvent(A.BEFORE_HIDE);this.beforeHideEvent.signature=Q;this.hideEvent=this.createEvent(A.HIDE);this.hideEvent.signature=Q;},platform:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("windows")!=-1||Q.indexOf("win32")!=-1){return"windows";}else{if(Q.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("opera")!=-1){return"opera";}else{if(Q.indexOf("msie 7")!=-1){return"ie7";}else{if(Q.indexOf("msie")!=-1){return"ie";}else{if(Q.indexOf("safari")!=-1){return"safari";}else{if(Q.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(J.VISIBLE.key,{handler:this.configVisible,value:J.VISIBLE.value,validator:J.VISIBLE.validator});this.cfg.addProperty(J.EFFECT.key,{suppressEvent:J.EFFECT.!
 suppressEvent,supercedes:J.EFFECT.supercedes});this.cfg.addPro!
 perty(J.
MONITOR_RESIZE.key,{handler:this.configMonitorResize,value:J.MONITOR_RESIZE.value});this.cfg.addProperty(J.APPEND_TO_DOCUMENT_BODY.key,{value:J.APPEND_TO_DOCUMENT_BODY.value});},init:function(V,U){var S,W;this.initEvents();this.beforeInitEvent.fire(G);this.cfg=new D(this);if(this.isSecure){this.imageRoot=G.IMG_ROOT_SSL;}if(typeof V=="string"){S=V;V=document.getElementById(V);if(!V){V=(L()).cloneNode(false);V.id=S;}}this.id=F.generateId(V);this.element=V;W=this.element.firstChild;if(W){var R=false,Q=false,T=false;do{if(1==W.nodeType){if(!R&&F.hasClass(W,G.CSS_HEADER)){this.header=W;R=true;}else{if(!Q&&F.hasClass(W,G.CSS_BODY)){this.body=W;Q=true;}else{if(!T&&F.hasClass(W,G.CSS_FOOTER)){this.footer=W;T=true;}}}}}while((W=W.nextSibling));}this.initDefaultConfig();F.addClass(this.element,G.CSS_MODULE);if(U){this.cfg.applyConfig(U,true);}if(!D.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEv!
 ent.fire(G);},initResizeMonitor:function(){var R=(I.gecko&&this.platform=="windows");if(R){var Q=this;setTimeout(function(){Q._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var Q,S,U;function W(){G.textResizeEvent.fire();}if(!I.opera){S=F.get("_yuiResizeMonitor");var V=this._supportsCWResize();if(!S){S=document.createElement("iframe");if(this.isSecure&&G.RESIZE_MONITOR_SECURE_URL&&I.ie){S.src=G.RESIZE_MONITOR_SECURE_URL;}if(!V){U=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");S.src="data:text/html;charset=utf-8,"+encodeURIComponent(U);}S.id="_yuiResizeMonitor";S.title="Text Resize Monitor";S.style.position="absolute";S.style.visibility="hidden";var R=document.body,T=R.firstChild;if(T){R.insertBefore(S,T);}else{R.appendChild(S);}S.style.width="2em";S.style.height="2em";S.style.top=(-1!
 *(S.offsetHeight+G.RESIZE_MONITOR_BUFFER))+"px";S.style.left="!
 0";S.sty
le.borderWidth="0";S.style.visibility="visible";if(I.webkit){Q=S.contentWindow.document;Q.open();Q.close();}}if(S&&S.contentWindow){G.textResizeEvent.subscribe(this.onDomResize,this,true);if(!G.textResizeInitialized){if(V){if(!N.on(S.contentWindow,"resize",W)){N.on(S,"resize",W);}}G.textResizeInitialized=true;}this.resizeMonitor=S;}}},_supportsCWResize:function(){var Q=true;if(I.gecko&&I.gecko<=1.8){Q=false;}return Q;},onDomResize:function(S,R){var Q=-1*(this.resizeMonitor.offsetHeight+G.RESIZE_MONITOR_BUFFER);this.resizeMonitor.style.top=Q+"px";this.resizeMonitor.style.left="0";},setHeader:function(R){var Q=this.header||(this.header=K());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},appendToHeader:function(R){var Q=this.header||(this.header=K());Q.appendChild(R);this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},setBody:function(R){var Q=this.body||(this.body=B());if(R.nodeNam!
 e){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},appendToBody:function(R){var Q=this.body||(this.body=B());Q.appendChild(R);this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},setFooter:function(R){var Q=this.footer||(this.footer=C());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},appendToFooter:function(R){var Q=this.footer||(this.footer=C());Q.appendChild(R);this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},render:function(S,Q){var T=this,U;function R(V){if(typeof V=="string"){V=document.getElementById(V);}if(V){T._addToParent(V,T.element);T.appendEvent.fire();}}this.beforeRenderEvent.fire();if(!Q){Q=this.element;}if(S){R(S);}else{if(!F.inDocument(this.element)){return false;}}if(this.header&&!F.inDocument(this.header)){U=Q.firstChild;
+if(U){Q.insertBefore(this.header,U);}else{Q.appendChild(this.header);}}if(this.body&&!F.inDocument(this.body)){if(this.footer&&F.isAncestor(this.moduleElement,this.footer)){Q.insertBefore(this.body,this.footer);}else{Q.appendChild(this.body);}}if(this.footer&&!F.inDocument(this.footer)){Q.appendChild(this.footer);}this.renderEvent.fire();return true;},destroy:function(){var Q;if(this.element){N.purgeElement(this.element,true);Q=this.element.parentNode;}if(Q){Q.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;G.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(R,Q,S){var T=Q[0];if(T){this.beforeShowEvent.fire();F.setStyle(this.element,"display","block");this.showEvent.fire();}else{this.beforeHideEvent.fire();F.setStyle(this.element,"displa!
 y","none");this.hideEvent.fire();}},configMonitorResize:function(S,R,T){var Q=R[0];if(Q){this.initResizeMonitor();}else{G.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(Q,R){if(!this.cfg.getProperty("appendtodocumentbody")&&Q===document.body&&Q.firstChild){Q.insertBefore(R,Q.firstChild);}else{Q.appendChild(R);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(G,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(P,O){YAHOO.widget.Overlay.superclass.constructor.call(this,P,O);};var I=YAHOO.lang,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,N=YAHOO.util.Event,F=YAHOO.util.Dom,D=YAHOO.util.Config,K=YAHOO.env.ua,B=YAHOO.widget.Overlay,H="subscribe",E="unsubscribe",C="contained",J,A={"BEFORE_MOVE":"beforeMove","MOVE":"move"},L={"X":{key:"x",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},!
 "XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONT!
 EXT":{ke
y:"context",suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key:"fixedcenter",value:false,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:I.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(K.ie==6?true:false),validator:I.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:I.isBoolean,supercedes:["constraintoviewport"]}};B.IFRAME_SRC="javascript:false;";B.IFRAME_OFFSET=3;B.VIEWPORT_OFFSET=10;B.TOP_LEFT="tl";B.TOP_RIGHT="tr";B.BOTTOM_LEFT="bl";B.BOTTOM_RIGHT="br";B.CSS_OVERLAY="yui-overlay";B.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;B.windo!
 wScrollEvent=new M("windowScroll");B.windowResizeEvent=new M("windowResize");B.windowScrollHandler=function(P){var O=N.getTarget(P);if(!O||O===window||O===window.document){if(K.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){B.windowScrollEvent.fire();},1);}else{B.windowScrollEvent.fire();}}};B.windowResizeHandler=function(O){if(K.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){B.windowResizeEvent.fire();},100);}else{B.windowResizeEvent.fire();}};B._initialized=null;if(B._initialized===null){N.on(window,"scroll",B.windowScrollHandler);N.on(window,"resize",B.windowResizeHandler);B._initialized=true;}B._TRIGGER_MAP={"windowScroll":B.windowScrollEvent,"windowResize":B.windowResizeEvent,"textResize":G.textResizeEvent};YAHOO.extend(B,G,{CONTEXT_TRIGGERS:[],init:function(P,O){B.superclass.init.call(this,P);this.beforeInitEvent.fire(B);F.addClas!
 s(this.element,B.CSS_OVERLAY);if(O){this.cfg.applyConfig(O,tru!
 e);}if(t
his.platform=="mac"&&K.gecko){if(!D.alreadySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!D.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(B);},initEvents:function(){B.superclass.initEvents.call(this);var O=M.LIST;this.beforeMoveEvent=this.createEvent(A.BEFORE_MOVE);this.beforeMoveEvent.signature=O;this.moveEvent=this.createEvent(A.MOVE);this.moveEvent.signature=O;},initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);var O=this.cfg;O.addProperty(L.X.key,{handler:this.configX,validator:L.X.validator,suppressEvent:L.X.suppressEvent,supercedes:L.X.supercedes});O.addProperty(L.Y.key,{handler:this.configY,validator:L.Y.validator,suppressEvent:L.Y.suppressEvent,supercedes:L.Y.supercedes});O.addProperty(L.XY.key,{handler:this.configXY,suppressEvent:L.XY.suppressEvent,supercede!
 s:L.XY.supercedes});O.addProperty(L.CONTEXT.key,{handler:this.configContext,suppressEvent:L.CONTEXT.suppressEvent,supercedes:L.CONTEXT.supercedes});O.addProperty(L.FIXED_CENTER.key,{handler:this.configFixedCenter,value:L.FIXED_CENTER.value,validator:L.FIXED_CENTER.validator,supercedes:L.FIXED_CENTER.supercedes});O.addProperty(L.WIDTH.key,{handler:this.configWidth,suppressEvent:L.WIDTH.suppressEvent,supercedes:L.WIDTH.supercedes});O.addProperty(L.HEIGHT.key,{handler:this.configHeight,suppressEvent:L.HEIGHT.suppressEvent,supercedes:L.HEIGHT.supercedes});O.addProperty(L.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:L.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,supercedes:L.AUTO_FILL_HEIGHT.supercedes});O.addProperty(L.ZINDEX.key,{handler:this.configzIndex,value:L.ZINDEX.value});O.addProperty(L.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:L.CONSTRAIN_TO_VIEWPORT.value,validator:L.CONSTRAIN_TO_VIEWPORT.validator,supercedes:L!
 .CONSTRAIN_TO_VIEWPORT.supercedes});
+O.addProperty(L.IFRAME.key,{handler:this.configIframe,value:L.IFRAME.value,validator:L.IFRAME.validator,supercedes:L.IFRAME.supercedes});O.addProperty(L.PREVENT_CONTEXT_OVERLAP.key,{value:L.PREVENT_CONTEXT_OVERLAP.value,validator:L.PREVENT_CONTEXT_OVERLAP.validator,supercedes:L.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(O,P){this.cfg.setProperty("xy",[O,P]);},hideMacGeckoScrollbars:function(){F.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){F.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},_setDomVisibility:function(O){F.setStyle(this.element,"visibility",(O)?"visible":"hidden");if(O){F.removeClass(this.element,"yui-overlay-hidden");}else{F.addClass(this.element,"yui-overlay-hidden");}},configVisible:function(R,O,X){var Q=O[0],S=F.getStyle(this.element,"visibility"),Y=this.cfg.getProperty("effect"),V=[],U=(this.platform=="mac"&&K.gecko),g=D.alreadySubscribed,W,P,f,c,b,a,d,Z,T;if(S=="inherit"){f!
 =this.element.parentNode;while(f.nodeType!=9&&f.nodeType!=11){S=F.getStyle(f,"visibility");if(S!="inherit"){break;}f=f.parentNode;}if(S=="inherit"){S="visible";}}if(Y){if(Y instanceof Array){Z=Y.length;for(c=0;c<Z;c++){W=Y[c];V[V.length]=W.effect(this,W.duration);}}else{V[V.length]=Y.effect(this,Y.duration);}}if(Q){if(U){this.showMacGeckoScrollbars();}if(Y){if(Q){if(S!="visible"||S===""){this.beforeShowEvent.fire();T=V.length;for(b=0;b<T;b++){P=V[b];if(b===0&&!g(P.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){P.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}P.animateIn();}}}}else{if(S!="visible"||S===""){this.beforeShowEvent.fire();this._setDomVisibility(true);this.cfg.refireEvent("iframe");this.showEvent.fire();}else{this._setDomVisibility(true);}}}else{if(U){this.hideMacGeckoScrollbars();}if(Y){if(S=="visible"){this.beforeHideEvent.fire();T=V.length;for(a=0;a<T;a++){d=V[a];if(a===0&&!g(d.animateOutCompleteEvent,this.hideEvent.fire!
 ,this.hideEvent)){d.animateOutCompleteEvent.subscribe(this.hid!
 eEvent.f
ire,this.hideEvent,true);}d.animateOut();}}else{if(S===""){this._setDomVisibility(false);}}}else{if(S=="visible"||S===""){this.beforeHideEvent.fire();this._setDomVisibility(false);this.hideEvent.fire();}else{this._setDomVisibility(false);}}}},doCenterOnDOMEvent:function(){var O=this.cfg,P=O.getProperty("fixedcenter");if(O.getProperty("visible")){if(P&&(P!==C||this.fitsInViewport())){this.center();}}},fitsInViewport:function(){var S=B.VIEWPORT_OFFSET,Q=this.element,T=Q.offsetWidth,R=Q.offsetHeight,O=F.getViewportWidth(),P=F.getViewportHeight();return((T+S<O)&&(R+S<P));},configFixedCenter:function(S,Q,T){var U=Q[0],P=D.alreadySubscribed,R=B.windowResizeEvent,O=B.windowScrollEvent;if(U){this.center();if(!P(this.beforeShowEvent,this.center)){this.beforeShowEvent.subscribe(this.center);}if(!P(R,this.doCenterOnDOMEvent,this)){R.subscribe(this.doCenterOnDOMEvent,this,true);}if(!P(O,this.doCenterOnDOMEvent,this)){O.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowE!
 vent.unsubscribe(this.center);R.unsubscribe(this.doCenterOnDOMEvent,this);O.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(R,P,S){var O=P[0],Q=this.element;F.setStyle(Q,"height",O);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(T,S,P){var V=S[0],Q=this.cfg,U="autofillheight",W="height",R=Q.getProperty(U),O=this._autoFillOnHeightChange;Q.unsubscribeFromConfigEvent(W,O);G.textResizeEvent.unsubscribe(O);this.changeContentEvent.unsubscribe(O);if(R&&V!==R&&this[R]){F.setStyle(this[R],W,"");}if(V){V=I.trim(V.toLowerCase());Q.subscribeToConfigEvent(W,O,this[V],this);G.textResizeEvent.subscribe(O,this[V],this);this.changeContentEvent.subscribe(O,this[V],this);Q.setProperty(U,V,true);}},configWidth:function(R,O,S){var Q=O[0],P=this.element;F.setStyle(P,"width",Q);this.cfg.refireEvent("iframe");},configzIndex:function(Q,O,R){var S=O[0],P=this.element;if(!S){S=F.getStyle(P,"zIndex");if(!S||isNaN(S)){S=0;}}if(this.iframe||this.cfg.getProperty("iframe!
 ")===true){if(S<=0){S=1;}}F.setStyle(P,"zIndex",S);this.cfg.se!
 tPropert
y("zIndex",S,true);if(this.iframe){this.stackIframe();}},configXY:function(Q,P,R){var T=P[0],O=T[0],S=T[1];this.cfg.setProperty("x",O);this.cfg.setProperty("y",S);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configX:function(Q,P,R){var O=P[0],S=this.cfg.getProperty("y");this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setX(this.element,O,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configY:function(Q,P,R){var O=this.cfg.getProperty("x"),S=P[0];this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setY(this.element,S,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fir!
 e([O,S]);},showIframe:function(){var P=this.iframe,O;if(P){O=this.element.parentNode;if(O!=P.parentNode){this._addToParent(O,P);}P.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var O=this.iframe,Q=this.element,S=B.IFRAME_OFFSET,P=(S*2),R;if(O){O.style.width=(Q.offsetWidth+P+"px");O.style.height=(Q.offsetHeight+P+"px");R=this.cfg.getProperty("xy");if(!I.isArray(R)||(isNaN(R[0])||isNaN(R[1]))){this.syncPosition();R=this.cfg.getProperty("xy");}F.setXY(O,[(R[0]-S),(R[1]-S)]);}},stackIframe:function(){if(this.iframe){var O=F.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(O)&&!isNaN(O)){F.setStyle(this.iframe,"zIndex",(O-1));}}},configIframe:function(R,Q,S){var O=Q[0];function T(){var V=this.iframe,W=this.element,X;if(!V){if(!J){J=document.createElement("iframe");if(this.isSecure){J.src=B.IFRAME_SRC;}if(K.ie){J.style.filter="alpha(opacity=0)";
+J.frameBorder=0;}else{J.style.opacity="0";}J.style.position="absolute";J.style.border="none";J.style.margin="0";J.style.padding="0";J.style.display="none";J.tabIndex=-1;}V=J.cloneNode(false);X=W.parentNode;var U=X||document.body;this._addToParent(U,V);this.iframe=V;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function P(){T.call(this);this.beforeShowEvent.unsubscribe(P);this._iframeDeferred=false;}if(O){if(this.cfg.getProperty("visible")){T.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(P);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventL!
 isteners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(P,O,Q){var R=O[0];if(R){if(!D.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!D.alreadySubscribed(this.beforeShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(T,S,P){var W=S[0],Q,O,U,R,V=this.CONTEXT_TRIGGERS;if(W){Q=W[0];O=W[1];U=W[2];R=W[3];if(V&&V.length>0){R=(R||[]).concat(V);}if(Q){if(typeof Q=="string"){this.cfg.setProperty("context",[document.getElementById(Q),O,U,R],true);}if(O&&U){this.align(O,U);}if(this._contextTriggers){this._processTriggers(this._con!
 textTriggers,E,this._alignOnTrigger);}if(R){this._processTrigg!
 ers(R,H,
this._alignOnTrigger);this._contextTriggers=R;}}}},_alignOnTrigger:function(P,O){this.align();},_findTriggerCE:function(O){var P=null;if(O instanceof M){P=O;}else{if(B._TRIGGER_MAP[O]){P=B._TRIGGER_MAP[O];}}return P;},_processTriggers:function(S,U,R){var Q,T;for(var P=0,O=S.length;P<O;++P){Q=S[P];T=this._findTriggerCE(Q);if(T){T[U](R,this,true);}else{this[U](Q,R);}}},align:function(P,O){var U=this.cfg.getProperty("context"),T=this,S,R,V;function Q(W,X){switch(P){case B.TOP_LEFT:T.moveTo(X,W);break;case B.TOP_RIGHT:T.moveTo((X-R.offsetWidth),W);break;case B.BOTTOM_LEFT:T.moveTo(X,(W-R.offsetHeight));break;case B.BOTTOM_RIGHT:T.moveTo((X-R.offsetWidth),(W-R.offsetHeight));break;}}if(U){S=U[0];R=this.element;T=this;if(!P){P=U[1];}if(!O){O=U[2];}if(R&&S){V=F.getRegion(S);switch(O){case B.TOP_LEFT:Q(V.top,V.left);break;case B.TOP_RIGHT:Q(V.top,V.right);break;case B.BOTTOM_LEFT:Q(V.bottom,V.left);break;case B.BOTTOM_RIGHT:Q(V.bottom,V.right);break;}}}},enforceConstraints:function(!
 P,O,Q){var S=O[0];var R=this.getConstrainedXY(S[0],S[1]);this.cfg.setProperty("x",R[0],true);this.cfg.setProperty("y",R[1],true);this.cfg.setProperty("xy",R,true);},getConstrainedX:function(V){var S=this,O=S.element,e=O.offsetWidth,c=B.VIEWPORT_OFFSET,h=F.getViewportWidth(),d=F.getDocumentScrollLeft(),Y=(e+c<h),b=this.cfg.getProperty("context"),Q,X,j,T=false,f,W,g=d+c,P=d+h-e-c,i=V,U={"tltr":true,"blbr":true,"brbl":true,"trtl":true};var Z=function(){var k;if((S.cfg.getProperty("x")-d)>X){k=(X-e);}else{k=(X+j);}S.cfg.setProperty("x",(k+d),true);return k;};var R=function(){if((S.cfg.getProperty("x")-d)>X){return(W-c);}else{return(f-c);}};var a=function(){var k=R(),l;if(e>k){if(T){Z();}else{Z();T=true;l=a();}}return l;};if(V<g||V>P){if(Y){if(this.cfg.getProperty("preventcontextoverlap")&&b&&U[(b[1]+b[2])]){Q=b[0];X=F.getX(Q)-d;j=Q.offsetWidth;f=X;W=(h-(X+j));a();i=this.cfg.getProperty("x");}else{if(V<g){i=g;}else{if(V>P){i=P;}}}}else{i=c+d;}}return i;},getConstrainedY:function!
 (Z){var W=this,P=W.element,i=P.offsetHeight,h=B.VIEWPORT_OFFSE!
 T,d=F.ge
tViewportHeight(),g=F.getDocumentScrollTop(),e=(i+h<d),f=this.cfg.getProperty("context"),U,a,b,X=false,V,Q,c=g+h,S=g+d-i-h,O=Z,Y={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};var T=function(){var k;if((W.cfg.getProperty("y")-g)>a){k=(a-i);}else{k=(a+b);}W.cfg.setProperty("y",(k+g),true);return k;};var R=function(){if((W.cfg.getProperty("y")-g)>a){return(Q-h);}else{return(V-h);}};var j=function(){var l=R(),k;if(i>l){if(X){T();}else{T();X=true;k=j();}}return k;};if(Z<c||Z>S){if(e){if(this.cfg.getProperty("preventcontextoverlap")&&f&&Y[(f[1]+f[2])]){U=f[0];b=U.offsetHeight;a=(F.getY(U)-g);V=a;Q=(d-(a+b));j();O=W.cfg.getProperty("y");}else{if(Z<c){O=c;}else{if(Z>S){O=S;}}}}else{O=h+g;}}return O;},getConstrainedXY:function(O,P){return[this.getConstrainedX(O),this.getConstrainedY(P)];},center:function(){var R=B.VIEWPORT_OFFSET,S=this.element.offsetWidth,Q=this.element.offsetHeight,P=F.getViewportWidth(),T=F.getViewportHeight(),O,U;if(S<P){O=(P/2)-(S/2)+F.getDocumentScrollLeft(!
 );}else{O=R+F.getDocumentScrollLeft();}if(Q<T){U=(T/2)-(Q/2)+F.getDocumentScrollTop();}else{U=R+F.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(O,10),parseInt(U,10)]);this.cfg.refireEvent("iframe");if(K.webkit){this.forceContainerRedraw();}},syncPosition:function(){var O=F.getXY(this.element);this.cfg.setProperty("x",O[0],true);this.cfg.setProperty("y",O[1],true);this.cfg.setProperty("xy",O,true);},onDomResize:function(Q,P){var O=this;B.superclass.onDomResize.call(this,Q,P);setTimeout(function(){O.syncPosition();O.cfg.refireEvent("iframe");O.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(P){var O=null;if(P.ownerDocument&&P.ownerDocument.defaultView){var Q=P.ownerDocument.defaultView.getComputedStyle(P,"");if(Q){O=parseInt(Q.height,10);}}return(I.isNumber(O))?O:null;};}else{return function(P){var O=null;
+if(P.style.pixelHeight){O=P.style.pixelHeight;}return(I.isNumber(O))?O:null;};}})(),_validateAutoFillHeight:function(O){return(!O)||(I.isString(O)&&B.STD_MOD_RE.test(O));},_autoFillOnHeightChange:function(R,P,Q){var O=this.cfg.getProperty("height");if((O&&O!=="auto")||(O===0)){this.fillHeight(Q);}},_getPreciseHeight:function(P){var O=P.offsetHeight;if(P.getBoundingClientRect){var Q=P.getBoundingClientRect();O=Q.bottom-Q.top;}return O;},fillHeight:function(R){if(R){var P=this.innerElement||this.element,O=[this.header,this.body,this.footer],V,W=0,X=0,T=0,Q=false;for(var U=0,S=O.length;U<S;U++){V=O[U];if(V){if(R!==V){X+=this._getPreciseHeight(V);}else{Q=true;}}}if(Q){if(K.ie||K.opera){F.setStyle(R,"height",0+"px");}W=this._getComputedHeight(P);if(W===null){F.addClass(P,"yui-override-padding");W=P.clientHeight;F.removeClass(P,"yui-override-padding");}T=Math.max(W-X,0);F.setStyle(R,"height",T+"px");if(R.offsetHeight!=T){T=Math.max(T-(R.offsetHeight-T),0);}F.setStyle(R,"height",T!
 +"px");}}},bringToTop:function(){var S=[],R=this.element;function V(Z,Y){var b=F.getStyle(Z,"zIndex"),a=F.getStyle(Y,"zIndex"),X=(!b||isNaN(b))?0:parseInt(b,10),W=(!a||isNaN(a))?0:parseInt(a,10);if(X>W){return -1;}else{if(X<W){return 1;}else{return 0;}}}function Q(Y){var X=F.hasClass(Y,B.CSS_OVERLAY),W=YAHOO.widget.Panel;if(X&&!F.isAncestor(R,Y)){if(W&&F.hasClass(Y,W.CSS_PANEL)){S[S.length]=Y.parentNode;}else{S[S.length]=Y;}}}F.getElementsBy(Q,"DIV",document.body);S.sort(V);var O=S[0],U;if(O){U=F.getStyle(O,"zIndex");if(!isNaN(U)){var T=false;if(O!=R){T=true;}else{if(S.length>1){var P=F.getStyle(S[1],"zIndex");if(!isNaN(P)&&(U==P)){T=true;}}}if(T){this.cfg.setProperty("zindex",(parseInt(U,10)+2));}}}},destroy:function(){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;B.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);B.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);G.textResizeEvent.unsubscribe(this._autoFillOnHeight!
 Change);B.superclass.destroy.call(this);},forceContainerRedraw!
 :functio
n(){var O=this;F.addClass(O.element,"yui-force-redraw");setTimeout(function(){F.removeClass(O.element,"yui-force-redraw");},0);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(G){this.init(G);};var D=YAHOO.widget.Overlay,C=YAHOO.util.Event,E=YAHOO.util.Dom,B=YAHOO.util.Config,F=YAHOO.util.CustomEvent,A=YAHOO.widget.OverlayManager;A.CSS_FOCUSED="focused";A.prototype={constructor:A,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(I){this.cfg=new B(this);this.initDefaultConfig();if(I){this.cfg.applyConfig(I,true);}this.cfg.fireQueue();var H=null;this.getActive=function(){return H;};this.focus=function(J){var K=this.find(J);if(K){K.focus();}};this.remove=function(K){var M=this.find(K),J;if(M){if(H==M){H=null;}var L=(M.element===null&&M.cfg===null)?true:false;if(!L){J=E.getStyle(M.element,"zIndex");M.cfg.set!
 Property("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));M.hideEvent.unsubscribe(M.blur);M.destroyEvent.unsubscribe(this._onOverlayDestroy,M);M.focusEvent.unsubscribe(this._onOverlayFocusHandler,M);M.blurEvent.unsubscribe(this._onOverlayBlurHandler,M);if(!L){C.removeListener(M.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);M.cfg.setProperty("zIndex",J,true);M.cfg.setProperty("manager",null);}if(M.focusEvent._managed){M.focusEvent=null;}if(M.blurEvent._managed){M.blurEvent=null;}if(M.focus._managed){M.focus=null;}if(M.blur._managed){M.blur=null;}}};this.blurAll=function(){var K=this.overlays.length,J;if(K>0){J=K-1;do{this.overlays[J].blur();}while(J--);}};this._manageBlur=function(J){var K=false;if(H==J){E.removeClass(H.element,A.CSS_FOCUSED);H=null;K=true;}return K;};this._manageFocus=function(J){var K=false;if(H!=J){if(H){H.blur();}H=J;this.bringToTop(H);E.addClass(H.ele!
 ment,A.CSS_FOCUSED);K=true;}return K;};var G=this.cfg.getPrope!
 rty("ove
rlays");if(!this.overlays){this.overlays=[];}if(G){this.register(G);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(I){var G=C.getTarget(I),H=this.close;if(H&&(G==H||E.isAncestor(H,G))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(H,G,I){this.remove(I);},_onOverlayFocusHandler:function(H,G,I){this._manageFocus(I);},_onOverlayBlurHandler:function(H,G,I){this._manageBlur(I);},_bindFocus:function(G){var H=this;if(!G.focusEvent){G.focusEvent=G.createEvent("focus");G.focusEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.focusEvent.subscribe(H._onOverlayFocusHandler,G,H);}if(!G.focus){C.on(G.element,H.cfg.getProperty("focusevent"),H._onOverlayElementFocus,null,G);G.focus=function(){if(H._manageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};G.focus._managed=true;}},_bindBlur:function(G){var H=this;if(!G.blurEvent){G.blurEvent=G.createEvent("blur");G.blurEvent.signa!
 ture=F.LIST;G.focusEvent._managed=true;}else{G.blurEvent.subscribe(H._onOverlayBlurHandler,G,H);}if(!G.blur){G.blur=function(){if(H._manageBlur(this)){this.blurEvent.fire();}};G.blur._managed=true;}G.hideEvent.subscribe(G.blur);},_bindDestroy:function(G){var H=this;G.destroyEvent.subscribe(H._onOverlayDestroy,G,H);},_syncZIndex:function(G){var H=E.getStyle(G.element,"zIndex");if(!isNaN(H)){G.cfg.setProperty("zIndex",parseInt(H,10));}else{G.cfg.setProperty("zIndex",0);}},register:function(G){var J=false,H,I;if(G instanceof D){G.cfg.addProperty("manager",{value:this});this._bindFocus(G);this._bindBlur(G);this._bindDestroy(G);this._syncZIndex(G);this.overlays.push(G);this.bringToTop(G);J=true;}else{if(G instanceof Array){for(H=0,I=G.length;H<I;H++){J=this.register(G[H])||J;}}}return J;},bringToTop:function(M){var I=this.find(M),L,G,J;if(I){J=this.overlays;J.sort(this.compareZIndexDesc);G=J[0];if(G){L=E.getStyle(G.element,"zIndex");
+if(!isNaN(L)){var K=false;if(G!==I){K=true;}else{if(J.length>1){var H=E.getStyle(J[1].element,"zIndex");if(!isNaN(H)&&(L==H)){K=true;}}}if(K){I.cfg.setProperty("zindex",(parseInt(L,10)+2));}}J.sort(this.compareZIndexDesc);}}},find:function(G){var K=G instanceof D,I=this.overlays,M=I.length,J=null,L,H;if(K||typeof G=="string"){for(H=M-1;H>=0;H--){L=I[H];if((K&&(L===G))||(L.id==G)){J=L;break;}}}return J;},compareZIndexDesc:function(J,I){var H=(J.cfg)?J.cfg.getProperty("zIndex"):null,G=(I.cfg)?I.cfg.getProperty("zIndex"):null;if(H===null&&G===null){return 0;}else{if(H===null){return 1;}else{if(G===null){return -1;}else{if(H>G){return -1;}else{if(H<G){return 1;}else{return 0;}}}}}},showAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].show();}},hideAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.ContainerEffect=function(E,H,G,D,F){if(!F){F=YAHOO.!
 util.Anim;}this.overlay=E;this.attrIn=H;this.attrOut=G;this.targetElement=D||E.element;this.animClass=F;};var B=YAHOO.util.Dom,C=YAHOO.util.CustomEvent,A=YAHOO.widget.ContainerEffect;A.FADE=function(D,F){var G=YAHOO.util.Easing,I={attributes:{opacity:{from:0,to:1}},duration:F,method:G.easeIn},E={attributes:{opacity:{to:0}},duration:F,method:G.easeOut},H=new A(D,I,E,D.element);H.handleUnderlayStart=function(){var K=this.overlay.underlay;if(K&&YAHOO.env.ua.ie){var J=(K.filters&&K.filters.length>0);if(J){B.addClass(D.element,"yui-effect-fade");}}};H.handleUnderlayComplete=function(){var J=this.overlay.underlay;if(J&&YAHOO.env.ua.ie){B.removeClass(D.element,"yui-effect-fade");}};H.handleStartAnimateIn=function(K,J,L){B.addClass(L.overlay.element,"hide-select");if(!L.overlay.underlay){L.overlay.cfg.refireEvent("underlay");}L.handleUnderlayStart();L.overlay._setDomVisibility(true);B.setStyle(L.overlay.element,"opacity",0);};H.handleCompleteAnimateIn=function(K,J,L){B.removeClass(!
 L.overlay.element,"hide-select");if(L.overlay.element.style.fi!
 lter){L.
overlay.element.style.filter=null;}L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateInCompleteEvent.fire();};H.handleStartAnimateOut=function(K,J,L){B.addClass(L.overlay.element,"hide-select");L.handleUnderlayStart();};H.handleCompleteAnimateOut=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.overlay._setDomVisibility(false);B.setStyle(L.overlay.element,"opacity",1);L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateOutCompleteEvent.fire();};H.init();return H;};A.SLIDE=function(F,D){var I=YAHOO.util.Easing,L=F.cfg.getProperty("x")||B.getX(F.element),K=F.cfg.getProperty("y")||B.getY(F.element),M=B.getClientWidth(),H=F.element.offsetWidth,J={attributes:{points:{to:[L,K]}},duration:D,method:I.easeIn},E={attributes:{points:{to:[(M+25),K]}},duration:D,method:I.easeOut},G=new A(F,J,E,F.element,YAHOO.util.Motion);G.handleStartAnimateIn=function(O,N,P)!
 {P.overlay.element.style.left=((-25)-H)+"px";P.overlay.element.style.top=K+"px";};G.handleTweenAnimateIn=function(Q,P,R){var S=B.getXY(R.overlay.element),O=S[0],N=S[1];if(B.getStyle(R.overlay.element,"visibility")=="hidden"&&O<L){R.overlay._setDomVisibility(true);}R.overlay.cfg.setProperty("xy",[O,N],true);R.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateIn=function(O,N,P){P.overlay.cfg.setProperty("xy",[L,K],true);P.startX=L;P.startY=K;P.overlay.cfg.refireEvent("iframe");P.animateInCompleteEvent.fire();};G.handleStartAnimateOut=function(O,N,R){var P=B.getViewportWidth(),S=B.getXY(R.overlay.element),Q=S[1];R.animOut.attributes.points.to=[(P+25),Q];};G.handleTweenAnimateOut=function(P,O,Q){var S=B.getXY(Q.overlay.element),N=S[0],R=S[1];Q.overlay.cfg.setProperty("xy",[N,R],true);Q.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateOut=function(O,N,P){P.overlay._setDomVisibility(false);P.overlay.cfg.setProperty("xy",[L,K]);P.animateOutCompleteEvent.fire();}!
 ;G.init();return G;};A.prototype={init:function(){this.beforeA!
 nimateIn
Event=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=C.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=C.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=C.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=C.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComp!
 lete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:function(){this.beforeAnimateOutEvent.fire();this.animOut.animate();},handleStartAnimateIn:function(E,D,F){},handleTweenAnimateIn:function(E,D,F){},handleCompleteAnimateIn:function(E,D,F){},handleStartAnimateOut:function(E,D,F){},handleTweenAnimateOut:function(E,D,F){},handleCompleteAnimateOut:function(E,D,F){},toString:function(){var D="ContainerEffect";if(this.overlay){D+=" ["+this.overlay.toString()+"]";}return D;}};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);})();YAHOO.register("containercore",YAHOO.widget.Module,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/container/container_core.js
===================================================================
--- trunk/root/static/yui/container/container_core.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/container/container_core.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -733,6 +733,7 @@
         Event = YAHOO.util.Event,
         CustomEvent = YAHOO.util.CustomEvent,
         Module = YAHOO.widget.Module,
+        UA = YAHOO.env.ua,
 
         m_oModuleTemplate,
         m_oHeaderTemplate,
@@ -777,24 +778,24 @@
                 value: true, 
                 validator: YAHOO.lang.isBoolean 
             },
-        
-            "EFFECT": { 
-                key: "effect", 
-                suppressEvent: true, 
-                supercedes: ["visible"] 
+
+            "EFFECT": {
+                key: "effect",
+                suppressEvent: true,
+                supercedes: ["visible"]
             },
 
-            "MONITOR_RESIZE": { 
-                key: "monitorresize", 
-                value: true  
+            "MONITOR_RESIZE": {
+                key: "monitorresize",
+                value: true
             },
 
-            "APPEND_TO_DOCUMENT_BODY": { 
-                key: "appendtodocumentbody", 
+            "APPEND_TO_DOCUMENT_BODY": {
+                key: "appendtodocumentbody",
                 value: false
             }
         };
-    
+
     /**
     * Constant representing the prefix path to use for non-secure images
     * @property YAHOO.widget.Module.IMG_ROOT
@@ -858,8 +859,20 @@
     * @type String
     */
     Module.RESIZE_MONITOR_SECURE_URL = "javascript:false;";
-    
+
     /**
+    * Constant representing the buffer amount (in pixels) to use when positioning
+    * the text resize monitor offscreen. The resize monitor is positioned
+    * offscreen by an amount eqaul to its offsetHeight + the buffer value.
+    * 
+    * @property YAHOO.widget.Module.RESIZE_MONITOR_BUFFER
+    * @static
+    * @type Number
+    */
+    // Set to 1, to work around pixel offset in IE8, which increases when zoom is used
+    Module.RESIZE_MONITOR_BUFFER = 1;
+
+    /**
     * Singleton CustomEvent fired when the font size is changed in the browser.
     * Opera's "zoom" functionality currently does not support text 
     * size detection.
@@ -867,6 +880,22 @@
     */
     Module.textResizeEvent = new CustomEvent("textResize");
 
+    /**
+     * Helper utility method, which forces a document level 
+     * redraw for Opera, which can help remove repaint
+     * irregularities after applying DOM changes.
+     *
+     * @method YAHOO.widget.Module.forceDocumentRedraw
+     * @static
+     */
+    Module.forceDocumentRedraw = function() {
+        var docEl = document.documentElement;
+        if (docEl) {
+            docEl.className += " ";
+            docEl.className = YAHOO.lang.trim(docEl.className);
+        }
+    };
+
     function createModuleTemplate() {
 
         if (!m_oModuleTemplate) {
@@ -1215,6 +1244,10 @@
         * called by the constructor, and  sets up all DOM references for 
         * pre-existing markup, and creates required markup if it is not 
         * already present.
+        * <p>
+        * If the element passed in does not have an id, one will be generated
+        * for it.
+        * </p>
         * @method init
         * @param {String} el The element ID representing the Module <em>OR</em>
         * @param {HTMLElement} el The element representing the Module
@@ -1250,12 +1283,9 @@
                 }
             }
 
+            this.id = Dom.generateId(el);
             this.element = el;
 
-            if (el.id) {
-                this.id = el.id;
-            }
-
             child = this.element.firstChild;
 
             if (child) {
@@ -1305,7 +1335,7 @@
         */
         initResizeMonitor: function () {
 
-            var isGeckoWin = (YAHOO.env.ua.gecko && this.platform == "windows");
+            var isGeckoWin = (UA.gecko && this.platform == "windows");
             if (isGeckoWin) {
                 // Help prevent spinning loading icon which 
                 // started with FireFox 2.0.0.8/Win
@@ -1332,7 +1362,7 @@
                 Module.textResizeEvent.fire();
             }
 
-            if (!YAHOO.env.ua.opera) {
+            if (!UA.opera) {
                 oIFrame = Dom.get("_yuiResizeMonitor");
 
                 var supportsCWResize = this._supportsCWResize();
@@ -1340,7 +1370,7 @@
                 if (!oIFrame) {
                     oIFrame = document.createElement("iframe");
 
-                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && YAHOO.env.ua.ie) {
+                    if (this.isSecure && Module.RESIZE_MONITOR_SECURE_URL && UA.ie) {
                         oIFrame.src = Module.RESIZE_MONITOR_SECURE_URL;
                     }
 
@@ -1376,10 +1406,10 @@
                         db.appendChild(oIFrame);
                     }
 
-                    oIFrame.style.width = "10em";
-                    oIFrame.style.height = "10em";
-                    oIFrame.style.top = (-1 * oIFrame.offsetHeight) + "px";
-                    oIFrame.style.left = (-1 * oIFrame.offsetWidth) + "px";
+                    oIFrame.style.width = "2em";
+                    oIFrame.style.height = "2em";
+                    oIFrame.style.top = (-1 * (oIFrame.offsetHeight + Module.RESIZE_MONITOR_BUFFER)) + "px";
+                    oIFrame.style.left = "0";
                     oIFrame.style.borderWidth = "0";
                     oIFrame.style.visibility = "visible";
 
@@ -1387,7 +1417,7 @@
                        Don't open/close the document for Gecko like we used to, since it
                        leads to duplicate cookies. (See SourceForge bug #1721755)
                     */
-                    if (YAHOO.env.ua.webkit) {
+                    if (UA.webkit) {
                         oDoc = oIFrame.contentWindow.document;
                         oDoc.open();
                         oDoc.close();
@@ -1428,22 +1458,11 @@
                 Gecko 1.8.1.6+ (FF2.0.0.6+) and all other browsers will fire resize on contentWindow.
 
                 We don't want to start sniffing for patch versions, so fire textResize the same
-                way on all FF, until 1.9 (3.x) is out
+                way on all FF2 flavors
              */
             var bSupported = true;
-            if (YAHOO.env.ua.gecko && YAHOO.env.ua.gecko <= 1.8) {
+            if (UA.gecko && UA.gecko <= 1.8) {
                 bSupported = false;
-                /*
-                var v = navigator.userAgent.match(/rv:([^\s\)]*)/); // From YAHOO.env.ua
-                if (v && v[0]) {
-                    var sv = v[0].match(/\d\.\d\.(\d)/);
-                    if (sv && sv[1]) {
-                        if (parseInt(sv[1], 10) > 0) {
-                            bSupported = true;
-                        }
-                    }
-                }
-                */
             }
             return bSupported;
         },
@@ -1456,12 +1475,10 @@
         */
         onDomResize: function (e, obj) {
 
-            var nLeft = -1 * this.resizeMonitor.offsetWidth,
-                nTop = -1 * this.resizeMonitor.offsetHeight;
-        
+            var nTop = -1 * (this.resizeMonitor.offsetHeight + Module.RESIZE_MONITOR_BUFFER);
+
             this.resizeMonitor.style.top = nTop + "px";
-            this.resizeMonitor.style.left =  nLeft + "px";
-
+            this.resizeMonitor.style.left = "0";
         },
 
         /**
@@ -1710,8 +1727,7 @@
         */
         destroy: function () {
 
-            var parent,
-                e;
+            var parent;
 
             if (this.element) {
                 Event.purgeElement(this.element, true);
@@ -1780,7 +1796,7 @@
                 this.hideEvent.fire();
             }
         },
-        
+
         /**
         * Default event handler for the "monitorresize" configuration property
         * @param {String} type The CustomEvent type (usually the property name)
@@ -1873,6 +1889,7 @@
 
         _SUBSCRIBE = "subscribe",
         _UNSUBSCRIBE = "unsubscribe",
+        _CONTAINED = "contained",
 
         m_oIFrameTemplate,
 
@@ -1926,7 +1943,6 @@
             "FIXED_CENTER": { 
                 key: "fixedcenter", 
                 value: false, 
-                validator: Lang.isBoolean, 
                 supercedes: ["iframe", "visible"] 
             },
 
@@ -1944,7 +1960,6 @@
 
             "AUTO_FILL_HEIGHT" : {
                 key: "autofillheight",
-                supressEvent: true,
                 supercedes: ["height"],
                 value:"body"
             },
@@ -1967,14 +1982,14 @@
                 validator: Lang.isBoolean, 
                 supercedes: ["zindex"] 
             },
-            
+
             "PREVENT_CONTEXT_OVERLAP": {
                 key: "preventcontextoverlap",
                 value: false,
                 validator: Lang.isBoolean,  
                 supercedes: ["constraintoviewport"]
             }
-            
+
         };
 
     /**
@@ -2386,10 +2401,47 @@
             });
 
             /**
-            * True if the Overlay should be anchored to the center of 
-            * the viewport.
+            * Determines whether or not the Overlay should be anchored 
+            * to the center of the viewport.
+            * 
+            * <p>This property can be set to:</p>
+            * 
+            * <dl>
+            * <dt>true</dt>
+            * <dd>
+            * To enable fixed center positioning
+            * <p>
+            * When enabled, the overlay will 
+            * be positioned in the center of viewport when initially displayed, and 
+            * will remain in the center of the viewport whenever the window is 
+            * scrolled or resized.
+            * </p>
+            * <p>
+            * If the overlay is too big for the viewport, 
+            * it's top left corner will be aligned with the top left corner of the viewport.
+            * </p>
+            * </dd>
+            * <dt>false</dt>
+            * <dd>
+            * To disable fixed center positioning.
+            * <p>In this case the overlay can still be 
+            * centered as a one-off operation, by invoking the <code>center()</code> method,
+            * however it will not remain centered when the window is scrolled/resized.
+            * </dd>
+            * <dt>"contained"<dt>
+            * <dd>To enable fixed center positioning, as with the <code>true</code> option.
+            * <p>However, unlike setting the property to <code>true</code>, 
+            * when the property is set to <code>"contained"</code>, if the overlay is 
+            * too big for the viewport, it will not get automatically centered when the 
+            * user scrolls or resizes the window (until the window is large enough to contain the 
+            * overlay). This is useful in cases where the Overlay has both header and footer 
+            * UI controls which the user may need to access.
+            * </p>
+            * </dd>
+            * </dl>
+            *
             * @config fixedcenter
-            * @type Boolean
+            * @type Boolean | String
             * @default false
             */
             cfg.addProperty(DEFAULT_CONFIG.FIXED_CENTER.key, {
@@ -2435,7 +2487,6 @@
                 handler: this.configAutoFillHeight, 
                 value : DEFAULT_CONFIG.AUTO_FILL_HEIGHT.value,
                 validator : this._validateAutoFill,
-                suppressEvent: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.suppressEvent, 
                 supercedes: DEFAULT_CONFIG.AUTO_FILL_HEIGHT.supercedes
             });
 
@@ -2534,6 +2585,23 @@
             Dom.replaceClass(this.element, "hide-scrollbars", "show-scrollbars");
         },
 
+        /**
+         * Internal implementation to set the visibility of the overlay in the DOM.
+         *
+         * @method _setDomVisibility
+         * @param {boolean} visible Whether to show or hide the Overlay's outer element
+         * @protected
+         */
+        _setDomVisibility : function(show) {
+            Dom.setStyle(this.element, "visibility", (show) ? "visible" : "hidden");
+
+            if (show) {
+                Dom.removeClass(this.element, "yui-overlay-hidden");
+            } else {
+                Dom.addClass(this.element, "yui-overlay-hidden");
+            }
+        },
+
         // BEGIN BUILT-IN PROPERTY EVENT HANDLERS //
         /**
         * The default event handler fired when the "visible" property is 
@@ -2564,8 +2632,8 @@
                 while (e.nodeType != 9 && e.nodeType != 11) {
                     currentVis = Dom.getStyle(e, "visibility");
 
-                    if (currentVis != "inherit") { 
-                        break; 
+                    if (currentVis != "inherit") {
+                        break;
                     }
 
                     e = e.parentNode;
@@ -2592,7 +2660,6 @@
                 }
             }
 
-
             if (visible) { // Show
                 if (isMacGecko) {
                     this.showMacGeckoScrollbars();
@@ -2626,10 +2693,12 @@
                     if (currentVis != "visible" || currentVis === "") {
                         this.beforeShowEvent.fire();
 
-                        Dom.setStyle(this.element, "visibility", "visible");
+                        this._setDomVisibility(true);
 
                         this.cfg.refireEvent("iframe");
                         this.showEvent.fire();
+                    } else {
+                        this._setDomVisibility(true);
                     }
                 }
             } else { // Hide
@@ -2637,7 +2706,7 @@
                 if (isMacGecko) {
                     this.hideMacGeckoScrollbars();
                 }
-                    
+
                 if (effect) { // Animate out if showing
                     if (currentVis == "visible") {
                         this.beforeHideEvent.fire();
@@ -2663,32 +2732,59 @@
                         }
 
                     } else if (currentVis === "") {
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                     }
 
                 } else { // Simple hide
 
                     if (currentVis == "visible" || currentVis === "") {
                         this.beforeHideEvent.fire();
-                        Dom.setStyle(this.element, "visibility", "hidden");
+                        this._setDomVisibility(false);
                         this.hideEvent.fire();
+                    } else {
+                        this._setDomVisibility(false);
                     }
                 }
             }
         },
 
         /**
-        * Center event handler used for centering on scroll/resize, but only if 
-        * the Overlay is visible
+        * Fixed center event handler used for centering on scroll/resize, but only if 
+        * the overlay is visible and, if "fixedcenter" is set to "contained", only if 
+        * the overlay fits within the viewport.
+        *
         * @method doCenterOnDOMEvent
         */
         doCenterOnDOMEvent: function () {
-            if (this.cfg.getProperty("visible")) {
-                this.center();
+            var cfg = this.cfg,
+                fc = cfg.getProperty("fixedcenter");
+
+            if (cfg.getProperty("visible")) {
+                if (fc && (fc !== _CONTAINED || this.fitsInViewport())) {
+                    this.center();
+                }
             }
         },
 
         /**
+         * Determines if the Overlay (including the offset value defined by Overlay.VIEWPORT_OFFSET) 
+         * will fit entirely inside the viewport, in both dimensions - width and height.
+         * 
+         * @method fitsInViewport
+         * @return boolean true if the Overlay will fit, false if not
+         */
+        fitsInViewport : function() {
+            var nViewportOffset = Overlay.VIEWPORT_OFFSET,
+                element = this.element,
+                elementWidth = element.offsetWidth,
+                elementHeight = element.offsetHeight,
+                viewportWidth = Dom.getViewportWidth(),
+                viewportHeight = Dom.getViewportHeight();
+
+            return ((elementWidth + nViewportOffset < viewportWidth) && (elementHeight + nViewportOffset < viewportHeight));
+        },
+
+        /**
         * The default event handler fired when the "fixedcenter" property 
         * is changed.
         * @method configFixedCenter
@@ -2708,7 +2804,7 @@
             if (val) {
                 this.center();
 
-                if (!alreadySubscribed(this.beforeShowEvent, this.center, this)) {
+                if (!alreadySubscribed(this.beforeShowEvent, this.center)) {
                     this.beforeShowEvent.subscribe(this.center);
                 }
 
@@ -2727,7 +2823,7 @@
                 windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent, this);
             }
         },
-        
+
         /**
         * The default event handler fired when the "height" property is changed.
         * @method configHeight
@@ -2758,22 +2854,28 @@
          */
         configAutoFillHeight: function (type, args, obj) {
             var fillEl = args[0],
-                currEl = this.cfg.getProperty("autofillheight");
+                cfg = this.cfg,
+                autoFillHeight = "autofillheight",
+                height = "height",
+                currEl = cfg.getProperty(autoFillHeight),
+                autoFill = this._autoFillOnHeightChange;
 
-            this.cfg.unsubscribeFromConfigEvent("height", this._autoFillOnHeightChange);
-            Module.textResizeEvent.unsubscribe("height", this._autoFillOnHeightChange);
+            cfg.unsubscribeFromConfigEvent(height, autoFill);
+            Module.textResizeEvent.unsubscribe(autoFill);
+            this.changeContentEvent.unsubscribe(autoFill);
 
             if (currEl && fillEl !== currEl && this[currEl]) {
-                Dom.setStyle(this[currEl], "height", "");
+                Dom.setStyle(this[currEl], height, "");
             }
 
             if (fillEl) {
                 fillEl = Lang.trim(fillEl.toLowerCase());
 
-                this.cfg.subscribeToConfigEvent("height", this._autoFillOnHeightChange, this[fillEl], this);
-                Module.textResizeEvent.subscribe(this._autoFillOnHeightChange, this[fillEl], this);
+                cfg.subscribeToConfigEvent(height, autoFill, this[fillEl], this);
+                Module.textResizeEvent.subscribe(autoFill, this[fillEl], this);
+                this.changeContentEvent.subscribe(autoFill, this[fillEl], this);
 
-                this.cfg.setProperty("autofillheight", fillEl, true);
+                cfg.setProperty(autoFillHeight, fillEl, true);
             }
         },
 
@@ -3049,6 +3151,7 @@
                         m_oIFrameTemplate.style.margin = "0";
                         m_oIFrameTemplate.style.padding = "0";
                         m_oIFrameTemplate.style.display = "none";
+                        m_oIFrameTemplate.tabIndex = -1;
                     }
 
                     oIFrame = m_oIFrameTemplate.cloneNode(false);
@@ -3420,8 +3523,8 @@
                 nLeftRegionWidth,
                 nRightRegionWidth,
 
-                leftConstraint,
-                rightConstraint,
+                leftConstraint = scrollX + nViewportOffset,
+                rightConstraint = scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset,
 
                 xNew = x,
 
@@ -3513,42 +3616,52 @@
             
             };
 
+            // Determine if the current value for the Overlay's "x" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
+            
+            if (x < leftConstraint || x > rightConstraint) {
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-				oOverlapPositions[(aContext[1] + aContext[2])]) {
+                // The current value for the Overlay's "x" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
                 if (bCanConstrain) {
 
-                    oContextEl = aContext[0];
-                    nContextElX = Dom.getX(oContextEl) - scrollX;
-                    nContextElWidth = oContextEl.offsetWidth;
-                    nLeftRegionWidth = nContextElX;
-                    nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
     
-                    setHorizontalPosition();
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElX = Dom.getX(oContextEl) - scrollX;
+                        nContextElWidth = oContextEl.offsetWidth;
+                        nLeftRegionWidth = nContextElX;
+                        nRightRegionWidth = (viewPortWidth - (nContextElX + nContextElWidth));
+        
+                        setHorizontalPosition();
+                        
+                        xNew = this.cfg.getProperty("x");
+                    
+                    }
+                    else {
 
-                }
-                
-                xNew = this.cfg.getProperty("x");
-            
-            }
-            else {
+                        if (x < leftConstraint) {
+                            xNew = leftConstraint;
+                        } else if (x > rightConstraint) {
+                            xNew = rightConstraint;
+                        }
 
-                if (bCanConstrain) {
-    
-                    leftConstraint = scrollX + nViewportOffset;
-                    rightConstraint = 
-                        scrollX + viewPortWidth - nOverlayOffsetWidth - nViewportOffset;
-    
-                    if (x < leftConstraint) {
-                        xNew = leftConstraint;
-                    } else if (x > rightConstraint) {
-                        xNew = rightConstraint;
                     }
+
                 } else {
+                    //	The "x" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "x" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.                
                     xNew = nViewportOffset + scrollX;
                 }
-            
+
             }
 
             return xNew;
@@ -3586,8 +3699,8 @@
                 nTopRegionHeight,
                 nBottomRegionHeight,
 
-                topConstraint,
-                bottomConstraint,
+                topConstraint = scrollY + nViewportOffset,
+                bottomConstraint = scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset,
 
                 yNew = y,
                 
@@ -3678,42 +3791,56 @@
             };
 
 
-            if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
-            	oOverlapPositions[(aContext[1] + aContext[2])]) {
+            // Determine if the current value for the Overlay's "y" configuration property will
+            // result in the Overlay being positioned outside the boundaries of the viewport
 
-                if (bCanConstrain) {
+            if (y < topConstraint || y  > bottomConstraint) {
+        
+                // The current value for the Overlay's "y" configuration property WILL
+                // result in the Overlay being positioned outside the boundaries of the viewport
 
-                    oContextEl = aContext[0];
-                    nContextElHeight = oContextEl.offsetHeight;
-                    nContextElY = (Dom.getY(oContextEl) - scrollY);
-    
-                    nTopRegionHeight = nContextElY;
-                    nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
-    
-                    setVerticalPosition();
-                
-                }
+                if (bCanConstrain) {	
 
-                yNew = oOverlay.cfg.getProperty("y");
+                    //	If the "preventcontextoverlap" configuration property is set to "true", 
+                    //	try to flip the Overlay to both keep it inside the boundaries of the 
+                    //	viewport AND from overlaping its context element.
+        
+                    if (this.cfg.getProperty("preventcontextoverlap") && aContext && 
+                        oOverlapPositions[(aContext[1] + aContext[2])]) {
+        
+                        oContextEl = aContext[0];
+                        nContextElHeight = oContextEl.offsetHeight;
+                        nContextElY = (Dom.getY(oContextEl) - scrollY);
+        
+                        nTopRegionHeight = nContextElY;
+                        nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+        
+                        setVerticalPosition();
+        
+                        yNew = oOverlay.cfg.getProperty("y");
+        
+                    }
+                    else {
 
-            }
-            else {
-
-                if (bCanConstrain) {
-    
-                    topConstraint = scrollY + nViewportOffset;
-                    bottomConstraint = 
-                        scrollY + viewPortHeight - nOverlayOffsetHeight - nViewportOffset;
-    
-                    if (y < topConstraint) {
-                        yNew  = topConstraint;
-                    } else if (y  > bottomConstraint) {
-                        yNew  = bottomConstraint;
+                        if (y < topConstraint) {
+                            yNew  = topConstraint;
+                        } else if (y  > bottomConstraint) {
+                            yNew  = bottomConstraint;
+                        }
+                    
                     }
-                } else {
+                
+                }
+                else {
+                
+                    //	The "y" configuration property cannot be set to a value that will keep
+                    //	entire Overlay inside the boundary of the viewport.  Therefore, set  
+                    //	the "y" configuration property to scrollY to keep as much of the 
+                    //	Overlay inside the viewport as possible.
+                
                     yNew = nViewportOffset + scrollY;
                 }
-
+        
             }
 
             return yNew;
@@ -3761,6 +3888,10 @@
 
             this.cfg.setProperty("xy", [parseInt(x, 10), parseInt(y, 10)]);
             this.cfg.refireEvent("iframe");
+
+            if (UA.webkit) {
+                this.forceContainerRedraw();
+            }
         },
 
         /**
@@ -3855,7 +3986,10 @@
          * out the containers height
          */
         _autoFillOnHeightChange : function(type, args, el) {
-            this.fillHeight(el);
+            var height = this.cfg.getProperty("height");
+            if ((height && height !== "auto") || (height === 0)) {
+                this.fillHeight(el);
+            }
         },
 
         /**
@@ -3931,13 +4065,13 @@
                         Dom.removeClass(container, "yui-override-padding");
                     }
     
-                    remaining = total - filled;
+                    remaining = Math.max(total - filled, 0);
     
                     Dom.setStyle(el, "height", remaining + "px");
     
                     // Re-adjust height if required, to account for el padding and border
                     if (el.offsetHeight != remaining) {
-                        remaining = remaining - (el.offsetHeight - remaining);
+                        remaining = Math.max(remaining - (el.offsetHeight - remaining), 0);
                     }
                     Dom.setStyle(el, "height", remaining + "px");
                 }
@@ -4039,6 +4173,26 @@
         },
 
         /**
+         * Can be used to force the container to repaint/redraw it's contents.
+         * <p>
+         * By default applies and then removes a 1px bottom margin through the 
+         * application/removal of a "yui-force-redraw" class.
+         * </p>
+         * <p>
+         * It is currently used by Overlay to force a repaint for webkit 
+         * browsers, when centering.
+         * </p>
+         * @method forceContainerRedraw
+         */
+        forceContainerRedraw : function() {
+            var c = this;
+            Dom.addClass(c.element, "yui-force-redraw");
+            setTimeout(function() {
+                Dom.removeClass(c.element, "yui-force-redraw");
+            }, 0);
+        },
+
+        /**
         * Returns a String representation of the object.
         * @method toString
         * @return {String} The string representation of the Overlay.
@@ -4485,8 +4639,7 @@
         */
         register: function (overlay) {
 
-            var zIndex,
-                registered = false,
+            var registered = false,
                 i,
                 n;
 
@@ -4782,7 +4935,7 @@
 
             obj.handleUnderlayStart();
 
-            Dom.setStyle(obj.overlay.element, "visibility", "visible");
+            obj.overlay._setDomVisibility(true);
             Dom.setStyle(obj.overlay.element, "opacity", 0);
         };
 
@@ -4809,7 +4962,7 @@
             if (obj.overlay.element.style.filter) {
                 obj.overlay.element.style.filter = null;
             }
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
+            obj.overlay._setDomVisibility(false);
             Dom.setStyle(obj.overlay.element, "opacity", 1);
 
             obj.handleUnderlayComplete();
@@ -4868,7 +5021,7 @@
             if (Dom.getStyle(obj.overlay.element, "visibility") == 
                 "hidden" && currentX < x) {
 
-                Dom.setStyle(obj.overlay.element, "visibility", "visible");
+                obj.overlay._setDomVisibility(true);
 
             }
         
@@ -4904,8 +5057,8 @@
         };
         
         slide.handleCompleteAnimateOut = function (type, args, obj) {
-            Dom.setStyle(obj.overlay.element, "visibility", "hidden");
-        
+            obj.overlay._setDomVisibility(false);
+
             obj.overlay.cfg.setProperty("xy", [x, y]);
             obj.animateOutCompleteEvent.fire();
         };
@@ -5046,4 +5199,4 @@
 
 })();
 
-YAHOO.register("containercore", YAHOO.widget.Module, {version: "2.6.0", build: "1321"});
+YAHOO.register("containercore", YAHOO.widget.Module, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/cookie/README
===================================================================
--- trunk/root/static/yui/cookie/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/cookie/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,20 +0,0 @@
-YUI Library - Cookie Utility - Release Notes
-
-2.5.0
-
-  * Beta release
-  
-2.5.1
-
-  * Fixed error in parsing routine that incorrectly handled special characters.
-  
-2.5.2
-
-  * No changes.
-  
-2.6.0
-
-  * Implemented removeSub() method.
-  * Fixed parsing error when cookie name has special characters in it (SF 1985549).
-  * Fixed parsing issue when cookie string was empty (SF 2007223).
-  * Out of beta.

Modified: trunk/root/static/yui/cookie/cookie-debug.js
===================================================================
--- trunk/root/static/yui/cookie/cookie-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/cookie/cookie-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Utilities for cookie management
@@ -136,18 +136,22 @@
             var decodeValue = (decode === false ? function(s){return s;} : decodeURIComponent);
         
             if (/[^=]+=[^=;]?(?:; [^=]+=[^=]?)?/.test(text)){            
-                var cookieParts /*:Array*/ = text.split(/;\s/g);
-                var cookieName /*:String*/ = null;
-                var cookieValue /*:String*/ = null;
-                var cookieNameValue /*:Array*/ = null;
+                var cookieParts /*:Array*/ = text.split(/;\s/g),
+                    cookieName /*:String*/ = null,
+                    cookieValue /*:String*/ = null,
+                    cookieNameValue /*:Array*/ = null;
                 
                 for (var i=0, len=cookieParts.length; i < len; i++){
                 
                     //check for normally-formatted cookie (name-value)
                     cookieNameValue = cookieParts[i].match(/([^=]+)=/i);
                     if (cookieNameValue instanceof Array){
-                        cookieName = decodeURIComponent(cookieNameValue[1]);
-                        cookieValue = decodeValue(cookieParts[i].substring(cookieNameValue[1].length+1));
+                        try {
+                            cookieName = decodeURIComponent(cookieNameValue[1]);
+                            cookieValue = decodeValue(cookieParts[i].substring(cookieNameValue[1].length+1));
+                        } catch (ex){
+                            //ignore the entire cookie - encoding is likely invalid
+                        }
                     } else {
                         //means the cookie does not have an "=", so treat it as a boolean flag
                         cookieName = decodeURIComponent(cookieParts[i]);
@@ -421,4 +425,5 @@
     }    
 
 };
-YAHOO.register("cookie", YAHOO.util.Cookie, {version: "2.6.0", build: "1321"});
+
+YAHOO.register("cookie", YAHOO.util.Cookie, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/cookie/cookie-min.js
===================================================================
--- trunk/root/static/yui/cookie/cookie-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/cookie/cookie-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.namespace("util");YAHOO.util.Cookie={_createCookieString:function(B,D,C,A){var F=YAHOO.lang;var E=encodeURIComponent(B)+"="+(C?encodeURIComponent(D):D);if(F.isObject(A)){if(A.expires instanceof Date){E+="; expires="+A.expires.toGMTString();}if(F.isString(A.path)&&A.path!=""){E+="; path="+A.path;}if(F.isString(A.domain)&&A.domain!=""){E+="; domain="+A.domain;}if(A.secure===true){E+="; secure";}}return E;},_createCookieHashString:function(B){var D=YAHOO.lang;if(!D.isObject(B)){throw new TypeError("Cookie._createCookieHashString(): Argument must be an object.");}var C=new Array();for(var A in B){if(D.hasOwnProperty(B,A)&&!D.isFunction(B[A])&&!D.isUndefined(B[A])){C.push(encodeURIComponent(A)+"="+encodeURIComponent(String(B[A])));}}return C.join("&");},_parseCookieHash:function(E){var D=E.split("&"),F=null,C=new Object();if(E.length>0){for(var B=0,A=D.length;B<A;B++){F=D[B].split("=");C[decodeURIComponent(F[0])]=decodeURIComponent(F[1]);}}return C;},_parseCookieString:fun!
 ction(I,A){var J=new Object();if(YAHOO.lang.isString(I)&&I.length>0){var B=(A===false?function(K){return K;}:decodeURIComponent);if(/[^=]+=[^=;]?(?:; [^=]+=[^=]?)?/.test(I)){var G=I.split(/;\s/g);var H=null;var C=null;var E=null;for(var D=0,F=G.length;D<F;D++){E=G[D].match(/([^=]+)=/i);if(E instanceof Array){H=decodeURIComponent(E[1]);C=B(G[D].substring(E[1].length+1));}else{H=decodeURIComponent(G[D]);C=H;}J[H]=C;}}}return J;},get:function(A,B){var D=YAHOO.lang;var C=this._parseCookieString(document.cookie);if(!D.isString(A)||A===""){throw new TypeError("Cookie.get(): Cookie name must be a non-empty string.");}if(D.isUndefined(C[A])){return null;}if(!D.isFunction(B)){return C[A];}else{return B(C[A]);}},getSub:function(A,C,B){var E=YAHOO.lang;var D=this.getSubs(A);if(D!==null){if(!E.isString(C)||C===""){throw new TypeError("Cookie.getSub(): Subcookie name must be a non-empty string.");}if(E.isUndefined(D[C])){return null;}if(!E.isFunction(B)){return D[C];}else{return B(D[C])!
 ;}}else{return null;}},getSubs:function(A){if(!YAHOO.lang.isSt!
 ring(A)|
|A===""){throw new TypeError("Cookie.getSubs(): Cookie name must be a non-empty string.");}var B=this._parseCookieString(document.cookie,false);if(YAHOO.lang.isString(B[A])){return this._parseCookieHash(B[A]);}return null;},remove:function(B,A){if(!YAHOO.lang.isString(B)||B===""){throw new TypeError("Cookie.remove(): Cookie name must be a non-empty string.");}A=A||{};A.expires=new Date(0);return this.set(B,"",A);},removeSub:function(B,D,A){if(!YAHOO.lang.isString(B)||B===""){throw new TypeError("Cookie.removeSub(): Cookie name must be a non-empty string.");}if(!YAHOO.lang.isString(D)||D===""){throw new TypeError("Cookie.removeSub(): Subcookie name must be a non-empty string.");}var C=this.getSubs(B);if(YAHOO.lang.isObject(C)&&YAHOO.lang.hasOwnProperty(C,D)){delete C[D];return this.setSubs(B,C,A);}else{return"";}},set:function(B,C,A){var E=YAHOO.lang;if(!E.isString(B)){throw new TypeError("Cookie.set(): Cookie name must be a string.");}if(E.isUndefined(C)){throw new TypeError!
 ("Cookie.set(): Value cannot be undefined.");}var D=this._createCookieString(B,C,true,A);document.cookie=D;return D;},setSub:function(B,D,C,A){var F=YAHOO.lang;if(!F.isString(B)||B===""){throw new TypeError("Cookie.setSub(): Cookie name must be a non-empty string.");}if(!F.isString(D)||D===""){throw new TypeError("Cookie.setSub(): Subcookie name must be a non-empty string.");}if(F.isUndefined(C)){throw new TypeError("Cookie.setSub(): Subcookie value cannot be undefined.");}var E=this.getSubs(B);if(!F.isObject(E)){E=new Object();}E[D]=C;return this.setSubs(B,E,A);},setSubs:function(B,C,A){var E=YAHOO.lang;if(!E.isString(B)){throw new TypeError("Cookie.setSubs(): Cookie name must be a string.");}if(!E.isObject(C)){throw new TypeError("Cookie.setSubs(): Cookie value must be an object.");}var D=this._createCookieString(B,this._createCookieHashString(C),false,A);document.cookie=D;return D;}};YAHOO.register("cookie",YAHOO.util.Cookie,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.namespace("util");YAHOO.util.Cookie={_createCookieString:function(B,D,C,A){var F=YAHOO.lang;var E=encodeURIComponent(B)+"="+(C?encodeURIComponent(D):D);if(F.isObject(A)){if(A.expires instanceof Date){E+="; expires="+A.expires.toGMTString();}if(F.isString(A.path)&&A.path!=""){E+="; path="+A.path;}if(F.isString(A.domain)&&A.domain!=""){E+="; domain="+A.domain;}if(A.secure===true){E+="; secure";}}return E;},_createCookieHashString:function(B){var D=YAHOO.lang;if(!D.isObject(B)){throw new TypeError("Cookie._createCookieHashString(): Argument must be an object.");}var C=new Array();for(var A in B){if(D.hasOwnProperty(B,A)&&!D.isFunction(B[A])&&!D.isUndefined(B[A])){C.push(encodeURIComponent(A)+"="+encodeURIComponent(String(B[A])));}}return C.join("&");},_parseCookieHash:function(E){var D=E.split("&"),F=null,C=new Object();if(E.length>0){for(var B=0,A=D.length;B<A;B++){F=D[B].split("=");C[decodeURIComponent(F[0])]=decodeURIComponent(F[1]);}}return C;},_parseCookieString:fun!
 ction(J,A){var K=new Object();if(YAHOO.lang.isString(J)&&J.length>0){var B=(A===false?function(L){return L;}:decodeURIComponent);if(/[^=]+=[^=;]?(?:; [^=]+=[^=]?)?/.test(J)){var H=J.split(/;\s/g),I=null,C=null,E=null;for(var D=0,F=H.length;D<F;D++){E=H[D].match(/([^=]+)=/i);if(E instanceof Array){try{I=decodeURIComponent(E[1]);C=B(H[D].substring(E[1].length+1));}catch(G){}}else{I=decodeURIComponent(H[D]);C=I;}K[I]=C;}}}return K;},get:function(A,B){var D=YAHOO.lang;var C=this._parseCookieString(document.cookie);if(!D.isString(A)||A===""){throw new TypeError("Cookie.get(): Cookie name must be a non-empty string.");}if(D.isUndefined(C[A])){return null;}if(!D.isFunction(B)){return C[A];}else{return B(C[A]);}},getSub:function(A,C,B){var E=YAHOO.lang;var D=this.getSubs(A);if(D!==null){if(!E.isString(C)||C===""){throw new TypeError("Cookie.getSub(): Subcookie name must be a non-empty string.");}if(E.isUndefined(D[C])){return null;}if(!E.isFunction(B)){return D[C];}else{return B(D[!
 C]);}}else{return null;}},getSubs:function(A){if(!YAHOO.lang.i!
 sString(
A)||A===""){throw new TypeError("Cookie.getSubs(): Cookie name must be a non-empty string.");}var B=this._parseCookieString(document.cookie,false);if(YAHOO.lang.isString(B[A])){return this._parseCookieHash(B[A]);}return null;},remove:function(B,A){if(!YAHOO.lang.isString(B)||B===""){throw new TypeError("Cookie.remove(): Cookie name must be a non-empty string.");}A=A||{};A.expires=new Date(0);return this.set(B,"",A);},removeSub:function(B,D,A){if(!YAHOO.lang.isString(B)||B===""){throw new TypeError("Cookie.removeSub(): Cookie name must be a non-empty string.");}if(!YAHOO.lang.isString(D)||D===""){throw new TypeError("Cookie.removeSub(): Subcookie name must be a non-empty string.");}var C=this.getSubs(B);if(YAHOO.lang.isObject(C)&&YAHOO.lang.hasOwnProperty(C,D)){delete C[D];return this.setSubs(B,C,A);}else{return"";}},set:function(B,C,A){var E=YAHOO.lang;if(!E.isString(B)){throw new TypeError("Cookie.set(): Cookie name must be a string.");}if(E.isUndefined(C)){throw new TypeEr!
 ror("Cookie.set(): Value cannot be undefined.");}var D=this._createCookieString(B,C,true,A);document.cookie=D;return D;},setSub:function(B,D,C,A){var F=YAHOO.lang;if(!F.isString(B)||B===""){throw new TypeError("Cookie.setSub(): Cookie name must be a non-empty string.");}if(!F.isString(D)||D===""){throw new TypeError("Cookie.setSub(): Subcookie name must be a non-empty string.");}if(F.isUndefined(C)){throw new TypeError("Cookie.setSub(): Subcookie value cannot be undefined.");}var E=this.getSubs(B);if(!F.isObject(E)){E=new Object();}E[D]=C;return this.setSubs(B,E,A);},setSubs:function(B,C,A){var E=YAHOO.lang;if(!E.isString(B)){throw new TypeError("Cookie.setSubs(): Cookie name must be a string.");}if(!E.isObject(C)){throw new TypeError("Cookie.setSubs(): Cookie value must be an object.");}var D=this._createCookieString(B,this._createCookieHashString(C),false,A);document.cookie=D;return D;}};YAHOO.register("cookie",YAHOO.util.Cookie,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/cookie/cookie.js
===================================================================
--- trunk/root/static/yui/cookie/cookie.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/cookie/cookie.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Utilities for cookie management
@@ -136,18 +136,22 @@
             var decodeValue = (decode === false ? function(s){return s;} : decodeURIComponent);
         
             if (/[^=]+=[^=;]?(?:; [^=]+=[^=]?)?/.test(text)){            
-                var cookieParts /*:Array*/ = text.split(/;\s/g);
-                var cookieName /*:String*/ = null;
-                var cookieValue /*:String*/ = null;
-                var cookieNameValue /*:Array*/ = null;
+                var cookieParts /*:Array*/ = text.split(/;\s/g),
+                    cookieName /*:String*/ = null,
+                    cookieValue /*:String*/ = null,
+                    cookieNameValue /*:Array*/ = null;
                 
                 for (var i=0, len=cookieParts.length; i < len; i++){
                 
                     //check for normally-formatted cookie (name-value)
                     cookieNameValue = cookieParts[i].match(/([^=]+)=/i);
                     if (cookieNameValue instanceof Array){
-                        cookieName = decodeURIComponent(cookieNameValue[1]);
-                        cookieValue = decodeValue(cookieParts[i].substring(cookieNameValue[1].length+1));
+                        try {
+                            cookieName = decodeURIComponent(cookieNameValue[1]);
+                            cookieValue = decodeValue(cookieParts[i].substring(cookieNameValue[1].length+1));
+                        } catch (ex){
+                            //ignore the entire cookie - encoding is likely invalid
+                        }
                     } else {
                         //means the cookie does not have an "=", so treat it as a boolean flag
                         cookieName = decodeURIComponent(cookieParts[i]);
@@ -421,4 +425,5 @@
     }    
 
 };
-YAHOO.register("cookie", YAHOO.util.Cookie, {version: "2.6.0", build: "1321"});
+
+YAHOO.register("cookie", YAHOO.util.Cookie, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/datasource/README
===================================================================
--- trunk/root/static/yui/datasource/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datasource/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,140 +0,0 @@
-DataSource Release Notes
-
-**** version 2.6.0 ****
-
-* GA release.
-* The DataSource class has been refactored into a DataSourceBase base class and
-the subclasses LocalDataSource, FunctionDataSource, XHRDataSource, and
-ScriptNodeDataSource. While backward compatibility of the YAHOO.util.DataSource
-constructor has been maintained, implementers should be aware that calling
-new YAHOO.util.DataSource() now actually returns one of these
-subclasses. Implementers can alternatively call a subclass constructor directly.
-The DataSource constructor returns one of the subclasses based on the oLiveData
-passed to it, or the dataType config value. This class-based architecture no
-longer meaningfully supports swapping data types on the fly.
-* Empty responses of TYPE_FLAT no longer return empty string results.
-* Parsing of totalRecords is no longer supported as a top-leval schema value.
-Implementers should access this value of using a metaField.
-* XML parsing has been updated for support of CDATA sections and long text values
-split into multiple nodes.
-* Now passing oCallback object to doBeforeCallback() and doBeforeParseData() methods.
-* YAHOO.util.Date now supports strftime formatting.
-
-**** version 2.5.2 ****
-
-* No changes.
-
-**** version 2.5.1 ****
-
-* Replaced custom function parsing with parsed/walked value locators for
-    responseSchema.resultsList, .fields, etc
-* Added metaFields to responseSchema to capture arbitrary response data
-
-**** version 2.5.0 ****
-
-* doBeforeCallback() - The second argument is now oFullResponse rather than oRawResponse.
-* handleResponse() -
-      o oCallback is now an object literal pointing to success and failure
-      handlers and can contain scope and argument values.
-      o The oCaller argument is now deprecated.
-      o When callback function is passed oRequest and oParsedResponse values,
-      the oParsedResponse object now consistently returns the following values:
-            + tId (Number)
-            + results (Array)
-            + error (Boolean)
-            + totalResults (Number) (when available)
-* makeConnection() -
-      o oCallback is now an object literal pointing to success and failure
-      handlers and can contain scope and argument values.
-      o The oCaller argument is now deprecated.
-* parseArrayData() - The second argument is now oFullResponse rather than oRawResponse.
-* parseHTMLTableData() - The second argument is now oFullResponse rather than oRawResponse.
-* parseJsonData() - The second argument is now oFullResponse rather than oRawResponse.
-* parseTextData() - The second argument is now oFullResponse rather than oRawResponse.
-* parseXMLData() - The second argument is now oFullResponse rather than oRawResponse.
-* sendRequest() -
-      o oCallback is now an object literal pointing to success and failure
-      handlers and can contain scope and argument values.
-      o The oCaller argument is now deprecated.
-* setInterval() -
-      o oCallback is now an object literal pointing to success and failure
-      handlers and can contain scope and argument values.
-      o The oCaller argument is now deprecated.
-* cacheRequestEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* dataErrorEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* getCachedResponseEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* requestEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* responseCacheEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* responseEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-* responseParseEvent - oArgs.caller is now deprecated in favor of oCallback object literal.
-
-
-
-**** version 2.4.0 ****
-
-* Support for YUI JSON Utility.
-
-* Implemented setInterval(), clearInterval(), and clearAllIntervals() for polling.
-
-* Text data parsing algorithm now tolerates newlines within and at the end of data.
-
-
-
-**** version 2.3.1 ****
-
-* No changes.
-
-
-
-**** version 2.3.0 ****
-
-* DataSource requests over XHR no longer automatically insert a "?" in the URIs
-between the host and the query. Implementers should explicitly include the
-question mark if it is required by your server. Please refer to the DataTable XHR
-examples for implementation details.
-
-* DataSource provides the following static type conversion methods:
-DataSource.parseDate(), DataSource.parseNumber(), and DataSource.parseString().
-These are executed in the scope of the DataSource instance.
-
-* DataSource now supports the following values for the property xhrConnMode:
-    "queueRequests"
-    "allowAll"
-    "cancelStaleRequests"
-    "ignoreStaleResponses"
-
-* Added property connMethodPost to support POST requests.
-
-* The parsed response object passed to the callback function now has the
-following properties:
-    tId {Number} Unique transaction ID
-    results {Array} Array of parsed data results
-    error {Boolean} True if there was an error
-
-
-
-**** version 2.2.2 ***
-
-* No changes.
-
-
-
-**** version 2.2.1 ***
-
-* Fixed parseTextData() to longer reverse-order data or truncate first record.
-* Fixed bug where data values of 0 (zero) were being converted to empty string.
-* Fixed erroneous undefined values created by parseDataArray().
-* Callback functions now receive an additional argument in the form of a boolean
-to indicate data error.
-* Support for nested JSON data.
-* Support for responseShema.fields.converter to take string response and custom
-convert data type.
-* Added static converter methods YAHOO.util.DataSource.convertNumber and
-YAHOO.util.DataSource.convertDate.
-* Improved type checking with YAHOO.lang.
-
-
-
-**** version 2.2.0 ***
-
-* Beta release.

Modified: trunk/root/static/yui/datasource/datasource-debug.js
===================================================================
--- trunk/root/static/yui/datasource/datasource-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datasource/datasource-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -352,7 +352,7 @@
  * @method DataSourceBase.parseString
  * @param oData {String | Number | Boolean | Date | Array | Object} Data to parse.
  * The special values null and undefined will return null.
- * @return {Number} A string, or null.
+ * @return {String} A string, or null.
  * @static
  */
 parseString : function(oData) {
@@ -378,12 +378,16 @@
  * Converts data to type Number.
  *
  * @method DataSourceBase.parseNumber
- * @param oData {String | Number | Boolean | Null} Data to convert. Beware, null
- * returns as 0.
- * @return {Number} A number, or null if NaN.
+ * @param oData {String | Number | Boolean} Data to convert. Note, the following
+ * values return as null: null, undefined, NaN, "". 
+ * @return {Number} A number, or null.
  * @static
  */
 parseNumber : function(oData) {
+    if(!lang.isValue(oData) || (oData === "")) {
+        return null;
+    }
+
     //Convert to number
     var number = oData * 1;
     
@@ -581,6 +585,17 @@
  */
 responseSchema : null,
 
+/**
+ * Additional arguments passed to the JSON parse routine.  The JSON string
+ * is the assumed first argument (where applicable).  This property is not
+ * set by default, but the parse methods will use it if present.
+ *
+ * @property parseJSONArgs
+ * @type {MIXED|Array} If an Array, contents are used as individual arguments.
+ *                     Otherwise, value is used as an additional argument.
+ */
+// property intentionally undefined
+ 
 /////////////////////////////////////////////////////////////////////////////
 //
 // DataSourceBase public methods
@@ -773,7 +788,28 @@
 },
 
 /**
- * First looks for cached response, then sends request to live data.
+ * First looks for cached response, then sends request to live data. The
+ * following arguments are passed to the callback function:
+ *     <dl>
+ *     <dt><code>oRequest</code></dt>
+ *     <dd>The same value that was passed in as the first argument to sendRequest.</dd>
+ *     <dt><code>oParsedResponse</code></dt>
+ *     <dd>An object literal containing the following properties:
+ *         <dl>
+ *         <dt><code>tId</code></dt>
+ *         <dd>Unique transaction ID number.</dd>
+ *         <dt><code>results</code></dt>
+ *         <dd>Schema-parsed data results.</dd>
+ *         <dt><code>error</code></dt>
+ *         <dd>True in cases of data error.</dd>
+ *         <dt><code>cached</code></dt>
+ *         <dd>True when response is returned from DataSource cache.</dd> 
+ *         <dt><code>meta</code></dt>
+ *         <dd>Schema-parsed meta data.</dd>
+ *         </dl>
+ *     <dt><code>oPayload</code></dt>
+ *     <dd>The same value as was passed in as <code>argument</code> in the oCallback object literal.</dd>
+ *     </dl> 
  *
  * @method sendRequest
  * @param oRequest {Object} Request object.
@@ -905,6 +941,47 @@
             if(xhr && oRawResponse && oRawResponse.responseText) {
                 oFullResponse = oRawResponse.responseText; 
             }
+            try {
+                // Convert to JS array if it's a string
+                if(lang.isString(oFullResponse)) {
+                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
+                    // Check for YUI JSON Util
+                    if(lang.JSON) {
+                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
+                    }
+                    // Look for JSON parsers using an API similar to json2.js
+                    else if(window.JSON && JSON.parse) {
+                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
+                    }
+                    // Look for JSON parsers using an API similar to json.js
+                    else if(oFullResponse.parseJSON) {
+                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
+                    }
+                    // No JSON lib found so parse the string
+                    else {
+                        // Trim leading spaces
+                        while (oFullResponse.length > 0 &&
+                                (oFullResponse.charAt(0) != "{") &&
+                                (oFullResponse.charAt(0) != "[")) {
+                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
+                        }
+
+                        if(oFullResponse.length > 0) {
+                            // Strip extraneous stuff at the end
+                            var arrayEnd =
+Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
+                            oFullResponse = oFullResponse.substring(0,arrayEnd+1);
+
+                            // Turn the string into an object literal...
+                            // ...eval is necessary here
+                            oFullResponse = eval("(" + oFullResponse + ")");
+
+                        }
+                    }
+                }
+            }
+            catch(e1) {
+            }
             oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
             oParsedResponse = this.parseArrayData(oRequest, oFullResponse);
             break;
@@ -915,17 +992,18 @@
             try {
                 // Convert to JSON object if it's a string
                 if(lang.isString(oFullResponse)) {
+                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
                     // Check for YUI JSON Util
                     if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse(oFullResponse);
+                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
                     }
                     // Look for JSON parsers using an API similar to json2.js
                     else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse(oFullResponse);
+                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
                     }
                     // Look for JSON parsers using an API similar to json.js
                     else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON();
+                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
                     }
                     // No JSON lib found so parse the string
                     else {
@@ -957,7 +1035,9 @@
             break;
         case DS.TYPE_HTMLTABLE:
             if(xhr && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText;
+                var el = document.createElement('div');
+                el.innerHTML = oRawResponse.responseText;
+                oFullResponse = el.getElementsByTagName('table')[0];
             }
             oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
             oParsedResponse = this.parseHTMLTableData(oRequest, oFullResponse);
@@ -1290,11 +1370,10 @@
             // ...or in a node
             else {
                 var xmlNode = result.getElementsByTagName(key);
-                if(xmlNode && xmlNode.item(0) && xmlNode.item(0)) {
-                    data = xmlNode.item(0).firstChild.nodeValue;
+                if(xmlNode && xmlNode.item(0)) {
                     var item = xmlNode.item(0);
                     // For IE, then DOM...
-                    data = (item.text) ? item.text : (item.textContent) ? item.textContent : null;
+                    data = (item) ? ((item.text) ? item.text : (item.textContent) ? item.textContent : null) : null;
                     // ...then fallback, but check for multiple child nodes
                     if(!data) {
                         var datapieces = [];
@@ -1536,9 +1615,9 @@
                 }
 
                 // Process the results, flattening the records and/or applying parsers if needed
-                //if (fieldParsers.length || fieldPaths.length) {
-                    for (i = resultsList.length - 1; i >= 0; --i) {
-                        var r = resultsList[i], rec = {};
+                for (i = resultsList.length - 1; i >= 0; --i) {
+                    var r = resultsList[i], rec = {};
+                    if(r) {
                         for (j = simpleFields.length - 1; j >= 0; --j) {
                             // Bug 1777850: data might be held in an array
                             rec[simpleFields[j].key] =
@@ -1557,9 +1636,9 @@
                                 rec[p] = null;
                             }
                         }
-                        results[i] = rec;
                     }
-                //}
+                    results[i] = rec;
+                }
             }
             else {
                 results = resultsList;
@@ -1576,7 +1655,7 @@
             }
 
         } else {
-            YAHOO.log("JSON data could not be parsed: " +
+            YAHOO.log("JSON data could not be parsed due to invalid responseSchema.resultsList or invalid response: " +
                     lang.dump(oFullResponse), "error", this.toString());
 
             oParsedResponse.error = true;
@@ -1610,41 +1689,47 @@
     var fields = this.responseSchema.fields;
     var oParsedResponse = {results:[]};
 
-    // Iterate through each TBODY
-    for(var i=0; i<elTable.tBodies.length; i++) {
-        var elTbody = elTable.tBodies[i];
-
-        // Iterate through each TR
-        for(var j=elTbody.rows.length-1; j>-1; j--) {
-            var elRow = elTbody.rows[j];
-            var oResult = {};
-            
-            for(var k=fields.length-1; k>-1; k--) {
-                var field = fields[k];
-                var key = (lang.isValue(field.key)) ? field.key : field;
-                var data = elRow.cells[k].innerHTML;
-
-                // Backward compatibility
-                if(!field.parser && field.converter) {
-                    field.parser = field.converter;
-                    YAHOO.log("The field property converter has been deprecated" +
-                            " in favor of parser", "warn", this.toString());
+    if(lang.isArray(fields)) {
+        // Iterate through each TBODY
+        for(var i=0; i<elTable.tBodies.length; i++) {
+            var elTbody = elTable.tBodies[i];
+    
+            // Iterate through each TR
+            for(var j=elTbody.rows.length-1; j>-1; j--) {
+                var elRow = elTbody.rows[j];
+                var oResult = {};
+                
+                for(var k=fields.length-1; k>-1; k--) {
+                    var field = fields[k];
+                    var key = (lang.isValue(field.key)) ? field.key : field;
+                    var data = elRow.cells[k].innerHTML;
+    
+                    // Backward compatibility
+                    if(!field.parser && field.converter) {
+                        field.parser = field.converter;
+                        YAHOO.log("The field property converter has been deprecated" +
+                                " in favor of parser", "warn", this.toString());
+                    }
+                    var parser = (typeof field.parser === 'function') ?
+                        field.parser :
+                        DS.Parser[field.parser+''];
+                    if(parser) {
+                        data = parser.call(this, data);
+                    }
+                    // Safety measure
+                    if(data === undefined) {
+                        data = null;
+                    }
+                    oResult[key] = data;
                 }
-                var parser = (typeof field.parser === 'function') ?
-                    field.parser :
-                    DS.Parser[field.parser+''];
-                if(parser) {
-                    data = parser.call(this, data);
-                }
-                // Safety measure
-                if(data === undefined) {
-                    data = null;
-                }
-                oResult[key] = data;
+                oParsedResponse.results[j] = oResult;
             }
-            oParsedResponse.results[j] = oResult;
         }
     }
+    else {
+        bError = true;
+        YAHOO.log("Invalid responseSchema.fields", "error", this.toString());
+    }
 
     if(bError) {
         YAHOO.log("HTML TABLE data could not be parsed: " +
@@ -1707,7 +1792,7 @@
         this.responseType = DS.TYPE_JSARRAY;
     }
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.LocalDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // LocalDataSource extends DataSourceBase
@@ -1746,7 +1831,7 @@
     this.dataType = DS.TYPE_JSFUNCTION;
     oLiveData = oLiveData || function() {};
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.FunctionDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // FunctionDataSource extends DataSourceBase
@@ -1754,6 +1839,24 @@
 
 /////////////////////////////////////////////////////////////////////////////
 //
+// FunctionDataSource public properties
+//
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Context in which to execute the function. By default, is the DataSource
+ * instance itself. If set, the function will receive the DataSource instance
+ * as an additional argument. 
+ *
+ * @property scope
+ * @type Object
+ * @default null
+ */
+scope : null,
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
 // FunctionDataSource public methods
 //
 /////////////////////////////////////////////////////////////////////////////
@@ -1774,8 +1877,10 @@
 
     // Pass the request in as a parameter and
     // forward the return value to the handler
-    var oRawResponse = this.liveData(oRequest);
     
+    
+    var oRawResponse = (this.scope) ? this.liveData.call(this.scope, oRequest, this) : this.liveData(oRequest);
+    
     // Try to sniff data type if it has not been defined
     if(this.responseType === DS.TYPE_UNKNOWN) {
         if(YAHOO.lang.isArray(oRawResponse)) { // array
@@ -1835,7 +1940,7 @@
     this.dataType = DS.TYPE_SCRIPTNODE;
     oLiveData = oLiveData || "";
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.ScriptNodeDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // ScriptNodeDataSource extends DataSourceBase
@@ -1906,6 +2011,19 @@
 },
 
 /**
+ * Overridable method gives implementers access to modify the URI before the dynamic
+ * script node gets inserted. Implementers should take care not to return an
+ * invalid URI.
+ *
+ * @method doBeforeGetScriptNode
+ * @param {String} URI to the script 
+ * @return {String} URI to the script
+ */
+doBeforeGetScriptNode : function(sUri) {
+    return sUri;
+},
+
+/**
  * Overriding method passes query to Get Utility. The returned
  * response is then forwarded to the handleResponse function.
  *
@@ -1967,6 +2085,7 @@
     // We are now creating a request
     util.ScriptNodeDataSource._nPending++;
     var sUri = this.liveData + oRequest + this.generateRequestCallback(id);
+    sUri = this.doBeforeGetScriptNode(sUri);
     YAHOO.log("DataSource is querying URL " + sUri, "info", this.toString());
     this.getUtility.script(sUri,
             {autopurge: true,
@@ -2055,7 +2174,7 @@
     this.connMgr = this.connMgr || util.Connect;
     oLiveData = oLiveData || "";
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.XHRDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // XHRDataSource extends DataSourceBase
@@ -2161,7 +2280,7 @@
     var _xhrSuccess = function(oResponse) {
         // If response ID does not match last made request ID,
         // silently fail and wait for the next response
-        if(oResponse && (this.asyncMode == "ignoreStaleResponses") &&
+        if(oResponse && (this.connXhrMode == "ignoreStaleResponses") &&
                 (oResponse.tId != oQueue.conn.tId)) {
             YAHOO.log("Ignored stale response", "warn", this.toString());
             return null;
@@ -2434,23 +2553,29 @@
      *   <dt>suffix {String}</dd>
      *   <dd>String appended after each number, like " items" (note the space)</dd>
      *  </dl>
-     * @return {String} Formatted number for display.
+     * @return {String} Formatted number for display. Note, the following values
+     * return as "": null, undefined, NaN, "".     
      */
     format : function(nData, oConfig) {
+        var lang = YAHOO.lang;
+        if(!lang.isValue(nData) || (nData === "")) {
+            return "";
+        }
+
         oConfig = oConfig || {};
         
-        if(!YAHOO.lang.isNumber(nData)) {
+        if(!lang.isNumber(nData)) {
             nData *= 1;
         }
 
-        if(YAHOO.lang.isNumber(nData)) {
+        if(lang.isNumber(nData)) {
             var bNegative = (nData < 0);
             var sOutput = nData + "";
             var sDecimalSeparator = (oConfig.decimalSeparator) ? oConfig.decimalSeparator : ".";
             var nDotIndex;
 
             // Manage decimals
-            if(YAHOO.lang.isNumber(oConfig.decimalPlaces)) {
+            if(lang.isNumber(oConfig.decimalPlaces)) {
                 // Round to the correct decimal place
                 var nDecimalPlaces = oConfig.decimalPlaces;
                 var nDecimal = Math.pow(10, nDecimalPlaces);
@@ -2647,63 +2772,69 @@
      *
      * @method format
      * @param oDate {Date} Date.
-     * @param oConfig {Object} (Optional) Optional configuration values:
+     * @param oConfig {Object} (Optional) Object literal of configuration values:
      *  <dl>
-     *   <dt>format {String}</dt>
-     *   <dd>Any format defined by strftime is supported</dd>
-     *  </dl>
-     *  strftime has several format specifiers defined by the Open group at 
-     *  http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
-     *
-     *  PHP added a few of its own, defined at http://www.php.net/strftime
-     *
-     *  This javascript implementation supports all the PHP specifiers and a few more.
-     *
-     *  @arg \%a - abbreviated weekday name according to the current locale
-     *  @arg \%A - full weekday name according to the current locale
-     *  @arg \%b - abbreviated month name according to the current locale
-     *  @arg \%B - full month name according to the current locale
-     *  @arg \%c - preferred date and time representation for the current locale
-     *  @arg \%C - century number (the year divided by 100 and truncated to an integer, range 00 to 99)
-     *  @arg \%d - day of the month as a decimal number (range 01 to 31)
-     *  @arg \%D - same as %m/%d/%y
-     *  @arg \%e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')
-     *  @arg \%F - same as %Y-%m-%d (ISO 8601 date format)
-     *  @arg \%g - like %G, but without the century
-     *  @arg \%G - The 4-digit year corresponding to the ISO week number
-     *  @arg \%h - same as %b
-     *  @arg \%H - hour as a decimal number using a 24-hour clock (range 00 to 23)
-     *  @arg \%I - hour as a decimal number using a 12-hour clock (range 01 to 12)
-     *  @arg \%j - day of the year as a decimal number (range 001 to 366)
-     *  @arg \%k - hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)
-     *  @arg \%l - hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) 
-     *  @arg \%m - month as a decimal number (range 01 to 12)
-     *  @arg \%M - minute as a decimal number
-     *  @arg \%n - newline character
-     *  @arg \%p - either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale
-     *  @arg \%P - like %p, but lower case
-     *  @arg \%r - time in a.m. and p.m. notation equal to %I:%M:%S %p
-     *  @arg \%R - time in 24 hour notation equal to %H:%M
-     *  @arg \%s - number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC
-     *  @arg \%S - second as a decimal number
-     *  @arg \%t - tab character
-     *  @arg \%T - current time, equal to %H:%M:%S
-     *  @arg \%u - weekday as a decimal number [1,7], with 1 representing Monday
-     *  @arg \%U - week number of the current year as a decimal number, starting with
-     *             the first Sunday as the first day of the first week
-     *  @arg \%V - The ISO 8601:1988 week number of the current year as a decimal number,
-     *             range 01 to 53, where week 1 is the first week that has at least 4 days
-     *             in the current year, and with Monday as the first day of the week.
-     *  @arg \%w - day of the week as a decimal, Sunday being 0
-     *  @arg \%W - week number of the current year as a decimal number, starting with the
-     *             first Monday as the first day of the first week
-     *  @arg \%x - preferred date representation for the current locale without the time
-     *  @arg \%X - preferred time representation for the current locale without the date
-     *  @arg \%y - year as a decimal number without a century (range 00 to 99)
-     *  @arg \%Y - year as a decimal number including the century
-     *  @arg \%z - numerical time zone representation
-     *  @arg \%Z - time zone name or abbreviation
-     *  @arg \%% - a literal `\%' character
+     *   <dt>format <String></dt>
+     *   <dd>
+     *   <p>
+     *   Any strftime string is supported, such as "%I:%M:%S %p". strftime has several format specifiers defined by the Open group at 
+     *   <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html">http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html</a>
+     *   </p>
+     *   <p>   
+     *   PHP added a few of its own, defined at <a href="http://www.php.net/strftime">http://www.php.net/strftime</a>
+     *   </p>
+     *   <p>
+     *   This javascript implementation supports all the PHP specifiers and a few more.  The full list is below:
+     *   </p>
+     *   <dl>
+     *    <dt>%a</dt> <dd>abbreviated weekday name according to the current locale</dd>
+     *    <dt>%A</dt> <dd>full weekday name according to the current locale</dd>
+     *    <dt>%b</dt> <dd>abbreviated month name according to the current locale</dd>
+     *    <dt>%B</dt> <dd>full month name according to the current locale</dd>
+     *    <dt>%c</dt> <dd>preferred date and time representation for the current locale</dd>
+     *    <dt>%C</dt> <dd>century number (the year divided by 100 and truncated to an integer, range 00 to 99)</dd>
+     *    <dt>%d</dt> <dd>day of the month as a decimal number (range 01 to 31)</dd>
+     *    <dt>%D</dt> <dd>same as %m/%d/%y</dd>
+     *    <dt>%e</dt> <dd>day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')</dd>
+     *    <dt>%F</dt> <dd>same as %Y-%m-%d (ISO 8601 date format)</dd>
+     *    <dt>%g</dt> <dd>like %G, but without the century</dd>
+     *    <dt>%G</dt> <dd>The 4-digit year corresponding to the ISO week number</dd>
+     *    <dt>%h</dt> <dd>same as %b</dd>
+     *    <dt>%H</dt> <dd>hour as a decimal number using a 24-hour clock (range 00 to 23)</dd>
+     *    <dt>%I</dt> <dd>hour as a decimal number using a 12-hour clock (range 01 to 12)</dd>
+     *    <dt>%j</dt> <dd>day of the year as a decimal number (range 001 to 366)</dd>
+     *    <dt>%k</dt> <dd>hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)</dd>
+     *    <dt>%l</dt> <dd>hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) </dd>
+     *    <dt>%m</dt> <dd>month as a decimal number (range 01 to 12)</dd>
+     *    <dt>%M</dt> <dd>minute as a decimal number</dd>
+     *    <dt>%n</dt> <dd>newline character</dd>
+     *    <dt>%p</dt> <dd>either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale</dd>
+     *    <dt>%P</dt> <dd>like %p, but lower case</dd>
+     *    <dt>%r</dt> <dd>time in a.m. and p.m. notation equal to %I:%M:%S %p</dd>
+     *    <dt>%R</dt> <dd>time in 24 hour notation equal to %H:%M</dd>
+     *    <dt>%s</dt> <dd>number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC</dd>
+     *    <dt>%S</dt> <dd>second as a decimal number</dd>
+     *    <dt>%t</dt> <dd>tab character</dd>
+     *    <dt>%T</dt> <dd>current time, equal to %H:%M:%S</dd>
+     *    <dt>%u</dt> <dd>weekday as a decimal number [1,7], with 1 representing Monday</dd>
+     *    <dt>%U</dt> <dd>week number of the current year as a decimal number, starting with the
+     *            first Sunday as the first day of the first week</dd>
+     *    <dt>%V</dt> <dd>The ISO 8601:1988 week number of the current year as a decimal number,
+     *            range 01 to 53, where week 1 is the first week that has at least 4 days
+     *            in the current year, and with Monday as the first day of the week.</dd>
+     *    <dt>%w</dt> <dd>day of the week as a decimal, Sunday being 0</dd>
+     *    <dt>%W</dt> <dd>week number of the current year as a decimal number, starting with the
+     *            first Monday as the first day of the first week</dd>
+     *    <dt>%x</dt> <dd>preferred date representation for the current locale without the time</dd>
+     *    <dt>%X</dt> <dd>preferred time representation for the current locale without the date</dd>
+     *    <dt>%y</dt> <dd>year as a decimal number without a century (range 00 to 99)</dd>
+     *    <dt>%Y</dt> <dd>year as a decimal number including the century</dd>
+     *    <dt>%z</dt> <dd>numerical time zone representation</dd>
+     *    <dt>%Z</dt> <dd>time zone name or abbreviation</dd>
+     *    <dt>%%</dt> <dd>a literal `%' character</dd>
+     *   </dl>
+     *  </dd>
+     * </dl>
      * @param sLocale {String} (Optional) The locale to use when displaying days of week,
      *  months of the year, and other locale specific strings.  The following locales are
      *  built in:
@@ -2883,4 +3014,4 @@
 
 })();
 
-YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.6.0", build: "1321"});
+YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/datasource/datasource-min.js
===================================================================
--- trunk/root/static/yui/datasource/datasource-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datasource/datasource-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,12 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var lang=YAHOO.lang,util=YAHOO.util,Ev=util.Event;util.DataSourceBase=function(oLiveData,oConfigs){if(oLiveData===null||oLiveData===undefined){return ;}this.liveData=oLiveData;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(oConfigs&&(oConfigs.constructor==Object)){for(var sConfig in oConfigs){if(sConfig){this[sConfig]=oConfigs[sConfig];}}}var maxCacheEntries=this.maxCacheEntries;if(!lang.isNumber(maxCacheEntries)||(maxCacheEntries<0)){maxCacheEntries=0;}this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");var DS=util.DataSourceBase;this._sName="DataSource instance"+DS._nIndex;DS._nIndex++;};var DS=util.DataSourceBase;lang.augmentObject(DS,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JS!
 FUNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,issueCallback:function(callback,params,error,scope){if(lang.isFunction(callback)){callback.apply(scope,params);}else{if(lang.isObject(callback)){scope=callback.scope||scope||window;var callbackFunc=callback.success;if(error){callbackFunc=callback.failure;}if(callbackFunc){callbackFunc.apply(scope,params.concat([callback.argument]));}}}},parseString:function(oData){if(!lang.isValue(oData)){return null;}var string=oData+"";if(lang.isString(string)){return string;}else{return null;}},parseNumber:function(oData){var number=oData*1;if(lang.isNumber(number)){return number;}else{return null;}},convertNumber:function(oData){return DS.parseNumber(oData);},parseDate:function(oData){var date=null;if(!(oData instanceof Date)){date=new Date(oData);}else{return oData;}if(date instanceof Date){retur!
 n date;}else{return null;}},convertDate:function(oData){return!
  DS.pars
eDate(oData);}});DS.Parser={string:DS.parseString,number:DS.parseNumber,date:DS.parseDate};DS.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:DS.TYPE_UNKNOWN,responseType:DS.TYPE_UNKNOWN,responseSchema:null,toString:function(){return this._sName;},getCachedResponse:function(oRequest,oCallback,oCaller){var aCache=this._aCache;if(this.maxCacheEntries>0){if(!aCache){this._aCache=[];}else{var nCacheLength=aCache.length;if(nCacheLength>0){var oResponse=null;this.fireEvent("cacheRequestEvent",{request:oRequest,callback:oCallback,caller:oCaller});for(var i=nCacheLength-1;i>=0;i--){var oCacheElem=aCache[i];if(this.isCacheHit(oRequest,oCacheElem.request)){oResponse=oCacheElem.response;this.fireEvent("cacheResponseEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});if(i<nCacheLength-1){aCache.splice(i,1);this.addToCache(oRequest,oResponse);}oResponse.cached=true;break;}}return oResponse;}}}else{if(a!
 Cache){this._aCache=null;}}return null;},isCacheHit:function(oRequest,oCachedRequest){return(oRequest===oCachedRequest);},addToCache:function(oRequest,oResponse){var aCache=this._aCache;if(!aCache){return ;}while(aCache.length>=this.maxCacheEntries){aCache.shift();}var oCacheElem={request:oRequest,response:oResponse};aCache[aCache.length]=oCacheElem;this.fireEvent("responseCacheEvent",{request:oRequest,response:oResponse});},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent");}},setInterval:function(nMsec,oRequest,oCallback,oCaller){if(lang.isNumber(nMsec)&&(nMsec>=0)){var oSelf=this;var nId=setInterval(function(){oSelf.makeConnection(oRequest,oCallback,oCaller);},nMsec);this._aIntervals.push(nId);return nId;}else{}},clearInterval:function(nId){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){if(tracker[i]===nId){tracker.splice(i,1);clearInterval(nId);}}},clearAllIntervals:function(){var tracker=this._aIntervals||[];!
 for(var i=tracker.length-1;i>-1;i--){clearInterval(tracker[i])!
 ;}tracke
r=[];},sendRequest:function(oRequest,oCallback,oCaller){var oCachedResponse=this.getCachedResponse(oRequest,oCallback,oCaller);if(oCachedResponse){DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);return null;}return this.makeConnection(oRequest,oCallback,oCaller);},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData;this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;},handleResponse:function(oRequest,oRawResponse,oCallback,oCaller,tId){this.fireEvent("responseEvent",{tId:tId,request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller});var xhr=(this.dataType==DS.TYPE_XHR)?true:false;var oParsedResponse=null;var oFullResponse=oRawResponse;if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oRawResponse&&oRawResponse.getResponseHeader)?oRawResponse.getResponseHeader["Cont!
 ent-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}else{if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}}switch(this.responseType){case DS.TYPE_JSARRAY:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseArrayData(oRequest,oFullResponse);
-break;case DS.TYPE_JSON:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){if(lang.JSON){oFullResponse=lang.JSON.parse(oFullResponse);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse(oFullResponse);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON();}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var objEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,objEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseJSONData(oRequest,oFullResponse);break;case DS.TYPE_HTMLTABLE:if(xhr&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}oFullResponse=!
 this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseHTMLTableData(oRequest,oFullResponse);break;case DS.TYPE_XML:if(xhr&&oRawResponse.responseXML){oFullResponse=oRawResponse.responseXML;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseXMLData(oRequest,oFullResponse);break;case DS.TYPE_TEXT:if(xhr&&lang.isString(oRawResponse.responseText)){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseTextData(oRequest,oFullResponse);break;default:oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseData(oRequest,oFullResponse);break;}oParsedResponse=oParsedResponse||{};if(!oParsedResponse.results){oParsedResponse.results=[];}if(!oParsedResponse.meta){oParsedResponse.meta={};}if(oParsedResponse&&!oParsedResponse.error){oParsedResponse=this.doBeforeCallback(oRequest,oFullResponse,!
 oParsedResponse,oCallback);this.fireEvent("responseParseEvent"!
 ,{reques
t:oRequest,response:oParsedResponse,callback:oCallback,caller:oCaller});this.addToCache(oRequest,oParsedResponse);}else{oParsedResponse.error=true;this.fireEvent("dataErrorEvent",{request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});}oParsedResponse.tId=tId;DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);},doBeforeParseData:function(oRequest,oFullResponse,oCallback){return oFullResponse;},doBeforeCallback:function(oRequest,oFullResponse,oParsedResponse,oCallback){return oParsedResponse;},parseData:function(oRequest,oFullResponse){if(lang.isValue(oFullResponse)){var oParsedResponse={results:oFullResponse,meta:{}};return oParsedResponse;}return null;},parseArrayData:function(oRequest,oFullResponse){if(lang.isArray(oFullResponse)){var results=[],i,j,rec,field,data;if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(i=fields.length-1;i>=0;--i){if(typeof fields[!
 i]!=="object"){fields[i]={key:fields[i]};}}var parsers={},p;for(i=fields.length-1;i>=0;--i){p=(typeof fields[i].parser==="function"?fields[i].parser:DS.Parser[fields[i].parser+""])||fields[i].converter;if(p){parsers[fields[i].key]=p;}}var arrType=lang.isArray(oFullResponse[0]);for(i=oFullResponse.length-1;i>-1;i--){var oResult={};rec=oFullResponse[i];if(typeof rec==="object"){for(j=fields.length-1;j>-1;j--){field=fields[j];data=arrType?rec[j]:rec[field.key];if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}else{if(lang.isString(rec)){for(j=fields.length-1;j>-1;j--){field=fields[j];data=rec;if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}}results[i]=oResult;}}else{results=oFullResponse;}var oParsedResponse={results:results};return oParsedResponse;}return null;},parseTextData:function(oRequest,oFullResponse){if(lang.isString(oFullRe!
 sponse)){if(lang.isString(this.responseSchema.recordDelim)&&la!
 ng.isStr
ing(this.responseSchema.fieldDelim)){var oParsedResponse={results:[]};var recDelim=this.responseSchema.recordDelim;var fieldDelim=this.responseSchema.fieldDelim;if(oFullResponse.length>0){var newLength=oFullResponse.length-recDelim.length;if(oFullResponse.substr(newLength)==recDelim){oFullResponse=oFullResponse.substr(0,newLength);}if(oFullResponse.length>0){var recordsarray=oFullResponse.split(recDelim);for(var i=0,len=recordsarray.length,recIdx=0;i<len;++i){var bError=false,sRecord=recordsarray[i];if(lang.isString(sRecord)&&(sRecord.length>0)){var fielddataarray=recordsarray[i].split(fieldDelim);var oResult={};if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(var j=fields.length-1;j>-1;j--){try{var data=fielddataarray[j];if(lang.isString(data)){if(data.charAt(0)=='"'){data=data.substr(1);}if(data.charAt(data.length-1)=='"'){data=data.substr(0,data.length-1);}var field=fields[j];var key=(lang.isValue(field.key))?field.key:field;if(!field!
 .parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}else{bError=true;}}catch(e){bError=true;}}}else{oResult=fielddataarray;}if(!bError){oParsedResponse.results[recIdx++]=oResult;}}}}}return oParsedResponse;}}return null;},parseXMLResult:function(result){var oResult={},schema=this.responseSchema;try{for(var m=schema.fields.length-1;m>=0;m--){var field=schema.fields[m];var key=(lang.isValue(field.key))?field.key:field;var data=null;var xmlAttr=result.attributes.getNamedItem(key);if(xmlAttr){data=xmlAttr.value;}else{var xmlNode=result.getElementsByTagName(key);if(xmlNode&&xmlNode.item(0)&&xmlNode.item(0)){data=xmlNode.item(0).firstChild.nodeValue;var item=xmlNode.item(0);data=(item.text)?item.text:(item.textContent)?item.textContent:null;
-if(!data){var datapieces=[];for(var j=0,len=item.childNodes.length;j<len;j++){if(item.childNodes[j].nodeValue){datapieces[datapieces.length]=item.childNodes[j].nodeValue;}}if(datapieces.length>0){data=datapieces.join("");}}}}if(data===null){data="";}if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}}catch(e){}return oResult;},parseXMLData:function(oRequest,oFullResponse){var bError=false,schema=this.responseSchema,oParsedResponse={meta:{}},xmlList=null,metaNode=schema.metaNode,metaLocators=schema.metaFields||{},i,k,loc,v;try{xmlList=(schema.resultNode)?oFullResponse.getElementsByTagName(schema.resultNode):null;metaNode=metaNode?oFullResponse.getElementsByTagName(metaNode)[0]:oFullResponse;if(metaNode){for(k in metaLocators){if(lang.hasOwnProperty(metaLocators,k)){loc=metaLocators[k];v=!
 metaNode.getElementsByTagName(loc)[0];if(v){v=v.firstChild.nodeValue;}else{v=metaNode.attributes.getNamedItem(loc);if(v){v=v.value;}}if(lang.isValue(v)){oParsedResponse.meta[k]=v;}}}}}catch(e){}if(!xmlList||!lang.isArray(schema.fields)){bError=true;}else{oParsedResponse.results=[];for(i=xmlList.length-1;i>=0;--i){var oResult=this.parseXMLResult(xmlList.item(i));oParsedResponse.results[i]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;},parseJSONData:function(oRequest,oFullResponse){var oParsedResponse={results:[],meta:{}};if(lang.isObject(oFullResponse)&&this.responseSchema.resultsList){var schema=this.responseSchema,fields=schema.fields,resultsList=oFullResponse,results=[],metaFields=schema.metaFields||{},fieldParsers=[],fieldPaths=[],simpleFields=[],bError=false,i,len,j,v,key,parser,path;var buildPath=function(needle){var path=null,keys=[],i=0;if(needle){needle=needle.replace(/\[(['"])(.*?)\1\]/g,function(x,$1,$2){keys[i]=$2;return".@"+(i++)!
 ;}).replace(/\[(\d+)\]/g,function(x,$1){keys[i]=parseInt($1,10!
 )|0;retu
rn".@"+(i++);}).replace(/^\./,"");if(!/[^\w\.\$@]/.test(needle)){path=needle.split(".");for(i=path.length-1;i>=0;--i){if(path[i].charAt(0)==="@"){path[i]=keys[parseInt(path[i].substr(1),10)];}}}else{}}return path;};var walkPath=function(path,origin){var v=origin,i=0,len=path.length;for(;i<len&&v;++i){v=v[path[i]];}return v;};path=buildPath(schema.resultsList);if(path){resultsList=walkPath(path,oFullResponse);if(resultsList===undefined){bError=true;}}else{bError=true;}if(!resultsList){resultsList=[];}if(!lang.isArray(resultsList)){resultsList=[resultsList];}if(!bError){if(schema.fields){var field;for(i=0,len=fields.length;i<len;i++){field=fields[i];key=field.key||field;parser=((typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""])||field.converter;path=buildPath(key);if(parser){fieldParsers[fieldParsers.length]={key:key,parser:parser};}if(path){if(path.length>1){fieldPaths[fieldPaths.length]={key:key,path:path};}else{simpleFields[simpleFields.length]={key!
 :key,path:path[0]};}}else{}}for(i=resultsList.length-1;i>=0;--i){var r=resultsList[i],rec={};for(j=simpleFields.length-1;j>=0;--j){rec[simpleFields[j].key]=(r[simpleFields[j].path]!==undefined)?r[simpleFields[j].path]:r[j];}for(j=fieldPaths.length-1;j>=0;--j){rec[fieldPaths[j].key]=walkPath(fieldPaths[j].path,r);}for(j=fieldParsers.length-1;j>=0;--j){var p=fieldParsers[j].key;rec[p]=fieldParsers[j].parser(rec[p]);if(rec[p]===undefined){rec[p]=null;}}results[i]=rec;}}else{results=resultsList;}for(key in metaFields){if(lang.hasOwnProperty(metaFields,key)){path=buildPath(metaFields[key]);if(path){v=walkPath(path,oFullResponse);oParsedResponse.meta[key]=v;}}}}else{oParsedResponse.error=true;}oParsedResponse.results=results;}else{oParsedResponse.error=true;}return oParsedResponse;},parseHTMLTableData:function(oRequest,oFullResponse){var bError=false;var elTable=oFullResponse;var fields=this.responseSchema.fields;var oParsedResponse={results:[]};for(var i=0;i<elTable.tBodies.leng!
 th;i++){var elTbody=elTable.tBodies[i];for(var j=elTbody.rows.!
 length-1
;j>-1;j--){var elRow=elTbody.rows[j];var oResult={};for(var k=fields.length-1;k>-1;k--){var field=fields[k];var key=(lang.isValue(field.key))?field.key:field;var data=elRow.cells[k].innerHTML;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}oParsedResponse.results[j]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;}};lang.augmentProto(DS,util.EventProvider);util.LocalDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_LOCAL;if(oLiveData){if(YAHOO.lang.isArray(oLiveData)){this.responseType=DS.TYPE_JSARRAY;}else{if(oLiveData.nodeType&&oLiveData.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oLiveData.nodeName&&(oLiveData.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;oLiveData=oLiveData.cloneNode(true);}else{if(YAHOO.lan!
 g.isString(oLiveData)){this.responseType=DS.TYPE_TEXT;}else{if(YAHOO.lang.isObject(oLiveData)){this.responseType=DS.TYPE_JSON;}}}}}}else{oLiveData=[];this.responseType=DS.TYPE_JSARRAY;}this.constructor.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.LocalDataSource,DS);lang.augmentObject(util.LocalDataSource,DS);util.FunctionDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_JSFUNCTION;oLiveData=oLiveData||function(){};this.constructor.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.FunctionDataSource,DS,{makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData(oRequest);if(this.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.!
 TYPE_XML;
-}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;}});lang.augmentObject(util.FunctionDataSource,DS);util.ScriptNodeDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_SCRIPTNODE;oLiveData=oLiveData||"";this.constructor.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.ScriptNodeDataSource,DS,{getUtility:util.Get,asyncMode:"allowAll",scriptCallbackParam:"callback",generateRequestCallback:function(id){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]";},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCal!
 lback,caller:oCaller});if(util.ScriptNodeDataSource._nPending===0){util.ScriptNodeDataSource.callbacks=[];util.ScriptNodeDataSource._nId=0;}var id=util.ScriptNodeDataSource._nId;util.ScriptNodeDataSource._nId++;var oSelf=this;util.ScriptNodeDataSource.callbacks[id]=function(oRawResponse){if((oSelf.asyncMode!=="ignoreStaleResponses")||(id===util.ScriptNodeDataSource.callbacks.length-1)){if(oSelf.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){oSelf.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse.nodeType&&oRawResponse.nodeType==9){oSelf.responseType=DS.TYPE_XML;}else{if(oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){oSelf.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){oSelf.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){oSelf.responseType=DS.TYPE_TEXT;}}}}}}oSelf.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);}else{}delete util.ScriptNodeDataSource.callbacks[id];};!
 util.ScriptNodeDataSource._nPending++;var sUri=this.liveData+o!
 Request+
this.generateRequestCallback(id);this.getUtility.script(sUri,{autopurge:true,onsuccess:util.ScriptNodeDataSource._bumpPendingDown,onfail:util.ScriptNodeDataSource._bumpPendingDown});return tId;}});lang.augmentObject(util.ScriptNodeDataSource,DS);lang.augmentObject(util.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});util.XHRDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_XHR;this.connMgr=this.connMgr||util.Connect;oLiveData=oLiveData||"";this.constructor.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.XHRDataSource,DS,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(oRequest,oCallback,oCaller){var oRawResponse=null;var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oSelf=this;var oConnMgr=this.connMgr;var oQueue=this._oQueue;var _xhrSuccess=function(oResponse){if(oResponse&&(this.asyncMode=="ignoreStaleResponse!
 s")&&(oResponse.tId!=oQueue.conn.tId)){return null;}else{if(!oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);return null;}else{if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oResponse.getResponseHeader)?oResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}}this.handleResponse(oRequest,oResponse,oCallback,oCaller,tId);}}};var _xhrFailure=function(oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,callback:oCallback,caller:oCaller,message:DS.ERROR_DATAINVALID});if(lang.isString(this.liveData)&&lang.isString(oRequest)&&(this.liveData.lastIndexOf("?")!==this.liveData.length-1)&&(oRequest.indexOf("?")!==0)){}!
 oResponse=oResponse||{};oResponse.error=true;DS.issueCallback(!
 oCallbac
k,[oRequest,oResponse],true,oCaller);return null;};var _xhrCallback={success:_xhrSuccess,failure:_xhrFailure,scope:this};if(lang.isNumber(this.connTimeout)){_xhrCallback.timeout=this.connTimeout;}if(this.connXhrMode=="cancelStaleRequests"){if(oQueue.conn){if(oConnMgr.abort){oConnMgr.abort(oQueue.conn);oQueue.conn=null;}else{}}}if(oConnMgr&&oConnMgr.asyncRequest){var sLiveData=this.liveData;var isPost=this.connMethodPost;var sMethod=(isPost)?"POST":"GET";var sUri=(isPost||!lang.isValue(oRequest))?sLiveData:sLiveData+oRequest;var sRequest=(isPost)?oRequest:null;if(this.connXhrMode!="queueRequests"){oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}else{if(oQueue.conn){var allRequests=oQueue.requests;allRequests.push({request:oRequest,callback:_xhrCallback});if(!oQueue.interval){oQueue.interval=setInterval(function(){if(oConnMgr.isCallInProgress(oQueue.conn)){return ;}else{if(allRequests.length>0){sUri=(isPost||!lang.isValue(allRequests[0].request))?sLiveDa!
 ta:sLiveData+allRequests[0].request;sRequest=(isPost)?allRequests[0].request:null;oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,allRequests[0].callback,sRequest);allRequests.shift();}else{clearInterval(oQueue.interval);oQueue.interval=null;}}},50);}}else{oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}}}else{DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);}return tId;}});lang.augmentObject(util.XHRDataSource,DS);util.DataSource=function(oLiveData,oConfigs){oConfigs=oConfigs||{};var dataType=oConfigs.dataType;if(dataType){if(dataType==DS.TYPE_LOCAL){lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_XHR){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_SCRIPTNODE){lang.augmentObject(util.DataSource,util.ScriptNodeDataSource);
-return new util.ScriptNodeDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_JSFUNCTION){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}}}}}if(YAHOO.lang.isString(oLiveData)){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(YAHOO.lang.isFunction(oLiveData)){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}else{lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}}};lang.augmentObject(util.DataSource,DS);})();YAHOO.util.Number={format:function(B,F){F=F||{};if(!YAHOO.lang.isNumber(B)){B*=1;}if(YAHOO.lang.isNumber(B)){var D=(B<0);var J=B+"";var G=(F.decimalSeparator)?F.decimalSeparator:".";var H;if(YAHOO.lang.isNumber(F.decimalPlaces)){var I=F.decimalPlaces;var C=Math.pow(10,I);J=Math.round(B*C)/C+"";H=J.lastIndexOf(!
 ".");if(I>0){if(H<0){J+=G;H=J.length-1;}else{if(G!=="."){J=J.replace(".",G);}}while((J.length-1-H)<I){J+="0";}}}if(F.thousandsSeparator){var L=F.thousandsSeparator;H=J.lastIndexOf(G);H=(H>-1)?H:J.length;var K=J.substring(H);var A=-1;for(var E=H;E>0;E--){A++;if((A%3===0)&&(E!==H)&&(!D||(E>1))){K=L+K;}K=J.charAt(E-1)+K;}J=K;}J=(F.prefix)?F.prefix+J:J;J=(F.suffix)?J+F.suffix:J;return J;}else{return B;}}};(function(){var A=function(C,E,D){if(typeof D==="undefined"){D=10;}for(;parseInt(C,10)<D&&D>1;D/=10){C=E.toString()+C;}return C.toString();};var B={formats:{a:function(D,C){return C.a[D.getDay()];},A:function(D,C){return C.A[D.getDay()];},b:function(D,C){return C.b[D.getMonth()];},B:function(D,C){return C.B[D.getMonth()];},C:function(C){return A(parseInt(C.getFullYear()/100,10),0);},d:["getDate","0"],e:["getDate"," "],g:function(C){return A(parseInt(B.formats.G(C)%100,10),0);},G:function(E){var F=E.getFullYear();var D=parseInt(B.formats.V(E),10);var C=parseInt(B.formats.W(E),1!
 0);if(C>D){F++;}else{if(C===0&&D>=52){F--;}}return F;},H:["get!
 Hours","
0"],I:function(D){var C=D.getHours()%12;return A(C===0?12:C,0);},j:function(G){var F=new Date(""+G.getFullYear()+"/1/1 GMT");var D=new Date(""+G.getFullYear()+"/"+(G.getMonth()+1)+"/"+G.getDate()+" GMT");var C=D-F;var E=parseInt(C/60000/60/24,10)+1;return A(E,0,100);},k:["getHours"," "],l:function(D){var C=D.getHours()%12;return A(C===0?12:C," ");},m:function(C){return A(C.getMonth()+1,0);},M:["getMinutes","0"],p:function(D,C){return C.p[D.getHours()>=12?1:0];},P:function(D,C){return C.P[D.getHours()>=12?1:0];},s:function(D,C){return parseInt(D.getTime()/1000,10);},S:["getSeconds","0"],u:function(C){var D=C.getDay();return D===0?7:D;},U:function(F){var C=parseInt(B.formats.j(F),10);var E=6-F.getDay();var D=parseInt((C+E)/7,10);return A(D,0);},V:function(F){var E=parseInt(B.formats.W(F),10);var C=(new Date(""+F.getFullYear()+"/1/1")).getDay();var D=E+(C>4||C<=1?0:1);if(D===53&&(new Date(""+F.getFullYear()+"/12/31")).getDay()<4){D=1;}else{if(D===0){D=B.formats.V(new Date(""+(F!
 .getFullYear()-1)+"/12/31"));}}return A(D,0);},w:"getDay",W:function(F){var C=parseInt(B.formats.j(F),10);var E=7-B.formats.u(F);var D=parseInt((C+E)/7,10);return A(D,0,10);},y:function(C){return A(C.getFullYear()%100,0);},Y:"getFullYear",z:function(E){var D=E.getTimezoneOffset();var C=A(parseInt(Math.abs(D/60),10),0);var F=A(Math.abs(D%60),0);return(D>0?"-":"+")+C+F;},Z:function(C){var D=C.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");if(D.length>4){D=B.formats.z(C);}return D;},"%":function(C){return"%";}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(G,F,D){F=F||{};if(!(G instanceof Date)){return YAHOO.lang.isValue(G)?G:"";}var H=F.format||"%m/%d/%Y";if(H==="YYYY/MM/DD"){H="%Y/%m/%d";}else{if(H==="DD/MM/YYYY"){H="%d/%m/%Y";}else{if(H==="MM/DD/YYYY"){H="%m/%d/%Y";}}}D=D||"en";if(!(D in YAHOO.util.DateLocale)){if(D.replace(/-[a-zA!
 -Z]+$/,"") in YAHOO.util.DateLocale){D=D.replace(/-[a-zA-Z]+$/!
 ,"");}el
se{D="en";}}var J=YAHOO.util.DateLocale[D];var C=function(L,K){var M=B.aggregates[K];return(M==="locale"?J[K]:M);};var E=function(L,K){var M=B.formats[K];if(typeof M==="string"){return G[M]();}else{if(typeof M==="function"){return M.call(G,G,J);}else{if(typeof M==="object"&&typeof M[0]==="string"){return A(G[M[0]](),M[1]);}else{return K;}}}};while(H.match(/%[cDFhnrRtTxX]/)){H=H.replace(/%([cDFhnrRtTxX])/g,C);}var I=H.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,E);C=E=undefined;return I;}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=B;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],B:["January","February","March","April","May","June","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};YAHOO.util.DateLocale["!
 en"]=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var lang=YAHOO.lang,util=YAHOO.util,Ev=util.Event;util.DataSourceBase=function(oLiveData,oConfigs){if(oLiveData===null||oLiveData===undefined){return;}this.liveData=oLiveData;this._oQueue={interval:null,conn:null,requests:[]};this.responseSchema={};if(oConfigs&&(oConfigs.constructor==Object)){for(var sConfig in oConfigs){if(sConfig){this[sConfig]=oConfigs[sConfig];}}}var maxCacheEntries=this.maxCacheEntries;if(!lang.isNumber(maxCacheEntries)||(maxCacheEntries<0)){maxCacheEntries=0;}this._aIntervals=[];this.createEvent("cacheRequestEvent");this.createEvent("cacheResponseEvent");this.createEvent("requestEvent");this.createEvent("responseEvent");this.createEvent("responseParseEvent");this.createEvent("responseCacheEvent");this.createEvent("dataErrorEvent");this.createEvent("cacheFlushEvent");var DS=util.DataSourceBase;this._sName="DataSource instance"+DS._nIndex;DS._nIndex++;};var DS=util.DataSourceBase;lang.augmentObject(DS,{TYPE_UNKNOWN:-1,TYPE_JSARRAY:0,TYPE_JSF!
 UNCTION:1,TYPE_XHR:2,TYPE_JSON:3,TYPE_XML:4,TYPE_TEXT:5,TYPE_HTMLTABLE:6,TYPE_SCRIPTNODE:7,TYPE_LOCAL:8,ERROR_DATAINVALID:"Invalid data",ERROR_DATANULL:"Null data",_nIndex:0,_nTransactionId:0,issueCallback:function(callback,params,error,scope){if(lang.isFunction(callback)){callback.apply(scope,params);}else{if(lang.isObject(callback)){scope=callback.scope||scope||window;var callbackFunc=callback.success;if(error){callbackFunc=callback.failure;}if(callbackFunc){callbackFunc.apply(scope,params.concat([callback.argument]));}}}},parseString:function(oData){if(!lang.isValue(oData)){return null;}var string=oData+"";if(lang.isString(string)){return string;}else{return null;}},parseNumber:function(oData){if(!lang.isValue(oData)||(oData==="")){return null;}var number=oData*1;if(lang.isNumber(number)){return number;}else{return null;}},convertNumber:function(oData){return DS.parseNumber(oData);},parseDate:function(oData){var date=null;if(!(oData instanceof Date)){date=new Date(oData)!
 ;}else{return oData;}if(date instanceof Date){return date;}els!
 e{return
 null;}},convertDate:function(oData){return DS.parseDate(oData);}});DS.Parser={string:DS.parseString,number:DS.parseNumber,date:DS.parseDate};DS.prototype={_sName:null,_aCache:null,_oQueue:null,_aIntervals:null,maxCacheEntries:0,liveData:null,dataType:DS.TYPE_UNKNOWN,responseType:DS.TYPE_UNKNOWN,responseSchema:null,toString:function(){return this._sName;},getCachedResponse:function(oRequest,oCallback,oCaller){var aCache=this._aCache;if(this.maxCacheEntries>0){if(!aCache){this._aCache=[];}else{var nCacheLength=aCache.length;if(nCacheLength>0){var oResponse=null;this.fireEvent("cacheRequestEvent",{request:oRequest,callback:oCallback,caller:oCaller});for(var i=nCacheLength-1;i>=0;i--){var oCacheElem=aCache[i];if(this.isCacheHit(oRequest,oCacheElem.request)){oResponse=oCacheElem.response;this.fireEvent("cacheResponseEvent",{request:oRequest,response:oResponse,callback:oCallback,caller:oCaller});if(i<nCacheLength-1){aCache.splice(i,1);this.addToCache(oRequest,oResponse);}oRespons!
 e.cached=true;break;}}return oResponse;}}}else{if(aCache){this._aCache=null;}}return null;},isCacheHit:function(oRequest,oCachedRequest){return(oRequest===oCachedRequest);},addToCache:function(oRequest,oResponse){var aCache=this._aCache;if(!aCache){return;}while(aCache.length>=this.maxCacheEntries){aCache.shift();}var oCacheElem={request:oRequest,response:oResponse};aCache[aCache.length]=oCacheElem;this.fireEvent("responseCacheEvent",{request:oRequest,response:oResponse});},flushCache:function(){if(this._aCache){this._aCache=[];this.fireEvent("cacheFlushEvent");}},setInterval:function(nMsec,oRequest,oCallback,oCaller){if(lang.isNumber(nMsec)&&(nMsec>=0)){var oSelf=this;var nId=setInterval(function(){oSelf.makeConnection(oRequest,oCallback,oCaller);},nMsec);this._aIntervals.push(nId);return nId;}else{}},clearInterval:function(nId){var tracker=this._aIntervals||[];for(var i=tracker.length-1;i>-1;i--){if(tracker[i]===nId){tracker.splice(i,1);clearInterval(nId);}}},clearAllInte!
 rvals:function(){var tracker=this._aIntervals||[];for(var i=tr!
 acker.le
ngth-1;i>-1;i--){clearInterval(tracker[i]);}tracker=[];},sendRequest:function(oRequest,oCallback,oCaller){var oCachedResponse=this.getCachedResponse(oRequest,oCallback,oCaller);if(oCachedResponse){DS.issueCallback(oCallback,[oRequest,oCachedResponse],false,oCaller);return null;}return this.makeConnection(oRequest,oCallback,oCaller);},makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=this.liveData;this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;},handleResponse:function(oRequest,oRawResponse,oCallback,oCaller,tId){this.fireEvent("responseEvent",{tId:tId,request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller});var xhr=(this.dataType==DS.TYPE_XHR)?true:false;var oParsedResponse=null;var oFullResponse=oRawResponse;if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oRawResponse&&oRawResponse.getRe!
 sponseHeader)?oRawResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}else{if(YAHOO.lang.isArray(oRawResponse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}}switch(this.responseType){case DS.TYPE_JSARRAY:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs);
+if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var arrayEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,arrayEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e1){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseArrayData(oRequest,oFullResponse);break;case DS.TYPE_JSON:if(xhr&&oRawResponse&&oRawResponse.responseText){oFullResponse=oRawResponse.responseText;}try{if(lang.isString(oFullResponse)){var parseArgs=[oFullResponse].concat(this.parseJSONArgs)!
 ;if(lang.JSON){oFullResponse=lang.JSON.parse.apply(lang.JSON,parseArgs);}else{if(window.JSON&&JSON.parse){oFullResponse=JSON.parse.apply(JSON,parseArgs);}else{if(oFullResponse.parseJSON){oFullResponse=oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));}else{while(oFullResponse.length>0&&(oFullResponse.charAt(0)!="{")&&(oFullResponse.charAt(0)!="[")){oFullResponse=oFullResponse.substring(1,oFullResponse.length);}if(oFullResponse.length>0){var objEnd=Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));oFullResponse=oFullResponse.substring(0,objEnd+1);oFullResponse=eval("("+oFullResponse+")");}}}}}}catch(e){}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseJSONData(oRequest,oFullResponse);break;case DS.TYPE_HTMLTABLE:if(xhr&&oRawResponse.responseText){var el=document.createElement("div");el.innerHTML=oRawResponse.responseText;oFullResponse=el.getElementsByTagName("table")[0];}oFullResponse=this.do!
 BeforeParseData(oRequest,oFullResponse,oCallback);oParsedRespo!
 nse=this
.parseHTMLTableData(oRequest,oFullResponse);break;case DS.TYPE_XML:if(xhr&&oRawResponse.responseXML){oFullResponse=oRawResponse.responseXML;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseXMLData(oRequest,oFullResponse);break;case DS.TYPE_TEXT:if(xhr&&lang.isString(oRawResponse.responseText)){oFullResponse=oRawResponse.responseText;}oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseTextData(oRequest,oFullResponse);break;default:oFullResponse=this.doBeforeParseData(oRequest,oFullResponse,oCallback);oParsedResponse=this.parseData(oRequest,oFullResponse);break;}oParsedResponse=oParsedResponse||{};if(!oParsedResponse.results){oParsedResponse.results=[];}if(!oParsedResponse.meta){oParsedResponse.meta={};}if(oParsedResponse&&!oParsedResponse.error){oParsedResponse=this.doBeforeCallback(oRequest,oFullResponse,oParsedResponse,oCallback);this.fireEvent("responseParseEvent",{request:oReque!
 st,response:oParsedResponse,callback:oCallback,caller:oCaller});this.addToCache(oRequest,oParsedResponse);}else{oParsedResponse.error=true;this.fireEvent("dataErrorEvent",{request:oRequest,response:oRawResponse,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});}oParsedResponse.tId=tId;DS.issueCallback(oCallback,[oRequest,oParsedResponse],oParsedResponse.error,oCaller);},doBeforeParseData:function(oRequest,oFullResponse,oCallback){return oFullResponse;},doBeforeCallback:function(oRequest,oFullResponse,oParsedResponse,oCallback){return oParsedResponse;},parseData:function(oRequest,oFullResponse){if(lang.isValue(oFullResponse)){var oParsedResponse={results:oFullResponse,meta:{}};return oParsedResponse;}return null;},parseArrayData:function(oRequest,oFullResponse){if(lang.isArray(oFullResponse)){var results=[],i,j,rec,field,data;if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(i=fields.length-1;i>=0;--i){if(typeof fields[i]!=="o!
 bject"){fields[i]={key:fields[i]};}}var parsers={},p;for(i=fie!
 lds.leng
th-1;i>=0;--i){p=(typeof fields[i].parser==="function"?fields[i].parser:DS.Parser[fields[i].parser+""])||fields[i].converter;if(p){parsers[fields[i].key]=p;}}var arrType=lang.isArray(oFullResponse[0]);for(i=oFullResponse.length-1;i>-1;i--){var oResult={};rec=oFullResponse[i];if(typeof rec==="object"){for(j=fields.length-1;j>-1;j--){field=fields[j];data=arrType?rec[j]:rec[field.key];if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}else{if(lang.isString(rec)){for(j=fields.length-1;j>-1;j--){field=fields[j];data=rec;if(parsers[field.key]){data=parsers[field.key].call(this,data);}if(data===undefined){data=null;}oResult[field.key]=data;}}}results[i]=oResult;}}else{results=oFullResponse;}var oParsedResponse={results:results};return oParsedResponse;}return null;},parseTextData:function(oRequest,oFullResponse){if(lang.isString(oFullResponse)){if(lang.isString(this.responseSchema.recordDelim)&&lang.isString(this!
 .responseSchema.fieldDelim)){var oParsedResponse={results:[]};var recDelim=this.responseSchema.recordDelim;var fieldDelim=this.responseSchema.fieldDelim;if(oFullResponse.length>0){var newLength=oFullResponse.length-recDelim.length;if(oFullResponse.substr(newLength)==recDelim){oFullResponse=oFullResponse.substr(0,newLength);}if(oFullResponse.length>0){var recordsarray=oFullResponse.split(recDelim);for(var i=0,len=recordsarray.length,recIdx=0;i<len;++i){var bError=false,sRecord=recordsarray[i];if(lang.isString(sRecord)&&(sRecord.length>0)){var fielddataarray=recordsarray[i].split(fieldDelim);var oResult={};if(lang.isArray(this.responseSchema.fields)){var fields=this.responseSchema.fields;for(var j=fields.length-1;j>-1;j--){try{var data=fielddataarray[j];if(lang.isString(data)){if(data.charAt(0)=='"'){data=data.substr(1);}if(data.charAt(data.length-1)=='"'){data=data.substr(0,data.length-1);}var field=fields[j];
+var key=(lang.isValue(field.key))?field.key:field;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}else{bError=true;}}catch(e){bError=true;}}}else{oResult=fielddataarray;}if(!bError){oParsedResponse.results[recIdx++]=oResult;}}}}}return oParsedResponse;}}return null;},parseXMLResult:function(result){var oResult={},schema=this.responseSchema;try{for(var m=schema.fields.length-1;m>=0;m--){var field=schema.fields[m];var key=(lang.isValue(field.key))?field.key:field;var data=null;var xmlAttr=result.attributes.getNamedItem(key);if(xmlAttr){data=xmlAttr.value;}else{var xmlNode=result.getElementsByTagName(key);if(xmlNode&&xmlNode.item(0)){var item=xmlNode.item(0);data=(item)?((item.text)?item.text:(item.textContent)?item.textContent:null):null;if(!data){var datapieces=[];for(var j=0,len=item!
 .childNodes.length;j<len;j++){if(item.childNodes[j].nodeValue){datapieces[datapieces.length]=item.childNodes[j].nodeValue;}}if(datapieces.length>0){data=datapieces.join("");}}}}if(data===null){data="";}if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}}catch(e){}return oResult;},parseXMLData:function(oRequest,oFullResponse){var bError=false,schema=this.responseSchema,oParsedResponse={meta:{}},xmlList=null,metaNode=schema.metaNode,metaLocators=schema.metaFields||{},i,k,loc,v;try{xmlList=(schema.resultNode)?oFullResponse.getElementsByTagName(schema.resultNode):null;metaNode=metaNode?oFullResponse.getElementsByTagName(metaNode)[0]:oFullResponse;if(metaNode){for(k in metaLocators){if(lang.hasOwnProperty(metaLocators,k)){loc=metaLocators[k];v=metaNode.getElementsByTagName(loc)[0];if(v){v=v.!
 firstChild.nodeValue;}else{v=metaNode.attributes.getNamedItem(!
 loc);if(
v){v=v.value;}}if(lang.isValue(v)){oParsedResponse.meta[k]=v;}}}}}catch(e){}if(!xmlList||!lang.isArray(schema.fields)){bError=true;}else{oParsedResponse.results=[];for(i=xmlList.length-1;i>=0;--i){var oResult=this.parseXMLResult(xmlList.item(i));oParsedResponse.results[i]=oResult;}}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;},parseJSONData:function(oRequest,oFullResponse){var oParsedResponse={results:[],meta:{}};if(lang.isObject(oFullResponse)&&this.responseSchema.resultsList){var schema=this.responseSchema,fields=schema.fields,resultsList=oFullResponse,results=[],metaFields=schema.metaFields||{},fieldParsers=[],fieldPaths=[],simpleFields=[],bError=false,i,len,j,v,key,parser,path;var buildPath=function(needle){var path=null,keys=[],i=0;if(needle){needle=needle.replace(/\[(['"])(.*?)\1\]/g,function(x,$1,$2){keys[i]=$2;return".@"+(i++);}).replace(/\[(\d+)\]/g,function(x,$1){keys[i]=parseInt($1,10)|0;return".@"+(i++);}).replace(/^\./,"");if(!/[^\w\.\$@]!
 /.test(needle)){path=needle.split(".");for(i=path.length-1;i>=0;--i){if(path[i].charAt(0)==="@"){path[i]=keys[parseInt(path[i].substr(1),10)];}}}else{}}return path;};var walkPath=function(path,origin){var v=origin,i=0,len=path.length;for(;i<len&&v;++i){v=v[path[i]];}return v;};path=buildPath(schema.resultsList);if(path){resultsList=walkPath(path,oFullResponse);if(resultsList===undefined){bError=true;}}else{bError=true;}if(!resultsList){resultsList=[];}if(!lang.isArray(resultsList)){resultsList=[resultsList];}if(!bError){if(schema.fields){var field;for(i=0,len=fields.length;i<len;i++){field=fields[i];key=field.key||field;parser=((typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""])||field.converter;path=buildPath(key);if(parser){fieldParsers[fieldParsers.length]={key:key,parser:parser};}if(path){if(path.length>1){fieldPaths[fieldPaths.length]={key:key,path:path};}else{simpleFields[simpleFields.length]={key:key,path:path[0]};}}else{}}for(i=resultsList.le!
 ngth-1;i>=0;--i){var r=resultsList[i],rec={};if(r){for(j=simpl!
 eFields.
length-1;j>=0;--j){rec[simpleFields[j].key]=(r[simpleFields[j].path]!==undefined)?r[simpleFields[j].path]:r[j];}for(j=fieldPaths.length-1;j>=0;--j){rec[fieldPaths[j].key]=walkPath(fieldPaths[j].path,r);}for(j=fieldParsers.length-1;j>=0;--j){var p=fieldParsers[j].key;rec[p]=fieldParsers[j].parser(rec[p]);if(rec[p]===undefined){rec[p]=null;}}}results[i]=rec;}}else{results=resultsList;}for(key in metaFields){if(lang.hasOwnProperty(metaFields,key)){path=buildPath(metaFields[key]);if(path){v=walkPath(path,oFullResponse);oParsedResponse.meta[key]=v;}}}}else{oParsedResponse.error=true;}oParsedResponse.results=results;}else{oParsedResponse.error=true;}return oParsedResponse;},parseHTMLTableData:function(oRequest,oFullResponse){var bError=false;var elTable=oFullResponse;var fields=this.responseSchema.fields;var oParsedResponse={results:[]};if(lang.isArray(fields)){for(var i=0;i<elTable.tBodies.length;i++){var elTbody=elTable.tBodies[i];for(var j=elTbody.rows.length-1;j>-1;j--){var el!
 Row=elTbody.rows[j];var oResult={};for(var k=fields.length-1;k>-1;k--){var field=fields[k];var key=(lang.isValue(field.key))?field.key:field;var data=elRow.cells[k].innerHTML;if(!field.parser&&field.converter){field.parser=field.converter;}var parser=(typeof field.parser==="function")?field.parser:DS.Parser[field.parser+""];if(parser){data=parser.call(this,data);}if(data===undefined){data=null;}oResult[key]=data;}oParsedResponse.results[j]=oResult;}}}else{bError=true;}if(bError){oParsedResponse.error=true;}else{}return oParsedResponse;}};lang.augmentProto(DS,util.EventProvider);util.LocalDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_LOCAL;if(oLiveData){if(YAHOO.lang.isArray(oLiveData)){this.responseType=DS.TYPE_JSARRAY;}else{if(oLiveData.nodeType&&oLiveData.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oLiveData.nodeName&&(oLiveData.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;
+oLiveData=oLiveData.cloneNode(true);}else{if(YAHOO.lang.isString(oLiveData)){this.responseType=DS.TYPE_TEXT;}else{if(YAHOO.lang.isObject(oLiveData)){this.responseType=DS.TYPE_JSON;}}}}}}else{oLiveData=[];this.responseType=DS.TYPE_JSARRAY;}util.LocalDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.LocalDataSource,DS);lang.augmentObject(util.LocalDataSource,DS);util.FunctionDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_JSFUNCTION;oLiveData=oLiveData||function(){};util.FunctionDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.FunctionDataSource,DS,{scope:null,makeConnection:function(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});var oRawResponse=(this.scope)?this.liveData.call(this.scope,oRequest,this):this.liveData(oRequest);if(this.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResp!
 onse)){this.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse&&oRawResponse.nodeType&&oRawResponse.nodeType==9){this.responseType=DS.TYPE_XML;}else{if(oRawResponse&&oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){this.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){this.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){this.responseType=DS.TYPE_TEXT;}}}}}}this.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);return tId;}});lang.augmentObject(util.FunctionDataSource,DS);util.ScriptNodeDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_SCRIPTNODE;oLiveData=oLiveData||"";util.ScriptNodeDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.ScriptNodeDataSource,DS,{getUtility:util.Get,asyncMode:"allowAll",scriptCallbackParam:"callback",generateRequestCallback:function(id){return"&"+this.scriptCallbackParam+"=YAHOO.util.ScriptNodeDataSource.callbacks["+id+"]";!
 },doBeforeGetScriptNode:function(sUri){return sUri;},makeConne!
 ction:fu
nction(oRequest,oCallback,oCaller){var tId=DS._nTransactionId++;this.fireEvent("requestEvent",{tId:tId,request:oRequest,callback:oCallback,caller:oCaller});if(util.ScriptNodeDataSource._nPending===0){util.ScriptNodeDataSource.callbacks=[];util.ScriptNodeDataSource._nId=0;}var id=util.ScriptNodeDataSource._nId;util.ScriptNodeDataSource._nId++;var oSelf=this;util.ScriptNodeDataSource.callbacks[id]=function(oRawResponse){if((oSelf.asyncMode!=="ignoreStaleResponses")||(id===util.ScriptNodeDataSource.callbacks.length-1)){if(oSelf.responseType===DS.TYPE_UNKNOWN){if(YAHOO.lang.isArray(oRawResponse)){oSelf.responseType=DS.TYPE_JSARRAY;}else{if(oRawResponse.nodeType&&oRawResponse.nodeType==9){oSelf.responseType=DS.TYPE_XML;}else{if(oRawResponse.nodeName&&(oRawResponse.nodeName.toLowerCase()=="table")){oSelf.responseType=DS.TYPE_HTMLTABLE;}else{if(YAHOO.lang.isObject(oRawResponse)){oSelf.responseType=DS.TYPE_JSON;}else{if(YAHOO.lang.isString(oRawResponse)){oSelf.responseType=DS.TYPE_T!
 EXT;}}}}}}oSelf.handleResponse(oRequest,oRawResponse,oCallback,oCaller,tId);}else{}delete util.ScriptNodeDataSource.callbacks[id];};util.ScriptNodeDataSource._nPending++;var sUri=this.liveData+oRequest+this.generateRequestCallback(id);sUri=this.doBeforeGetScriptNode(sUri);this.getUtility.script(sUri,{autopurge:true,onsuccess:util.ScriptNodeDataSource._bumpPendingDown,onfail:util.ScriptNodeDataSource._bumpPendingDown});return tId;}});lang.augmentObject(util.ScriptNodeDataSource,DS);lang.augmentObject(util.ScriptNodeDataSource,{_nId:0,_nPending:0,callbacks:[]});util.XHRDataSource=function(oLiveData,oConfigs){this.dataType=DS.TYPE_XHR;this.connMgr=this.connMgr||util.Connect;oLiveData=oLiveData||"";util.XHRDataSource.superclass.constructor.call(this,oLiveData,oConfigs);};lang.extend(util.XHRDataSource,DS,{connMgr:null,connXhrMode:"allowAll",connMethodPost:false,connTimeout:0,makeConnection:function(oRequest,oCallback,oCaller){var oRawResponse=null;var tId=DS._nTransactionId++;t!
 his.fireEvent("requestEvent",{tId:tId,request:oRequest,callbac!
 k:oCallb
ack,caller:oCaller});var oSelf=this;var oConnMgr=this.connMgr;var oQueue=this._oQueue;var _xhrSuccess=function(oResponse){if(oResponse&&(this.connXhrMode=="ignoreStaleResponses")&&(oResponse.tId!=oQueue.conn.tId)){return null;}else{if(!oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,callback:oCallback,caller:oCaller,message:DS.ERROR_DATANULL});DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);return null;}else{if(this.responseType===DS.TYPE_UNKNOWN){var ctype=(oResponse.getResponseHeader)?oResponse.getResponseHeader["Content-Type"]:null;if(ctype){if(ctype.indexOf("text/xml")>-1){this.responseType=DS.TYPE_XML;}else{if(ctype.indexOf("application/json")>-1){this.responseType=DS.TYPE_JSON;}else{if(ctype.indexOf("text/plain")>-1){this.responseType=DS.TYPE_TEXT;}}}}}this.handleResponse(oRequest,oResponse,oCallback,oCaller,tId);}}};var _xhrFailure=function(oResponse){this.fireEvent("dataErrorEvent",{request:oRequest,callback:oCallback,caller:oCaller,mess!
 age:DS.ERROR_DATAINVALID});if(lang.isString(this.liveData)&&lang.isString(oRequest)&&(this.liveData.lastIndexOf("?")!==this.liveData.length-1)&&(oRequest.indexOf("?")!==0)){}oResponse=oResponse||{};oResponse.error=true;DS.issueCallback(oCallback,[oRequest,oResponse],true,oCaller);return null;};var _xhrCallback={success:_xhrSuccess,failure:_xhrFailure,scope:this};if(lang.isNumber(this.connTimeout)){_xhrCallback.timeout=this.connTimeout;}if(this.connXhrMode=="cancelStaleRequests"){if(oQueue.conn){if(oConnMgr.abort){oConnMgr.abort(oQueue.conn);oQueue.conn=null;}else{}}}if(oConnMgr&&oConnMgr.asyncRequest){var sLiveData=this.liveData;var isPost=this.connMethodPost;var sMethod=(isPost)?"POST":"GET";var sUri=(isPost||!lang.isValue(oRequest))?sLiveData:sLiveData+oRequest;var sRequest=(isPost)?oRequest:null;if(this.connXhrMode!="queueRequests"){oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}else{if(oQueue.conn){var allRequests=oQueue.requests;
+allRequests.push({request:oRequest,callback:_xhrCallback});if(!oQueue.interval){oQueue.interval=setInterval(function(){if(oConnMgr.isCallInProgress(oQueue.conn)){return;}else{if(allRequests.length>0){sUri=(isPost||!lang.isValue(allRequests[0].request))?sLiveData:sLiveData+allRequests[0].request;sRequest=(isPost)?allRequests[0].request:null;oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,allRequests[0].callback,sRequest);allRequests.shift();}else{clearInterval(oQueue.interval);oQueue.interval=null;}}},50);}}else{oQueue.conn=oConnMgr.asyncRequest(sMethod,sUri,_xhrCallback,sRequest);}}}else{DS.issueCallback(oCallback,[oRequest,{error:true}],true,oCaller);}return tId;}});lang.augmentObject(util.XHRDataSource,DS);util.DataSource=function(oLiveData,oConfigs){oConfigs=oConfigs||{};var dataType=oConfigs.dataType;if(dataType){if(dataType==DS.TYPE_LOCAL){lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}else{if(dataType==DS.T!
 YPE_XHR){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_SCRIPTNODE){lang.augmentObject(util.DataSource,util.ScriptNodeDataSource);return new util.ScriptNodeDataSource(oLiveData,oConfigs);}else{if(dataType==DS.TYPE_JSFUNCTION){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}}}}}if(YAHOO.lang.isString(oLiveData)){lang.augmentObject(util.DataSource,util.XHRDataSource);return new util.XHRDataSource(oLiveData,oConfigs);}else{if(YAHOO.lang.isFunction(oLiveData)){lang.augmentObject(util.DataSource,util.FunctionDataSource);return new util.FunctionDataSource(oLiveData,oConfigs);}else{lang.augmentObject(util.DataSource,util.LocalDataSource);return new util.LocalDataSource(oLiveData,oConfigs);}}};lang.augmentObject(util.DataSource,DS);})();YAHOO.util.Number={format:function(C,G){var B=YAHOO.lang;if(!B.isValue(C)||(C==="")){return"";}G!
 =G||{};if(!B.isNumber(C)){C*=1;}if(B.isNumber(C)){var E=(C<0);!
 var K=C+
"";var H=(G.decimalSeparator)?G.decimalSeparator:".";var I;if(B.isNumber(G.decimalPlaces)){var J=G.decimalPlaces;var D=Math.pow(10,J);K=Math.round(C*D)/D+"";I=K.lastIndexOf(".");if(J>0){if(I<0){K+=H;I=K.length-1;}else{if(H!=="."){K=K.replace(".",H);}}while((K.length-1-I)<J){K+="0";}}}if(G.thousandsSeparator){var M=G.thousandsSeparator;I=K.lastIndexOf(H);I=(I>-1)?I:K.length;var L=K.substring(I);var A=-1;for(var F=I;F>0;F--){A++;if((A%3===0)&&(F!==I)&&(!E||(F>1))){L=M+L;}L=K.charAt(F-1)+L;}K=L;}K=(G.prefix)?G.prefix+K:K;K=(G.suffix)?K+G.suffix:K;return K;}else{return C;}}};(function(){var A=function(C,E,D){if(typeof D==="undefined"){D=10;}for(;parseInt(C,10)<D&&D>1;D/=10){C=E.toString()+C;}return C.toString();};var B={formats:{a:function(D,C){return C.a[D.getDay()];},A:function(D,C){return C.A[D.getDay()];},b:function(D,C){return C.b[D.getMonth()];},B:function(D,C){return C.B[D.getMonth()];},C:function(C){return A(parseInt(C.getFullYear()/100,10),0);},d:["getDate","0"],e:["get!
 Date"," "],g:function(C){return A(parseInt(B.formats.G(C)%100,10),0);},G:function(E){var F=E.getFullYear();var D=parseInt(B.formats.V(E),10);var C=parseInt(B.formats.W(E),10);if(C>D){F++;}else{if(C===0&&D>=52){F--;}}return F;},H:["getHours","0"],I:function(D){var C=D.getHours()%12;return A(C===0?12:C,0);},j:function(G){var F=new Date(""+G.getFullYear()+"/1/1 GMT");var D=new Date(""+G.getFullYear()+"/"+(G.getMonth()+1)+"/"+G.getDate()+" GMT");var C=D-F;var E=parseInt(C/60000/60/24,10)+1;return A(E,0,100);},k:["getHours"," "],l:function(D){var C=D.getHours()%12;return A(C===0?12:C," ");},m:function(C){return A(C.getMonth()+1,0);},M:["getMinutes","0"],p:function(D,C){return C.p[D.getHours()>=12?1:0];},P:function(D,C){return C.P[D.getHours()>=12?1:0];},s:function(D,C){return parseInt(D.getTime()/1000,10);},S:["getSeconds","0"],u:function(C){var D=C.getDay();return D===0?7:D;},U:function(F){var C=parseInt(B.formats.j(F),10);var E=6-F.getDay();var D=parseInt((C+E)/7,10);return A(!
 D,0);},V:function(F){var E=parseInt(B.formats.W(F),10);var C=(!
 new Date
(""+F.getFullYear()+"/1/1")).getDay();var D=E+(C>4||C<=1?0:1);if(D===53&&(new Date(""+F.getFullYear()+"/12/31")).getDay()<4){D=1;}else{if(D===0){D=B.formats.V(new Date(""+(F.getFullYear()-1)+"/12/31"));}}return A(D,0);},w:"getDay",W:function(F){var C=parseInt(B.formats.j(F),10);var E=7-B.formats.u(F);var D=parseInt((C+E)/7,10);return A(D,0,10);},y:function(C){return A(C.getFullYear()%100,0);},Y:"getFullYear",z:function(E){var D=E.getTimezoneOffset();var C=A(parseInt(Math.abs(D/60),10),0);var F=A(Math.abs(D%60),0);return(D>0?"-":"+")+C+F;},Z:function(C){var D=C.toString().replace(/^.*:\d\d( GMT[+-]\d+)? \(?([A-Za-z ]+)\)?\d*$/,"$2").replace(/[a-z ]/g,"");if(D.length>4){D=B.formats.z(C);}return D;},"%":function(C){return"%";}},aggregates:{c:"locale",D:"%m/%d/%y",F:"%Y-%m-%d",h:"%b",n:"\n",r:"locale",R:"%H:%M",t:"\t",T:"%H:%M:%S",x:"locale",X:"locale"},format:function(G,F,D){F=F||{};if(!(G instanceof Date)){return YAHOO.lang.isValue(G)?G:"";}var H=F.format||"%m/%d/%Y";if(H==="Y!
 YYY/MM/DD"){H="%Y/%m/%d";}else{if(H==="DD/MM/YYYY"){H="%d/%m/%Y";}else{if(H==="MM/DD/YYYY"){H="%m/%d/%Y";}}}D=D||"en";if(!(D in YAHOO.util.DateLocale)){if(D.replace(/-[a-zA-Z]+$/,"") in YAHOO.util.DateLocale){D=D.replace(/-[a-zA-Z]+$/,"");}else{D="en";}}var J=YAHOO.util.DateLocale[D];var C=function(L,K){var M=B.aggregates[K];return(M==="locale"?J[K]:M);};var E=function(L,K){var M=B.formats[K];if(typeof M==="string"){return G[M]();}else{if(typeof M==="function"){return M.call(G,G,J);}else{if(typeof M==="object"&&typeof M[0]==="string"){return A(G[M[0]](),M[1]);}else{return K;}}}};while(H.match(/%[cDFhnrRtTxX]/)){H=H.replace(/%([cDFhnrRtTxX])/g,C);}var I=H.replace(/%([aAbBCdegGHIjklmMpPsSuUVwWyYzZ%])/g,E);C=E=undefined;return I;}};YAHOO.namespace("YAHOO.util");YAHOO.util.Date=B;YAHOO.util.DateLocale={a:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],A:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],b:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep",!
 "Oct","Nov","Dec"],B:["January","February","March","April","Ma!
 y","June
","July","August","September","October","November","December"],c:"%a %d %b %Y %T %Z",p:["AM","PM"],P:["am","pm"],r:"%I:%M:%S %p",x:"%d/%m/%y",X:"%T"};
+YAHOO.util.DateLocale["en"]=YAHOO.lang.merge(YAHOO.util.DateLocale,{});YAHOO.util.DateLocale["en-US"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{c:"%a %d %b %Y %I:%M:%S %p %Z",x:"%m/%d/%Y",X:"%I:%M:%S %p"});YAHOO.util.DateLocale["en-GB"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"],{r:"%l:%M:%S %P %Z"});YAHOO.util.DateLocale["en-AU"]=YAHOO.lang.merge(YAHOO.util.DateLocale["en"]);})();YAHOO.register("datasource",YAHOO.util.DataSource,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/datasource/datasource.js
===================================================================
--- trunk/root/static/yui/datasource/datasource.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datasource/datasource.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
 
@@ -349,7 +349,7 @@
  * @method DataSourceBase.parseString
  * @param oData {String | Number | Boolean | Date | Array | Object} Data to parse.
  * The special values null and undefined will return null.
- * @return {Number} A string, or null.
+ * @return {String} A string, or null.
  * @static
  */
 parseString : function(oData) {
@@ -374,12 +374,16 @@
  * Converts data to type Number.
  *
  * @method DataSourceBase.parseNumber
- * @param oData {String | Number | Boolean | Null} Data to convert. Beware, null
- * returns as 0.
- * @return {Number} A number, or null if NaN.
+ * @param oData {String | Number | Boolean} Data to convert. Note, the following
+ * values return as null: null, undefined, NaN, "". 
+ * @return {Number} A number, or null.
  * @static
  */
 parseNumber : function(oData) {
+    if(!lang.isValue(oData) || (oData === "")) {
+        return null;
+    }
+
     //Convert to number
     var number = oData * 1;
     
@@ -569,6 +573,17 @@
  */
 responseSchema : null,
 
+/**
+ * Additional arguments passed to the JSON parse routine.  The JSON string
+ * is the assumed first argument (where applicable).  This property is not
+ * set by default, but the parse methods will use it if present.
+ *
+ * @property parseJSONArgs
+ * @type {MIXED|Array} If an Array, contents are used as individual arguments.
+ *                     Otherwise, value is used as an additional argument.
+ */
+// property intentionally undefined
+ 
 /////////////////////////////////////////////////////////////////////////////
 //
 // DataSourceBase public methods
@@ -752,7 +767,28 @@
 },
 
 /**
- * First looks for cached response, then sends request to live data.
+ * First looks for cached response, then sends request to live data. The
+ * following arguments are passed to the callback function:
+ *     <dl>
+ *     <dt><code>oRequest</code></dt>
+ *     <dd>The same value that was passed in as the first argument to sendRequest.</dd>
+ *     <dt><code>oParsedResponse</code></dt>
+ *     <dd>An object literal containing the following properties:
+ *         <dl>
+ *         <dt><code>tId</code></dt>
+ *         <dd>Unique transaction ID number.</dd>
+ *         <dt><code>results</code></dt>
+ *         <dd>Schema-parsed data results.</dd>
+ *         <dt><code>error</code></dt>
+ *         <dd>True in cases of data error.</dd>
+ *         <dt><code>cached</code></dt>
+ *         <dd>True when response is returned from DataSource cache.</dd> 
+ *         <dt><code>meta</code></dt>
+ *         <dd>Schema-parsed meta data.</dd>
+ *         </dl>
+ *     <dt><code>oPayload</code></dt>
+ *     <dd>The same value as was passed in as <code>argument</code> in the oCallback object literal.</dd>
+ *     </dl> 
  *
  * @method sendRequest
  * @param oRequest {Object} Request object.
@@ -882,6 +918,47 @@
             if(xhr && oRawResponse && oRawResponse.responseText) {
                 oFullResponse = oRawResponse.responseText; 
             }
+            try {
+                // Convert to JS array if it's a string
+                if(lang.isString(oFullResponse)) {
+                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
+                    // Check for YUI JSON Util
+                    if(lang.JSON) {
+                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
+                    }
+                    // Look for JSON parsers using an API similar to json2.js
+                    else if(window.JSON && JSON.parse) {
+                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
+                    }
+                    // Look for JSON parsers using an API similar to json.js
+                    else if(oFullResponse.parseJSON) {
+                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
+                    }
+                    // No JSON lib found so parse the string
+                    else {
+                        // Trim leading spaces
+                        while (oFullResponse.length > 0 &&
+                                (oFullResponse.charAt(0) != "{") &&
+                                (oFullResponse.charAt(0) != "[")) {
+                            oFullResponse = oFullResponse.substring(1, oFullResponse.length);
+                        }
+
+                        if(oFullResponse.length > 0) {
+                            // Strip extraneous stuff at the end
+                            var arrayEnd =
+Math.max(oFullResponse.lastIndexOf("]"),oFullResponse.lastIndexOf("}"));
+                            oFullResponse = oFullResponse.substring(0,arrayEnd+1);
+
+                            // Turn the string into an object literal...
+                            // ...eval is necessary here
+                            oFullResponse = eval("(" + oFullResponse + ")");
+
+                        }
+                    }
+                }
+            }
+            catch(e1) {
+            }
             oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
             oParsedResponse = this.parseArrayData(oRequest, oFullResponse);
             break;
@@ -892,17 +969,18 @@
             try {
                 // Convert to JSON object if it's a string
                 if(lang.isString(oFullResponse)) {
+                    var parseArgs = [oFullResponse].concat(this.parseJSONArgs);
                     // Check for YUI JSON Util
                     if(lang.JSON) {
-                        oFullResponse = lang.JSON.parse(oFullResponse);
+                        oFullResponse = lang.JSON.parse.apply(lang.JSON,parseArgs);
                     }
                     // Look for JSON parsers using an API similar to json2.js
                     else if(window.JSON && JSON.parse) {
-                        oFullResponse = JSON.parse(oFullResponse);
+                        oFullResponse = JSON.parse.apply(JSON,parseArgs);
                     }
                     // Look for JSON parsers using an API similar to json.js
                     else if(oFullResponse.parseJSON) {
-                        oFullResponse = oFullResponse.parseJSON();
+                        oFullResponse = oFullResponse.parseJSON.apply(oFullResponse,parseArgs.slice(1));
                     }
                     // No JSON lib found so parse the string
                     else {
@@ -934,7 +1012,9 @@
             break;
         case DS.TYPE_HTMLTABLE:
             if(xhr && oRawResponse.responseText) {
-                oFullResponse = oRawResponse.responseText;
+                var el = document.createElement('div');
+                el.innerHTML = oRawResponse.responseText;
+                oFullResponse = el.getElementsByTagName('table')[0];
             }
             oFullResponse = this.doBeforeParseData(oRequest, oFullResponse, oCallback);
             oParsedResponse = this.parseHTMLTableData(oRequest, oFullResponse);
@@ -1252,11 +1332,10 @@
             // ...or in a node
             else {
                 var xmlNode = result.getElementsByTagName(key);
-                if(xmlNode && xmlNode.item(0) && xmlNode.item(0)) {
-                    data = xmlNode.item(0).firstChild.nodeValue;
+                if(xmlNode && xmlNode.item(0)) {
                     var item = xmlNode.item(0);
                     // For IE, then DOM...
-                    data = (item.text) ? item.text : (item.textContent) ? item.textContent : null;
+                    data = (item) ? ((item.text) ? item.text : (item.textContent) ? item.textContent : null) : null;
                     // ...then fallback, but check for multiple child nodes
                     if(!data) {
                         var datapieces = [];
@@ -1488,9 +1567,9 @@
                 }
 
                 // Process the results, flattening the records and/or applying parsers if needed
-                //if (fieldParsers.length || fieldPaths.length) {
-                    for (i = resultsList.length - 1; i >= 0; --i) {
-                        var r = resultsList[i], rec = {};
+                for (i = resultsList.length - 1; i >= 0; --i) {
+                    var r = resultsList[i], rec = {};
+                    if(r) {
                         for (j = simpleFields.length - 1; j >= 0; --j) {
                             // Bug 1777850: data might be held in an array
                             rec[simpleFields[j].key] =
@@ -1509,9 +1588,9 @@
                                 rec[p] = null;
                             }
                         }
-                        results[i] = rec;
                     }
-                //}
+                    results[i] = rec;
+                }
             }
             else {
                 results = resultsList;
@@ -1558,39 +1637,44 @@
     var fields = this.responseSchema.fields;
     var oParsedResponse = {results:[]};
 
-    // Iterate through each TBODY
-    for(var i=0; i<elTable.tBodies.length; i++) {
-        var elTbody = elTable.tBodies[i];
-
-        // Iterate through each TR
-        for(var j=elTbody.rows.length-1; j>-1; j--) {
-            var elRow = elTbody.rows[j];
-            var oResult = {};
-            
-            for(var k=fields.length-1; k>-1; k--) {
-                var field = fields[k];
-                var key = (lang.isValue(field.key)) ? field.key : field;
-                var data = elRow.cells[k].innerHTML;
-
-                // Backward compatibility
-                if(!field.parser && field.converter) {
-                    field.parser = field.converter;
+    if(lang.isArray(fields)) {
+        // Iterate through each TBODY
+        for(var i=0; i<elTable.tBodies.length; i++) {
+            var elTbody = elTable.tBodies[i];
+    
+            // Iterate through each TR
+            for(var j=elTbody.rows.length-1; j>-1; j--) {
+                var elRow = elTbody.rows[j];
+                var oResult = {};
+                
+                for(var k=fields.length-1; k>-1; k--) {
+                    var field = fields[k];
+                    var key = (lang.isValue(field.key)) ? field.key : field;
+                    var data = elRow.cells[k].innerHTML;
+    
+                    // Backward compatibility
+                    if(!field.parser && field.converter) {
+                        field.parser = field.converter;
+                    }
+                    var parser = (typeof field.parser === 'function') ?
+                        field.parser :
+                        DS.Parser[field.parser+''];
+                    if(parser) {
+                        data = parser.call(this, data);
+                    }
+                    // Safety measure
+                    if(data === undefined) {
+                        data = null;
+                    }
+                    oResult[key] = data;
                 }
-                var parser = (typeof field.parser === 'function') ?
-                    field.parser :
-                    DS.Parser[field.parser+''];
-                if(parser) {
-                    data = parser.call(this, data);
-                }
-                // Safety measure
-                if(data === undefined) {
-                    data = null;
-                }
-                oResult[key] = data;
+                oParsedResponse.results[j] = oResult;
             }
-            oParsedResponse.results[j] = oResult;
         }
     }
+    else {
+        bError = true;
+    }
 
     if(bError) {
         oParsedResponse.error = true;
@@ -1649,7 +1733,7 @@
         this.responseType = DS.TYPE_JSARRAY;
     }
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.LocalDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // LocalDataSource extends DataSourceBase
@@ -1688,7 +1772,7 @@
     this.dataType = DS.TYPE_JSFUNCTION;
     oLiveData = oLiveData || function() {};
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.FunctionDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // FunctionDataSource extends DataSourceBase
@@ -1696,6 +1780,24 @@
 
 /////////////////////////////////////////////////////////////////////////////
 //
+// FunctionDataSource public properties
+//
+/////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Context in which to execute the function. By default, is the DataSource
+ * instance itself. If set, the function will receive the DataSource instance
+ * as an additional argument. 
+ *
+ * @property scope
+ * @type Object
+ * @default null
+ */
+scope : null,
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
 // FunctionDataSource public methods
 //
 /////////////////////////////////////////////////////////////////////////////
@@ -1716,8 +1818,10 @@
 
     // Pass the request in as a parameter and
     // forward the return value to the handler
-    var oRawResponse = this.liveData(oRequest);
     
+    
+    var oRawResponse = (this.scope) ? this.liveData.call(this.scope, oRequest, this) : this.liveData(oRequest);
+    
     // Try to sniff data type if it has not been defined
     if(this.responseType === DS.TYPE_UNKNOWN) {
         if(YAHOO.lang.isArray(oRawResponse)) { // array
@@ -1777,7 +1881,7 @@
     this.dataType = DS.TYPE_SCRIPTNODE;
     oLiveData = oLiveData || "";
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.ScriptNodeDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // ScriptNodeDataSource extends DataSourceBase
@@ -1848,6 +1952,19 @@
 },
 
 /**
+ * Overridable method gives implementers access to modify the URI before the dynamic
+ * script node gets inserted. Implementers should take care not to return an
+ * invalid URI.
+ *
+ * @method doBeforeGetScriptNode
+ * @param {String} URI to the script 
+ * @return {String} URI to the script
+ */
+doBeforeGetScriptNode : function(sUri) {
+    return sUri;
+},
+
+/**
  * Overriding method passes query to Get Utility. The returned
  * response is then forwarded to the handleResponse function.
  *
@@ -1908,6 +2025,7 @@
     // We are now creating a request
     util.ScriptNodeDataSource._nPending++;
     var sUri = this.liveData + oRequest + this.generateRequestCallback(id);
+    sUri = this.doBeforeGetScriptNode(sUri);
     this.getUtility.script(sUri,
             {autopurge: true,
             onsuccess: util.ScriptNodeDataSource._bumpPendingDown,
@@ -1995,7 +2113,7 @@
     this.connMgr = this.connMgr || util.Connect;
     oLiveData = oLiveData || "";
     
-    this.constructor.superclass.constructor.call(this, oLiveData, oConfigs); 
+    util.XHRDataSource.superclass.constructor.call(this, oLiveData, oConfigs); 
 };
 
 // XHRDataSource extends DataSourceBase
@@ -2101,7 +2219,7 @@
     var _xhrSuccess = function(oResponse) {
         // If response ID does not match last made request ID,
         // silently fail and wait for the next response
-        if(oResponse && (this.asyncMode == "ignoreStaleResponses") &&
+        if(oResponse && (this.connXhrMode == "ignoreStaleResponses") &&
                 (oResponse.tId != oQueue.conn.tId)) {
             return null;
         }
@@ -2364,23 +2482,29 @@
      *   <dt>suffix {String}</dd>
      *   <dd>String appended after each number, like " items" (note the space)</dd>
      *  </dl>
-     * @return {String} Formatted number for display.
+     * @return {String} Formatted number for display. Note, the following values
+     * return as "": null, undefined, NaN, "".     
      */
     format : function(nData, oConfig) {
+        var lang = YAHOO.lang;
+        if(!lang.isValue(nData) || (nData === "")) {
+            return "";
+        }
+
         oConfig = oConfig || {};
         
-        if(!YAHOO.lang.isNumber(nData)) {
+        if(!lang.isNumber(nData)) {
             nData *= 1;
         }
 
-        if(YAHOO.lang.isNumber(nData)) {
+        if(lang.isNumber(nData)) {
             var bNegative = (nData < 0);
             var sOutput = nData + "";
             var sDecimalSeparator = (oConfig.decimalSeparator) ? oConfig.decimalSeparator : ".";
             var nDotIndex;
 
             // Manage decimals
-            if(YAHOO.lang.isNumber(oConfig.decimalPlaces)) {
+            if(lang.isNumber(oConfig.decimalPlaces)) {
                 // Round to the correct decimal place
                 var nDecimalPlaces = oConfig.decimalPlaces;
                 var nDecimal = Math.pow(10, nDecimalPlaces);
@@ -2577,63 +2701,69 @@
      *
      * @method format
      * @param oDate {Date} Date.
-     * @param oConfig {Object} (Optional) Optional configuration values:
+     * @param oConfig {Object} (Optional) Object literal of configuration values:
      *  <dl>
-     *   <dt>format {String}</dt>
-     *   <dd>Any format defined by strftime is supported</dd>
-     *  </dl>
-     *  strftime has several format specifiers defined by the Open group at 
-     *  http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
-     *
-     *  PHP added a few of its own, defined at http://www.php.net/strftime
-     *
-     *  This javascript implementation supports all the PHP specifiers and a few more.
-     *
-     *  @arg \%a - abbreviated weekday name according to the current locale
-     *  @arg \%A - full weekday name according to the current locale
-     *  @arg \%b - abbreviated month name according to the current locale
-     *  @arg \%B - full month name according to the current locale
-     *  @arg \%c - preferred date and time representation for the current locale
-     *  @arg \%C - century number (the year divided by 100 and truncated to an integer, range 00 to 99)
-     *  @arg \%d - day of the month as a decimal number (range 01 to 31)
-     *  @arg \%D - same as %m/%d/%y
-     *  @arg \%e - day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')
-     *  @arg \%F - same as %Y-%m-%d (ISO 8601 date format)
-     *  @arg \%g - like %G, but without the century
-     *  @arg \%G - The 4-digit year corresponding to the ISO week number
-     *  @arg \%h - same as %b
-     *  @arg \%H - hour as a decimal number using a 24-hour clock (range 00 to 23)
-     *  @arg \%I - hour as a decimal number using a 12-hour clock (range 01 to 12)
-     *  @arg \%j - day of the year as a decimal number (range 001 to 366)
-     *  @arg \%k - hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)
-     *  @arg \%l - hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) 
-     *  @arg \%m - month as a decimal number (range 01 to 12)
-     *  @arg \%M - minute as a decimal number
-     *  @arg \%n - newline character
-     *  @arg \%p - either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale
-     *  @arg \%P - like %p, but lower case
-     *  @arg \%r - time in a.m. and p.m. notation equal to %I:%M:%S %p
-     *  @arg \%R - time in 24 hour notation equal to %H:%M
-     *  @arg \%s - number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC
-     *  @arg \%S - second as a decimal number
-     *  @arg \%t - tab character
-     *  @arg \%T - current time, equal to %H:%M:%S
-     *  @arg \%u - weekday as a decimal number [1,7], with 1 representing Monday
-     *  @arg \%U - week number of the current year as a decimal number, starting with
-     *             the first Sunday as the first day of the first week
-     *  @arg \%V - The ISO 8601:1988 week number of the current year as a decimal number,
-     *             range 01 to 53, where week 1 is the first week that has at least 4 days
-     *             in the current year, and with Monday as the first day of the week.
-     *  @arg \%w - day of the week as a decimal, Sunday being 0
-     *  @arg \%W - week number of the current year as a decimal number, starting with the
-     *             first Monday as the first day of the first week
-     *  @arg \%x - preferred date representation for the current locale without the time
-     *  @arg \%X - preferred time representation for the current locale without the date
-     *  @arg \%y - year as a decimal number without a century (range 00 to 99)
-     *  @arg \%Y - year as a decimal number including the century
-     *  @arg \%z - numerical time zone representation
-     *  @arg \%Z - time zone name or abbreviation
-     *  @arg \%% - a literal `\%' character
+     *   <dt>format <String></dt>
+     *   <dd>
+     *   <p>
+     *   Any strftime string is supported, such as "%I:%M:%S %p". strftime has several format specifiers defined by the Open group at 
+     *   <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html">http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html</a>
+     *   </p>
+     *   <p>   
+     *   PHP added a few of its own, defined at <a href="http://www.php.net/strftime">http://www.php.net/strftime</a>
+     *   </p>
+     *   <p>
+     *   This javascript implementation supports all the PHP specifiers and a few more.  The full list is below:
+     *   </p>
+     *   <dl>
+     *    <dt>%a</dt> <dd>abbreviated weekday name according to the current locale</dd>
+     *    <dt>%A</dt> <dd>full weekday name according to the current locale</dd>
+     *    <dt>%b</dt> <dd>abbreviated month name according to the current locale</dd>
+     *    <dt>%B</dt> <dd>full month name according to the current locale</dd>
+     *    <dt>%c</dt> <dd>preferred date and time representation for the current locale</dd>
+     *    <dt>%C</dt> <dd>century number (the year divided by 100 and truncated to an integer, range 00 to 99)</dd>
+     *    <dt>%d</dt> <dd>day of the month as a decimal number (range 01 to 31)</dd>
+     *    <dt>%D</dt> <dd>same as %m/%d/%y</dd>
+     *    <dt>%e</dt> <dd>day of the month as a decimal number, a single digit is preceded by a space (range ' 1' to '31')</dd>
+     *    <dt>%F</dt> <dd>same as %Y-%m-%d (ISO 8601 date format)</dd>
+     *    <dt>%g</dt> <dd>like %G, but without the century</dd>
+     *    <dt>%G</dt> <dd>The 4-digit year corresponding to the ISO week number</dd>
+     *    <dt>%h</dt> <dd>same as %b</dd>
+     *    <dt>%H</dt> <dd>hour as a decimal number using a 24-hour clock (range 00 to 23)</dd>
+     *    <dt>%I</dt> <dd>hour as a decimal number using a 12-hour clock (range 01 to 12)</dd>
+     *    <dt>%j</dt> <dd>day of the year as a decimal number (range 001 to 366)</dd>
+     *    <dt>%k</dt> <dd>hour as a decimal number using a 24-hour clock (range 0 to 23); single digits are preceded by a blank. (See also %H.)</dd>
+     *    <dt>%l</dt> <dd>hour as a decimal number using a 12-hour clock (range 1 to 12); single digits are preceded by a blank. (See also %I.) </dd>
+     *    <dt>%m</dt> <dd>month as a decimal number (range 01 to 12)</dd>
+     *    <dt>%M</dt> <dd>minute as a decimal number</dd>
+     *    <dt>%n</dt> <dd>newline character</dd>
+     *    <dt>%p</dt> <dd>either `AM' or `PM' according to the given time value, or the corresponding strings for the current locale</dd>
+     *    <dt>%P</dt> <dd>like %p, but lower case</dd>
+     *    <dt>%r</dt> <dd>time in a.m. and p.m. notation equal to %I:%M:%S %p</dd>
+     *    <dt>%R</dt> <dd>time in 24 hour notation equal to %H:%M</dd>
+     *    <dt>%s</dt> <dd>number of seconds since the Epoch, ie, since 1970-01-01 00:00:00 UTC</dd>
+     *    <dt>%S</dt> <dd>second as a decimal number</dd>
+     *    <dt>%t</dt> <dd>tab character</dd>
+     *    <dt>%T</dt> <dd>current time, equal to %H:%M:%S</dd>
+     *    <dt>%u</dt> <dd>weekday as a decimal number [1,7], with 1 representing Monday</dd>
+     *    <dt>%U</dt> <dd>week number of the current year as a decimal number, starting with the
+     *            first Sunday as the first day of the first week</dd>
+     *    <dt>%V</dt> <dd>The ISO 8601:1988 week number of the current year as a decimal number,
+     *            range 01 to 53, where week 1 is the first week that has at least 4 days
+     *            in the current year, and with Monday as the first day of the week.</dd>
+     *    <dt>%w</dt> <dd>day of the week as a decimal, Sunday being 0</dd>
+     *    <dt>%W</dt> <dd>week number of the current year as a decimal number, starting with the
+     *            first Monday as the first day of the first week</dd>
+     *    <dt>%x</dt> <dd>preferred date representation for the current locale without the time</dd>
+     *    <dt>%X</dt> <dd>preferred time representation for the current locale without the date</dd>
+     *    <dt>%y</dt> <dd>year as a decimal number without a century (range 00 to 99)</dd>
+     *    <dt>%Y</dt> <dd>year as a decimal number including the century</dd>
+     *    <dt>%z</dt> <dd>numerical time zone representation</dd>
+     *    <dt>%Z</dt> <dd>time zone name or abbreviation</dd>
+     *    <dt>%%</dt> <dd>a literal `%' character</dd>
+     *   </dl>
+     *  </dd>
+     * </dl>
      * @param sLocale {String} (Optional) The locale to use when displaying days of week,
      *  months of the year, and other locale specific strings.  The following locales are
      *  built in:
@@ -2813,4 +2943,4 @@
 
 })();
 
-YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.6.0", build: "1321"});
+YAHOO.register("datasource", YAHOO.util.DataSource, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/datatable/README
===================================================================
--- trunk/root/static/yui/datatable/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,446 +0,0 @@
-DataTable Release Notes
-
-*** version 2.6.0 ***
-
-* GA release.
-* Created new subclass ScrollingDataTable. Created new classes CellEditor,
-BaseCellEditor, and associated subclasses. As a result, the following API changes
-have been made:
-   - DataTable.editCheckbox is no longer supported. The CheckboxCellEditor class should be used instead.
-   - DataTable.editDate is no longer supported. The DateCellEditor class should be used instead.
-   - DataTable.editDropdown is no longer supported. The DropdownCellEditor class should be used instead.
-   - DataTable.editRadio is no longer supported. The RadioCellEditor class should be used instead.
-   - DataTable.editTextarea is no longer supported. The TextareaCellEditor class should be used instead.
-   - DataTable.editTextbox is no longer supported. The TextboxCellEditor class should be used instead.
-   - editorUpdateEvent is no longer supported.
-   - showCellEditorBtns() is no longer supported. The CellEditor method renderBtns() should be used instead.
-   - resetCellEditor() renamed to destroyCellEditor().
-   - Values for checkboxOptions, dropdownOptions, and radioOptions must be either a
-   simple Array or an array of object literals with properties "value" and "label".
-   - A new CellEditor property asyncSubmitter can be used to submit input values
-   and will block the DataTable UI (via new DataTable methods disable() and
-   undisable()) until the callback function is executed to finish the transaction.
-   - The CellEditor's "Save" and "Cancel" buttons now have configurable labels.
-   - CellEditor validator functions, including the built-in function YAHOO.widget.DataTable.validateNumber
-   must return undefined for invalid values.
-   
-* Pagination and sorting have been reworked to better support dynamically driven
-DataTables. As a result, the following important changes have been made:
-    - Removed support for "magic meta" fields
-    - The following APIs have been removed:
-        * "paginationEventHandler" Attribute
-        * handleSimplePagination()
-        * handleDataSourcePagination()        
-        * updatePaginator()
-        * showPage()
-        * formatPaginator()
-        * formatPaginationDropdown()
-        * formatPaginatorLinks()
-    - The following APIs have been added:
-        * "dynamicData" Attribute
-    - The following APIs have been changed:
-        * onPaginatorChange() has been renamed to onPaginatorChangeRequest()
-    - Removed backward compatibility support for the "paginated" Attribute and
-   the object literal "paginator" Attribute value. Implementers must use the Paginator
-   class to populate the "paginator" Attribute.
-
-* The following APIs have been changed from static class properties to instance
-Attributes, to be set via the initial config or myDataTable.set():
-    - MSG_EMPTY
-    - MSG_ERROR
-    - MSG_LOADING
-    - COLOR_COLUMNFILLER (ScrollingDataTable)
-    
-* The formatTheadCell() method been changed from static a static method to an
-instance method with an update to its argument signature.
-
-* The initEvent will fire when rows are rendered from an initialized state, 
-and the renderEvent will always fire when rows are rendered, and also when the 
-underlying DOM incrementally changes (such as incrementally adding or deleting
-rows or Columns). This is a change from prior behavior, when the the renderEvent
-would *not* fire if the initEvent was fired and only when the entire view was
-rendered (such as a new page). There is now a new postRenderEvent which fires
-after the renderEvent, once the post-render cleanup routine has executed (i.e.,
-Column width validations).
-
-* For consistency with other doBefore abstract methods, doBeforeShowCellEditor()
-returns true by default, and returns false to cancel showing the cell editor.
-
-* Added the following APIs 
-   - configs property
-   - getBdTableEl() method (ScrollingDataTable only)
-   - getHdContainerEl() method (ScrollingDataTable only)
-   - getHdTableEl() method (ScrollingDataTable only)
-   - updateCell() method
-   - currencyOptions, dateOptions, and numberOptions Attributes for default formatting
-
-* Column changes:
-   - minWidth default value now null.
-   - Added Column.maxAutoWidth property
-   - Removed unused Column._oDefinition private property.
-   - Hidden Columns are now manifested as cell liner elements with display:none
-   to prevent content from being visible.
-   - Resizeable Columns now create an additional resizer liner DIV element between
-   the TH element and the liner DIV element. Implementers are advised to access the 
-   liner DIV elements via Column.getThLinerEl() rather than TH.firstChild.
-   - currencyOptions, dateOptions, and numberOptions properties for robust per-Column formatting
- 
-* In the markup, the primary data TBODY is (once again) before the message TBODY element.
- 
-* TR element IDs are now assigned with the corresponding Record ID.
- 
-* Removed unused TD ID assignments.
- 
-* All CSS clases representing Column states now assigned directly on TH and TD
-elements, not on liner DIV elements.
- 
-* Added bottom border to last TR element in ScrollingDataTables.
- 
-* paginator attribute can be set to null to remove pagination.
-
-* Paginator extracted to standalone class and optional dependency.
- 
-* The default CSS styles for captions have been updated.
-
-* addRows(data, index) now inserts rows in the correct order
-
-* initializeTable now resets Paginator's totalRecords
-
-* default cell formatting broken out into Formatter collection method
-
-
-*** version 2.5.2 ***
-
-* Paginator now updates recordOffset to the starting index of the last page when
-totalRecords is set to a size smaller than the current recordOffset.
-
-* Assorted pagination and scrolling bugs.
-
-* Resizing a Column no longer inadvertantly sorts it in IE.
- 
-* Header text no longer wraps by default.
- 
-* Added UI to fill gap when a scrolling DataTable is narrower than its container.
- 
-* Fixed wrong assignment of classnames for TDs and message cell.
- 
-* Fixed bugs for width, minWidth, and hidden Column values in non-scrolling DataTables.
- 
-* Added getBdContainerEl() method.
-
-
-
-*** version 2.5.1 ***
-
-* Only split THEAD from TBODY markup for scrollable tables.
-* columnResizeEvent sends new width value.
-* Improved performance for adding, deleting, and updating rows dynamically.
-
-
-
-*** version 2.5.0 ***
-
-* Introduced YAHOO.widget.Paginator to manage pagination.
-* Introduced YAHOO.util.Chain to allow for progressive rendering.
-
-Removed APIs
-
-    * CLASS_SCROLLBODY
-    * CLASS_TABLE
-    * getTableEl()
-
-Changed APIs
-
-    * initializeTable() - No longer takes any arguments. Data must be added as a separate step.
-    * doBeforeLoadData(sRequest, oResponse, oPayload) - oResponse is now the converted full response (typed JSON or XML as appropriate). oPayload is now an optional data payload implementer can pass in to DataSource.sendRequest via the callback object literal.
-    * formatCell() - The first argument, elCell, is now a reference to the cell liner element rather than the TD itself.
-    * onDataReturnAppendRows(sRequest, oResponse, oPayload) - oResponse is now the converted full response (typed JSON or XML as appropriate). oPayload is now an optional data payload implementer can pass in to DataSource.sendRequest via the callback object literal.
-    * onDataReturnInitializeTable(sRequest, oResponse, oPayload) - oResponse is now the converted full response (typed JSON or XML as appropriate). oPayload is now an optional data payload implementer can pass in to DataSource.sendRequest via the callback object literal.
-    * onDataReturnInsertRows(sRequest, oResponse, oPayload) - oResponse is now the converted full response (typed JSON or XML as appropriate). oPayload is now an optional data payload implementer can pass in to DataSource.sendRequest via the callback object literal.
-    * paginator - Should now be an instance of YAHOO.widget.Paginator.
-    * sortedBy.dir - Use CLASS_ASC or CLASS_DESC instead of "asc" and "desc" strings.
-    * Scrolling must be enabled via the configs "scrollable", "width", and "height". CSS should no longer be used to set width or height on scrollable tables.    
-
-Deprecated APIs
-
-    * formatPaginatorDropdown() - Use new Paginator class.
-    * formatPaginatorLinks() - Use new Paginator class.
-    * formatPaginators() - Use new Paginator class.
-    * refreshView() - Use render().
-    * showPage() - Use new Paginator class.
-    * updatePaginator() - Use new Paginator class.
-    * headerCellClickEvent - Use theadCellClickEvent.
-    * headerCellDblclickEvent - Use theadCellDblclickEvent.
-    * headerCellMousedownEvent - Use theadCellMousedownEvent.
-    * headerCellMouseoutEvent - Use theadCellMouseoutEvent.
-    * headerCellMouseoverEvent - Use theadCellMouseoverEvent.
-    * headerLabelClickEvent - Use theadLabelClickEvent.
-    * headerLabelDblclickEvent - Use theadLabelDblclickEvent.
-    * headerLabelMousedownEvent - Use theadLabelMousedownEvent.
-    * headerLabelMouseoutEvent - Use theadLabelMouseoutEvent.
-    * headerLabelMouseoverEvent - Use theadLabelMouseoverEvent.
-    * headerRowClickEvent - Use theadRowClickEvent.
-    * headerRowDblclickEvent - Use theadRowDblclickEvent.
-    * headerRowMousedownEvent - Use theadRowMousedownEvent.
-    * headerRowMouseoutEvent - Use theadRowMouseoutEvent.
-    * headerRowMouseoverEvent - Use theadRowMouseoverEvent.
-    * refreshEvent - Use renderEvent.
-    * paginated - No longer used, as long as "paginator" value is an instance of Paginator class.
-
-
-RecordSet
-
-    * updateKey() - Use updateRecordValue().
-    * keyUpdateEvent - Use recordValueUpdateEvent.
-
-Column
-
-    * width - Must now be a number. Strings will be ignored.
-    * sortOptions.defaultOrder - Use sortOptions.defaultDir, and use CLASS_ASC or CLASS_DESC instead of "asc" and "desc" strings.
-
-
-
-*** version 2.4.0 ***
-
-* No changes.
-
-
-
-*** version 2.3.1 ***
-
-* For better support of resizeable Columns, the following core CSS changes have been
-made:
-
-- applied "table-layout:fixed" to TABLE elements
-- removed "overflow:hidden" from TH and TD elements
-- removed "white-space:nowrap" from TD elements
-
-As a result, implementers may notice a change in the widths of their rendered
-DataTables, which should be resolved by setting widths explicitly via CSS or
-your Column definitions.
-
-* Selection model issues have been addressed by clearing up ambiguous ID and
-index usage. Record instances are now assigned globally unique and immutable ID
-strings (no longer numbers). Record indexes are numbers that are mutable in order
-to represent Record order within a RecordSet instance. TR elements are assigned
-DOM ID strings that are *unrelated* to Record instance IDs and Record indexes. Be
-aware that DOM element IDs will get reused when sorting and paginating. Furthermore,
-Column instances are assigned globally unique and immutable ID strings
-(no longer numbers). Column indexes are numbers that are mutable and represent
-Column order within a ColumnSet instance. Please refer to the API documentation
-for details on when to use Record/Column instance IDs, DOM element IDs, and
-Record/Column index numbers.
-
-* Enabling row or cell selection no longer breaks clicks on links and form elements.
-
-
-
-*** version 2.3.0 ***
-
-* DataSource requests over XHR no longer automatically insert a "?" in the URIs
-between the host and the query. Implementers should explicitly include the
-question mark if it is required by your server. Please refer to the XHR
-examples for implementation details.
-
-* Applied new skinning model.
-
-* The MVC model has been stabilized and many APIs have been renamed or changed
-quite a bit from the previous version. Implementers should now only use
-DataTable APIs and not use any Record or RecordSet APIs to add/delete/update
-rows, Records, and DOM elements. RecordSet synchronization will be managed for
-you under the hood. For example, myDataTable.addRow() now accepts an object
-literal of data and will create a Record and update the DOM. Calling
-myDataTable.deleteRow() will delete the appropriate Record and update the DOM.
-Please refer to the API reference for full details on property and method names and
-argument signatures. When possible, Logger messages will provide deprecation warnings,
-so implementers upgrading from the previous version are encouraged to use the debug
-build of DataTable.
-
-* The DataTable constructor signature has changed in 2 major ways:
-1) Do not pass in a ColumnSet instance. Instead, pass in an array of Column
-definitions directly, and a ColumnSet instance will be created for you under the hood.
-2) In the progressive enhancement case, first instantiate a DataSource pointing
-to your HTML TABLE element, and then pass in that DataSource instance to your
-DataTable constructor. Please refer to the progressive enhancement example
-for implementation details.
-
-* DataTable now extends Element, which has become a required dependency. Implementers
-should now use the myDataTable.set("propertyName", newValue) syntax instead of direct
-dot notation of any properties.
-
-* The underlying pagination architecture and API have been revised. Specifically,
-the property paginator has been deprecated in favor of paginated,
-paginatorOptions has been deprecated in favor of paginator, and related events
-and method names have been changed. Please see the pagination examples for
-implementation details. Please refer to the API reference for full details on
-new property and method names and argument signatures.
-
-* There is a known pagination bug where changing the rows-per-page dropdown while
-on a page number that is out of bounds of the new range, the current page value
-fails to get reset to an appropriate default value.
-
-* There is a known pagination bug where custom containers are ignored.
-
-* There is a known bug where row and cell selections are not tracked correctly in
-paginated DataTables.
-
-* The underlying editing architecture and API have been revised. Specifically, the
-ColumnEditor class is no longer used, the method editCell() has been deprecated
-in favor of showCellEditor(), and the Custom Event "cellEditEvent" is now
-"editorSaveEvent". Please see the inline editing example for
-implementation details. Please refer to the API reference for full details on
-property and method names and argument signatures.
-
-* There is a known issue where the built-in date editor throws a JavaScript
-exception when encountering a null or non-Date value. Implementers using the built-in
-date editor should validate for type Date and avoid null values in these data
-fields.
-
-* The underlying sort architecture, including YAHOO.util.Sort, has been modified
-to accept a single sort function rather than separate functions for ascending
-and descending sorts.
-
-* Scrolling a DataTable with an active Cell Editor will cancel the edit to
-to prevent the Cell Editor's position from getting out of sync with its
-associated TD element.
-
-* The following static methods are executed in the scope of the DataTable
-instance: DataTable.validateNumber(), DataTable.formatButton(),
-DataTable.formatCheckbox(), DataTable.formatCurrency(), DataTable.formatDate(),
-DataTable.formatDropdown(), DataTable.formatEmail(), DataTable.formatLink(),
-DataTable.formatNumber(), DataTable.formatRadio(), DataTable.formatText(),
-DataTable.formatTextarea(), DataTable.formatTextbox().
-
-* The following DataTable APIs have changed:
-- The following static constants have been removed: CLASS_CURRENCY, CLASS_CURRENTPAGE,
-CLASS_DATE, CLASS_EMAIL, CLASS_FIRSTLINK, CLASS_FIRSTPAGE, CLASS_HEADCONTAINER,
-CLASS_HEADRESIZER, CLASS_HEADTEXT, CLASS_HIGHLIGHT, CLASS_LASTLINK, CLASS_LASTPAGE,
-CLASS_LINK, CLASS_NEXTLINK, CLASS_NEXTPAGE, CLASS_NUMBER, CLASS_PAGELINK,
-CLASS_PAGELINKS, CLASS_PAGESELECT, CLASS_PREVLINK, CLASS_PREVPAGE, CLASS_SORTEDBYASC,
-CLASS_SORTEDBYDESC, CLASS_STRING.
-- The following static constants have been added: CLASS_ASC, CLASS_BUTTON,
-CLASS_DEFAULT, CLASS_DESC, CLASS_DISABLED, CLASS_DROPDOWN, CLASS_HEADER,
-CLASS_HIGHLIGHTED, CLASS_LABEL, CLASS_NEXT, CLASS_PAGE, CLASS_PREVIOUS,
-CLASS_RESIZER
-- The property contextMenu is no longer supported.
-- The property dataSource has been deprecated in favor of the accessor method
-getDataSource().
-- The property fixedWidth is not fully supported.
-- The property sortedBy now defines key instead of colKey.
-- The property rowSingleSelect has been deprecated in favor of selectionMode.
-
-* The following Record APIs have changed:
-- Record data values are no longer accessible with oRecord[key] or oRecord.key.
-Implementers should now use oRecord.getData(key).
-- The property yuiRecordId has been deprecated in favor of the accessor method
-getId().
-
-* The following RecordSet APIs have changed:
-- The method getRecordBy() is not implemented.
-- The method insert() has been deprecated in favor of addRecord() and addRecords().
-- The method replace() has been renamed replaceRecords().
-- The method sort() has been deprecated in favor of sortRecords().
-
-* The following Column APIs have changed:
-- Column type has been deprecated in favor of formatter. In your Column
-definitions, please change type:"date" to formatter:"date", type:"currency" to
-formatter:"currency", etc.
-- The property parser is no longer used. Implementers should use the static
-DataSource methods DataSource.parseDate(), DataSource.parseNumber(), and
-DataSource.parseString() for type conversion functionality.
-- The methods getColSpan() and getRowSpan() have been renamed to getColspan()
-and getRowspan().
-- The return value for the method getId() has been changed.
-- The following methods are no longer implemented: parse(), parseCheckbox(),
-parseDate(), parseNumber(), parseSelect(). Implementers should now use a
-DataSource with a data type of HTML TABLE element.
-- The showEditor() method is no longer implemented. Implementers should now use
-the DataTable method showCellEditor().
-- All static formatter functions have been moved from the Column class to the
-DataTable class.
-
-* The DataTable method getColumn() has a known issue where instead of accepting
-a Column's key index value, the method accepts a Column's ID value. Until this
-issue is fixed, implementers can use the following workaround:
-
-    // Instead of this:
-    // var oColumn = myDataTable.getColumn(0);
-
-    // Use this:
-    var oColumn = myDataTable.getColumn(myDataTable.getFirstTrEl().cells[0].yuiColumnId);
-
-
-
-
-
-
-
-
-
-
-*** version 2.2.2 ***
-
-* Removed workaround for a fixed Dom.getXY() bug that was causing a positioning
-problem for inline editors on scrolled pages.
-
-
-
-**** version 2.2.1 ***
-
-* Changed default pagination from enabled to disabled. Must set property
-paginator to true to enable built-in client-side pagination.
-* Removed deleteSelectedRows() and added deleteRows().
-* Deprecated properties isEmpty and isLoading, and methods showLoadingMessage(),
-showEmptyMessage(), and hideTableMessages(). Implementers should now use
-showTableMessage() and hideTableMessage().
-* Deprecated methods paginateRows() and onDataReturnPaginateRows(). Implementers
-should now use popualateTable() and onDataReturnPopulateTable().
-* Deprecated pagination properties pageCurrent, rowsPerPage, startRecordIndex,
-pageLinksLength, rowsPerPageDropdown, pageLinksStart, and pagers.
-* Fixed unclickable links.
-* Fix to support data values of 0 (zero).
-* Fixed broken validation in multiple places when the value 0 (zero) is passed
-in as an argument.
-* Fixed incorrect month output in formatDate().
-* Fixed broken empty message when there are zero rows.
-* Allow implementers to use data with field name "id".
-* Fixed Column resizeability in -min builds.
-* Fixed Column sorting of null, undefined, and empty values.
-* Fixed Column sorting of nested headers.
-* Fixed paginator dropdowns to stay in sync when paginating.
-* Fixed rowSingleSelect for paginated DataTable.
-* Fix for currency values with more than 2 decimal places.
-* Fixed broken TR ID assignments in replaceRows().
-* Fixed Opera UI artifacting problem when repaginating via dropdowns.
-* Fixed orphaned ColumnEditor during pagination or other de facto blur
-interaction. Data gets saved.
-* Extracted non-foundational CSS for scrollable DataTables to make UI easier to
-customize.
-* Updated methods select() and unselect() to also accept an array of elements or
-an array of strings.
-* Improved row selection behavior to model the desktop paradigm (i.e., require
-CONTROL and/or SHIFT keys to multi-select).
-* Tweaked inline editing for better Mac performance.
-* Refactored pagination code to be easier to implement, configure, and extend.
-* Accept an error boolean from DataSource in case of data error and show error
-message.
-* The CustomEvent rowDeleteEvent is now only fired once per deleted row and
-its argument signature has been modified.
-* Added selectRow(), rowSelectEvent, unselectRow(), rowUnselectEvent, rowAddEvent,
-and rowUpdateEvent.
-* Added constants CLASS_TABLE, CLASS_EDITOR, CLASS_FIRST, and CLASS_LAST.
-* Added ColumnEditor class moveContainerTo().
-* Add IDs and class hooks to TABLE element and ColumnEditor's container DIV.
-* Add class hooks to first and last TR elements.
-* Added hook to doBeforeLoadData() for the not-from-markup constructor flow.
-* Added properties paginator and paginatorOptions, as well as method getPaginator().
-* Added methods saveEditorData() and cancelEditorData().
-* Improved type checking with YAHOO.lang.
-
-
-
-**** version 2.2.0 ***
-
-* Beta release.
-* Caption is not supported when scrolling is enabled.
-* Resizeability is not supported for fixed-width DataTables.

Modified: trunk/root/static/yui/datatable/assets/datatable-core.css
===================================================================
--- trunk/root/static/yui/datatable/assets/datatable-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/assets/datatable-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* foundational CSS */
 
@@ -36,8 +36,14 @@
     -moz-outline:none;
 }
 
+/* sortable columns */
+
+.yui-skin-sam thead .yui-dt-sortable {
+    cursor:pointer;
+}
+
 /* draggable columns */
-.yui-dt-draggable {
+.yui-skin-sam thead .yui-dt-draggable {
     cursor: move;
 }
 .yui-dt-coltarget {
@@ -65,6 +71,7 @@
     visibility:hidden;
     position:absolute;
     z-index:9000;
+    background-color:#CCC;opacity:0;filter: alpha(opacity=0); /* Bug 1952811: IE transparency z-index */
 }
 
 /* hidden columns */

Modified: trunk/root/static/yui/datatable/assets/datatable.css
===================================================================
--- trunk/root/static/yui/datatable/assets/datatable.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/assets/datatable.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /*foundational css*/
 .yui-dt-table th, .yui-dt-table td {

Modified: trunk/root/static/yui/datatable/assets/skins/sam/datatable-skin.css
===================================================================
--- trunk/root/static/yui/datatable/assets/skins/sam/datatable-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/assets/skins/sam/datatable-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* basic skin styles */
 .yui-skin-sam .yui-dt table {
@@ -67,7 +67,7 @@
 .yui-skin-sam .yui-dt-mask {
     background-color: #000;
     opacity: .25;
-    *filter: alpha(opacity=25);  /* Set opacity in IE */
+    filter: alpha(opacity=25);  /* Set opacity in IE */
 }
 
 /* messaging */
@@ -82,9 +82,6 @@
 .yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td {border-bottom:1px solid #7F7F7F;}
 
 /* sortable columns */
-.yui-skin-sam thead .yui-dt-sortable {
-    cursor:pointer;
-}
 .yui-skin-sam th.yui-dt-asc,
 .yui-skin-sam th.yui-dt-desc {
     background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -100px; /* sorted header gradient */

Modified: trunk/root/static/yui/datatable/assets/skins/sam/datatable.css
===================================================================
--- trunk/root/static/yui/datatable/assets/skins/sam/datatable.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/assets/skins/sam/datatable.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inher!
 it;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0pt;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-color:red;}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;text-align:left;}.yui-skin-sa!
 m .yui-dt-list td{border-right:none;}.yui-skin-sam .yui-dt-res!
 izer{wid
th:6px;}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;*filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) no-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:!
 url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editable{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF}.yui-dt-editor .yui-dt-button button:hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;color:#000;}.yui-skin-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.yui-dt-odd!
 {background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui!
 -dt-asc,
.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#DBEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-li!
 st th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam .yui-dt-list t!
 r.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-sele!
 cted td.
yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff}.yui-skin-sam .yui-dt-selected{border:1px solid #fff;background-color:#fff;}
+.yui-skin-sam .yui-dt-mask{position:absolute;z-index:9500;}.yui-dt-tmp{position:absolute;left:-9000px;}.yui-dt-scrollable .yui-dt-bd{overflow:auto;}.yui-dt-scrollable .yui-dt-hd{overflow:hidden;position:relative;}.yui-dt-scrollable .yui-dt-bd thead tr,.yui-dt-scrollable .yui-dt-bd thead th{position:absolute;left:-1500px;}.yui-dt-scrollable tbody{-moz-outline:none;}.yui-skin-sam thead .yui-dt-sortable{cursor:pointer;}.yui-skin-sam thead .yui-dt-draggable{cursor:move;}.yui-dt-coltarget{position:absolute;z-index:999;}.yui-dt-hd{zoom:1;}th.yui-dt-resizeable .yui-dt-resizerliner{position:relative;}.yui-dt-resizer{position:absolute;right:0;bottom:0;height:100%;cursor:e-resize;cursor:col-resize;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}.yui-dt-resizerproxy{visibility:hidden;position:absolute;z-index:9000;background-color:#CCC;opacity:0;filter:alpha(opacity=0);}th.yui-dt-hidden .yui-dt-liner,td.yui-dt-hidden .yui-dt-liner,th.yui-dt-hidden .yui-dt-resizer{display:none!
 ;}.yui-dt-editor{position:absolute;z-index:9000;}.yui-skin-sam .yui-dt table{margin:0;padding:0;font-family:arial;font-size:inherit;border-collapse:separate;*border-collapse:collapse;border-spacing:0;border:1px solid #7F7F7F;}.yui-skin-sam .yui-dt thead{border-spacing:0;}.yui-skin-sam .yui-dt caption{color:#000;font-size:85%;font-weight:normal;font-style:italic;line-height:1;padding:1em 0;text-align:center;}.yui-skin-sam .yui-dt th{background:#D8D8DA url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;}.yui-skin-sam .yui-dt th,.yui-skin-sam .yui-dt th a{font-weight:normal;text-decoration:none;color:#000;vertical-align:bottom;}.yui-skin-sam .yui-dt th{margin:0;padding:0;border:none;border-right:1px solid #CBCBCB;}.yui-skin-sam .yui-dt tr.yui-dt-first td{border-top:1px solid #7F7F7F;}.yui-skin-sam .yui-dt th .yui-dt-liner{white-space:nowrap;}.yui-skin-sam .yui-dt-liner{margin:0;padding:0;padding:4px 10px 4px 10px;}.yui-skin-sam .yui-dt-coltarget{width:5px;background-col!
 or:red;}.yui-skin-sam .yui-dt td{margin:0;padding:0;border:non!
 e;border
-right:1px solid #CBCBCB;text-align:left;}.yui-skin-sam .yui-dt-list td{border-right:none;}.yui-skin-sam .yui-dt-resizer{width:6px;}.yui-skin-sam .yui-dt-mask{background-color:#000;opacity:.25;filter:alpha(opacity=25);}.yui-skin-sam .yui-dt-message{background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable table{border:none;}.yui-skin-sam .yui-dt-scrollable .yui-dt-hd{border-left:1px solid #7F7F7F;border-top:1px solid #7F7F7F;border-right:1px solid #7F7F7F;}.yui-skin-sam .yui-dt-scrollable .yui-dt-bd{border-left:1px solid #7F7F7F;border-bottom:1px solid #7F7F7F;border-right:1px solid #7F7F7F;background-color:#FFF;}.yui-skin-sam .yui-dt-scrollable .yui-dt-data tr.yui-dt-last td{border-bottom:1px solid #7F7F7F;}.yui-skin-sam th.yui-dt-asc,.yui-skin-sam th.yui-dt-desc{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -100px;}.yui-skin-sam th.yui-dt-sortable .yui-dt-label{margin-right:10px;}.yui-skin-sam th.yui-dt-asc .yui-dt-liner{background:url(dt-arrow-up.png) n!
 o-repeat right;}.yui-skin-sam th.yui-dt-desc .yui-dt-liner{background:url(dt-arrow-dn.png) no-repeat right;}tbody .yui-dt-editable{cursor:pointer;}.yui-dt-editor{text-align:left;background-color:#F2F2F2;border:1px solid #808080;padding:6px;}.yui-dt-editor label{padding-left:4px;padding-right:6px;}.yui-dt-editor .yui-dt-button{padding-top:6px;text-align:right;}.yui-dt-editor .yui-dt-button button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;border:1px solid #999;width:4em;height:1.8em;margin-left:6px;}.yui-dt-editor .yui-dt-button button.yui-dt-default{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1400px;background-color:#5584E0;border:1px solid #304369;color:#FFF;}.yui-dt-editor .yui-dt-button button:hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;color:#000;}.yui-dt-editor .yui-dt-button button:active{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;color:#000;}.yui-ski!
 n-sam tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam tr.y!
 ui-dt-od
d{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam tr.yui-dt-odd td.yui-dt-desc{background-color:#DBEAFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd{background-color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-desc{background-color:#EDF5FF;}.yui-skin-sam th.yui-dt-highlighted,.yui-skin-sam th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam tr.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam tr.yui-dt-odd td.yui-dt-highli!
 ghted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list th.yui-dt-highlighted,.yui-skin-sam .yui-dt-list th.yui-dt-highlighted a{background-color:#B2D2FF;}.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-highlighted td.yui-dt-desc,.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-highlighted,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-highlighted{cursor:pointer;background-color:#B2D2FF;}.yui-skin-sam th.yui-dt-selected,.yui-skin-sam th.yui-dt-selected a{background-color:#446CD7;}.yui-skin-sam tr.yui-dt-selected td,.yui-skin-sam tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-list th.yui-dt-selected,.yui-skin-sam .yui-dt-list th.y!
 ui-dt-selected a{background-color:#446CD7;}
+.yui-skin-sam .yui-dt-list tr.yui-dt-selected td,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-asc,.yui-skin-sam .yui-dt-list tr.yui-dt-selected td.yui-dt-desc{background-color:#426FD9;color:#FFF;}.yui-skin-sam .yui-dt-list tr.yui-dt-even td.yui-dt-selected,.yui-skin-sam .yui-dt-list tr.yui-dt-odd td.yui-dt-selected{background-color:#446CD7;color:#FFF;}.yui-skin-sam .yui-dt-paginator{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-dt-paginator .yui-dt-first,.yui-skin-sam .yui-dt-paginator .yui-dt-last,.yui-skin-sam .yui-dt-paginator .yui-dt-selected{padding:2px 6px;}.yui-skin-sam .yui-dt-paginator a.yui-dt-first,.yui-skin-sam .yui-dt-paginator a.yui-dt-last{text-decoration:none;}.yui-skin-sam .yui-dt-paginator .yui-dt-previous,.yui-skin-sam .yui-dt-paginator .yui-dt-next{display:none;}.yui-skin-sam a.yui-dt-page{border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;background-color:#fff;}.yui-skin-sam .yui-dt-selected{border:1px solid #ff!
 f;background-color:#fff;}

Modified: trunk/root/static/yui/datatable/datatable-debug.js
===================================================================
--- trunk/root/static/yui/datatable/datatable-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/datatable-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Mechanism to execute a series of callbacks in a non-blocking queue.  Each callback is executed via setTimout unless configured with a negative timeout, in which case it is run in blocking mode in the same execution thread as the previous callback.  Callbacks can be function references or object literals with the following keys:
@@ -1184,7 +1184,7 @@
      * @return {String} Sanitized Column key.
      */
     getSanitizedKey : function() {
-        return this.getKey().replace(/[^\w\-.:]/g,"");
+        return this.getKey().replace(/[^\w\-]/g,"");
     },
 
     /**
@@ -2520,7 +2520,6 @@
  * @requires yahoo, dom, event, element, datasource
  * @optional dragdrop, dragdrop
  * @title DataTable Widget
- * @beta
  */
 
 /****************************************************************************/
@@ -2532,7 +2531,7 @@
  *
  * @namespace YAHOO.widget
  * @class DataTable
- * @extends Element
+ * @extends YAHOO.util.Element
  * @constructor
  * @param elContainer {HTMLElement} Container element for the TABLE.
  * @param aColumnDefs {Object[]} Array of object literal Column definitions.
@@ -3348,12 +3347,12 @@
      * @static
      */
     formatDropdown : function(el, oRecord, oColumn, oData) {
-        var selectedValue = (lang.isValue(oData)) ? oData : oRecord.getData(oColumn.field);
-        var options = (lang.isArray(oColumn.dropdownOptions)) ?
-                oColumn.dropdownOptions : null;
+        var selectedValue = (lang.isValue(oData)) ? oData : oRecord.getData(oColumn.field),
+            options = (lang.isArray(oColumn.dropdownOptions)) ?
+                oColumn.dropdownOptions : null,
 
-        var selectEl;
-        var collection = el.getElementsByTagName("select");
+            selectEl,
+            collection = el.getElementsByTagName("select");
 
         // Create the form element only once, so we can attach the onChange listener
         if(collection.length === 0) {
@@ -3381,8 +3380,9 @@
                     var optionEl = document.createElement("option");
                     optionEl.value = (lang.isValue(option.value)) ?
                             option.value : option;
+                    // Bug 2334323: Support legacy text, support label for consistency with DropdownCellEditor
                     optionEl.innerHTML = (lang.isValue(option.text)) ?
-                            option.text : option;
+                            option.text : (lang.isValue(option.label)) ? option.label : option;
                     optionEl = selectEl.appendChild(optionEl);
                     if (optionEl.value == selectedValue) {
                         optionEl.selected = true;
@@ -3480,8 +3480,7 @@
      * @static
      */
     formatText : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
+        var value = (lang.isValue(oData)) ? oData : "";
         //TODO: move to util function
         el.innerHTML = value.toString().replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
     },
@@ -3497,9 +3496,8 @@
      * @static
      */
     formatTextarea : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
-        var markup = "<textarea>" + value + "</textarea>";
+        var value = (lang.isValue(oData)) ? oData : "",
+            markup = "<textarea>" + value + "</textarea>";
         el.innerHTML = markup;
     },
 
@@ -3514,9 +3512,8 @@
      * @static
      */
     formatTextbox : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
-        var markup = "<input type=\"text\" value=\"" + value + "\" />";
+        var value = (lang.isValue(oData)) ? oData : "",
+            markup = "<input type=\"text\" value=\"" + value + "\" />";
         el.innerHTML = markup;
     },
 
@@ -3858,7 +3855,7 @@
             // Set defaults
             oState = oState || {pagination:null, sortedBy:null};
             var sort = (oState.sortedBy) ? oState.sortedBy.key : oSelf.getColumnSet().keys[0].getKey();
-            var dir = (oState.sortedBy && oState.sortedBy.dir === DT.CLASS_DESC) ? "desc" : "asc";
+            var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
             var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
             var results = (oState.pagination) ? oState.pagination.rowsPerPage : null;
             
@@ -4929,12 +4926,20 @@
         
     elTh.className = this._getColumnClassNames(oColumn);
             
-    // Set Column width for non fallback cases
-    if(oColumn.width && !this._bDynStylesFallback) {
+    // Set Column width...
+    if(oColumn.width) {
         // Validate minWidth
         var nWidth = (oColumn.minWidth && (oColumn.width < oColumn.minWidth)) ?
                 oColumn.minWidth : oColumn.width;
-        this._setColumnWidthDynStyles(oColumn, nWidth + 'px', 'hidden');
+        // ...for fallback cases
+        if(DT._bDynStylesFallback) {
+            elTh.firstChild.style.overflow = 'hidden';
+            elTh.firstChild.style.width = nWidth + 'px';        
+        }
+        // ...for non fallback cases
+        else {
+            this._setColumnWidthDynStyles(oColumn, nWidth + 'px', 'hidden');
+        }
     }
 
     this.formatTheadCell(elThLabel, oColumn, this.get("sortedBy"));
@@ -5195,7 +5200,7 @@
         elMsgTr.className = DT.CLASS_FIRST + " " + DT.CLASS_LAST;
         this._elMsgTr = elMsgTr;
         var elMsgTd = elMsgTr.appendChild(document.createElement("td"));
-        elMsgTd.colSpan = this._oColumnSet.keys.length;
+        elMsgTd.colSpan = this._oColumnSet.keys.length || 1;
         elMsgTd.className = DT.CLASS_FIRST + " " + DT.CLASS_LAST;
         this._elMsgTd = elMsgTd;
         elMsgTbody = elTable.insertBefore(elMsgTbody, this._elTbody);
@@ -5462,7 +5467,7 @@
     elTd.firstChild.className = DT.CLASS_LINER;
 
     // Set Column width for fallback cases
-    if(oColumn.width && this._bDynStylesFallback) {
+    if(oColumn.width && DT._bDynStylesFallback) {
         // Validate minWidth
         var nWidth = (oColumn.minWidth && (oColumn.width < oColumn.minWidth)) ?
                 oColumn.minWidth : oColumn.width;
@@ -5505,7 +5510,7 @@
  * @private
  */
 _updateTrEl : function(elTr, oRecord) {
-    var ok = this.get("formatRow") ? this.get("formatRow")(elTr, oRecord) : true;
+    var ok = this.get("formatRow") ? this.get("formatRow").call(this, elTr, oRecord) : true;
     if(ok) {
         // Hide the row to prevent constant reflows
         elTr.style.display = 'none';
@@ -6343,20 +6348,24 @@
         }
     }
 
-    var elTarget = Ev.getTarget(e);
-    var elTag = elTarget.nodeName.toLowerCase();
-    var bKeepBubbling = true;
+    var elTarget = Ev.getTarget(e),
+        elTag = elTarget.nodeName.toLowerCase(),
+        bKeepBubbling = true;
     while(elTarget && (elTag != "table")) {
         switch(elTag) {
             case "body":
                 return;
             case "input":
-                if(elTarget.type.toLowerCase() == "checkbox") {
+                var sType = elTarget.type.toLowerCase();
+                if(sType == "checkbox") {
                     bKeepBubbling = oSelf.fireEvent("theadCheckboxClickEvent",{target:elTarget,event:e});
                 }
-                else if(elTarget.type.toLowerCase() == "radio") {
+                else if(sType == "radio") {
                     bKeepBubbling = oSelf.fireEvent("theadRadioClickEvent",{target:elTarget,event:e});
                 }
+                else if((sType == "button") || (sType == "image") || (sType == "submit") || (sType == "reset")) {
+                    bKeepBubbling = oSelf.fireEvent("theadButtonClickEvent",{target:elTarget,event:e});
+                }
                 break;
             case "a":
                 bKeepBubbling = oSelf.fireEvent("theadLinkClickEvent",{target:elTarget,event:e});
@@ -6417,20 +6426,24 @@
     }
 
     // Fire Custom Events
-    var elTarget = Ev.getTarget(e);
-    var elTag = elTarget.nodeName.toLowerCase();
-    var bKeepBubbling = true;
+    var elTarget = Ev.getTarget(e),
+        elTag = elTarget.nodeName.toLowerCase(),
+        bKeepBubbling = true;
     while(elTarget && (elTag != "table")) {
         switch(elTag) {
             case "body":
                 return;
             case "input":
-                if(elTarget.type.toLowerCase() == "checkbox") {
+                var sType = elTarget.type.toLowerCase();
+                if(sType == "checkbox") {
                     bKeepBubbling = oSelf.fireEvent("checkboxClickEvent",{target:elTarget,event:e});
                 }
-                else if(elTarget.type.toLowerCase() == "radio") {
+                else if(sType == "radio") {
                     bKeepBubbling = oSelf.fireEvent("radioClickEvent",{target:elTarget,event:e});
                 }
+                else if((sType == "button") || (sType == "image") || (sType == "submit") || (sType == "reset")) {
+                    bKeepBubbling = oSelf.fireEvent("buttonClickEvent",{target:elTarget,event:e});
+                }
                 break;
             case "a":
                 bKeepBubbling = oSelf.fireEvent("linkClickEvent",{target:elTarget,event:e});
@@ -6754,11 +6767,7 @@
                 elRow = Dom.getAncestorByTagName(elRow,"tr");
             }
 
-            // Make sure the TR is in this TBODY
-            if(elRow && (elRow.parentNode == this._elTbody)) {
-                // Now we can return the TR element
-                return elRow;
-            }
+            return elRow;
         }
     }
 
@@ -6866,11 +6875,7 @@
             elCell = el;
         }
 
-        // Make sure the TD is in this TBODY
-        if(elCell && (elCell.parentNode.parentNode == this._elTbody)) {
-            // Now we can return the TD element
-            return elCell;
-        }
+        return elCell;
     }
     else if(cell) {
         var oRecord, nColKeyIndex;
@@ -7071,11 +7076,7 @@
                 elTh = el;
             }
 
-            // Make sure the TH is in this THEAD
-            if(elTh && (elTh.parentNode.parentNode == this._elThead)) {
-                // Now we can return the TD element
-                return elTh;
-            }
+            return elTh;
         }
     }
 
@@ -7264,19 +7265,13 @@
         allRecords = this._oRecordSet.getRecords();
     }
 
-
-    /* NEW METHOD */
     // From the top, update in-place existing rows, so as to reuse DOM elements
     var elTbody = this._elTbody,
         loopN = this.get("renderLoopSize"),
         nRecordsLength = allRecords.length;
     
     // Table has rows
-    if(nRecordsLength > 0) {        
-        // So you don't see the borders in random places
-        //this._unsetFirstRow();
-        //this._unsetLastRow();
-        
+    if(nRecordsLength > 0) {                
         elTbody.style.display = "none";
         while(elTbody.lastChild) {
             elTbody.removeChild(elTbody.lastChild);
@@ -7331,60 +7326,40 @@
             scope: this,
             timeout: (loopN > 0) ? 0 : -1
         });
-        
-        // Fire events in separate timeout thread so implementers can
-        // subscribe immediately after the constructor
-        /*this._oChainRender.add({
-            method: function(oArg) {
-                if((this instanceof DT) && this._sId) {
-                    // Fire initEvent for first render
-                    if(this._bInit) {
-                        this._bInit = false;
-                        this.fireEvent("initEvent");
-                    }
-
-                    // Always fire renderEvent
-                    this.fireEvent("renderEvent");
-                    // Backward compatibility
-                    this.fireEvent("refreshEvent");
-                    YAHOO.log("DataTable rendered " + nRecordsLength + " of " + this._oRecordSet.getLength() + " rows", "info", this.toString());
-                
-                    //YAHOO.log("end render","time");
-                }
-            },
-            scope: this
-        });*/
+     
     }
     // Table has no rows
     else {
         // Set up the loop Chain to delete rows
         var nTotal = elTbody.rows.length;
-        this._oChainRender.add({
-            method: function(oArg) {
-                if((this instanceof DT) && this._sId) {
-                    var i = oArg.nCurrent,
-                        loopN = oArg.nLoopLength,
-                        nIterEnd = (i - loopN < 0) ? -1 : i - loopN;
-
-                    elTbody.style.display = "none";
-                    
-                    for(; i>nIterEnd; i--) {
-                        elTbody.deleteRow(-1);
+        if(nTotal > 0) {
+            this._oChainRender.add({
+                method: function(oArg) {
+                    if((this instanceof DT) && this._sId) {
+                        var i = oArg.nCurrent,
+                            loopN = oArg.nLoopLength,
+                            nIterEnd = (i - loopN < 0) ? -1 : i - loopN;
+    
+                        elTbody.style.display = "none";
+                        
+                        for(; i>nIterEnd; i--) {
+                            elTbody.deleteRow(-1);
+                        }
+                        elTbody.style.display = "";
+                        
+                        // Set up for the next loop
+                        oArg.nCurrent = i;
                     }
-                    elTbody.style.display = "";
-                    
-                    // Set up for the next loop
-                    oArg.nCurrent = i;
-                }
-            },
-            scope: this,
-            iterations: (loopN > 0) ? Math.ceil(nTotal/loopN) : 1,
-            argument: {
-                nCurrent: nTotal, 
-                nLoopLength: (loopN > 0) ? loopN : nTotal
-            },
-            timeout: (loopN > 0) ? 0 : -1
-        });
+                },
+                scope: this,
+                iterations: (loopN > 0) ? Math.ceil(nTotal/loopN) : 1,
+                argument: {
+                    nCurrent: nTotal, 
+                    nLoopLength: (loopN > 0) ? loopN : nTotal
+                },
+                timeout: (loopN > 0) ? 0 : -1
+            });
+        }
     }
     this._runRenderChain();
 },
@@ -7546,6 +7521,13 @@
  */
 onShow : function() {
     this.validateColumnWidths();
+    
+    for(var allKeys = this._oColumnSet.keys, i=0, len=allKeys.length, col; i<len; i++) {
+        col = allKeys[i];
+        if(col._ddResizer) {
+            col._ddResizer.resetResizerEl();
+        }
+    }
 },
 
 
@@ -7901,27 +7883,28 @@
             }
             // Client-side sort
             else {
+                // Is there a custom sort handler function defined?
+                var sortFnc = (oColumn.sortOptions && lang.isFunction(oColumn.sortOptions.sortFunction)) ?
+                        // Custom sort function
+                        oColumn.sortOptions.sortFunction : null;
+                   
                 // Sort the Records
-                if(!bSorted || sDir) {
+                if(!bSorted || sDir || sortFnc) {
                     // Get the field to sort
                     var sField = (oColumn.sortOptions && oColumn.sortOptions.field) ? oColumn.sortOptions.field : oColumn.field;
-                    // Is there a custom sort handler function defined?
-                    var sortFnc = (oColumn.sortOptions && lang.isFunction(oColumn.sortOptions.sortFunction)) ?
-                            // Custom sort function
-                            oColumn.sortOptions.sortFunction :
-        
-                            // Default sort function
-                            function(a, b, desc) {
-                                YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
-                                var sorted = YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
-                                if(sorted === 0) {
-                                    return YAHOO.util.Sort.compare(a.getCount(),b.getCount(), desc); // Bug 1932978
-                                }
-                                else {
-                                    return sorted;
-                                }
-                            };
-        
+
+                    // Default sort function if necessary
+                    sortFnc = sortFnc || 
+                        function(a, b, desc) {
+                            var sorted = YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
+                            if(sorted === 0) {
+                                return YAHOO.util.Sort.compare(a.getCount(),b.getCount(), desc); // Bug 1932978
+                            }
+                            else {
+                                return sorted;
+                            }
+                        };
+                    // Sort the Records        
                     this._oRecordSet.sortRecords(sortFnc, ((sSortDir == DT.CLASS_DESC) ? true : false));
                 }
                 // Just reverse the Records
@@ -7976,7 +7959,6 @@
             
             this.fireEvent("columnSetWidthEvent",{column:oColumn,width:nWidth});
             YAHOO.log("Set width of Column " + oColumn + " to " + nWidth + "px", "info", this.toString());
-            return;
         }
         // Unsets a width to auto-size
         else if(nWidth === null) {
@@ -7988,11 +7970,14 @@
             this.validateColumnWidths(oColumn);
             this.fireEvent("columnUnsetWidthEvent",{column:oColumn});
             YAHOO.log("Column " + oColumn + " width unset", "info", this.toString());
-            
-            return;
         }
+                
+        // Bug 2339454: resize then sort misaligment
+        this._clearTrTemplateEl();
     }
-    YAHOO.log("Could not set width of Column " + oColumn + " to " + nWidth + "px", "warn", this.toString());
+    else {
+        YAHOO.log("Could not set width of Column " + oColumn + " to " + nWidth + "px", "warn", this.toString());
+    }
 },
 
 /**
@@ -8942,6 +8927,11 @@
  * @param index {Number} (optional) RecordSet position index at which to add data.
  */
 addRow : function(oData, index) {
+    if(lang.isNumber(index) && (index < 0 || index > this._oRecordSet.getLength())) {
+        YAHOO.log("Could not add row at index " + index + " with " + lang.dump(oData), "warn", this.toString());
+        return;
+    }
+
     if(oData && lang.isObject(oData)) {
         var oRecord = this._oRecordSet.addRecord(oData, index);
         if(oRecord) {
@@ -9011,7 +9001,7 @@
             }            
         }
     }
-    YAHOO.log("Could not add row with " + lang.dump(oData), "error", this.toString());
+    YAHOO.log("Could not add row at index " + index + " with " + lang.dump(oData), "warn", this.toString());
 },
 
 /**
@@ -9022,6 +9012,11 @@
  * @param index {Number} (optional) RecordSet position index at which to add data.
  */
 addRows : function(aData, index) {
+    if(lang.isNumber(index) && (index < 0 || index > this._oRecordSet.getLength())) {
+        YAHOO.log("Could not add rows at index " + index + " with " + lang.dump(aData), "warn", this.toString());    
+        return;
+    }
+
     if(lang.isArray(aData)) {
         var aRecords = this._oRecordSet.addRecords(aData, index);
         if(aRecords) {
@@ -9045,7 +9040,7 @@
                 
                 this.fireEvent("rowsAddEvent", {records:aRecords});
                 YAHOO.log("Added " + aRecords.length + 
-                        " rows at index " + recIndex +
+                        " rows at index " + this._oRecordSet.getRecordIndex(aRecords[0]) +
                         " with data " + lang.dump(aData), "info", this.toString());
                 return;
             }
@@ -9055,6 +9050,7 @@
                 var loopN = this.get("renderLoopSize");
                 var loopEnd = recIndex + aData.length;
                 var nRowsNeeded = (loopEnd - recIndex); // how many needed
+                var isLast = (recIndex >= this._elTbody.rows.length);
                 this._oChainRender.add({
                     method: function(oArg) {
                         if((this instanceof DT) && this._sId) {
@@ -9063,11 +9059,10 @@
                                 j = oArg.nCurrentRecord,
                                 len = loopN > 0 ? Math.min(i + loopN,loopEnd) : loopEnd,
                                 df = document.createDocumentFragment(),
-                                tr;
-                            for(; i < len; ++i,++j) {
+                                elNext = (this._elTbody.rows[i]) ? this._elTbody.rows[i] : null;
+                            for(; i < len; i++, j++) {
                                 df.appendChild(this._addTrEl(aRecords[j]));
                             }
-                            var elNext = (this._elTbody.rows[index]) ? this._elTbody.rows[index] : null;
                             this._elTbody.insertBefore(df, elNext);
                             oArg.nCurrentRow = i;
                             oArg.nCurrentRecord = j;
@@ -9085,7 +9080,7 @@
                         if(recIndex === 0) {
                             this._setFirstRow();
                         }
-                        if(recIndex === this._elTbody.rows.length-1) {
+                        if(oArg.isLast) {
                             this._setLastRow();
                         }
                         // Set EVEN/ODD
@@ -9093,10 +9088,10 @@
 
                         this.fireEvent("rowsAddEvent", {records:aRecords});
                         YAHOO.log("Added " + aRecords.length + 
-                                " rows at index " + recIndex +
+                                " rows at index " + this._oRecordSet.getRecordIndex(aRecords[0]) +
                                 " with data " + lang.dump(aData), "info", this.toString());
                     },
-                    argument: {recIndex: recIndex},
+                    argument: {recIndex: recIndex, isLast: isLast},
                     scope: this,
                     timeout: -1 // Needs to run immediately after the DOM insertions above
                 });
@@ -9106,7 +9101,7 @@
             }            
         }
     }
-    YAHOO.log("Could not add rows with " + lang.dump(aData));    
+    YAHOO.log("Could not add rows at index " + index + " with " + lang.dump(aData), "warn", this.toString());    
 },
 
 /**
@@ -9121,62 +9116,203 @@
  * @param oData {Object} Object literal of data for the row.
  */
 updateRow : function(row, oData) {
-    var oldRecord, oldData, updatedRecord, elRow;
-
-    // Get the Record directly
-    if((row instanceof YAHOO.widget.Record) || (lang.isNumber(row))) {
-        // Get the Record directly
-        oldRecord = this._oRecordSet.getRecord(row);
-
-        // Is this row on current page?
-        elRow = this.getTrEl(oldRecord);
+    var index = row;
+    if (!lang.isNumber(index)) {
+        index = this.getRecordIndex(row);
     }
-    // Get the Record by TR element
-    else {
-        elRow = this.getTrEl(row);
-        if(elRow) {
-            oldRecord = this.getRecord(elRow);
-        }
-    }
 
     // Update the Record
-    if(oldRecord) {
-        // Copy data from the Record for the event that gets fired later
-        var oRecordData = oldRecord.getData();
-        oldData = YAHOO.widget.DataTable._cloneObject(oRecordData);
+    if(lang.isNumber(index) && (index >= 0)) {
+        var oRecordSet = this._oRecordSet,
+            oldRecord = oRecordSet.getRecord(index);
+            
+        
+        if(oldRecord) {
+            var updatedRecord = this._oRecordSet.setRecord(oData, index),
+                elRow = this.getTrEl(oldRecord),
+                // Copy data from the Record for the event that gets fired later
+                oldData = oldRecord ? oldRecord.getData() : null;
+               
+            if(updatedRecord) {
+                // Update selected rows as necessary
+                var tracker = this._aSelections || [],
+                i=0,
+                oldId = oldRecord.getId(),
+                newId = updatedRecord.getId();
+                for(; i<tracker.length; i++) {
+                    if((tracker[i] === oldId)) {
+                        tracker[i] = newId;
+                    }
+                    else if(tracker[i].recordId === oldId) {
+                        tracker[i].recordId = newId;
+                    }
+                }
 
-        updatedRecord = this._oRecordSet.updateRecord(oldRecord, oData);
+                // Update the TR only if row is on current page
+                this._oChainRender.add({
+                    method: function() {
+                        if((this instanceof DT) && this._sId) {
+                            // Paginated
+                            var oPaginator = this.get('paginator');
+                            if (oPaginator) {
+                                var pageStartIndex = (oPaginator.getPageRecords())[0],
+                                    pageLastIndex = (oPaginator.getPageRecords())[1];
+        
+                                // At least one of the new records affects the view
+                                if ((index >= pageStartIndex) || (index <= pageLastIndex)) {
+                                    this.render();
+                                }
+                            }
+                            else {
+                                if(elRow) {
+                                    this._updateTrEl(elRow, updatedRecord);
+                                }
+                                else {
+                                    this.getTbodyEl().appendChild(this._addTrEl(updatedRecord));
+                                }
+                            }
+                            this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
+                            YAHOO.log("DataTable row updated: Record ID = " + updatedRecord.getId() +
+                                    ", Record index = " + this.getRecordIndex(updatedRecord) +
+                                    ", page row index = " + this.getTrIndex(updatedRecord), "info", this.toString());
+                        }
+                    },
+                    scope: this,
+                    timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
+                });
+                this._runRenderChain();
+                return;
+            }
+        }
     }
-    else {
-        YAHOO.log("Could not update row " + row + " with the data : " +
-                lang.dump(oData), "error", this.toString());
-        return;
+    YAHOO.log("Could not update row " + row + " with the data : " + lang.dump(oData), "warn", this.toString());
+    return;
+},
 
-    }
-
-    // Update the TR only if row is on current page
-    if(elRow) {
-        this._oChainRender.add({
-            method: function() {
-                if((this instanceof DT) && this._sId) {
-                    this._updateTrEl(elRow, updatedRecord);
-                    this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
-                    YAHOO.log("DataTable row updated: Record ID = " + updatedRecord.getId() +
-                            ", Record index = " + this.getRecordIndex(updatedRecord) +
-                            ", page row index = " + this.getTrIndex(updatedRecord), "info", this.toString());
+/**
+ * Starting with the given row, updates associated Records with the given data.
+ * The number of rows to update are determined by the array of data provided.
+ * Undefined data (i.e., not an object literal) causes a row to be skipped. If
+ * any of the rows are on current page, the corresponding DOM elements are also
+ * updated.
+ *
+ * @method updateRows
+ * @param startrow {YAHOO.widget.Record | Number | HTMLElement | String}
+ * Starting row to update: By Record instance, by Record's RecordSet
+ * position index, by HTMLElement reference to the TR element, or by ID string
+ * of the TR element.
+ * @param aData {Object[]} Array of object literal of data for the rows.
+ */
+updateRows : function(startrow, aData) {
+    if(lang.isArray(aData)) {
+        var startIndex = startrow,
+            oRecordSet = this._oRecordSet;
+            
+        if (!lang.isNumber(startrow)) {
+            startIndex = this.getRecordIndex(startrow);
+        }
+            
+        if(lang.isNumber(startIndex) && (startIndex >= 0) && (startIndex < oRecordSet.getLength())) {
+            var lastIndex = startIndex + aData.length,
+                aOldRecords = oRecordSet.getRecords(startIndex, aData.length),
+                aNewRecords = oRecordSet.setRecords(aData, startIndex);
+            if(aNewRecords) {
+                // Update selected rows as necessary
+                var tracker = this._aSelections || [],
+                    i=0, j, newId, oldId;
+                for(; i<tracker.length; i++) {
+                    for(j=0; j<aOldRecords.length; j++) {
+                        oldId = aOldRecords[j].getId();
+                        if((tracker[i] === oldId)) {
+                            tracker[i] = aNewRecords[j].getId();
+                        }
+                        else if(tracker[i].recordId === oldId) {
+                            tracker[i].recordId = aNewRecords[j].getId();
+                        }
+                    }
                 }
-            },
-            scope: this,
-            timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
-        });
-        this._runRenderChain();
+            
+                // Paginated
+                var oPaginator = this.get('paginator');
+                if (oPaginator) {
+                    var pageStartIndex = (oPaginator.getPageRecords())[0],
+                        pageLastIndex = (oPaginator.getPageRecords())[1];
+    
+                    // At least one of the new records affects the view
+                    if ((startIndex >= pageStartIndex) || (lastIndex <= pageLastIndex)) {
+                        this.render();
+                    }
+                    
+                    this.fireEvent("rowsAddEvent", {newRecords:aNewRecords, oldRecords:aOldRecords});
+                    YAHOO.log("Added " + aNewRecords.length + 
+                            " rows starting at index " + startIndex +
+                            " with data " + lang.dump(aData), "info", this.toString());
+                    return;
+                }
+                // Not paginated
+                else {
+                    // Update the TR elements
+                    var loopN = this.get("renderLoopSize"),
+                        rowCount = aData.length, // how many needed
+                        lastRowIndex = this._elTbody.rows.length,
+                        isLast = (lastIndex >= lastRowIndex),
+                        isAdding = (lastIndex > lastRowIndex);
+                                           
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            if((this instanceof DT) && this._sId) {
+                                var aRecords = oArg.aRecords,
+                                    i = oArg.nCurrentRow,
+                                    j = oArg.nDataPointer,
+                                    len = loopN > 0 ? Math.min(i+loopN, startIndex+aRecords.length) : startIndex+aRecords.length;
+                                    
+                                for(; i < len; i++,j++) {
+                                    if(isAdding && (i>=lastRowIndex)) {
+                                        this._elTbody.appendChild(this._addTrEl(aRecords[j]));
+                                    }
+                                    else {
+                                        this._updateTrEl(this._elTbody.rows[i], aRecords[j]);
+                                    }
+                                }
+                                oArg.nCurrentRow = i;
+                                oArg.nDataPointer = j;
+                            }
+                        },
+                        iterations: (loopN > 0) ? Math.ceil(rowCount/loopN) : 1,
+                        argument: {nCurrentRow:startIndex,aRecords:aNewRecords,nDataPointer:0,isAdding:isAdding},
+                        scope: this,
+                        timeout: (loopN > 0) ? 0 : -1
+                    });
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            var recIndex = oArg.recIndex;
+                            // Set FIRST/LAST
+                            if(recIndex === 0) {
+                                this._setFirstRow();
+                            }
+                            if(oArg.isLast) {
+                                this._setLastRow();
+                            }
+                            // Set EVEN/ODD
+                            this._setRowStripes();                           
+    
+                            this.fireEvent("rowsAddEvent", {newRecords:aNewRecords, oldRecords:aOldRecords});
+                            YAHOO.log("Added " + aNewRecords.length + 
+                                    " rows starting at index " + startIndex +
+                                    " with data " + lang.dump(aData), "info", this.toString());
+                        },
+                        argument: {recIndex: startIndex, isLast: isLast},
+                        scope: this,
+                        timeout: -1 // Needs to run immediately after the DOM insertions above
+                    });
+                    this._runRenderChain();
+                    this.hideTableMessage();                
+                    return;
+                }            
+            }
+        }
     }
-    else {
-        this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
-        YAHOO.log("DataTable row updated: Record ID = " + updatedRecord.getId() +
-                ", Record index = " + this.getRecordIndex(updatedRecord) +
-                ", page row index = " + this.getTrIndex(updatedRecord), "info", this.toString());   
-    }
+    YAHOO.log("Could not update rows at " + startrow + " with " + lang.dump(aData), "warn", this.toString());
 },
 
 /**
@@ -9188,7 +9324,7 @@
  * to DataTable page element or RecordSet index.
  */
 deleteRow : function(row) {
-    var nRecordIndex = this.getRecordIndex(row);
+    var nRecordIndex = (lang.isNumber(row)) ? row : this.getRecordIndex(row);
     if(lang.isNumber(nRecordIndex)) {
         var oRecord = this.getRecord(nRecordIndex);
         if(oRecord) {
@@ -9198,7 +9334,7 @@
             var sRecordId = oRecord.getId();
             var tracker = this._aSelections || [];
             for(var j=tracker.length-1; j>-1; j--) {
-                if((lang.isNumber(tracker[j]) && (tracker[j] === sRecordId)) ||
+                if((lang.isString(tracker[j]) && (tracker[j] === sRecordId)) ||
                         (lang.isObject(tracker[j]) && (tracker[j].recordId === sRecordId))) {
                     tracker.splice(j,1);
                 }
@@ -9227,7 +9363,18 @@
                     if (!rng || nRecordIndex <= rng[1]) {
                         this.render();
                     }
-                    return;
+
+                    this._oChainRender.add({
+                        method: function() {
+                            if((this instanceof DT) && this._sId) {
+                                this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex, oldData:oData, trElIndex:nTrIndex});
+                                YAHOO.log("Deleted row with data " + YAHOO.lang.dump(oData) + " at RecordSet index " + nRecordIndex + " and page row index " + nTrIndex, "info", this.toString());     
+                            }
+                        },
+                        scope: this,
+                        timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
+                    });
+                    this._runRenderChain();
                 }
                 // Not paginated
                 else {
@@ -9253,10 +9400,8 @@
                                         }                                
                                     }
                     
-                                    this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex,
-                                    oldData:oData, trElIndex:nTrIndex});
-                                    YAHOO.log("Deleted row with data " + YAHOO.lang.dump(oData) +
-                                    " at RecordSet index " + nRecordIndex + " and page row index " + nTrIndex, "info", this.toString());     
+                                    this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex,oldData:oData, trElIndex:nTrIndex});
+                                    YAHOO.log("Deleted row with data " + YAHOO.lang.dump(oData) + " at RecordSet index " + nRecordIndex + " and page row index " + nTrIndex, "info", this.toString());     
                                 }
                             },
                             scope: this,
@@ -9283,7 +9428,7 @@
  * will delete towards the beginning.
  */
 deleteRows : function(row, count) {
-    var nRecordIndex = this.getRecordIndex(row);
+    var nRecordIndex = (lang.isNumber(row)) ? row : this.getRecordIndex(row);
     if(lang.isNumber(nRecordIndex)) {
         var oRecord = this.getRecord(nRecordIndex);
         if(oRecord) {
@@ -9293,7 +9438,7 @@
             var sRecordId = oRecord.getId();
             var tracker = this._aSelections || [];
             for(var j=tracker.length-1; j>-1; j--) {
-                if((lang.isNumber(tracker[j]) && (tracker[j] === sRecordId)) ||
+                if((lang.isString(tracker[j]) && (tracker[j] === sRecordId)) ||
                         (lang.isObject(tracker[j]) && (tracker[j].recordId === sRecordId))) {
                     tracker.splice(j,1);
                 }
@@ -9308,6 +9453,10 @@
                 highIndex = (count > 0) ? nRecordIndex + count -1 : nRecordIndex;
                 lowIndex = (count > 0) ? nRecordIndex : nRecordIndex + count + 1;
                 count = (count > 0) ? count : count*-1;
+                if(lowIndex < 0) {
+                    lowIndex = 0;
+                    count = highIndex - lowIndex + 1;
+                }
             }
             else {
                 count = 1;
@@ -9317,7 +9466,8 @@
     
             // Update the UI
             if(aData) {
-                var oPaginator = this.get('paginator');
+                var oPaginator = this.get('paginator'),
+                    loopN = this.get("renderLoopSize");
                 // If paginated and the deleted row was on this or a prior page, just
                 // re-render
                 if (oPaginator) {
@@ -9335,13 +9485,24 @@
                     if (!rng || lowIndex <= rng[1]) {
                         this.render();
                     }
+
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            if((this instanceof DT) && this._sId) {
+                                this.fireEvent("rowsDeleteEvent", {recordIndex:lowIndex, oldData:aData, count:count});
+                                YAHOO.log("DataTable " + count + " rows deleted starting at index " + lowIndex, "info", this.toString());
+                            }
+                        },
+                        scope: this,
+                        timeout: (loopN > 0) ? 0 : -1
+                    });
+                    this._runRenderChain();
                     return;
                 }
                 // Not paginated
                 else {
                     if(lang.isNumber(nTrIndex)) {
                         // Delete the TR elements starting with highest index
-                        var loopN = this.get("renderLoopSize");
                         var loopEnd = lowIndex;
                         var nRowsNeeded = count; // how many needed
                         this._oChainRender.add({
@@ -9369,11 +9530,8 @@
                                     this._setRowStripes();
                                 }
                                 
-                                this.fireEvent("rowsDeleteEvent", {recordIndex:count,
-                                oldData:aData, count:nTrIndex});
-                                YAHOO.log("DataTable row deleted: Record ID = " + sRecordId +
-                                    ", Record index = " + nRecordIndex +
-                                    ", page row index = " + nTrIndex, "info", this.toString());
+                                this.fireEvent("rowsDeleteEvent", {recordIndex:lowIndex, oldData:aData, count:count});
+                                YAHOO.log("DataTable " + count + " rows deleted starting at index " + lowIndex, "info", this.toString());
                             },
                             scope: this,
                             timeout: -1 // Needs to run immediately after the DOM deletions above
@@ -9483,17 +9641,20 @@
  * @method updateCell
  * @param oRecord {YAHOO.widget.Record} Record instance.
  * @param oColumn {YAHOO.widget.Column | String | Number} A Column key, or a ColumnSet key index.
- * @param oData {Object} Object literal of data for the cell.
+ * @param oData {Object} New data value for the cell.
  */
 updateCell : function(oRecord, oColumn, oData) {    
     // Validate Column and Record
     oColumn = (oColumn instanceof YAHOO.widget.Column) ? oColumn : this.getColumn(oColumn);
     if(oColumn && oColumn.getKey() && (oRecord instanceof YAHOO.widget.Record)) {
+        var sKey = oColumn.getKey(),
+        
         // Copy data from the Record for the event that gets fired later
-        var oldData = YAHOO.widget.DataTable._cloneObject(oRecord.getData());
+        //var oldData = YAHOO.widget.DataTable._cloneObject(oRecord.getData());
+            oldData = oRecord.getData(sKey);
 
         // Update Record with new data
-        this._oRecordSet.updateRecordValue(oRecord, oColumn.getKey(), oData);
+        this._oRecordSet.updateRecordValue(oRecord, sKey, oData);
     
         // Update the TD only if row is on current page
         var elTd = this.getTdEl({record: oRecord, column: oColumn});
@@ -11424,7 +11585,7 @@
 },
 
 /**
- * Sets given row to the selected state.
+ * Sets given row to the unselected state.
  *
  * @method unselectRow
  * @param row {HTMLElement | String | YAHOO.widget.Record | Number} HTML element
@@ -12131,7 +12292,8 @@
         else if(this._oCellEditor.isActive) {
             var newData = this._oCellEditor.value;
             // Copy the data to pass to the event
-            var oldData = YAHOO.widget.DataTable._cloneObject(this._oCellEditor.record.getData(this._oCellEditor.column.key));
+            //var oldData = YAHOO.widget.DataTable._cloneObject(this._oCellEditor.record.getData(this._oCellEditor.column.key));
+            var oldData = this._oCellEditor.record.getData(this._oCellEditor.column.key);
     
             // Validate input data
             if(this._oCellEditor.validator) {
@@ -12799,7 +12961,7 @@
         // Data ok to append
         if(ok && oResponse && !oResponse.error && lang.isArray(oResponse.results)) {
             // Insert rows
-            this.addRows(oResponse.results, oPayload.insertIndex | 0);
+            this.addRows(oResponse.results, (oPayload ? oPayload.insertIndex : 0));
     
             // Update state
             this._handleDataReturnPayload(sRequest, oResponse, oPayload);
@@ -12812,6 +12974,40 @@
 },
 
 /**
+ * Callback function receives data from DataSource and incrementally updates Records
+ * starting at the index specified in oPayload.updateIndex. The value for
+ * oPayload.updateIndex can be populated when sending the request to the DataSource,
+ * or by accessing oPayload.updateIndex with the doBeforeLoadData() method at runtime.
+ * If applicable, creates or updates corresponding TR elements.
+ *
+ * @method onDataReturnUpdateRows
+ * @param sRequest {String} Original request.
+ * @param oResponse {Object} Response object.
+ * @param oPayload {MIXED} Argument payload, looks in oPayload.updateIndex.
+ */
+onDataReturnUpdateRows : function(sRequest, oResponse, oPayload) {
+    if((this instanceof DT) && this._sId) {
+        this.fireEvent("dataReturnEvent", {request:sRequest,response:oResponse,payload:oPayload});
+    
+        // Pass data through abstract method for any transformations
+        var ok = this.doBeforeLoadData(sRequest, oResponse, oPayload);
+    
+        // Data ok to append
+        if(ok && oResponse && !oResponse.error && lang.isArray(oResponse.results)) {
+            // Insert rows
+            this.updateRows((oPayload ? oPayload.updateIndex : 0), oResponse.results);
+    
+            // Update state
+            this._handleDataReturnPayload(sRequest, oResponse, oPayload);
+        }
+        // Error
+        else if(ok && oResponse.error) {
+            this.showTableMessage(this.get("MSG_ERROR"), DT.CLASS_ERROR);
+        }
+    }
+},
+
+/**
  * Callback function receives reponse from DataSource and populates the
  * RecordSet with the results.
  *  
@@ -12839,6 +13035,8 @@
                 } else if (pag) {
                     index = pag.getStartIndex();
                 }
+                
+                this._oRecordSet.reset(); // Bug 2290604: dyanmic data shouldn't keep accumulating by default
             }
     
             this._oRecordSet.setRecords(oResponse.results, index | 0);
@@ -12888,7 +13086,7 @@
         if (oPaginator) {
             // Update totalRecords
             if(this.get("dynamicData")) {
-                if (lang.isNumber(oPayload.totalRecords)) {
+                if (widget.Paginator.isNumeric(oPayload.totalRecords)) {
                     oPaginator.set('totalRecords',oPayload.totalRecords);
                 }
             }
@@ -13500,7 +13698,7 @@
      * @event cellUpdateEvent
      * @param oArgs.record {YAHOO.widget.Record} The updated Record.
      * @param oArgs.column {YAHOO.widget.Column} The updated Column.
-     * @param oArgs.oldData {Object} Object literal of the old data.
+     * @param oArgs.oldData {Object} Original data value of the updated cell.
      */
 
     /**
@@ -13684,7 +13882,8 @@
      */
 
     /**
-     * Fired when a BUTTON element is clicked.
+     * Fired when a BUTTON element or INPUT element of type "button", "image",
+     * "submit", "reset" is clicked.
      *
      * @event buttonClickEvent
      * @param oArgs.event {HTMLEvent} The event object.
@@ -14189,8 +14388,7 @@
 
     /**
     * @attribute width
-    * @description Table width for scrollable tables. Note: When setting width
-    * and height at runtime, please set height first.
+    * @description Table width for scrollable tables (e.g., "40em").
     * @type String
     */
     this.setAttributeConfig("width", {
@@ -14208,7 +14406,7 @@
 
     /**
     * @attribute height
-    * @description Table body height for scrollable tables, not including headers.
+    * @description Table body height for scrollable tables, not including headers (e.g., "40em").
     * @type String
     */
     this.setAttributeConfig("height", {
@@ -14502,8 +14700,10 @@
 _initTbodyEl : function(elTable) {
     SDT.superclass._initTbodyEl.call(this, elTable);
     
-    // Bug 2105534 - Safari gap
-    elTable.style.marginTop = "-"+this._elTbody.offsetTop+"px";
+    // Bug 2105534 - Safari 3 gap
+    // Bug 2492591 - IE8 offsetTop
+    elTable.style.marginTop = (this._elTbody.offsetTop > 0) ?
+            "-"+this._elTbody.offsetTop+"px" : 0;
 },
 
 
@@ -15068,7 +15268,6 @@
             
             this.fireEvent("columnSetWidthEvent",{column:oColumn,width:nWidth});
             YAHOO.log("Set width of Column " + oColumn + " to " + nWidth + "px", "info", this.toString());
-            return;
         }
         // Unsets a width to auto-size
         else if(nWidth === null) {
@@ -15080,11 +15279,14 @@
             this.validateColumnWidths(oColumn);
             this.fireEvent("columnUnsetWidthEvent",{column:oColumn});
             YAHOO.log("Column " + oColumn + " width unset", "info", this.toString());
-
-            return;
         }
+        
+        // Bug 2339454: resize then sort misaligment
+        this._clearTrTemplateEl();
     }
-    YAHOO.log("Could not set width of Column " + oColumn + " to " + nWidth + "px", "warn", this.toString());
+    else {
+        YAHOO.log("Could not set width of Column " + oColumn + " to " + nWidth + "px", "warn", this.toString());
+    }
 },
 
 /**
@@ -15528,6 +15730,15 @@
 validator : null,
 
 /**
+ * If validation is enabled, resets input field of invalid data.
+ *
+ * @property resetInvalidData
+ * @type Boolean
+ * @default true
+ */
+resetInvalidData : true,
+
+/**
  * True if currently active.
  *
  * @property isActive
@@ -15665,7 +15876,7 @@
     // Column is late-binding in attach()
     var oColumn = this.getColumn();
     if(oColumn) {
-        this.getColumn().editor = null;
+        oColumn.editor = null;
     }
     
     var elContainer = this.getContainerEl();
@@ -15679,6 +15890,11 @@
  * @method render
  */
 render : function() {
+    if(this._elContainer) {
+        YAHOO.util.Event.purgeElement(this._elContainer, true);
+        this._elContainer.innerHTML = "";
+    }
+
     // Render Cell Editor container element as first child of body
     var elContainer = document.createElement("div");
     elContainer.id = this.getId() + "-container"; // Needed for tracking blur event
@@ -15692,6 +15908,12 @@
     Ev.addListener(elContainer, "keydown", function(e, oSelf) {
         // ESC cancels Cell Editor
         if((e.keyCode == 27)) {
+            var target = Ev.getTarget(e);
+            // workaround for Mac FF3 bug that disabled clicks when ESC hit when
+            // select is open. [bug 2273056]
+            if (target.nodeName && target.nodeName.toLowerCase() === 'select') {
+                target.blur();
+            }
             oSelf.cancel();
         }
         // Pass through event
@@ -15851,7 +16073,9 @@
     if(this.validator) {
         validValue = this.validator.call(this.getDataTable(), inputValue, this.value, this);
         if(validValue === undefined ) {
-            this.resetForm();
+            if(this.resetInvalidData) {
+                this.resetForm();
+            }
             this.fireEvent("invalidDataEvent",
                     {editor:this, oldData:this.value, newData:inputValue});
             YAHOO.log("Could not save Cell Editor input due to invalid data " +
@@ -15862,7 +16086,7 @@
         
     var oSelf = this;
     var finishSave = function(bSuccess, oNewValue) {
-        var oOrigValue = YAHOO.widget.DataTable._cloneObject(oSelf.value);
+        var oOrigValue = oSelf.value;
         if(bSuccess) {
             // Update new value
             oSelf.value = oNewValue;
@@ -15905,7 +16129,7 @@
     if(this.isActive) {
         this.getContainerEl().style.display = "none";
         this.isActive = false;
-        this.getDataTable._oCellEditor =  null;
+        this.getDataTable()._oCellEditor =  null;
         this.fireEvent("cancelEvent", {editor:this});
         YAHOO.log("CellEditor canceled", "info", this.toString());
     }
@@ -16259,6 +16483,14 @@
 calendar : null,
 
 /**
+ * Configs for the calendar instance, to be passed to Calendar constructor.
+ *
+ * @property calendarOptions
+ * @type Object
+ */
+calendarOptions : null,
+
+/**
  * Default value.
  *
  * @property defaultValue
@@ -16286,12 +16518,12 @@
         calContainer.id = this.getId() + "-dateContainer"; // Needed for Calendar constructor
         var calendar =
                 new YAHOO.widget.Calendar(this.getId() + "-date",
-                calContainer.id);
+                calContainer.id, this.calendarOptions);
         calendar.render();
         calContainer.style.cssFloat = "none";
 
         if(ua.ie) {
-            var calFloatClearer = this.getContainerEl().appendChild(document.createElement("br"));
+            var calFloatClearer = this.getContainerEl().appendChild(document.createElement("div"));
             calFloatClearer.style.clear = "both";
         }
         
@@ -16394,7 +16626,7 @@
  * Array of dropdown values. Can either be a simple array (e.g., 
  * ["Alabama","Alaska","Arizona","Arkansas"]) or a an array of objects (e.g., 
  * [{label:"Alabama", value:"AL"}, {label:"Alaska", value:"AK"},
- * {label:"Arizona", value:"AZ}, {label:"Arkansas", value:"AR}]). 
+ * {label:"Arizona", value:"AZ"}, {label:"Arkansas", value:"AR"}]). 
  *
  * @property dropdownOptions
  * @type String[] | Object[]
@@ -16756,7 +16988,8 @@
  * @method focus
  */
 focus : function() {
-    this.textarea.focus();
+    // Bug 2303181, Bug 2263600
+    this.getDataTable()._focusEl(this.textarea);
     this.textarea.select();
 },
 
@@ -16881,7 +17114,8 @@
  * @method focus
  */
 focus : function() {
-    this.textbox.focus();
+    // Bug 2303181, Bug 2263600
+    this.getDataTable()._focusEl(this.textbox);
     this.textbox.select();
 },
 
@@ -16959,4 +17193,4 @@
 
 })();
 
-YAHOO.register("datatable", YAHOO.widget.DataTable, {version: "2.6.0", build: "1321"});
+YAHOO.register("datatable", YAHOO.widget.DataTable, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/datatable/datatable-min.js
===================================================================
--- trunk/root/static/yui/datatable/datatable-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/datatable-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,29 +1,29 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.util.Chain=function(){this.q=[].slice.call(arguments);this.createEvent("end");};YAHOO.util.Chain.prototype={id:0,run:function(){var F=this.q[0],C;if(!F){this.fireEvent("end");return this;}else{if(this.id){return this;}}C=F.method||F;if(typeof C==="function"){var E=F.scope||{},B=F.argument||[],A=F.timeout||0,D=this;if(!(B instanceof Array)){B=[B];}if(A<0){this.id=A;if(F.until){for(;!F.until();){C.apply(E,B);}}else{if(F.iterations){for(;F.iterations-->0;){C.apply(E,B);}}else{C.apply(E,B);}}this.q.shift();this.id=0;return this.run();}else{if(F.until){if(F.until()){this.q.shift();return this.run();}}else{if(!F.iterations||!--F.iterations){this.q.shift();}}this.id=setTimeout(function(){C.apply(E,B);if(D.id){D.id=0;D.run();}},A);}}return this;},add:function(A){this.q.push(A);return this;},pause:function(){clearTimeout(this.id);this.id=0;return this;},stop:function(){this.pause();this.q=[];return this;}};YAHOO.lang.augmentProto(YAHOO.util.Chain,YAHOO.util.EventProvider);YAHO!
 O.widget.ColumnSet=function(A){this._sId="yui-cs"+YAHOO.widget.ColumnSet._nCount;A=YAHOO.widget.DataTable._cloneObject(A);this._init(A);YAHOO.widget.ColumnSet._nCount++;};YAHOO.widget.ColumnSet._nCount=0;YAHOO.widget.ColumnSet.prototype={_sId:null,_aDefinitions:null,tree:null,flat:null,keys:null,headers:null,_init:function(I){var J=[];var A=[];var G=[];var E=[];var C=-1;var B=function(M,S){C++;if(!J[C]){J[C]=[];}for(var O=0;O<M.length;O++){var K=M[O];var Q=new YAHOO.widget.Column(K);K.yuiColumnId=Q._sId;A.push(Q);if(S){Q._oParent=S;}if(YAHOO.lang.isArray(K.children)){Q.children=K.children;var R=0;var P=function(V){var W=V.children;for(var U=0;U<W.length;U++){if(YAHOO.lang.isArray(W[U].children)){P(W[U]);}else{R++;}}};P(K);Q._nColspan=R;var T=K.children;for(var N=0;N<T.length;N++){var L=T[N];if(Q.className&&(L.className===undefined)){L.className=Q.className;}if(Q.editor&&(L.editor===undefined)){L.editor=Q.editor;}if(Q.editorOptions&&(L.editorOptions===undefined)){L.editorOpt!
 ions=Q.editorOptions;}if(Q.formatter&&(L.formatter===undefined!
 )){L.for
matter=Q.formatter;}if(Q.resizeable&&(L.resizeable===undefined)){L.resizeable=Q.resizeable;}if(Q.sortable&&(L.sortable===undefined)){L.sortable=Q.sortable;}if(Q.hidden){L.hidden=true;}if(Q.width&&(L.width===undefined)){L.width=Q.width;}if(Q.minWidth&&(L.minWidth===undefined)){L.minWidth=Q.minWidth;}if(Q.maxAutoWidth&&(L.maxAutoWidth===undefined)){L.maxAutoWidth=Q.maxAutoWidth;}if(Q.type&&(L.type===undefined)){L.type=Q.type;}if(Q.type&&!Q.formatter){Q.formatter=Q.type;}if(Q.text&&!YAHOO.lang.isValue(Q.label)){Q.label=Q.text;}if(Q.parser){}if(Q.sortOptions&&((Q.sortOptions.ascFunction)||(Q.sortOptions.descFunction))){}}if(!J[C+1]){J[C+1]=[];}B(T,Q);}else{Q._nKeyIndex=G.length;Q._nColspan=1;G.push(Q);}J[C].push(Q);}C--;};if(YAHOO.lang.isArray(I)){B(I);this._aDefinitions=I;}else{return null;}var F;var D=function(L){var M=1;var O;var N;var P=function(T,S){S=S||1;for(var U=0;U<T.length;U++){var R=T[U];if(YAHOO.lang.isArray(R.children)){S++;P(R.children,S);S--;}else{if(S>M){M=S;}}}!
 };for(var K=0;K<L.length;K++){O=L[K];P(O);for(var Q=0;Q<O.length;Q++){N=O[Q];if(!YAHOO.lang.isArray(N.children)){N._nRowspan=M;}else{N._nRowspan=1;}}M=1;}};D(J);for(F=0;F<J[0].length;F++){J[0][F]._nTreeIndex=F;}var H=function(K,L){E[K].push(L.getSanitizedKey());if(L._oParent){H(K,L._oParent);}};for(F=0;F<G.length;F++){E[F]=[];H(F,G[F]);E[F]=E[F].reverse();}this.tree=J;this.flat=A;this.keys=G;this.headers=E;},getId:function(){return this._sId;},toString:function(){return"ColumnSet instance "+this._sId;},getDefinitions:function(){var A=this._aDefinitions;var B=function(E,G){for(var D=0;D<E.length;D++){var F=E[D];var I=G.getColumnById(F.yuiColumnId);if(I){var H=I.getDefinition();for(var C in H){if(YAHOO.lang.hasOwnProperty(H,C)){F[C]=H[C];}}}if(YAHOO.lang.isArray(F.children)){B(F.children,G);}}};B(A,this);this._aDefinitions=A;return A;},getColumnById:function(C){if(YAHOO.lang.isString(C)){var A=this.flat;for(var B=A.length-1;B>-1;B--){if(A[B]._sId===C){return A[B];}}}return nu!
 ll;},getColumn:function(C){if(YAHOO.lang.isNumber(C)&&this.key!
 s[C]){re
turn this.keys[C];}else{if(YAHOO.lang.isString(C)){var A=this.flat;var D=[];for(var B=0;B<A.length;B++){if(A[B].key===C){D.push(A[B]);}}if(D.length===1){return D[0];}else{if(D.length>1){return D;}}}}return null;},getDescendants:function(D){var B=this;var C=[];var A;var E=function(F){C.push(F);if(F.children){for(A=0;A<F.children.length;A++){E(B.getColumn(F.children[A].key));}}};E(D);return C;}};YAHOO.widget.Column=function(B){this._sId="yui-col"+YAHOO.widget.Column._nCount;if(B&&YAHOO.lang.isObject(B)){for(var A in B){if(A){this[A]=B[A];}}}if(!YAHOO.lang.isValue(this.key)){this.key="yui-dt-col"+YAHOO.widget.Column._nCount;}if(!YAHOO.lang.isValue(this.field)){this.field=this.key;}YAHOO.widget.Column._nCount++;if(this.width&&!YAHOO.lang.isNumber(this.width)){this.width=null;}if(this.editor&&YAHOO.lang.isString(this.editor)){this.editor=new YAHOO.widget.CellEditor(this.editor,this.editorOptions);}};YAHOO.lang.augmentObject(YAHOO.widget.Column,{_nCount:0,formatCheckbox:function(B!
 ,A,C,D){YAHOO.widget.DataTable.formatCheckbox(B,A,C,D);},formatCurrency:function(B,A,C,D){YAHOO.widget.DataTable.formatCurrency(B,A,C,D);},formatDate:function(B,A,C,D){YAHOO.widget.DataTable.formatDate(B,A,C,D);},formatEmail:function(B,A,C,D){YAHOO.widget.DataTable.formatEmail(B,A,C,D);},formatLink:function(B,A,C,D){YAHOO.widget.DataTable.formatLink(B,A,C,D);},formatNumber:function(B,A,C,D){YAHOO.widget.DataTable.formatNumber(B,A,C,D);},formatSelect:function(B,A,C,D){YAHOO.widget.DataTable.formatDropdown(B,A,C,D);}});YAHOO.widget.Column.prototype={_sId:null,_nKeyIndex:null,_nTreeIndex:null,_nColspan:1,_nRowspan:1,_oParent:null,_elTh:null,_elThLiner:null,_elThLabel:null,_elResizer:null,_nWidth:null,_dd:null,_ddResizer:null,key:null,field:null,label:null,abbr:null,children:null,width:null,minWidth:null,maxAutoWidth:null,hidden:false,selected:false,className:null,formatter:null,currencyOptions:null,dateOptions:null,editor:null,resizeable:false,sortable:false,sortOptions:null,g!
 etId:function(){return this._sId;
-},toString:function(){return"Column instance "+this._sId;},getDefinition:function(){var A={};A.abbr=this.abbr;A.className=this.className;A.editor=this.editor;A.editorOptions=this.editorOptions;A.field=this.field;A.formatter=this.formatter;A.hidden=this.hidden;A.key=this.key;A.label=this.label;A.minWidth=this.minWidth;A.maxAutoWidth=this.maxAutoWidth;A.resizeable=this.resizeable;A.selected=this.selected;A.sortable=this.sortable;A.sortOptions=this.sortOptions;A.width=this.width;return A;},getKey:function(){return this.key;},getField:function(){return this.field;},getSanitizedKey:function(){return this.getKey().replace(/[^\w\-.:]/g,"");},getKeyIndex:function(){return this._nKeyIndex;},getTreeIndex:function(){return this._nTreeIndex;},getParent:function(){return this._oParent;},getColspan:function(){return this._nColspan;},getColSpan:function(){return this.getColspan();},getRowspan:function(){return this._nRowspan;},getThEl:function(){return this._elTh;},getThLinerEl:function()!
 {return this._elThLiner;},getResizerEl:function(){return this._elResizer;},getColEl:function(){return this.getThEl();},getIndex:function(){return this.getKeyIndex();},format:function(){}};YAHOO.util.Sort={compare:function(B,A,C){if((B===null)||(typeof B=="undefined")){if((A===null)||(typeof A=="undefined")){return 0;}else{return 1;}}else{if((A===null)||(typeof A=="undefined")){return -1;}}if(B.constructor==String){B=B.toLowerCase();}if(A.constructor==String){A=A.toLowerCase();}if(B<A){return(C)?1:-1;}else{if(B>A){return(C)?-1:1;}else{return 0;}}}};YAHOO.widget.ColumnDD=function(D,A,C,B){if(D&&A&&C&&B){this.datatable=D;this.table=D.getTableEl();this.column=A;this.headCell=C;this.pointer=B;this.newIndex=null;this.init(C);this.initFrame();this.invalidHandleTypes={};this.setPadding(10,0,(this.datatable.getTheadEl().offsetHeight+10),0);YAHOO.util.Event.on(window,"resize",function(){this.initConstraints();},this,true);}else{}};if(YAHOO.util.DDProxy){YAHOO.extend(YAHOO.widget.Colu!
 mnDD,YAHOO.util.DDProxy,{initConstraints:function(){var G=YAHO!
 O.util.D
om.getRegion(this.table),D=this.getEl(),F=YAHOO.util.Dom.getXY(D),C=parseInt(YAHOO.util.Dom.getStyle(D,"width"),10),A=parseInt(YAHOO.util.Dom.getStyle(D,"height"),10),E=((F[0]-G.left)+15),B=((G.right-F[0]-C)+15);this.setXConstraint(E,B);this.setYConstraint(10,10);},_resizeProxy:function(){this.constructor.superclass._resizeProxy.apply(this,arguments);var A=this.getDragEl(),B=this.getEl();YAHOO.util.Dom.setStyle(this.pointer,"height",(this.table.parentNode.offsetHeight+10)+"px");YAHOO.util.Dom.setStyle(this.pointer,"display","block");var C=YAHOO.util.Dom.getXY(B);YAHOO.util.Dom.setXY(this.pointer,[C[0],(C[1]-5)]);YAHOO.util.Dom.setStyle(A,"height",this.datatable.getContainerEl().offsetHeight+"px");YAHOO.util.Dom.setStyle(A,"width",(parseInt(YAHOO.util.Dom.getStyle(A,"width"),10)+4)+"px");YAHOO.util.Dom.setXY(this.dragEl,C);},onMouseDown:function(){this.initConstraints();this.resetConstraints();},clickValidator:function(B){if(!this.column.hidden){var A=YAHOO.util.Event.getTarg!
 et(B);return(this.isValidHandleChild(A)&&(this.id==this.handleElId||this.DDM.handleWasClicked(A,this.id)));}},onDragOver:function(H,A){var F=this.datatable.getColumn(A);if(F){var C=F.getTreeIndex();while((C===null)&&F.getParent()){F=F.getParent();C=F.getTreeIndex();}if(C!==null){var B=F.getThEl();var K=C;var D=YAHOO.util.Event.getPageX(H),I=YAHOO.util.Dom.getX(B),J=I+((YAHOO.util.Dom.get(B).offsetWidth)/2),E=this.column.getTreeIndex();if(D<J){YAHOO.util.Dom.setX(this.pointer,I);}else{var G=parseInt(B.offsetWidth,10);YAHOO.util.Dom.setX(this.pointer,(I+G));K++;}if(C>E){K--;}if(K<0){K=0;}else{if(K>this.datatable.getColumnSet().tree[0].length){K=this.datatable.getColumnSet().tree[0].length;}}this.newIndex=K;}}},onDragDrop:function(){this.datatable.reorderColumn(this.column,this.newIndex);},endDrag:function(){this.newIndex=null;YAHOO.util.Dom.setStyle(this.pointer,"display","none");}});}YAHOO.util.ColumnResizer=function(E,C,D,A,B){if(E&&C&&D&&A){this.datatable=E;this.column=C;t!
 his.headCell=D;this.headCellLiner=C.getThLinerEl();this.resize!
 rLiner=D
.firstChild;this.init(A,A,{dragOnly:true,dragElId:B.id});this.initFrame();this.resetResizerEl();this.setPadding(0,1,0,0);}else{}};if(YAHOO.util.DD){YAHOO.extend(YAHOO.util.ColumnResizer,YAHOO.util.DDProxy,{resetResizerEl:function(){var A=YAHOO.util.Dom.get(this.handleElId).style;A.left="auto";A.right=0;A.top="auto";A.bottom=0;A.height=this.headCell.offsetHeight+"px";},onMouseUp:function(G){var E=this.datatable.getColumnSet().keys,B;for(var C=0,A=E.length;C<A;C++){B=E[C];if(B._ddResizer){B._ddResizer.resetResizerEl();}}this.resetResizerEl();var D=this.headCellLiner;var F=D.offsetWidth-(parseInt(YAHOO.util.Dom.getStyle(D,"paddingLeft"),10)|0)-(parseInt(YAHOO.util.Dom.getStyle(D,"paddingRight"),10)|0);this.datatable.fireEvent("columnResizeEvent",{column:this.column,target:this.headCell,width:F});},onMouseDown:function(A){this.startWidth=this.headCellLiner.offsetWidth;this.startX=YAHOO.util.Event.getXY(A)[0];this.nLinerPadding=(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner!
 ,"paddingLeft"),10)|0)+(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingRight"),10)|0);},clickValidator:function(B){if(!this.column.hidden){var A=YAHOO.util.Event.getTarget(B);return(this.isValidHandleChild(A)&&(this.id==this.handleElId||this.DDM.handleWasClicked(A,this.id)));}},startDrag:function(){var E=this.datatable.getColumnSet().keys,D=this.column.getKeyIndex(),B;for(var C=0,A=E.length;C<A;C++){B=E[C];if(B._ddResizer){YAHOO.util.Dom.get(B._ddResizer.handleElId).style.height="1em";}}},onDrag:function(C){var D=YAHOO.util.Event.getXY(C)[0];if(D>YAHOO.util.Dom.getX(this.headCellLiner)){var A=D-this.startX;var B=this.startWidth+A-this.nLinerPadding;if(B>0){this.datatable.setColumnWidth(this.column,B);}}}});}(function(){var G=YAHOO.lang,A=YAHOO.util,E=YAHOO.widget,C=A.Dom,F=A.Event,D=E.DataTable;YAHOO.widget.RecordSet=function(H){this._sId="yui-rs"+E.RecordSet._nCount;E.RecordSet._nCount++;this._records=[];
-if(H){if(G.isArray(H)){this.addRecords(H);}else{if(G.isObject(H)){this.addRecord(H);}}}};var B=E.RecordSet;B._nCount=0;B.prototype={_sId:null,_addRecord:function(J,H){var I=new YAHOO.widget.Record(J);if(YAHOO.lang.isNumber(H)&&(H>-1)){this._records.splice(H,0,I);}else{this._records[this._records.length]=I;}return I;},_setRecord:function(I,H){if(!G.isNumber(H)||H<0){H=this._records.length;}return(this._records[H]=new E.Record(I));},_deleteRecord:function(I,H){if(!G.isNumber(H)||(H<0)){H=1;}this._records.splice(I,H);},getId:function(){return this._sId;},toString:function(){return"RecordSet instance "+this._sId;},getLength:function(){return this._records.length;},getRecord:function(H){var I;if(H instanceof E.Record){for(I=0;I<this._records.length;I++){if(this._records[I]&&(this._records[I]._sId===H._sId)){return H;}}}else{if(G.isNumber(H)){if((H>-1)&&(H<this.getLength())){return this._records[H];}}else{if(G.isString(H)){for(I=0;I<this._records.length;I++){if(this._records[I]&&!
 (this._records[I]._sId===H)){return this._records[I];}}}}}return null;},getRecords:function(I,H){if(!G.isNumber(I)){return this._records;}if(!G.isNumber(H)){return this._records.slice(I);}return this._records.slice(I,I+H);},hasRecords:function(I,H){var K=this.getRecords(I,H);for(var J=0;J<H;++J){if(typeof K[J]==="undefined"){return false;}}return true;},getRecordIndex:function(I){if(I){for(var H=this._records.length-1;H>-1;H--){if(this._records[H]&&I.getId()===this._records[H].getId()){return H;}}}return null;},addRecord:function(J,H){if(G.isObject(J)){var I=this._addRecord(J,H);this.fireEvent("recordAddEvent",{record:I,data:J});return I;}else{return null;}},addRecords:function(L,K){if(G.isArray(L)){var O=[],I,M,H;K=G.isNumber(K)?K:this._records.length;I=K;for(M=0,H=L.length;M<H;++M){if(G.isObject(L[M])){var J=this._addRecord(L[M],I++);O.push(J);}}this.fireEvent("recordsAddEvent",{records:O,data:L});return O;}else{if(G.isObject(L)){var N=this._addRecord(L);this.fireEvent("r!
 ecordsAddEvent",{records:[N],data:L});return N;}else{return nu!
 ll;}}},s
etRecord:function(J,H){if(G.isObject(J)){var I=this._setRecord(J,H);this.fireEvent("recordSetEvent",{record:I,data:J});return I;}else{return null;}},setRecords:function(L,K){var O=E.Record,I=G.isArray(L)?L:[L],N=[],M=0,H=I.length,J=0;K=parseInt(K,10)|0;for(;M<H;++M){if(typeof I[M]==="object"&&I[M]){N[J++]=this._records[K+M]=new O(I[M]);}}this.fireEvent("recordsSetEvent",{records:N,data:L});this.fireEvent("recordsSet",{records:N,data:L});if(I.length&&!N.length){}return N.length>1?N:N[0];},updateRecord:function(H,L){var J=this.getRecord(H);if(J&&G.isObject(L)){var K={};for(var I in J._oData){if(G.hasOwnProperty(J._oData,I)){K[I]=J._oData[I];}}J._oData=L;this.fireEvent("recordUpdateEvent",{record:J,newData:L,oldData:K});return J;}else{return null;}},updateKey:function(H,I,J){this.updateRecordValue(H,I,J);},updateRecordValue:function(H,K,N){var J=this.getRecord(H);if(J){var M=null;var L=J._oData[K];if(L&&G.isObject(L)){M={};for(var I in L){if(G.hasOwnProperty(L,I)){M[I]=L[I];}}}!
 else{M=L;}J._oData[K]=N;this.fireEvent("keyUpdateEvent",{record:J,key:K,newData:N,oldData:M});this.fireEvent("recordValueUpdateEvent",{record:J,key:K,newData:N,oldData:M});}else{}},replaceRecords:function(H){this.reset();return this.addRecords(H);},sortRecords:function(H,I){return this._records.sort(function(K,J){return H(K,J,I);});},reverseRecords:function(){return this._records.reverse();},deleteRecord:function(H){if(G.isNumber(H)&&(H>-1)&&(H<this.getLength())){var I=E.DataTable._cloneObject(this.getRecord(H).getData());this._deleteRecord(H);this.fireEvent("recordDeleteEvent",{data:I,index:H});return I;}else{return null;}},deleteRecords:function(J,H){if(!G.isNumber(H)){H=1;}if(G.isNumber(J)&&(J>-1)&&(J<this.getLength())){var L=this.getRecords(J,H);var I=[];for(var K=0;K<L.length;K++){I[I.length]=E.DataTable._cloneObject(L[K]);}this._deleteRecord(J,H);this.fireEvent("recordsDeleteEvent",{data:I,index:J});return I;}else{return null;}},reset:function(){this._records=[];this.!
 fireEvent("resetEvent");}};G.augmentProto(B,A.EventProvider);Y!
 AHOO.wid
get.Record=function(H){this._nCount=E.Record._nCount;this._sId="yui-rec"+this._nCount;E.Record._nCount++;this._oData={};if(G.isObject(H)){for(var I in H){if(G.hasOwnProperty(H,I)){this._oData[I]=H[I];}}}};YAHOO.widget.Record._nCount=0;YAHOO.widget.Record.prototype={_nCount:null,_sId:null,_oData:null,getCount:function(){return this._nCount;},getId:function(){return this._sId;},getData:function(H){if(G.isString(H)){return this._oData[H];}else{return this._oData;}},setData:function(H,I){this._oData[H]=I;}};})();(function(){var H=YAHOO.lang,A=YAHOO.util,E=YAHOO.widget,B=YAHOO.env.ua,C=A.Dom,G=A.Event,F=A.DataSourceBase;YAHOO.widget.DataTable=function(I,M,O,K){var L=E.DataTable;if(K&&K.scrollable){return new YAHOO.widget.ScrollingDataTable(I,M,O,K);}this._nIndex=L._nCount;this._sId="yui-dt"+this._nIndex;this._oChainRender=new YAHOO.util.Chain();this._oChainRender.subscribe("end",this._onRenderChainEnd,this,true);this._initConfigs(K);this._initDataSource(O);if(!this._oDataSource){!
 return ;}this._initColumnSet(M);if(!this._oColumnSet){return ;}this._initRecordSet();if(!this._oRecordSet){}L.superclass.constructor.call(this,I,this.configs);var Q=this._initDomElements(I);if(!Q){return ;}this.showTableMessage(this.get("MSG_LOADING"),L.CLASS_LOADING);this._initEvents();L._nCount++;L._nCurrentCount++;var N={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,scope:this,argument:this.getState()};var P=this.get("initialLoad");if(P===true){this._oDataSource.sendRequest(this.get("initialRequest"),N);}else{if(P===false){this.showTableMessage(this.get("MSG_EMPTY"),L.CLASS_EMPTY);}else{var J=P||{};N.argument=J.argument||{};this._oDataSource.sendRequest(J.request,N);}}};var D=E.DataTable;H.augmentObject(D,{CLASS_DATATABLE:"yui-dt",CLASS_LINER:"yui-dt-liner",CLASS_LABEL:"yui-dt-label",CLASS_MESSAGE:"yui-dt-message",CLASS_MASK:"yui-dt-mask",CLASS_DATA:"yui-dt-data",CLASS_COLTARGET:"yui-dt-coltarget",CLASS_RESIZER:"yui-dt-resizer",CLASS_RESIZERLINER:"yui!
 -dt-resizerliner",CLASS_RESIZERPROXY:"yui-dt-resizerproxy",CLA!
 SS_EDITO
R:"yui-dt-editor",CLASS_PAGINATOR:"yui-dt-paginator",CLASS_PAGE:"yui-dt-page",CLASS_DEFAULT:"yui-dt-default",CLASS_PREVIOUS:"yui-dt-previous",CLASS_NEXT:"yui-dt-next",CLASS_FIRST:"yui-dt-first",CLASS_LAST:"yui-dt-last",CLASS_EVEN:"yui-dt-even",CLASS_ODD:"yui-dt-odd",CLASS_SELECTED:"yui-dt-selected",CLASS_HIGHLIGHTED:"yui-dt-highlighted",CLASS_HIDDEN:"yui-dt-hidden",CLASS_DISABLED:"yui-dt-disabled",CLASS_EMPTY:"yui-dt-empty",CLASS_LOADING:"yui-dt-loading",CLASS_ERROR:"yui-dt-error",CLASS_EDITABLE:"yui-dt-editable",CLASS_DRAGGABLE:"yui-dt-draggable",CLASS_RESIZEABLE:"yui-dt-resizeable",CLASS_SCROLLABLE:"yui-dt-scrollable",CLASS_SORTABLE:"yui-dt-sortable",CLASS_ASC:"yui-dt-asc",CLASS_DESC:"yui-dt-desc",CLASS_BUTTON:"yui-dt-button",CLASS_CHECKBOX:"yui-dt-checkbox",CLASS_DROPDOWN:"yui-dt-dropdown",CLASS_RADIO:"yui-dt-radio",_nCount:0,_nCurrentCount:0,_elDynStyleNode:null,_bDynStylesFallback:(B.ie&&(B.ie<7))?true:false,_oDynStyles:{},_elColumnDragTarget:null,_elColumnResizerProxy:!
 null,_cloneObject:function(L){if(!H.isValue(L)){return L;
-}var N={};if(L instanceof YAHOO.widget.BaseCellEditor){N=L;}else{if(H.isFunction(L)){N=L;}else{if(H.isArray(L)){var M=[];for(var K=0,J=L.length;K<J;K++){M[K]=D._cloneObject(L[K]);}N=M;}else{if(H.isObject(L)){for(var I in L){if(H.hasOwnProperty(L,I)){if(H.isValue(L[I])&&H.isObject(L[I])||H.isArray(L[I])){N[I]=D._cloneObject(L[I]);}else{N[I]=L[I];}}}}else{N=L;}}}}return N;},_destroyColumnDragTargetEl:function(){if(D._elColumnDragTarget){var I=D._elColumnDragTarget;YAHOO.util.Event.purgeElement(I);I.parentNode.removeChild(I);D._elColumnDragTarget=null;}},_initColumnDragTargetEl:function(){if(!D._elColumnDragTarget){var I=document.createElement("div");I.className=D.CLASS_COLTARGET;I.style.display="none";document.body.insertBefore(I,document.body.firstChild);D._elColumnDragTarget=I;}return D._elColumnDragTarget;},_destroyColumnResizerProxyEl:function(){if(D._elColumnResizerProxy){var I=D._elColumnResizerProxy;YAHOO.util.Event.purgeElement(I);I.parentNode.removeChild(I);D._elColu!
 mnResizerProxy=null;}},_initColumnResizerProxyEl:function(){if(!D._elColumnResizerProxy){var I=document.createElement("div");I.id="yui-dt-colresizerproxy";I.className=D.CLASS_RESIZERPROXY;document.body.insertBefore(I,document.body.firstChild);D._elColumnResizerProxy=I;}return D._elColumnResizerProxy;},formatButton:function(I,J,K,M){var L=H.isValue(M)?M:"Click";I.innerHTML='<button type="button" class="'+D.CLASS_BUTTON+'">'+L+"</button>";},formatCheckbox:function(I,J,K,M){var L=M;L=(L)?' checked="checked"':"";I.innerHTML='<input type="checkbox"'+L+' class="'+D.CLASS_CHECKBOX+'" />';},formatCurrency:function(I,J,K,L){I.innerHTML=A.Number.format(L,K.currencyOptions||this.get("currencyOptions"));},formatDate:function(I,K,L,M){var J=L.dateOptions||this.get("dateOptions");I.innerHTML=A.Date.format(M,J,J.locale);},formatDropdown:function(K,R,P,I){var Q=(H.isValue(I))?I:R.getData(P.field);var S=(H.isArray(P.dropdownOptions))?P.dropdownOptions:null;var J;var O=K.getElementsByTagName!
 ("select");if(O.length===0){J=document.createElement("select")!
 ;J.class
Name=D.CLASS_DROPDOWN;J=K.appendChild(J);G.addListener(J,"change",this._onDropdownChange,this);}J=O[0];if(J){J.innerHTML="";if(S){for(var M=0;M<S.length;M++){var N=S[M];var L=document.createElement("option");L.value=(H.isValue(N.value))?N.value:N;L.innerHTML=(H.isValue(N.text))?N.text:N;L=J.appendChild(L);if(L.value==Q){L.selected=true;}}}else{J.innerHTML='<option selected value="'+Q+'">'+Q+"</option>";}}else{K.innerHTML=H.isValue(I)?I:"";}},formatEmail:function(I,J,K,L){if(H.isString(L)){I.innerHTML='<a href="mailto:'+L+'">'+L+"</a>";}else{I.innerHTML=H.isValue(L)?L:"";}},formatLink:function(I,J,K,L){if(H.isString(L)){I.innerHTML='<a href="'+L+'">'+L+"</a>";}else{I.innerHTML=H.isValue(L)?L:"";}},formatNumber:function(I,J,K,L){I.innerHTML=A.Number.format(L,K.numberOptions||this.get("numberOptions"));},formatRadio:function(I,J,K,M){var L=M;L=(L)?' checked="checked"':"";I.innerHTML='<input type="radio"'+L+' name="'+this.getId()+"-col-"+K.getSanitizedKey()+'"'+' class="'+D.CLAS!
 S_RADIO+'" />';},formatText:function(I,J,L,M){var K=(H.isValue(J.getData(L.field)))?J.getData(L.field):"";I.innerHTML=K.toString().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");},formatTextarea:function(J,K,M,N){var L=(H.isValue(K.getData(M.field)))?K.getData(M.field):"";var I="<textarea>"+L+"</textarea>";J.innerHTML=I;},formatTextbox:function(J,K,M,N){var L=(H.isValue(K.getData(M.field)))?K.getData(M.field):"";var I='<input type="text" value="'+L+'" />';J.innerHTML=I;},formatDefault:function(I,J,K,L){I.innerHTML=L===undefined||L===null||(typeof L==="number"&&isNaN(L))?" ":L.toString();},validateNumber:function(J){var I=J*1;if(H.isNumber(I)){return I;}else{return undefined;}}});D.Formatter={button:D.formatButton,checkbox:D.formatCheckbox,currency:D.formatCurrency,"date":D.formatDate,dropdown:D.formatDropdown,email:D.formatEmail,link:D.formatLink,"number":D.formatNumber,radio:D.formatRadio,text:D.formatText,textarea:D.formatTextarea,textbox:D.formatT!
 extbox,defaultFormatter:D.formatDefault};H.extend(D,A.Element,!
 {initAtt
ributes:function(I){I=I||{};D.superclass.initAttributes.call(this,I);this.setAttributeConfig("summary",{value:"",validator:H.isString,method:function(J){if(this._elTable){this._elTable.summary=J;}}});this.setAttributeConfig("selectionMode",{value:"standard",validator:H.isString});this.setAttributeConfig("sortedBy",{value:null,validator:function(J){if(J){return(H.isObject(J)&&J.key);}else{return(J===null);}},method:function(K){var R=this.get("sortedBy");this._configs.sortedBy.value=K;var J,O,M,Q;if(this._elThead){if(R&&R.key&&R.dir){J=this._oColumnSet.getColumn(R.key);O=J.getKeyIndex();var U=J.getThEl();C.removeClass(U,R.dir);this.formatTheadCell(J.getThLinerEl().firstChild,J,K);}if(K){M=(K.column)?K.column:this._oColumnSet.getColumn(K.key);Q=M.getKeyIndex();var V=M.getThEl();if(K.dir&&((K.dir=="asc")||(K.dir=="desc"))){var P=(K.dir=="desc")?D.CLASS_DESC:D.CLASS_ASC;C.addClass(V,P);}else{var L=K.dir||D.CLASS_ASC;C.addClass(V,L);}this.formatTheadCell(M.getThLinerEl().firstChil!
 d,M,K);}}if(this._elTbody){this._elTbody.style.display="none";var S=this._elTbody.rows,T;for(var N=S.length-1;N>-1;N--){T=S[N].childNodes;if(T[O]){C.removeClass(T[O],R.dir);}if(T[Q]){C.addClass(T[Q],K.dir);}}this._elTbody.style.display="";}this._clearTrTemplateEl();}});this.setAttributeConfig("paginator",{value:null,validator:function(J){return J===null||J instanceof E.Paginator;},method:function(){this._updatePaginator.apply(this,arguments);}});this.setAttributeConfig("caption",{value:null,validator:H.isString,method:function(J){this._initCaptionEl(J);}});this.setAttributeConfig("draggableColumns",{value:false,validator:H.isBoolean,method:function(J){if(this._elThead){if(J){this._initDraggableColumns();}else{this._destroyDraggableColumns();}}}});this.setAttributeConfig("renderLoopSize",{value:0,validator:H.isNumber});this.setAttributeConfig("formatRow",{value:null,validator:H.isFunction});this.setAttributeConfig("generateRequest",{value:function(K,N){K=K||{pagination:null,!
 sortedBy:null};
-var M=(K.sortedBy)?K.sortedBy.key:N.getColumnSet().keys[0].getKey();var J=(K.sortedBy&&K.sortedBy.dir===D.CLASS_DESC)?"desc":"asc";var O=(K.pagination)?K.pagination.recordOffset:0;var L=(K.pagination)?K.pagination.rowsPerPage:null;return"sort="+M+"&dir="+J+"&startIndex="+O+((L!==null)?"&results="+L:"");},validator:H.isFunction});this.setAttributeConfig("initialRequest",{value:null});this.setAttributeConfig("initialLoad",{value:true});this.setAttributeConfig("dynamicData",{value:false,validator:H.isBoolean});this.setAttributeConfig("MSG_EMPTY",{value:"No records found.",validator:H.isString});this.setAttributeConfig("MSG_LOADING",{value:"Loading...",validator:H.isString});this.setAttributeConfig("MSG_ERROR",{value:"Data error.",validator:H.isString});this.setAttributeConfig("MSG_SORTASC",{value:"Click to sort ascending",validator:H.isString,method:function(K){if(this._elThead){for(var L=0,M=this.getColumnSet().keys,J=M.length;L<J;L++){if(M[L].sortable&&this.getColumnSortDir(!
 M[L])===D.CLASS_ASC){M[L]._elThLabel.firstChild.title=K;}}}}});this.setAttributeConfig("MSG_SORTDESC",{value:"Click to sort descending",validator:H.isString,method:function(K){if(this._elThead){for(var L=0,M=this.getColumnSet().keys,J=M.length;L<J;L++){if(M[L].sortable&&this.getColumnSortDir(M[L])===D.CLASS_DESC){M[L]._elThLabel.firstChild.title=K;}}}}});this.setAttributeConfig("currencySymbol",{value:"$",validator:H.isString});this.setAttributeConfig("currencyOptions",{value:{prefix:this.get("currencySymbol"),decimalPlaces:2,decimalSeparator:".",thousandsSeparator:","}});this.setAttributeConfig("dateOptions",{value:{format:"%m/%d/%Y",locale:"en"}});this.setAttributeConfig("numberOptions",{value:{decimalPlaces:0,thousandsSeparator:","}});},_bInit:true,_nIndex:null,_nTrCount:0,_nTdCount:0,_sId:null,_oChainRender:null,_elContainer:null,_elMask:null,_elTable:null,_elCaption:null,_elColgroup:null,_elThead:null,_elTbody:null,_elMsgTbody:null,_elMsgTr:null,_elMsgTd:null,_oDataSou!
 rce:null,_oColumnSet:null,_oRecordSet:null,_oCellEditor:null,_!
 sFirstTr
Id:null,_sLastTrId:null,_elTrTemplate:null,_aDynFunctions:[],clearTextSelection:function(){var I;if(window.getSelection){I=window.getSelection();}else{if(document.getSelection){I=document.getSelection();}else{if(document.selection){I=document.selection;}}}if(I){if(I.empty){I.empty();}else{if(I.removeAllRanges){I.removeAllRanges();}else{if(I.collapse){I.collapse();}}}}},_focusEl:function(I){I=I||this._elTbody;setTimeout(function(){try{I.focus();}catch(J){}},0);},_repaintGecko:(B.gecko)?function(J){J=J||this._elContainer;var I=J.parentNode;var K=J.nextSibling;I.insertBefore(I.removeChild(J),K);}:function(){},_repaintOpera:(B.opera)?function(){if(B.opera){document.documentElement.className+=" ";document.documentElement.className.trim();}}:function(){},_repaintWebkit:(B.webkit)?function(J){J=J||this._elContainer;var I=J.parentNode;var K=J.nextSibling;I.insertBefore(I.removeChild(J),K);}:function(){},_initConfigs:function(I){if(!I||!H.isObject(I)){I={};}this.configs=I;},_initColu!
 mnSet:function(M){var L,J,I;if(this._oColumnSet){for(J=0,I=this._oColumnSet.keys.length;J<I;J++){L=this._oColumnSet.keys[J];D._oDynStyles["."+this.getId()+"-col-"+L.getSanitizedKey()+" ."+D.CLASS_LINER]=undefined;if(L.editor&&L.editor.unsubscribeAll){L.editor.unsubscribeAll();}}this._oColumnSet=null;this._clearTrTemplateEl();}if(H.isArray(M)){this._oColumnSet=new YAHOO.widget.ColumnSet(M);}else{if(M instanceof YAHOO.widget.ColumnSet){this._oColumnSet=M;}}var K=this._oColumnSet.keys;for(J=0,I=K.length;J<I;J++){L=K[J];if(L.editor&&L.editor.subscribe){L.editor.subscribe("showEvent",this._onEditorShowEvent,this,true);L.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,this,true);L.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);L.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);L.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);L.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);L.editor.subscribe("blo!
 ckEvent",this._onEditorBlockEvent,this,true);L.editor.subscrib!
 e("unblo
ckEvent",this._onEditorUnblockEvent,this,true);}}},_initDataSource:function(I){this._oDataSource=null;if(I&&(I instanceof F)){this._oDataSource=I;}else{var J=null;var N=this._elContainer;var K=0;if(N.hasChildNodes()){var M=N.childNodes;for(K=0;K<M.length;K++){if(M[K].nodeName&&M[K].nodeName.toLowerCase()=="table"){J=M[K];break;}}if(J){var L=[];for(;K<this._oColumnSet.keys.length;K++){L.push({key:this._oColumnSet.keys[K].key});}this._oDataSource=new F(J);this._oDataSource.responseType=F.TYPE_HTMLTABLE;this._oDataSource.responseSchema={fields:L};}}}},_initRecordSet:function(){if(this._oRecordSet){this._oRecordSet.reset();}else{this._oRecordSet=new YAHOO.widget.RecordSet();}},_initDomElements:function(I){this._initContainerEl(I);this._initTableEl(this._elContainer);this._initColgroupEl(this._elTable);this._initTheadEl(this._elTable);this._initMsgTbodyEl(this._elTable);this._initTbodyEl(this._elTable);if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!thi!
 s._elTbody||!this._elMsgTbody){return false;}else{return true;}},_destroyContainerEl:function(I){C.removeClass(I,D.CLASS_DATATABLE);G.purgeElement(I,true);I.innerHTML="";this._elContainer=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;},_initContainerEl:function(J){J=C.get(J);if(J&&J.nodeName&&(J.nodeName.toLowerCase()=="div")){this._destroyContainerEl(J);C.addClass(J,D.CLASS_DATATABLE);G.addListener(J,"focus",this._onTableFocus,this);G.addListener(J,"dblclick",this._onTableDblclick,this);this._elContainer=J;var I=document.createElement("div");I.className=D.CLASS_MASK;I.style.display="none";this._elMask=J.appendChild(I);}},_destroyTableEl:function(){var I=this._elTable;if(I){G.purgeElement(I,true);I.parentNode.removeChild(I);this._elCaption=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;}},_initCaptionEl:function(I){if(this._elTable&&I){if(!this._elCaption){this._elCaption=this._elTable.createCaption();
-}this._elCaption.innerHTML=I;}else{if(this._elCaption){this._elCaption.parentNode.removeChild(this._elCaption);}}},_initTableEl:function(I){if(I){this._destroyTableEl();this._elTable=I.appendChild(document.createElement("table"));this._elTable.summary=this.get("summary");if(this.get("caption")){this._initCaptionEl(this.get("caption"));}}},_destroyColgroupEl:function(){var I=this._elColgroup;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elColgroup=null;}},_initColgroupEl:function(R){if(R){this._destroyColgroupEl();var K=this._aColIds||[],Q=this._oColumnSet.keys,L=0,O=K.length,I,N,P=document.createDocumentFragment(),M=document.createElement("col");for(L=0,O=Q.length;L<O;L++){N=Q[L];I=P.appendChild(M.cloneNode(false));}var J=R.insertBefore(document.createElement("colgroup"),R.firstChild);J.appendChild(P);this._elColgroup=J;}},_insertColgroupColEl:function(I){if(H.isNumber(I)&&this._elColgroup){var J=this._elColgroup.childNodes[I]||null;this._elColgroup!
 .insertBefore(document.createElement("col"),J);}},_removeColgroupColEl:function(I){if(H.isNumber(I)&&this._elColgroup&&this._elColgroup.childNodes[I]){this._elColgroup.removeChild(this._elColgroup.childNodes[I]);}},_reorderColgroupColEl:function(K,J){if(H.isArray(K)&&H.isNumber(J)&&this._elColgroup&&(this._elColgroup.childNodes.length>K[K.length-1])){var I,M=[];for(I=K.length-1;I>-1;I--){M.push(this._elColgroup.removeChild(this._elColgroup.childNodes[K[I]]));}var L=this._elColgroup.childNodes[J]||null;for(I=M.length-1;I>-1;I--){this._elColgroup.insertBefore(M[I],L);}}},_destroyTheadEl:function(){var J=this._elThead;if(J){var I=J.parentNode;G.purgeElement(J,true);this._destroyColumnHelpers();I.removeChild(J);this._elThead=null;}},_initTheadEl:function(S){S=S||this._elTable;if(S){this._destroyTheadEl();var N=(this._elColgroup)?S.insertBefore(document.createElement("thead"),this._elColgroup.nextSibling):S.appendChild(document.createElement("thead"));G.addListener(N,"focus",thi!
 s._onTheadFocus,this);G.addListener(N,"keydown",this._onTheadK!
 eydown,t
his);G.addListener(N,"mouseover",this._onTableMouseover,this);G.addListener(N,"mouseout",this._onTableMouseout,this);G.addListener(N,"mousedown",this._onTableMousedown,this);G.addListener(N,"mouseup",this._onTableMouseup,this);G.addListener(N,"click",this._onTheadClick,this);var U=this._oColumnSet,Q,O,M,K;var T=U.tree;var L;for(O=0;O<T.length;O++){var J=N.appendChild(document.createElement("tr"));for(M=0;M<T[O].length;M++){Q=T[O][M];L=J.appendChild(document.createElement("th"));this._initThEl(L,Q);}if(O===0){C.addClass(J,D.CLASS_FIRST);}if(O===(T.length-1)){C.addClass(J,D.CLASS_LAST);}}var I=U.headers[0]||[];for(O=0;O<I.length;O++){C.addClass(C.get(this.getId()+"-th-"+I[O]),D.CLASS_FIRST);}var P=U.headers[U.headers.length-1]||[];for(O=0;O<P.length;O++){C.addClass(C.get(this.getId()+"-th-"+P[O]),D.CLASS_LAST);}if(B.webkit&&B.webkit<420){var R=this;setTimeout(function(){N.style.display="";},0);N.style.display="none";}this._elThead=N;this._initColumnHelpers();}},_initThEl:funct!
 ion(M,L){M.id=this.getId()+"-th-"+L.getSanitizedKey();M.innerHTML="";M.rowSpan=L.getRowspan();M.colSpan=L.getColspan();L._elTh=M;var I=M.appendChild(document.createElement("div"));I.id=M.id+"-liner";I.className=D.CLASS_LINER;L._elThLiner=I;var J=I.appendChild(document.createElement("span"));J.className=D.CLASS_LABEL;if(L.abbr){M.abbr=L.abbr;}if(L.hidden){this._clearMinWidth(L);}M.className=this._getColumnClassNames(L);if(L.width&&!this._bDynStylesFallback){var K=(L.minWidth&&(L.width<L.minWidth))?L.minWidth:L.width;this._setColumnWidthDynStyles(L,K+"px","hidden");}this.formatTheadCell(J,L,this.get("sortedBy"));L._elThLabel=J;},formatTheadCell:function(I,M,K){var Q=M.getKey();var P=H.isValue(M.label)?M.label:Q;if(M.sortable){var N=this.getColumnSortDir(M,K);var J=(N===D.CLASS_DESC);if(K&&(M.key===K.key)){J=!(K.dir===D.CLASS_DESC);}var L=this.getId()+"-href-"+M.getSanitizedKey();var O=(J)?this.get("MSG_SORTDESC"):this.get("MSG_SORTASC");I.innerHTML='<a href="'+L+'" title="'+O!
 +'" class="'+D.CLASS_SORTABLE+'">'+P+"</a>";}else{I.innerHTML=!
 P;}},_de
stroyDraggableColumns:function(){var K,L;for(var J=0,I=this._oColumnSet.tree[0].length;J<I;J++){K=this._oColumnSet.tree[0][J];if(K._dd){K._dd=K._dd.unreg();C.removeClass(K.getThEl(),D.CLASS_DRAGGABLE);}}},_initDraggableColumns:function(){this._destroyDraggableColumns();if(A.DD){var L,M,J;for(var K=0,I=this._oColumnSet.tree[0].length;K<I;K++){L=this._oColumnSet.tree[0][K];M=L.getThEl();C.addClass(M,D.CLASS_DRAGGABLE);J=D._initColumnDragTargetEl();L._dd=new YAHOO.widget.ColumnDD(this,L,M,J);}}else{}},_destroyResizeableColumns:function(){var J=this._oColumnSet.keys;for(var K=0,I=J.length;K<I;K++){if(J[K]._ddResizer){J[K]._ddResizer=J[K]._ddResizer.unreg();C.removeClass(J[K].getThEl(),D.CLASS_RESIZEABLE);}}},_initResizeableColumns:function(){this._destroyResizeableColumns();if(A.DD){var O,J,M,P,I,Q,L;for(var K=0,N=this._oColumnSet.keys.length;K<N;K++){O=this._oColumnSet.keys[K];if(O.resizeable){J=O.getThEl();C.addClass(J,D.CLASS_RESIZEABLE);M=O.getThLinerEl();P=J.appendChild(doc!
 ument.createElement("div"));P.className=D.CLASS_RESIZERLINER;P.appendChild(M);I=P.appendChild(document.createElement("div"));I.id=J.id+"-resizer";I.className=D.CLASS_RESIZER;O._elResizer=I;Q=D._initColumnResizerProxyEl();O._ddResizer=new YAHOO.util.ColumnResizer(this,O,J,I,Q);L=function(R){G.stopPropagation(R);};G.addListener(I,"click",L);}}}else{}},_destroyColumnHelpers:function(){this._destroyDraggableColumns();this._destroyResizeableColumns();},_initColumnHelpers:function(){if(this.get("draggableColumns")){this._initDraggableColumns();}this._initResizeableColumns();},_destroyTbodyEl:function(){var I=this._elTbody;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elTbody=null;}},_initTbodyEl:function(J){if(J){this._destroyTbodyEl();var I=J.appendChild(document.createElement("tbody"));I.tabIndex=0;I.className=D.CLASS_DATA;G.addListener(I,"focus",this._onTbodyFocus,this);G.addListener(I,"mouseover",this._onTableMouseover,this);
-G.addListener(I,"mouseout",this._onTableMouseout,this);G.addListener(I,"mousedown",this._onTableMousedown,this);G.addListener(I,"mouseup",this._onTableMouseup,this);G.addListener(I,"keydown",this._onTbodyKeydown,this);G.addListener(I,"keypress",this._onTableKeypress,this);G.addListener(I,"click",this._onTbodyClick,this);if(B.ie){I.hideFocus=true;}this._elTbody=I;}},_destroyMsgTbodyEl:function(){var I=this._elMsgTbody;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elTbody=null;}},_initMsgTbodyEl:function(L){if(L){var K=document.createElement("tbody");K.className=D.CLASS_MESSAGE;var J=K.appendChild(document.createElement("tr"));J.className=D.CLASS_FIRST+" "+D.CLASS_LAST;this._elMsgTr=J;var M=J.appendChild(document.createElement("td"));M.colSpan=this._oColumnSet.keys.length;M.className=D.CLASS_FIRST+" "+D.CLASS_LAST;this._elMsgTd=M;K=L.insertBefore(K,this._elTbody);var I=M.appendChild(document.createElement("div"));I.className=D.CLASS_LINER;this._elMsgT!
 body=K;}},_initEvents:function(){this._initColumnSort();YAHOO.util.Event.addListener(document,"click",this._onDocumentClick,this);this.subscribe("paginatorChange",function(){this._handlePaginatorChange.apply(this,arguments);});this.subscribe("initEvent",function(){this.renderPaginator();});this._initCellEditing();},_initColumnSort:function(){this.subscribe("theadCellClickEvent",this.onEventSortColumn);var I=this.get("sortedBy");if(I){if(I.dir=="desc"){this._configs.sortedBy.value.dir=D.CLASS_DESC;}else{if(I.dir=="asc"){this._configs.sortedBy.value.dir=D.CLASS_ASC;}}}},_initCellEditing:function(){this.subscribe("editorBlurEvent",function(){this.onEditorBlurEvent.apply(this,arguments);});this.subscribe("editorBlockEvent",function(){this.onEditorBlockEvent.apply(this,arguments);});this.subscribe("editorUnblockEvent",function(){this.onEditorUnblockEvent.apply(this,arguments);});},_getColumnClassNames:function(L,K){var I;if(H.isString(L.className)){I=[L.className];}else{if(H.isA!
 rray(L.className)){I=L.className;}else{I=[];}}I[I.length]=this!
 .getId()
+"-col-"+L.getSanitizedKey();I[I.length]="yui-dt-col-"+L.getSanitizedKey();var J=this.get("sortedBy")||{};if(L.key===J.key){I[I.length]=J.dir||"";}if(L.hidden){I[I.length]=D.CLASS_HIDDEN;}if(L.selected){I[I.length]=D.CLASS_SELECTED;}if(L.sortable){I[I.length]=D.CLASS_SORTABLE;}if(L.resizeable){I[I.length]=D.CLASS_RESIZEABLE;}if(L.editor){I[I.length]=D.CLASS_EDITABLE;}if(K){I=I.concat(K);}return I.join(" ");},_clearTrTemplateEl:function(){this._elTrTemplate=null;},_getTrTemplateEl:function(T,N){if(this._elTrTemplate){return this._elTrTemplate;}else{var P=document,R=P.createElement("tr"),K=P.createElement("td"),J=P.createElement("div");K.appendChild(J);var S=document.createDocumentFragment(),Q=this._oColumnSet.keys,M;var O;for(var L=0,I=Q.length;L<I;L++){M=K.cloneNode(true);M=this._formatTdEl(Q[L],M,L,(L===I-1));S.appendChild(M);}R.appendChild(S);this._elTrTemplate=R;return R;}},_formatTdEl:function(M,O,P,L){var S=this._oColumnSet;var I=S.headers,J=I[P],N="",U;for(var K=0,T=J.!
 length;K<T;K++){U=this._sId+"-th-"+J[K]+" ";N+=U;}O.headers=N;var R=[];if(P===0){R[R.length]=D.CLASS_FIRST;}if(L){R[R.length]=D.CLASS_LAST;}O.className=this._getColumnClassNames(M,R);O.firstChild.className=D.CLASS_LINER;if(M.width&&this._bDynStylesFallback){var Q=(M.minWidth&&(M.width<M.minWidth))?M.minWidth:M.width;O.firstChild.style.overflow="hidden";O.firstChild.style.width=Q+"px";}return O;},_addTrEl:function(K){var J=this._getTrTemplateEl();var I=J.cloneNode(true);return this._updateTrEl(I,K);},_updateTrEl:function(J,N){var M=this.get("formatRow")?this.get("formatRow")(J,N):true;if(M){J.style.display="none";var O=J.childNodes,K;for(var L=0,I=O.length;L<I;++L){K=O[L];this.formatCell(O[L].firstChild,N,this._oColumnSet.keys[L]);}J.style.display="";}J.id=N.getId();return J;},_deleteTrEl:function(I){var J;if(!H.isNumber(I)){J=C.get(I).sectionRowIndex;}else{J=I;}if(H.isNumber(J)&&(J>-2)&&(J<this._elTbody.rows.length)){return this._elTbody.removeChild(this.getTrEl(I));}else{r!
 eturn null;}},_unsetFirstRow:function(){if(this._sFirstTrId){C!
 .removeC
lass(this._sFirstTrId,D.CLASS_FIRST);this._sFirstTrId=null;}},_setFirstRow:function(){this._unsetFirstRow();var I=this.getFirstTrEl();if(I){C.addClass(I,D.CLASS_FIRST);this._sFirstTrId=I.id;}},_unsetLastRow:function(){if(this._sLastTrId){C.removeClass(this._sLastTrId,D.CLASS_LAST);this._sLastTrId=null;}},_setLastRow:function(){this._unsetLastRow();var I=this.getLastTrEl();if(I){C.addClass(I,D.CLASS_LAST);this._sLastTrId=I.id;}},_setRowStripes:function(S,K){var L=this._elTbody.rows,P=0,R=L.length,O=[],Q=0,M=[],I=0;if((S!==null)&&(S!==undefined)){var N=this.getTrEl(S);if(N){P=N.sectionRowIndex;if(H.isNumber(K)&&(K>1)){R=P+K;}}}for(var J=P;J<R;J++){if(J%2){O[Q++]=L[J];}else{M[I++]=L[J];}}if(O.length){C.replaceClass(O,D.CLASS_EVEN,D.CLASS_ODD);}if(M.length){C.replaceClass(M,D.CLASS_ODD,D.CLASS_EVEN);}},_setSelections:function(){var K=this.getSelectedRows();var M=this.getSelectedCells();if((K.length>0)||(M.length>0)){var L=this._oColumnSet,J;for(var I=0;I<K.length;I++){J=C.get(K[!
 I]);if(J){C.addClass(J,D.CLASS_SELECTED);}}for(I=0;I<M.length;I++){J=C.get(M[I].recordId);if(J){C.addClass(J.childNodes[L.getColumn(M[I].columnKey).getKeyIndex()],D.CLASS_SELECTED);}}}},_onRenderChainEnd:function(){this.hideTableMessage();if(this._elTbody.rows.length===0){this.showTableMessage(this.get("MSG_EMPTY"),D.CLASS_EMPTY);}var I=this;setTimeout(function(){if((I instanceof D)&&I._sId){if(I._bInit){I._bInit=false;I.fireEvent("initEvent");}I.fireEvent("renderEvent");I.fireEvent("refreshEvent");I.validateColumnWidths();I.fireEvent("postRenderEvent");}},0);},_onDocumentClick:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();if(!C.isAncestor(J._elContainer,M)){J.fireEvent("tableBlurEvent");if(J._oCellEditor){if(J._oCellEditor.getContainerEl){var K=J._oCellEditor.getContainerEl();if(!C.isAncestor(K,M)&&(K.id!==M.id)){J._oCellEditor.fireEvent("blurEvent",{editor:J._oCellEditor});}}else{if(J._oCellEditor.isActive){if(!C.isAncestor(J._oCellEditor.container,M)&!
 &(J._oCellEditor.container.id!==M.id)){J.fireEvent("editorBlur!
 Event",{
editor:J._oCellEditor});
-}}}}}},_onTableFocus:function(J,I){I.fireEvent("tableFocusEvent");},_onTheadFocus:function(J,I){I.fireEvent("theadFocusEvent");I.fireEvent("tableFocusEvent");},_onTbodyFocus:function(J,I){I.fireEvent("tbodyFocusEvent");I.fireEvent("tableFocusEvent");},_onTableMouseover:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"a":break;case"td":K=J.fireEvent("cellMouseoverEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseoverEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseoverEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerRowMouseoverEvent",{target:M,event:L});}else{K=J.fireEvent!
 ("rowMouseoverEvent",{target:M,event:L});}break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMouseoverEvent",{target:(M||J._elContainer),event:L});},_onTableMouseout:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"a":break;case"td":K=J.fireEvent("cellMouseoutEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseoutEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseoutEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseoutEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseoutEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMouseoutEvent",{target:M,event:L});K=J.fireEvent("headerRowMouseoutEvent",{target:M,event:L});}else{K=J.fireEvent("rowMouseoutEvent",{target:M,event:L});}bre!
 ak;default:break;}if(K===false){return ;}else{M=M.parentNode;i!
 f(M){I=M
.nodeName.toLowerCase();}}}J.fireEvent("tableMouseoutEvent",{target:(M||J._elContainer),event:L});},_onTableMousedown:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"a":break;case"td":K=J.fireEvent("cellMousedownEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMousedownEvent",{target:M,event:L});K=J.fireEvent("headerLabelMousedownEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMousedownEvent",{target:M,event:L});K=J.fireEvent("headerCellMousedownEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMousedownEvent",{target:M,event:L});K=J.fireEvent("headerRowMousedownEvent",{target:M,event:L});}else{K=J.fireEvent("rowMousedownEvent",{target:M,event:L});}break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent!
 ("tableMousedownEvent",{target:(M||J._elContainer),event:L});},_onTableMouseup:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"a":break;case"td":K=J.fireEvent("cellMouseupEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseupEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseupEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseupEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseupEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMouseupEvent",{target:M,event:L});K=J.fireEvent("headerRowMouseupEvent",{target:M,event:L});}else{K=J.fireEvent("rowMouseupEvent",{target:M,event:L});}break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMouseupEvent",{target:(M||J._elContainer),event!
 :L});},_onTableDblclick:function(L,J){var M=G.getTarget(L);var!
  I=M.nod
eName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"td":K=J.fireEvent("cellDblclickEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelDblclickEvent",{target:M,event:L});K=J.fireEvent("headerLabelDblclickEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellDblclickEvent",{target:M,event:L});K=J.fireEvent("headerCellDblclickEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowDblclickEvent",{target:M,event:L});K=J.fireEvent("headerRowDblclickEvent",{target:M,event:L});}else{K=J.fireEvent("rowDblclickEvent",{target:M,event:L});}break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableDblclickEvent",{target:(M||J._elContainer),event:L});},_onTheadKeydown:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I!
 ){case"body":return ;case"input":case"textarea":break;case"thead":K=J.fireEvent("theadKeyEvent",{target:M,event:L});break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableKeyEvent",{target:(M||J._elContainer),event:L});},_onTbodyKeydown:function(M,K){var J=K.get("selectionMode");if(J=="standard"){K._handleStandardSelectionByKey(M);}else{if(J=="single"){K._handleSingleSelectionByKey(M);}else{if(J=="cellblock"){K._handleCellBlockSelectionByKey(M);}else{if(J=="cellrange"){K._handleCellRangeSelectionByKey(M);}else{if(J=="singlecell"){K._handleSingleCellSelectionByKey(M);}}}}}if(K._oCellEditor){if(K._oCellEditor.fireEvent){K._oCellEditor.fireEvent("blurEvent",{editor:K._oCellEditor});}else{if(K._oCellEditor.isActive){K.fireEvent("editorBlurEvent",{editor:K._oCellEditor});}}}var N=G.getTarget(M);var I=N.nodeName.toLowerCase();var L=true;while(N&&(I!="table")){switch(I){case"body":return ;
-case"tbody":L=K.fireEvent("tbodyKeyEvent",{target:N,event:M});break;default:break;}if(L===false){return ;}else{N=N.parentNode;if(N){I=N.nodeName.toLowerCase();}}}K.fireEvent("tableKeyEvent",{target:(N||K._elContainer),event:M});},_onTableKeypress:function(K,J){if(B.opera||(navigator.userAgent.toLowerCase().indexOf("mac")!==-1)&&(B.webkit<420)){var I=G.getCharCode(K);if(I==40){G.stopEvent(K);}else{if(I==38){G.stopEvent(K);}}}},_onTheadClick:function(L,J){if(J._oCellEditor){if(J._oCellEditor.fireEvent){J._oCellEditor.fireEvent("blurEvent",{editor:J._oCellEditor});}else{if(J._oCellEditor.isActive){J.fireEvent("editorBlurEvent",{editor:J._oCellEditor});}}}var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return ;case"input":if(M.type.toLowerCase()=="checkbox"){K=J.fireEvent("theadCheckboxClickEvent",{target:M,event:L});}else{if(M.type.toLowerCase()=="radio"){K=J.fireEvent("theadRadioClickEvent",{target:M,event:L});}}break!
 ;case"a":K=J.fireEvent("theadLinkClickEvent",{target:M,event:L});break;case"button":K=J.fireEvent("theadButtonClickEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelClickEvent",{target:M,event:L});K=J.fireEvent("headerLabelClickEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellClickEvent",{target:M,event:L});K=J.fireEvent("headerCellClickEvent",{target:M,event:L});break;case"tr":K=J.fireEvent("theadRowClickEvent",{target:M,event:L});K=J.fireEvent("headerRowClickEvent",{target:M,event:L});break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableClickEvent",{target:(M||J._elContainer),event:L});},_onTbodyClick:function(L,J){if(J._oCellEditor){if(J._oCellEditor.fireEvent){J._oCellEditor.fireEvent("blurEvent",{editor:J._oCellEditor});}else{if(J._oCellEditor.isActive){J.fireEvent("editorBlurEvent",{editor:J._oCellEditor});}}}var M=G.getTarget(L);var I=!
 M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){swi!
 tch(I){c
ase"body":return ;case"input":if(M.type.toLowerCase()=="checkbox"){K=J.fireEvent("checkboxClickEvent",{target:M,event:L});}else{if(M.type.toLowerCase()=="radio"){K=J.fireEvent("radioClickEvent",{target:M,event:L});}}break;case"a":K=J.fireEvent("linkClickEvent",{target:M,event:L});break;case"button":K=J.fireEvent("buttonClickEvent",{target:M,event:L});break;case"td":K=J.fireEvent("cellClickEvent",{target:M,event:L});break;case"tr":K=J.fireEvent("rowClickEvent",{target:M,event:L});break;default:break;}if(K===false){return ;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableClickEvent",{target:(M||J._elContainer),event:L});},_onDropdownChange:function(J,I){var K=G.getTarget(J);I.fireEvent("dropdownChangeEvent",{event:J,target:K});},configs:null,getId:function(){return this._sId;},toString:function(){return"DataTable instance "+this._sId;},getDataSource:function(){return this._oDataSource;},getColumnSet:function(){return this._oColumnSet;},getRecordSet:fu!
 nction(){return this._oRecordSet;},getState:function(){return{totalRecords:this.get("paginator")?this.get("paginator").get("totalRecords"):this._oRecordSet.getLength(),pagination:this.get("paginator")?this.get("paginator").getState():null,sortedBy:this.get("sortedBy"),selectedRows:this.getSelectedRows(),selectedCells:this.getSelectedCells()};},getContainerEl:function(){return this._elContainer;},getTableEl:function(){return this._elTable;},getTheadEl:function(){return this._elThead;},getTbodyEl:function(){return this._elTbody;},getMsgTbodyEl:function(){return this._elMsgTbody;},getMsgTdEl:function(){return this._elMsgTd;},getTrEl:function(K){if(K instanceof YAHOO.widget.Record){return document.getElementById(K.getId());}else{if(H.isNumber(K)){var J=this._elTbody.rows;return((K>-1)&&(K<J.length))?J[K]:null;}else{var I=(H.isString(K))?document.getElementById(K):K;if(I&&(I.ownerDocument==document)){if(I.nodeName.toLowerCase()!="tr"){I=C.getAncestorByTagName(I,"tr");}if(I&&(I.p!
 arentNode==this._elTbody)){return I;}}}}return null;},getFirst!
 TrEl:fun
ction(){return this._elTbody.rows[0]||null;},getLastTrEl:function(){var I=this._elTbody.rows;if(I.length>0){return I[I.length-1]||null;}},getNextTrEl:function(K){var I=this.getTrIndex(K);if(I!==null){var J=this._elTbody.rows;if(I<J.length-1){return J[I+1];}}return null;},getPreviousTrEl:function(K){var I=this.getTrIndex(K);if(I!==null){var J=this._elTbody.rows;if(I>0){return J[I-1];}}return null;},getTdLinerEl:function(I){var J=this.getTdEl(I);return J.firstChild||null;},getTdEl:function(I){var N;var L=C.get(I);if(L&&(L.ownerDocument==document)){if(L.nodeName.toLowerCase()!="td"){N=C.getAncestorByTagName(L,"td");}else{N=L;}if(N&&(N.parentNode.parentNode==this._elTbody)){return N;}}else{if(I){var M,K;if(H.isString(I.columnKey)&&H.isString(I.recordId)){M=this.getRecord(I.recordId);var O=this.getColumn(I.columnKey);if(O){K=O.getKeyIndex();}}if(I.record&&I.column&&I.column.getKeyIndex){M=I.record;K=I.column.getKeyIndex();}var J=this.getTrEl(M);if((K!==null)&&J&&J.cells&&J.cells.!
 length>0){return J.cells[K]||null;}}}return null;},getFirstTdEl:function(J){var I=this.getTrEl(J)||this.getFirstTrEl();if(I&&(I.cells.length>0)){return I.cells[0];}return null;},getLastTdEl:function(J){var I=this.getTrEl(J)||this.getLastTrEl();if(I&&(I.cells.length>0)){return I.cells[I.cells.length-1];}return null;},getNextTdEl:function(I){var M=this.getTdEl(I);if(M){var K=M.cellIndex;var J=this.getTrEl(M);if(K<J.cells.length-1){return J.cells[K+1];}else{var L=this.getNextTrEl(J);if(L){return L.cells[0];}}}return null;},getPreviousTdEl:function(I){var M=this.getTdEl(I);if(M){var K=M.cellIndex;var J=this.getTrEl(M);if(K>0){return J.cells[K-1];}else{var L=this.getPreviousTrEl(J);if(L){return this.getLastTdEl(L);}}}return null;},getAboveTdEl:function(I){var K=this.getTdEl(I);if(K){var J=this.getPreviousTrEl(K);if(J){return J.cells[K.cellIndex];}}return null;},getBelowTdEl:function(I){var K=this.getTdEl(I);if(K){var J=this.getNextTrEl(K);
-if(J){return J.cells[K.cellIndex];}}return null;},getThLinerEl:function(J){var I=this.getColumn(J);return(I)?I.getThLinerEl():null;},getThEl:function(K){var L;if(K instanceof YAHOO.widget.Column){var J=K;L=J.getThEl();if(L){return L;}}else{var I=C.get(K);if(I&&(I.ownerDocument==document)){if(I.nodeName.toLowerCase()!="th"){L=C.getAncestorByTagName(I,"th");}else{L=I;}if(L&&(L.parentNode.parentNode==this._elThead)){return L;}}}return null;},getTrIndex:function(M){var L;if(M instanceof YAHOO.widget.Record){L=this._oRecordSet.getRecordIndex(M);if(L===null){return null;}}else{if(H.isNumber(M)){L=M;}}if(H.isNumber(L)){if((L>-1)&&(L<this._oRecordSet.getLength())){var K=this.get("paginator");if(K){var J=K.getPageRecords();if(J&&L>=J[0]&&L<=J[1]){return L-J[0];}else{return null;}}else{return L;}}else{return null;}}else{var I=this.getTrEl(M);if(I&&(I.ownerDocument==document)&&(I.parentNode==this._elTbody)){return I.sectionRowIndex;}}return null;},initializeTable:function(){this._bIni!
 t=true;this._oRecordSet.reset();var I=this.get("paginator");if(I){I.set("totalRecords",0);}this._unselectAllTrEls();this._unselectAllTdEls();this._aSelections=null;this._oAnchorRecord=null;this._oAnchorCell=null;this.set("sortedBy",null);},_runRenderChain:function(){this._oChainRender.run();},render:function(){this._oChainRender.stop();var O,M,L,P,I;var R=this.get("paginator");if(R){I=this._oRecordSet.getRecords(R.getStartIndex(),R.getRowsPerPage());}else{I=this._oRecordSet.getRecords();}var J=this._elTbody,N=this.get("renderLoopSize"),Q=I.length;if(Q>0){J.style.display="none";while(J.lastChild){J.removeChild(J.lastChild);}J.style.display="";this._oChainRender.add({method:function(U){if((this instanceof D)&&this._sId){var T=U.nCurrentRecord,W=((U.nCurrentRecord+U.nLoopLength)>Q)?Q:(U.nCurrentRecord+U.nLoopLength),S,V;J.style.display="none";for(;T<W;T++){S=C.get(I[T].getId());S=S||this._addTrEl(I[T]);V=J.childNodes[T]||null;J.insertBefore(S,V);}J.style.display="";U.nCurrentR!
 ecord=T;}},scope:this,iterations:(N>0)?Math.ceil(Q/N):1,argume!
 nt:{nCur
rentRecord:0,nLoopLength:(N>0)?N:Q},timeout:(N>0)?0:-1});this._oChainRender.add({method:function(S){if((this instanceof D)&&this._sId){while(J.rows.length>Q){J.removeChild(J.lastChild);}this._setFirstRow();this._setLastRow();this._setRowStripes();this._setSelections();}},scope:this,timeout:(N>0)?0:-1});}else{var K=J.rows.length;this._oChainRender.add({method:function(T){if((this instanceof D)&&this._sId){var S=T.nCurrent,V=T.nLoopLength,U=(S-V<0)?-1:S-V;J.style.display="none";for(;S>U;S--){J.deleteRow(-1);}J.style.display="";T.nCurrent=S;}},scope:this,iterations:(N>0)?Math.ceil(K/N):1,argument:{nCurrent:K,nLoopLength:(N>0)?N:K},timeout:(N>0)?0:-1});}this._runRenderChain();},disable:function(){var I=this._elTable;var J=this._elMask;J.style.width=I.offsetWidth+"px";J.style.height=I.offsetHeight+"px";J.style.display="";this.fireEvent("disableEvent");},undisable:function(){this._elMask.style.display="none";this.fireEvent("undisableEvent");},destroy:function(){var J=this.toString!
 ();this._oChainRender.stop();D._destroyColumnDragTargetEl();D._destroyColumnResizerProxyEl();this._destroyColumnHelpers();var L;for(var K=0,I=this._oColumnSet.flat.length;K<I;K++){L=this._oColumnSet.flat[K].editor;if(L&&L.destroy){L.destroy();this._oColumnSet.flat[K].editor=null;}}this._oRecordSet.unsubscribeAll();this.unsubscribeAll();G.removeListener(document,"click",this._onDocumentClick);this._destroyContainerEl(this._elContainer);for(var M in this){if(H.hasOwnProperty(this,M)){this[M]=null;}}D._nCurrentCount--;if(D._nCurrentCount<1){if(D._elDynStyleNode){document.getElementsByTagName("head")[0].removeChild(D._elDynStyleNode);D._elDynStyleNode=null;}}},showTableMessage:function(J,I){var K=this._elMsgTd;if(H.isString(J)){K.firstChild.innerHTML=J;}if(H.isString(I)){K.className=I;}this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:J,className:I});},hideTableMessage:function(){if(this._elMsgTbody.style.display!="none"){this._elMsgTbody.style.display=!
 "none";this._elMsgTbody.parentNode.style.width="";this.fireEve!
 nt("tabl
eMsgHideEvent");}},focus:function(){this.focusTbodyEl();},focusTheadEl:function(){this._focusEl(this._elThead);},focusTbodyEl:function(){this._focusEl(this._elTbody);},onShow:function(){this.validateColumnWidths();},getRecordIndex:function(L){var K;if(!H.isNumber(L)){if(L instanceof YAHOO.widget.Record){return this._oRecordSet.getRecordIndex(L);}else{var J=this.getTrEl(L);if(J){K=J.sectionRowIndex;}}}else{K=L;}if(H.isNumber(K)){var I=this.get("paginator");if(I){return I.get("recordOffset")+K;}else{return K;}}return null;},getRecord:function(K){var J=this._oRecordSet.getRecord(K);if(!J){var I=this.getTrEl(K);if(I){J=this._oRecordSet.getRecord(this.getRecordIndex(I.sectionRowIndex));}}if(J instanceof YAHOO.widget.Record){return this._oRecordSet.getRecord(J);}else{return null;}},getColumn:function(L){var N=this._oColumnSet.getColumn(L);if(!N){var M=this.getTdEl(L);if(M){N=this._oColumnSet.getColumn(M.cellIndex);}else{M=this.getThEl(L);if(M){var J=this._oColumnSet.flat;for(var K!
 =0,I=J.length;K<I;K++){if(J[K].getThEl().id===M.id){N=J[K];}}}}}if(!N){}return N;},getColumnById:function(I){return this._oColumnSet.getColumnById(I);},getColumnSortDir:function(K,L){if(K.sortOptions&&K.sortOptions.defaultOrder){if(K.sortOptions.defaultOrder=="asc"){K.sortOptions.defaultDir=D.CLASS_ASC;}else{if(K.sortOptions.defaultOrder=="desc"){K.sortOptions.defaultDir=D.CLASS_DESC;}}}var J=(K.sortOptions&&K.sortOptions.defaultDir)?K.sortOptions.defaultDir:D.CLASS_ASC;var I=false;L=L||this.get("sortedBy");if(L&&(L.key===K.key)){I=true;if(L.dir){J=(L.dir===D.CLASS_ASC)?D.CLASS_DESC:D.CLASS_ASC;}else{J=(J===D.CLASS_ASC)?D.CLASS_DESC:D.CLASS_ASC;}}return J;},doBeforeSortColumn:function(J,I){this.showTableMessage(this.get("MSG_LOADING"),D.CLASS_LOADING);return true;},sortColumn:function(M,J){if(M&&(M instanceof YAHOO.widget.Column)){if(!M.sortable){C.addClass(this.getThEl(M),D.CLASS_SORTABLE);}if(J&&(J!==D.CLASS_ASC)&&(J!==D.CLASS_DESC)){J=null;
-}var N=J||this.getColumnSortDir(M);var L=this.get("sortedBy")||{};var T=(L.key===M.key)?true:false;var P=this.doBeforeSortColumn(M,N);if(P){if(this.get("dynamicData")){var S=this.getState();if(S.pagination){S.pagination.recordOffset=0;}S.sortedBy={key:M.key,dir:N};var K=this.get("generateRequest")(S,this);this.unselectAllRows();this.unselectAllCells();var R={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:S,scope:this};this._oDataSource.sendRequest(K,R);}else{if(!T||J){var Q=(M.sortOptions&&M.sortOptions.field)?M.sortOptions.field:M.field;var I=(M.sortOptions&&H.isFunction(M.sortOptions.sortFunction))?M.sortOptions.sortFunction:function(V,U,X){YAHOO.util.Sort.compare(V.getData(Q),U.getData(Q),X);var W=YAHOO.util.Sort.compare(V.getData(Q),U.getData(Q),X);if(W===0){return YAHOO.util.Sort.compare(V.getCount(),U.getCount(),X);}else{return W;}};this._oRecordSet.sortRecords(I,((N==D.CLASS_DESC)?true:false));}else{this._oRecordSet.reverseRecords();}var O!
 =this.get("paginator");if(O){O.setPage(1,true);}this.render();this.set("sortedBy",{key:M.key,dir:N,column:M});}this.fireEvent("columnSortEvent",{column:M,dir:N});return ;}}},setColumnWidth:function(J,I){if(!(J instanceof YAHOO.widget.Column)){J=this.getColumn(J);}if(J){if(H.isNumber(I)){I=(I>J.minWidth)?I:J.minWidth;J.width=I;this._setColumnWidth(J,I+"px");this.fireEvent("columnSetWidthEvent",{column:J,width:I});return ;}else{if(I===null){J.width=I;this._setColumnWidth(J,"auto");this.validateColumnWidths(J);this.fireEvent("columnUnsetWidthEvent",{column:J});return ;}}}},_setColumnWidth:function(J,I,K){if(J&&(J.getKeyIndex()!==null)){K=K||(((I==="")||(I==="auto"))?"visible":"hidden");if(!D._bDynStylesFallback){this._setColumnWidthDynStyles(J,I,K);}else{this._setColumnWidthDynFunction(J,I,K);}}else{}},_setColumnWidthDynStyles:function(M,L,N){var J=D._elDynStyleNode,K;if(!J){J=document.createElement("style");J.type="text/css";J=document.getElementsByTagName("head").item(0).app!
 endChild(J);D._elDynStyleNode=J;}if(J){var I="."+this.getId()+!
 "-col-"+
M.getSanitizedKey()+" ."+D.CLASS_LINER;if(this._elTbody){this._elTbody.style.display="none";}K=D._oDynStyles[I];if(!K){if(J.styleSheet&&J.styleSheet.addRule){J.styleSheet.addRule(I,"overflow:"+N);J.styleSheet.addRule(I,"width:"+L);K=J.styleSheet.rules[J.styleSheet.rules.length-1];D._oDynStyles[I]=K;}else{if(J.sheet&&J.sheet.insertRule){J.sheet.insertRule(I+" {overflow:"+N+";width:"+L+";}",J.sheet.cssRules.length);K=J.sheet.cssRules[J.sheet.cssRules.length-1];D._oDynStyles[I]=K;}}}else{K.style.overflow=N;K.style.width=L;}if(this._elTbody){this._elTbody.style.display="";}}if(!K){D._bDynStylesFallback=true;this._setColumnWidthDynFunction(M,L);}},_setColumnWidthDynFunction:function(O,J,P){if(J=="auto"){J="";}var I=this._elTbody?this._elTbody.rows.length:0;if(!this._aDynFunctions[I]){var N,M,L;var Q=["var colIdx=oColumn.getKeyIndex();","oColumn.getThLinerEl().style.overflow="];for(N=I-1,M=2;N>=0;--N){Q[M++]="this._elTbody.rows[";Q[M++]=N;Q[M++]="].cells[colIdx].firstChild.style.o!
 verflow=";}Q[M]="sOverflow;";Q[M+1]="oColumn.getThLinerEl().style.width=";for(N=I-1,L=M+2;N>=0;--N){Q[L++]="this._elTbody.rows[";Q[L++]=N;Q[L++]="].cells[colIdx].firstChild.style.width=";}Q[L]="sWidth;";this._aDynFunctions[I]=new Function("oColumn","sWidth","sOverflow",Q.join(""));}var K=this._aDynFunctions[I];if(K){K.call(this,O,J,P);}},validateColumnWidths:function(N){var K=this._elColgroup;var P=K.cloneNode(true);var O=false;var M=this._oColumnSet.keys;var J;if(N&&!N.hidden&&!N.width&&(N.getKeyIndex()!==null)){J=N.getThLinerEl();if((N.minWidth>0)&&(J.offsetWidth<N.minWidth)){P.childNodes[N.getKeyIndex()].style.width=N.minWidth+(parseInt(C.getStyle(J,"paddingLeft"),10)|0)+(parseInt(C.getStyle(J,"paddingRight"),10)|0)+"px";O=true;}else{if((N.maxAutoWidth>0)&&(J.offsetWidth>N.maxAutoWidth)){this._setColumnWidth(N,N.maxAutoWidth+"px","hidden");}}}else{for(var L=0,I=M.length;L<I;L++){N=M[L];if(!N.hidden&&!N.width){J=N.getThLinerEl();if((N.minWidth>0)&&(J.offsetWidth<N.minWidt!
 h)){P.childNodes[L].style.width=N.minWidth+(parseInt(C.getStyl!
 e(J,"pad
dingLeft"),10)|0)+(parseInt(C.getStyle(J,"paddingRight"),10)|0)+"px";O=true;}else{if((N.maxAutoWidth>0)&&(J.offsetWidth>N.maxAutoWidth)){this._setColumnWidth(N,N.maxAutoWidth+"px","hidden");}}}}}if(O){K.parentNode.replaceChild(P,K);this._elColgroup=P;}},_clearMinWidth:function(I){if(I.getKeyIndex()!==null){this._elColgroup.childNodes[I.getKeyIndex()].style.width="";}},_restoreMinWidth:function(I){if(I.minWidth&&(I.getKeyIndex()!==null)){this._elColgroup.childNodes[I.getKeyIndex()].style.width=I.minWidth+"px";}},hideColumn:function(N){if(!(N instanceof YAHOO.widget.Column)){N=this.getColumn(N);}if(N&&!N.hidden&&N.getTreeIndex()!==null){var O=this.getTbodyEl().rows;var I=O.length;var M=this._oColumnSet.getDescendants(N);for(var L=0;L<M.length;L++){var K=M[L];K.hidden=true;C.addClass(K.getThEl(),D.CLASS_HIDDEN);var P=K.getKeyIndex();if(P!==null){this._clearMinWidth(N);for(var J=0;J<I;J++){C.addClass(O[J].cells[P],D.CLASS_HIDDEN);}}this.fireEvent("columnHideEvent",{column:K});}t!
 his._repaintOpera();this._clearTrTemplateEl();}else{}},showColumn:function(N){if(!(N instanceof YAHOO.widget.Column)){N=this.getColumn(N);}if(N&&N.hidden&&(N.getTreeIndex()!==null)){var O=this.getTbodyEl().rows;var I=O.length;var M=this._oColumnSet.getDescendants(N);for(var L=0;L<M.length;L++){var K=M[L];K.hidden=false;C.removeClass(K.getThEl(),D.CLASS_HIDDEN);var P=K.getKeyIndex();if(P!==null){this._restoreMinWidth(N);for(var J=0;J<I;J++){C.removeClass(O[J].cells[P],D.CLASS_HIDDEN);}}this.fireEvent("columnShowEvent",{column:K});}this._clearTrTemplateEl();}else{}},removeColumn:function(O){if(!(O instanceof YAHOO.widget.Column)){O=this.getColumn(O);}if(O){var L=O.getTreeIndex();if(L!==null){var N,Q,P=O.getKeyIndex();if(P===null){var T=[];var I=this._oColumnSet.getDescendants(O);for(N=0,Q=I.length;N<Q;N++){var R=I[N].getKeyIndex();if(R!==null){T[T.length]=R;}}if(T.length>0){P=T;}}else{P=[P];}if(P!==null){P.sort(function(V,U){return YAHOO.util.Sort.compare(V,U);
-});this._destroyTheadEl();var J=this._oColumnSet.getDefinitions();O=J.splice(L,1)[0];this._initColumnSet(J);this._initTheadEl();for(N=P.length-1;N>-1;N--){this._removeColgroupColEl(P[N]);}var S=this._elTbody.rows;if(S.length>0){var M=this.get("renderLoopSize"),K=S.length;this._oChainRender.add({method:function(X){if((this instanceof D)&&this._sId){var W=X.nCurrentRow,U=M>0?Math.min(W+M,S.length):S.length,Y=X.aIndexes,V;for(;W<U;++W){for(V=Y.length-1;V>-1;V--){S[W].removeChild(S[W].childNodes[Y[V]]);}}X.nCurrentRow=W;}},iterations:(M>0)?Math.ceil(K/M):1,argument:{nCurrentRow:0,aIndexes:P},scope:this,timeout:(M>0)?0:-1});this._runRenderChain();}this.fireEvent("columnRemoveEvent",{column:O});return O;}}}},insertColumn:function(Q,R){if(Q instanceof YAHOO.widget.Column){Q=Q.getDefinition();}else{if(Q.constructor!==Object){return ;}}var W=this._oColumnSet;if(!H.isValue(R)||!H.isNumber(R)){R=W.tree[0].length;}this._destroyTheadEl();var Y=this._oColumnSet.getDefinitions();Y.splice(!
 R,0,Q);this._initColumnSet(Y);this._initTheadEl();W=this._oColumnSet;var M=W.tree[0][R];var O,S,V=[];var K=W.getDescendants(M);for(O=0,S=K.length;O<S;O++){var T=K[O].getKeyIndex();if(T!==null){V[V.length]=T;}}if(V.length>0){var X=V.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);})[0];for(O=V.length-1;O>-1;O--){this._insertColgroupColEl(V[O]);}var U=this._elTbody.rows;if(U.length>0){var N=this.get("renderLoopSize"),L=U.length;var J=[],P;for(O=0,S=V.length;O<S;O++){var I=V[O];P=this._getTrTemplateEl().childNodes[O].cloneNode(true);P=this._formatTdEl(this._oColumnSet.keys[I],P,I,(I===this._oColumnSet.keys.length-1));J[I]=P;}this._oChainRender.add({method:function(c){if((this instanceof D)&&this._sId){var b=c.nCurrentRow,a,e=c.descKeyIndexes,Z=N>0?Math.min(b+N,U.length):U.length,d;for(;b<Z;++b){d=U[b].childNodes[X]||null;for(a=e.length-1;a>-1;a--){U[b].insertBefore(c.aTdTemplates[e[a]].cloneNode(true),d);}}c.nCurrentRow=b;}},iterations:(N>0)?Math.ceil(L/N):1,argument:{n!
 CurrentRow:0,aTdTemplates:J,descKeyIndexes:V},scope:this,timeo!
 ut:(N>0)
?0:-1});this._runRenderChain();}this.fireEvent("columnInsertEvent",{column:Q,index:R});return M;}},reorderColumn:function(P,Q){if(!(P instanceof YAHOO.widget.Column)){P=this.getColumn(P);}if(P&&YAHOO.lang.isNumber(Q)){var Y=P.getTreeIndex();if((Y!==null)&&(Y!==Q)){var O,R,K=P.getKeyIndex(),J,U=[],S;if(K===null){J=this._oColumnSet.getDescendants(P);for(O=0,R=J.length;O<R;O++){S=J[O].getKeyIndex();if(S!==null){U[U.length]=S;}}if(U.length>0){K=U;}}else{K=[K];}if(K!==null){K.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);});this._destroyTheadEl();var V=this._oColumnSet.getDefinitions();var I=V.splice(Y,1)[0];V.splice(Q,0,I);this._initColumnSet(V);this._initTheadEl();var M=this._oColumnSet.tree[0][Q];var X=M.getKeyIndex();if(X===null){U=[];J=this._oColumnSet.getDescendants(M);for(O=0,R=J.length;O<R;O++){S=J[O].getKeyIndex();if(S!==null){U[U.length]=S;}}if(U.length>0){X=U;}}else{X=[X];}var W=X.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);})[0];this._reorderColgro!
 upColEl(K,W);var T=this._elTbody.rows;if(T.length>0){var N=this.get("renderLoopSize"),L=T.length;this._oChainRender.add({method:function(c){if((this instanceof D)&&this._sId){var b=c.nCurrentRow,a,e,d,Z=N>0?Math.min(b+N,T.length):T.length,g=c.aIndexes,f;for(;b<Z;++b){e=[];f=T[b];for(a=g.length-1;a>-1;a--){e.push(f.removeChild(f.childNodes[g[a]]));}d=f.childNodes[W]||null;for(a=e.length-1;a>-1;a--){f.insertBefore(e[a],d);}}c.nCurrentRow=b;}},iterations:(N>0)?Math.ceil(L/N):1,argument:{nCurrentRow:0,aIndexes:K},scope:this,timeout:(N>0)?0:-1});this._runRenderChain();}this.fireEvent("columnReorderEvent",{column:M});return M;}}}},selectColumn:function(K){K=this.getColumn(K);if(K&&!K.selected){if(K.getKeyIndex()!==null){K.selected=true;var L=K.getThEl();C.addClass(L,D.CLASS_SELECTED);var J=this.getTbodyEl().rows;var I=this._oChainRender;I.add({method:function(M){if((this instanceof D)&&this._sId&&J[M.rowIndex]&&J[M.rowIndex].cells[M.cellIndex]){C.addClass(J[M.rowIndex].cells[M.ce!
 llIndex],D.CLASS_SELECTED);}M.rowIndex++;},scope:this,iteratio!
 ns:J.len
gth,argument:{rowIndex:0,cellIndex:K.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnSelectEvent",{column:K});}else{}}},unselectColumn:function(K){K=this.getColumn(K);if(K&&K.selected){if(K.getKeyIndex()!==null){K.selected=false;var L=K.getThEl();C.removeClass(L,D.CLASS_SELECTED);var J=this.getTbodyEl().rows;var I=this._oChainRender;I.add({method:function(M){if((this instanceof D)&&this._sId&&J[M.rowIndex]&&J[M.rowIndex].cells[M.cellIndex]){C.removeClass(J[M.rowIndex].cells[M.cellIndex],D.CLASS_SELECTED);}M.rowIndex++;},scope:this,iterations:J.length,argument:{rowIndex:0,cellIndex:K.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnselectEvent",{column:K});}else{}}},getSelectedColumns:function(M){var J=[];var K=this._oColumnSet.keys;for(var L=0,I=K.length;L<I;L++){if!
 (K[L].selected){J[J.length]=K[L];}}return J;},highlightColumn:function(I){var L=this.getColumn(I);if(L&&(L.getKeyIndex()!==null)){var M=L.getThEl();C.addClass(M,D.CLASS_HIGHLIGHTED);var K=this.getTbodyEl().rows;var J=this._oChainRender;J.add({method:function(N){if((this instanceof D)&&this._sId&&K[N.rowIndex]&&K[N.rowIndex].cells[N.cellIndex]){C.addClass(K[N.rowIndex].cells[N.cellIndex],D.CLASS_HIGHLIGHTED);}N.rowIndex++;},scope:this,iterations:K.length,argument:{rowIndex:0,cellIndex:L.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnHighlightEvent",{column:L});}else{}},unhighlightColumn:function(I){var L=this.getColumn(I);if(L&&(L.getKeyIndex()!==null)){var M=L.getThEl();C.removeClass(M,D.CLASS_HIGHLIGHTED);var K=this.getTbodyEl().rows;var J=this._oChainRender;J.add({method:function(N){if((this instanceof D)&&this._sId&&K[N.rowIndex]&&K[N.rowIndex].cells[N.cellIndex]){C.removeClass(K[!
 N.rowIndex].cells[N.cellIndex],D.CLASS_HIGHLIGHTED);
-}N.rowIndex++;},scope:this,iterations:K.length,argument:{rowIndex:0,cellIndex:L.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnhighlightEvent",{column:L});}else{}},addRow:function(O,K){if(O&&H.isObject(O)){var M=this._oRecordSet.addRecord(O,K);if(M){var I;var J=this.get("paginator");if(J){var N=J.get("totalRecords");if(N!==E.Paginator.VALUE_UNLIMITED){J.set("totalRecords",N+1);}I=this.getRecordIndex(M);var L=(J.getPageRecords())[1];if(I<=L){this.render();}this.fireEvent("rowAddEvent",{record:M});return ;}else{I=this.getTrIndex(M);if(H.isNumber(I)){this._oChainRender.add({method:function(R){if((this instanceof D)&&this._sId){var S=R.record;var P=R.recIndex;var T=this._addTrEl(S);if(T){var Q=(this._elTbody.rows[P])?this._elTbody.rows[P]:null;this._elTbody.insertBefore(T,Q);if(P===0){this._setFirstRow();}if(Q===null){this._setLastRow();}this._setRowStripes();this.hideTableMessage();th!
 is.fireEvent("rowAddEvent",{record:S});}}},argument:{record:M,recIndex:I},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return ;}}}}},addRows:function(K,M){if(H.isArray(K)){var N=this._oRecordSet.addRecords(K,M);if(N){var R=this.getRecordIndex(N[0]);var Q=this.get("paginator");if(Q){var O=Q.get("totalRecords");if(O!==E.Paginator.VALUE_UNLIMITED){Q.set("totalRecords",O+N.length);}var P=(Q.getPageRecords())[1];if(R<=P){this.render();}this.fireEvent("rowsAddEvent",{records:N});return ;}else{var L=this.get("renderLoopSize");var J=R+K.length;var I=(J-R);this._oChainRender.add({method:function(W){if((this instanceof D)&&this._sId){var Y=W.aRecords,V=W.nCurrentRow,U=W.nCurrentRecord,S=L>0?Math.min(V+L,J):J,Z=document.createDocumentFragment(),X;for(;V<S;++V,++U){Z.appendChild(this._addTrEl(Y[U]));}var T=(this._elTbody.rows[M])?this._elTbody.rows[M]:null;this._elTbody.insertBefore(Z,T);W.nCurrentRow=V;W.nCurrentRecord=U;}},iterations:(L>0)?Math.ceil!
 (J/L):1,argument:{nCurrentRow:R,nCurrentRecord:0,aRecords:N},s!
 cope:thi
s,timeout:(L>0)?0:-1});this._oChainRender.add({method:function(T){var S=T.recIndex;if(S===0){this._setFirstRow();}if(S===this._elTbody.rows.length-1){this._setLastRow();}this._setRowStripes();this.fireEvent("rowsAddEvent",{records:N});},argument:{recIndex:R},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage();return ;}}}},updateRow:function(N,O){var I,M,L,J;if((N instanceof YAHOO.widget.Record)||(H.isNumber(N))){I=this._oRecordSet.getRecord(N);J=this.getTrEl(I);}else{J=this.getTrEl(N);if(J){I=this.getRecord(J);}}if(I){var K=I.getData();M=YAHOO.widget.DataTable._cloneObject(K);L=this._oRecordSet.updateRecord(I,O);}else{return ;}if(J){this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){this._updateTrEl(J,L);this.fireEvent("rowUpdateEvent",{record:L,oldData:M});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();}else{this.fireEvent("rowUpdateEvent",{record:L,oldData:M});}},deleteRow:function(R){var J=th!
 is.getRecordIndex(R);if(H.isNumber(J)){var S=this.getRecord(J);if(S){var L=this.getTrIndex(J);var O=S.getId();var Q=this._aSelections||[];for(var M=Q.length-1;M>-1;M--){if((H.isNumber(Q[M])&&(Q[M]===O))||(H.isObject(Q[M])&&(Q[M].recordId===O))){Q.splice(M,1);}}var K=this._oRecordSet.deleteRecord(J);if(K){var P=this.get("paginator");if(P){var N=P.get("totalRecords"),I=P.getPageRecords();if(N!==E.Paginator.VALUE_UNLIMITED){P.set("totalRecords",N-1);}if(!I||J<=I[1]){this.render();}return ;}else{if(H.isNumber(L)){this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){var T=(L==this.getLastTrEl().sectionRowIndex);this._deleteTrEl(L);if(this._elTbody.rows.length>0){if(L===0){this._setFirstRow();}if(T){this._setLastRow();}if(L!=this._elTbody.rows.length){this._setRowStripes(L);}}this.fireEvent("rowDeleteEvent",{recordIndex:J,oldData:K,trElIndex:L});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return ;}}}}}return null;},de!
 leteRows:function(X,R){var K=this.getRecordIndex(X);if(H.isNum!
 ber(K)){
var Y=this.getRecord(K);if(Y){var L=this.getTrIndex(K);var T=Y.getId();var W=this._aSelections||[];for(var P=W.length-1;P>-1;P--){if((H.isNumber(W[P])&&(W[P]===T))||(H.isObject(W[P])&&(W[P].recordId===T))){W.splice(P,1);}}var M=K;var V=K;if(R&&H.isNumber(R)){M=(R>0)?K+R-1:K;V=(R>0)?K:K+R+1;R=(R>0)?R:R*-1;}else{R=1;}var O=this._oRecordSet.deleteRecords(V,R);if(O){var U=this.get("paginator");if(U){var S=U.get("totalRecords"),J=U.getPageRecords();if(S!==E.Paginator.VALUE_UNLIMITED){U.set("totalRecords",S-O.length);}if(!J||V<=J[1]){this.render();}return ;}else{if(H.isNumber(L)){var Q=this.get("renderLoopSize");var N=V;var I=R;this._oChainRender.add({method:function(b){if((this instanceof D)&&this._sId){var a=b.nCurrentRow,Z=(Q>0)?(Math.max(a-Q,N)-1):N-1;for(;a>Z;--a){this._deleteTrEl(a);}b.nCurrentRow=a;}},iterations:(Q>0)?Math.ceil(R/Q):1,argument:{nCurrentRow:M},scope:this,timeout:(Q>0)?0:-1});this._oChainRender.add({method:function(){if(this._elTbody.rows.length>0){this._setF!
 irstRow();this._setLastRow();this._setRowStripes();}this.fireEvent("rowsDeleteEvent",{recordIndex:R,oldData:O,count:L});},scope:this,timeout:-1});this._runRenderChain();return ;}}}}}return null;},formatCell:function(L,K,M){if(!K){K=this.getRecord(L);}if(!M){M=this.getColumn(L.parentNode.cellIndex);}if(K&&M){var I=M.field;var N=K.getData(I);var J=typeof M.formatter==="function"?M.formatter:D.Formatter[M.formatter+""]||D.Formatter.defaultFormatter;if(J){J.call(this,L,K,M,N);}else{L.innerHTML=N;}this.fireEvent("cellFormatEvent",{record:K,column:M,key:M.key,el:L});}else{}},updateCell:function(J,K,M){K=(K instanceof YAHOO.widget.Column)?K:this.getColumn(K);if(K&&K.getKey()&&(J instanceof YAHOO.widget.Record)){var L=YAHOO.widget.DataTable._cloneObject(J.getData());this._oRecordSet.updateRecordValue(J,K.getKey(),M);var I=this.getTdEl({record:J,column:K});if(I){this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){this.formatCell(I.firstChild);
-this.fireEvent("cellUpdateEvent",{record:J,column:K,oldData:L});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();}else{this.fireEvent("cellUpdateEvent",{record:J,column:K,oldData:L});}}},_updatePaginator:function(J){var I=this.get("paginator");if(I&&J!==I){I.unsubscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}if(J){J.subscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}},_handlePaginatorChange:function(K){if(K.prevValue===K.newValue){return ;}var M=K.newValue,L=K.prevValue,J=this._defaultPaginatorContainers();if(L){if(L.getContainerNodes()[0]==J[0]){L.set("containers",[]);}L.destroy();if(J[0]){if(M&&!M.getContainerNodes().length){M.set("containers",J);}else{for(var I=J.length-1;I>=0;--I){if(J[I]){J[I].parentNode.removeChild(J[I]);}}}}}if(!this._bInit){this.render();}if(M){this.renderPaginator();}},_defaultPaginatorContainers:function(L){var J=this._sId+"-paginator0",K=this._sId+"-paginator1",I=C.get(J),M=C.g!
 et(K);if(L&&(!I||!M)){if(!I){I=document.createElement("div");I.id=J;C.addClass(I,D.CLASS_PAGINATOR);this._elContainer.insertBefore(I,this._elContainer.firstChild);}if(!M){M=document.createElement("div");M.id=K;C.addClass(M,D.CLASS_PAGINATOR);this._elContainer.appendChild(M);}}return[I,M];},renderPaginator:function(){var I=this.get("paginator");if(!I){return ;}if(!I.getContainerNodes().length){I.set("containers",this._defaultPaginatorContainers(true));}I.render();},doBeforePaginatorChange:function(I){this.showTableMessage(this.get("MSG_LOADING"),D.CLASS_LOADING);return true;},onPaginatorChangeRequest:function(L){var J=this.doBeforePaginatorChange(L);if(J){if(this.get("dynamicData")){var I=this.getState();I.pagination=L;var K=this.get("generateRequest")(I,this);this.unselectAllRows();this.unselectAllCells();var M={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:I,scope:this};this._oDataSource.sendRequest(K,M);}else{L.paginator.setStartIndex(L.record!
 Offset,true);L.paginator.setRowsPerPage(L.rowsPerPage,true);th!
 is.rende
r();}}else{}},_elLastHighlightedTd:null,_aSelections:null,_oAnchorRecord:null,_oAnchorCell:null,_unselectAllTrEls:function(){var I=C.getElementsByClassName(D.CLASS_SELECTED,"tr",this._elTbody);C.removeClass(I,D.CLASS_SELECTED);},_getSelectionTrigger:function(){var L=this.get("selectionMode");var K={};var O,I,J,N,M;if((L=="cellblock")||(L=="cellrange")||(L=="singlecell")){O=this.getLastSelectedCell();if(!O){return null;}else{I=this.getRecord(O.recordId);J=this.getRecordIndex(I);N=this.getTrEl(I);M=this.getTrIndex(N);if(M===null){return null;}else{K.record=I;K.recordIndex=J;K.el=this.getTdEl(O);K.trIndex=M;K.column=this.getColumn(O.columnKey);K.colKeyIndex=K.column.getKeyIndex();K.cell=O;return K;}}}else{I=this.getLastSelectedRecord();if(!I){return null;}else{I=this.getRecord(I);J=this.getRecordIndex(I);N=this.getTrEl(I);M=this.getTrIndex(N);if(M===null){return null;}else{K.record=I;K.recordIndex=J;K.el=N;K.trIndex=M;return K;}}}},_getSelectionAnchor:function(K){var J=this.get!
 ("selectionMode");var L={};var M,O,I;if((J=="cellblock")||(J=="cellrange")||(J=="singlecell")){var N=this._oAnchorCell;if(!N){if(K){N=this._oAnchorCell=K.cell;}else{return null;}}M=this._oAnchorCell.record;O=this._oRecordSet.getRecordIndex(M);I=this.getTrIndex(M);if(I===null){if(O<this.getRecordIndex(this.getFirstTrEl())){I=0;}else{I=this.getRecordIndex(this.getLastTrEl());}}L.record=M;L.recordIndex=O;L.trIndex=I;L.column=this._oAnchorCell.column;L.colKeyIndex=L.column.getKeyIndex();L.cell=N;return L;}else{M=this._oAnchorRecord;if(!M){if(K){M=this._oAnchorRecord=K.record;}else{return null;}}O=this.getRecordIndex(M);I=this.getTrIndex(M);if(I===null){if(O<this.getRecordIndex(this.getFirstTrEl())){I=0;}else{I=this.getRecordIndex(this.getLastTrEl());}}L.record=M;L.recordIndex=O;L.trIndex=I;return L;}},_handleStandardSelectionByMouse:function(J){var I=J.target;var L=this.getTrEl(I);if(L){var O=J.event;var R=O.shiftKey;var N=O.ctrlKey||((navigator.userAgent.toLowerCase().indexOf(!
 "mac")!=-1)&&O.metaKey);var Q=this.getRecord(L);var K=this._oR!
 ecordSet
.getRecordIndex(Q);var P=this._getSelectionAnchor();var M;if(R&&N){if(P){if(this.isSelected(P.record)){if(P.recordIndex<K){for(M=P.recordIndex+1;M<=K;M++){if(!this.isSelected(M)){this.selectRow(M);}}}else{for(M=P.recordIndex-1;M>=K;M--){if(!this.isSelected(M)){this.selectRow(M);}}}}else{if(P.recordIndex<K){for(M=P.recordIndex+1;M<=K-1;M++){if(this.isSelected(M)){this.unselectRow(M);}}}else{for(M=K+1;M<=P.recordIndex-1;M++){if(this.isSelected(M)){this.unselectRow(M);}}}this.selectRow(Q);}}else{this._oAnchorRecord=Q;if(this.isSelected(Q)){this.unselectRow(Q);}else{this.selectRow(Q);}}}else{if(R){this.unselectAllRows();if(P){if(P.recordIndex<K){for(M=P.recordIndex;M<=K;M++){this.selectRow(M);}}else{for(M=P.recordIndex;M>=K;M--){this.selectRow(M);}}}else{this._oAnchorRecord=Q;this.selectRow(Q);}}else{if(N){this._oAnchorRecord=Q;if(this.isSelected(Q)){this.unselectRow(Q);}else{this.selectRow(Q);}}else{this._handleSingleSelectionByMouse(J);return ;}}}}},_handleStandardSelectionByK!
 ey:function(M){var I=G.getCharCode(M);if((I==38)||(I==40)){var K=M.shiftKey;var J=this._getSelectionTrigger();if(!J){return null;}G.stopEvent(M);var L=this._getSelectionAnchor(J);if(K){if((I==40)&&(L.recordIndex<=J.trIndex)){this.selectRow(this.getNextTrEl(J.el));}else{if((I==38)&&(L.recordIndex>=J.trIndex)){this.selectRow(this.getPreviousTrEl(J.el));}else{this.unselectRow(J.el);}}}else{this._handleSingleSelectionByKey(M);}}},_handleSingleSelectionByMouse:function(K){var L=K.target;var J=this.getTrEl(L);if(J){var I=this.getRecord(J);this._oAnchorRecord=I;this.unselectAllRows();this.selectRow(I);}},_handleSingleSelectionByKey:function(L){var I=G.getCharCode(L);if((I==38)||(I==40)){var J=this._getSelectionTrigger();if(!J){return null;}G.stopEvent(L);var K;if(I==38){K=this.getPreviousTrEl(J.el);if(K===null){K=this.getFirstTrEl();}}else{if(I==40){K=this.getNextTrEl(J.el);if(K===null){K=this.getLastTrEl();}}}this.unselectAllRows();
-this.selectRow(K);this._oAnchorRecord=this.getRecord(K);}},_handleCellBlockSelectionByMouse:function(Y){var Z=Y.target;var J=this.getTdEl(Z);if(J){var X=Y.event;var O=X.shiftKey;var K=X.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&X.metaKey);var Q=this.getTrEl(J);var P=this.getTrIndex(Q);var T=this.getColumn(J);var U=T.getKeyIndex();var S=this.getRecord(Q);var b=this._oRecordSet.getRecordIndex(S);var N={record:S,column:T};var R=this._getSelectionAnchor();var M=this.getTbodyEl().rows;var L,I,a,W,V;if(O&&K){if(R){if(this.isSelected(R.cell)){if(R.recordIndex===b){if(R.colKeyIndex<U){for(W=R.colKeyIndex+1;W<=U;W++){this.selectCell(Q.cells[W]);}}else{if(U<R.colKeyIndex){for(W=U;W<R.colKeyIndex;W++){this.selectCell(Q.cells[W]);}}}}else{if(R.recordIndex<b){L=Math.min(R.colKeyIndex,U);I=Math.max(R.colKeyIndex,U);for(W=R.trIndex;W<=P;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}else{L=Math.min(R.trIndex,U);I=Math.max(R.trIndex,U);for(W=R.trIndex;W>=P!
 ;W--){for(V=I;V>=L;V--){this.selectCell(M[W].cells[V]);}}}}}else{if(R.recordIndex===b){if(R.colKeyIndex<U){for(W=R.colKeyIndex+1;W<U;W++){this.unselectCell(Q.cells[W]);}}else{if(U<R.colKeyIndex){for(W=U+1;W<R.colKeyIndex;W++){this.unselectCell(Q.cells[W]);}}}}if(R.recordIndex<b){for(W=R.trIndex;W<=P;W++){a=M[W];for(V=0;V<a.cells.length;V++){if(a.sectionRowIndex===R.trIndex){if(V>R.colKeyIndex){this.unselectCell(a.cells[V]);}}else{if(a.sectionRowIndex===P){if(V<U){this.unselectCell(a.cells[V]);}}else{this.unselectCell(a.cells[V]);}}}}}else{for(W=P;W<=R.trIndex;W++){a=M[W];for(V=0;V<a.cells.length;V++){if(a.sectionRowIndex==P){if(V>U){this.unselectCell(a.cells[V]);}}else{if(a.sectionRowIndex==R.trIndex){if(V<R.colKeyIndex){this.unselectCell(a.cells[V]);}}else{this.unselectCell(a.cells[V]);}}}}}this.selectCell(J);}}else{this._oAnchorCell=N;if(this.isSelected(N)){this.unselectCell(N);}else{this.selectCell(N);}}}else{if(O){this.unselectAllCells();if(R){if(R.recordIndex===b){if(R!
 .colKeyIndex<U){for(W=R.colKeyIndex;W<=U;W++){this.selectCell(!
 Q.cells[
W]);}}else{if(U<R.colKeyIndex){for(W=U;W<=R.colKeyIndex;W++){this.selectCell(Q.cells[W]);}}}}else{if(R.recordIndex<b){L=Math.min(R.colKeyIndex,U);I=Math.max(R.colKeyIndex,U);for(W=R.trIndex;W<=P;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}else{L=Math.min(R.colKeyIndex,U);I=Math.max(R.colKeyIndex,U);for(W=P;W<=R.trIndex;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}}}else{this._oAnchorCell=N;this.selectCell(N);}}else{if(K){this._oAnchorCell=N;if(this.isSelected(N)){this.unselectCell(N);}else{this.selectCell(N);}}else{this._handleSingleCellSelectionByMouse(Y);}}}}},_handleCellBlockSelectionByKey:function(N){var I=G.getCharCode(N);var S=N.shiftKey;if((I==9)||!S){this._handleSingleCellSelectionByKey(N);return ;}if((I>36)&&(I<41)){var T=this._getSelectionTrigger();if(!T){return null;}G.stopEvent(N);var Q=this._getSelectionAnchor(T);var J,R,K,P,L;var O=this.getTbodyEl().rows;var M=T.el.parentNode;if(I==40){if(Q.recordIndex<=T.recordIndex){L=this.getNextTrEl!
 (T.el);if(L){R=Q.colKeyIndex;K=T.colKeyIndex;if(R>K){for(J=R;J>=K;J--){P=L.cells[J];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=L.cells[J];this.selectCell(P);}}}}else{R=Math.min(Q.colKeyIndex,T.colKeyIndex);K=Math.max(Q.colKeyIndex,T.colKeyIndex);for(J=R;J<=K;J++){this.unselectCell(M.cells[J]);}}}else{if(I==38){if(Q.recordIndex>=T.recordIndex){L=this.getPreviousTrEl(T.el);if(L){R=Q.colKeyIndex;K=T.colKeyIndex;if(R>K){for(J=R;J>=K;J--){P=L.cells[J];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=L.cells[J];this.selectCell(P);}}}}else{R=Math.min(Q.colKeyIndex,T.colKeyIndex);K=Math.max(Q.colKeyIndex,T.colKeyIndex);for(J=R;J<=K;J++){this.unselectCell(M.cells[J]);}}}else{if(I==39){if(Q.colKeyIndex<=T.colKeyIndex){if(T.colKeyIndex<M.cells.length-1){R=Q.trIndex;K=T.trIndex;if(R>K){for(J=R;J>=K;J--){P=O[J].cells[T.colKeyIndex+1];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=O[J].cells[T.colKeyIndex+1];this.selectCell(P);}}}}else{R=Math.min(Q.trIndex,T.trIndex);K=Math.max(Q.trIndex,!
 T.trIndex);for(J=R;J<=K;J++){this.unselectCell(O[J].cells[T.co!
 lKeyInde
x]);}}}else{if(I==37){if(Q.colKeyIndex>=T.colKeyIndex){if(T.colKeyIndex>0){R=Q.trIndex;K=T.trIndex;if(R>K){for(J=R;J>=K;J--){P=O[J].cells[T.colKeyIndex-1];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=O[J].cells[T.colKeyIndex-1];this.selectCell(P);}}}}else{R=Math.min(Q.trIndex,T.trIndex);K=Math.max(Q.trIndex,T.trIndex);for(J=R;J<=K;J++){this.unselectCell(O[J].cells[T.colKeyIndex]);}}}}}}}},_handleCellRangeSelectionByMouse:function(W){var X=W.target;var I=this.getTdEl(X);if(I){var V=W.event;var M=V.shiftKey;var J=V.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&V.metaKey);var O=this.getTrEl(I);var N=this.getTrIndex(O);var R=this.getColumn(I);var S=R.getKeyIndex();var Q=this.getRecord(O);var Z=this._oRecordSet.getRecordIndex(Q);var L={record:Q,column:R};var P=this._getSelectionAnchor();var K=this.getTbodyEl().rows;var Y,U,T;if(M&&J){if(P){if(this.isSelected(P.cell)){if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex+1;U<=S;U++){this.selectCell(O.c!
 ells[U]);}}else{if(S<P.colKeyIndex){for(U=S;U<P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex<Z){for(U=P.colKeyIndex+1;U<O.cells.length;U++){this.selectCell(O.cells[U]);}for(U=P.trIndex+1;U<N;U++){for(T=0;T<K[U].cells.length;T++){this.selectCell(K[U].cells[T]);}}for(U=0;U<=S;U++){this.selectCell(O.cells[U]);}}else{for(U=S;U<O.cells.length;U++){this.selectCell(O.cells[U]);}for(U=N+1;U<P.trIndex;U++){for(T=0;T<K[U].cells.length;T++){this.selectCell(K[U].cells[T]);}}for(U=0;U<P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex+1;U<S;U++){this.unselectCell(O.cells[U]);}}else{if(S<P.colKeyIndex){for(U=S+1;U<P.colKeyIndex;U++){this.unselectCell(O.cells[U]);}}}}if(P.recordIndex<Z){for(U=P.trIndex;U<=N;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex===P.trIndex){if(T>P.colKeyIndex){this.unselectCell(Y.cells[T]);
-}}else{if(Y.sectionRowIndex===N){if(T<S){this.unselectCell(Y.cells[T]);}}else{this.unselectCell(Y.cells[T]);}}}}}else{for(U=N;U<=P.trIndex;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==N){if(T>S){this.unselectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==P.trIndex){if(T<P.colKeyIndex){this.unselectCell(Y.cells[T]);}}else{this.unselectCell(Y.cells[T]);}}}}}this.selectCell(I);}}else{this._oAnchorCell=L;if(this.isSelected(L)){this.unselectCell(L);}else{this.selectCell(L);}}}else{if(M){this.unselectAllCells();if(P){if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex;U<=S;U++){this.selectCell(O.cells[U]);}}else{if(S<P.colKeyIndex){for(U=S;U<=P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex<Z){for(U=P.trIndex;U<=N;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==P.trIndex){if(T>=P.colKeyIndex){this.selectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==N){if(T<=S){this.selectCell(Y.cells[T]);}}else{this.selectCell(Y.!
 cells[T]);}}}}}else{for(U=N;U<=P.trIndex;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==N){if(T>=S){this.selectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==P.trIndex){if(T<=P.colKeyIndex){this.selectCell(Y.cells[T]);}}else{this.selectCell(Y.cells[T]);}}}}}}}else{this._oAnchorCell=L;this.selectCell(L);}}else{if(J){this._oAnchorCell=L;if(this.isSelected(L)){this.unselectCell(L);}else{this.selectCell(L);}}else{this._handleSingleCellSelectionByMouse(W);}}}}},_handleCellRangeSelectionByKey:function(M){var I=G.getCharCode(M);var Q=M.shiftKey;if((I==9)||!Q){this._handleSingleCellSelectionByKey(M);return ;}if((I>36)&&(I<41)){var R=this._getSelectionTrigger();if(!R){return null;}G.stopEvent(M);var P=this._getSelectionAnchor(R);var J,K,O;var N=this.getTbodyEl().rows;var L=R.el.parentNode;if(I==40){K=this.getNextTrEl(R.el);if(P.recordIndex<=R.recordIndex){for(J=R.colKeyIndex+1;J<L.cells.length;J++){O=L.cells[J];this.selectCell(O);}if(K){for(J=0;J<=R.colKeyIndex;J++){!
 O=K.cells[J];this.selectCell(O);}}}else{for(J=R.colKeyIndex;J<!
 L.cells.
length;J++){this.unselectCell(L.cells[J]);}if(K){for(J=0;J<R.colKeyIndex;J++){this.unselectCell(K.cells[J]);}}}}else{if(I==38){K=this.getPreviousTrEl(R.el);if(P.recordIndex>=R.recordIndex){for(J=R.colKeyIndex-1;J>-1;J--){O=L.cells[J];this.selectCell(O);}if(K){for(J=L.cells.length-1;J>=R.colKeyIndex;J--){O=K.cells[J];this.selectCell(O);}}}else{for(J=R.colKeyIndex;J>-1;J--){this.unselectCell(L.cells[J]);}if(K){for(J=L.cells.length-1;J>R.colKeyIndex;J--){this.unselectCell(K.cells[J]);}}}}else{if(I==39){K=this.getNextTrEl(R.el);if(P.recordIndex<R.recordIndex){if(R.colKeyIndex<L.cells.length-1){O=L.cells[R.colKeyIndex+1];this.selectCell(O);}else{if(K){O=K.cells[0];this.selectCell(O);}}}else{if(P.recordIndex>R.recordIndex){this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex<L.cells.length-1){}else{}}else{if(P.colKeyIndex<=R.colKeyIndex){if(R.colKeyIndex<L.cells.length-1){O=L.cells[R.colKeyIndex+1];this.selectCell(O);}else{if(R.trIndex<N.length-1){O=K.cells[0];this.selectCel!
 l(O);}}}else{this.unselectCell(L.cells[R.colKeyIndex]);}}}}else{if(I==37){K=this.getPreviousTrEl(R.el);if(P.recordIndex<R.recordIndex){this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex>0){}else{}}else{if(P.recordIndex>R.recordIndex){if(R.colKeyIndex>0){O=L.cells[R.colKeyIndex-1];this.selectCell(O);}else{if(R.trIndex>0){O=K.cells[K.cells.length-1];this.selectCell(O);}}}else{if(P.colKeyIndex>=R.colKeyIndex){if(R.colKeyIndex>0){O=L.cells[R.colKeyIndex-1];this.selectCell(O);}else{if(R.trIndex>0){O=K.cells[K.cells.length-1];this.selectCell(O);}}}else{this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex>0){}else{}}}}}}}}}},_handleSingleCellSelectionByMouse:function(N){var O=N.target;var K=this.getTdEl(O);if(K){var J=this.getTrEl(K);var I=this.getRecord(J);var M=this.getColumn(K);var L={record:I,column:M};this._oAnchorCell=L;this.unselectAllCells();this.selectCell(L);}},_handleSingleCellSelectionByKey:function(M){var I=G.getCharCode(M);if((I==9)||((I>36)&&(I<41))){v!
 ar K=M.shiftKey;var J=this._getSelectionTrigger();if(!J){retur!
 n null;}
var L;if(I==40){L=this.getBelowTdEl(J.el);if(L===null){L=J.el;}}else{if(I==38){L=this.getAboveTdEl(J.el);if(L===null){L=J.el;}}else{if((I==39)||(!K&&(I==9))){L=this.getNextTdEl(J.el);if(L===null){return ;}}else{if((I==37)||(K&&(I==9))){L=this.getPreviousTdEl(J.el);if(L===null){return ;}}}}}G.stopEvent(M);this.unselectAllCells();this.selectCell(L);this._oAnchorCell={record:this.getRecord(L),column:this.getColumn(L)};}},getSelectedTrEls:function(){return C.getElementsByClassName(D.CLASS_SELECTED,"tr",this._elTbody);},selectRow:function(O){var N,I;if(O instanceof YAHOO.widget.Record){N=this._oRecordSet.getRecord(O);I=this.getTrEl(N);}else{if(H.isNumber(O)){N=this.getRecord(O);I=this.getTrEl(N);}else{I=this.getTrEl(O);N=this.getRecord(I);}}if(N){var M=this._aSelections||[];var L=N.getId();var K=-1;if(M.indexOf){K=M.indexOf(L);}else{for(var J=M.length-1;J>-1;J--){if(M[J]===L){K=J;break;}}}if(K>-1){M.splice(K,1);}M.push(L);this._aSelections=M;if(!this._oAnchorRecord){this._oAnchor!
 Record=N;}if(I){C.addClass(I,D.CLASS_SELECTED);}this.fireEvent("rowSelectEvent",{record:N,el:I});}else{}},unselectRow:function(O){var I=this.getTrEl(O);var N;if(O instanceof YAHOO.widget.Record){N=this._oRecordSet.getRecord(O);}else{if(H.isNumber(O)){N=this.getRecord(O);}else{N=this.getRecord(I);}}if(N){var M=this._aSelections||[];var L=N.getId();var K=-1;if(M.indexOf){K=M.indexOf(L);}else{for(var J=M.length-1;J>-1;J--){if(M[J]===L){K=J;break;}}}if(K>-1){M.splice(K,1);this._aSelections=M;C.removeClass(I,D.CLASS_SELECTED);this.fireEvent("rowUnselectEvent",{record:N,el:I});return ;}}},unselectAllRows:function(){var J=this._aSelections||[],L,K=[];for(var I=J.length-1;I>-1;I--){if(H.isString(J[I])){L=J.splice(I,1);K[K.length]=this.getRecord(H.isArray(L)?L[0]:L);}}this._aSelections=J;this._unselectAllTrEls();this.fireEvent("unselectAllRowsEvent",{records:K});},_unselectAllTdEls:function(){var I=C.getElementsByClassName(D.CLASS_SELECTED,"td",this._elTbody);
-C.removeClass(I,D.CLASS_SELECTED);},getSelectedTdEls:function(){return C.getElementsByClassName(D.CLASS_SELECTED,"td",this._elTbody);},selectCell:function(I){var O=this.getTdEl(I);if(O){var N=this.getRecord(O);var L=this.getColumn(O.cellIndex).getKey();if(N&&L){var M=this._aSelections||[];var K=N.getId();for(var J=M.length-1;J>-1;J--){if((M[J].recordId===K)&&(M[J].columnKey===L)){M.splice(J,1);break;}}M.push({recordId:K,columnKey:L});this._aSelections=M;if(!this._oAnchorCell){this._oAnchorCell={record:N,column:this.getColumn(L)};}C.addClass(O,D.CLASS_SELECTED);this.fireEvent("cellSelectEvent",{record:N,column:this.getColumn(O.cellIndex),key:this.getColumn(O.cellIndex).getKey(),el:O});return ;}}},unselectCell:function(I){var N=this.getTdEl(I);if(N){var M=this.getRecord(N);var K=this.getColumn(N.cellIndex).getKey();if(M&&K){var L=this._aSelections||[];var O=M.getId();for(var J=L.length-1;J>-1;J--){if((L[J].recordId===O)&&(L[J].columnKey===K)){L.splice(J,1);this._aSelections=L!
 ;C.removeClass(N,D.CLASS_SELECTED);this.fireEvent("cellUnselectEvent",{record:M,column:this.getColumn(N.cellIndex),key:this.getColumn(N.cellIndex).getKey(),el:N});return ;}}}}},unselectAllCells:function(){var J=this._aSelections||[];for(var I=J.length-1;I>-1;I--){if(H.isObject(J[I])){J.splice(I,1);}}this._aSelections=J;this._unselectAllTdEls();this.fireEvent("unselectAllCellsEvent");},isSelected:function(N){if(N&&(N.ownerDocument==document)){return(C.hasClass(this.getTdEl(N),D.CLASS_SELECTED)||C.hasClass(this.getTrEl(N),D.CLASS_SELECTED));}else{var M,J,I;var L=this._aSelections;if(L&&L.length>0){if(N instanceof YAHOO.widget.Record){M=N;}else{if(H.isNumber(N)){M=this.getRecord(N);}}if(M){J=M.getId();if(L.indexOf){if(L.indexOf(J)>-1){return true;}}else{for(I=L.length-1;I>-1;I--){if(L[I]===J){return true;}}}}else{if(N.record&&N.column){J=N.record.getId();var K=N.column.getKey();for(I=L.length-1;I>-1;I--){if((L[I].recordId===J)&&(L[I].columnKey===K)){return true;}}}}}}return fa!
 lse;},getSelectedRows:function(){var I=[];var K=this._aSelecti!
 ons||[];
for(var J=0;J<K.length;J++){if(H.isString(K[J])){I.push(K[J]);}}return I;},getSelectedCells:function(){var J=[];var K=this._aSelections||[];for(var I=0;I<K.length;I++){if(K[I]&&H.isObject(K[I])){J.push(K[I]);}}return J;},getLastSelectedRecord:function(){var J=this._aSelections;if(J&&J.length>0){for(var I=J.length-1;I>-1;I--){if(H.isString(J[I])){return J[I];}}}},getLastSelectedCell:function(){var J=this._aSelections;if(J&&J.length>0){for(var I=J.length-1;I>-1;I--){if(J[I].recordId&&J[I].columnKey){return J[I];}}}},highlightRow:function(K){var I=this.getTrEl(K);if(I){var J=this.getRecord(I);C.addClass(I,D.CLASS_HIGHLIGHTED);this.fireEvent("rowHighlightEvent",{record:J,el:I});return ;}},unhighlightRow:function(K){var I=this.getTrEl(K);if(I){var J=this.getRecord(I);C.removeClass(I,D.CLASS_HIGHLIGHTED);this.fireEvent("rowUnhighlightEvent",{record:J,el:I});return ;}},highlightCell:function(I){var L=this.getTdEl(I);if(L){if(this._elLastHighlightedTd){this.unhighlightCell(this._elL!
 astHighlightedTd);}var K=this.getRecord(L);var J=this.getColumn(L.cellIndex).getKey();C.addClass(L,D.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=L;this.fireEvent("cellHighlightEvent",{record:K,column:this.getColumn(L.cellIndex),key:this.getColumn(L.cellIndex).getKey(),el:L});return ;}},unhighlightCell:function(I){var K=this.getTdEl(I);if(K){var J=this.getRecord(K);C.removeClass(K,D.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=null;this.fireEvent("cellUnhighlightEvent",{record:J,column:this.getColumn(K.cellIndex),key:this.getColumn(K.cellIndex).getKey(),el:K});return ;}},getCellEditor:function(){return this._oCellEditor;},showCellEditor:function(P,Q,L){P=this.getTdEl(P);if(P){L=this.getColumn(P);if(L&&L.editor){var J=this._oCellEditor;if(J){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(J.isActive){this.cancelCellEditor();}}}if(L.editor instanceof YAHOO.widget.BaseCellEditor){J=L.editor;var N=J.attach(this,P);if(N){J.move();N=this.doBeforeShowCellEditor(J)!
 ;if(N){J.show();this._oCellEditor=J;}}}else{if(!Q||!(Q instanc!
 eof YAHO
O.widget.Record)){Q=this.getRecord(P);}if(!L||!(L instanceof YAHOO.widget.Column)){L=this.getColumn(P);}if(Q&&L){if(!this._oCellEditor||this._oCellEditor.container){this._initCellEditorEl();}J=this._oCellEditor;J.cell=P;J.record=Q;J.column=L;J.validator=(L.editorOptions&&H.isFunction(L.editorOptions.validator))?L.editorOptions.validator:null;J.value=Q.getData(L.key);J.defaultValue=null;var K=J.container;var O=C.getX(P);var M=C.getY(P);if(isNaN(O)||isNaN(M)){O=P.offsetLeft+C.getX(this._elTbody.parentNode)-this._elTbody.scrollLeft;M=P.offsetTop+C.getY(this._elTbody.parentNode)-this._elTbody.scrollTop+this._elThead.offsetHeight;}K.style.left=O+"px";K.style.top=M+"px";this.doBeforeShowCellEditor(this._oCellEditor);K.style.display="";G.addListener(K,"keydown",function(S,R){if((S.keyCode==27)){R.cancelCellEditor();R.focusTbodyEl();}else{R.fireEvent("editorKeydownEvent",{editor:R._oCellEditor,event:S});}},this);var I;if(H.isString(L.editor)){switch(L.editor){case"checkbox":I=D.edit!
 Checkbox;break;case"date":I=D.editDate;break;case"dropdown":I=D.editDropdown;break;case"radio":I=D.editRadio;break;case"textarea":I=D.editTextarea;break;case"textbox":I=D.editTextbox;break;default:I=null;}}else{if(H.isFunction(L.editor)){I=L.editor;}}if(I){I(this._oCellEditor,this);if(!L.editorOptions||!L.editorOptions.disableBtns){this.showCellEditorBtns(K);}J.isActive=true;this.fireEvent("editorShowEvent",{editor:J});return ;}}}}}},_initCellEditorEl:function(){var I=document.createElement("div");I.id=this._sId+"-celleditor";I.style.display="none";I.tabIndex=0;C.addClass(I,D.CLASS_EDITOR);var K=C.getFirstChild(document.body);if(K){I=C.insertBefore(I,K);}else{I=document.body.appendChild(I);}var J={};J.container=I;J.value=null;J.isActive=false;this._oCellEditor=J;},doBeforeShowCellEditor:function(I){return true;},saveCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();
-}else{if(this._oCellEditor.isActive){var I=this._oCellEditor.value;var J=YAHOO.widget.DataTable._cloneObject(this._oCellEditor.record.getData(this._oCellEditor.column.key));if(this._oCellEditor.validator){I=this._oCellEditor.value=this._oCellEditor.validator.call(this,I,J,this._oCellEditor);if(I===null){this.resetCellEditor();this.fireEvent("editorRevertEvent",{editor:this._oCellEditor,oldData:J,newData:I});return ;}}this._oRecordSet.updateRecordValue(this._oCellEditor.record,this._oCellEditor.column.key,this._oCellEditor.value);this.formatCell(this._oCellEditor.cell.firstChild);this._oChainRender.add({method:function(){this.validateColumnWidths();},scope:this});this._oChainRender.run();this.resetCellEditor();this.fireEvent("editorSaveEvent",{editor:this._oCellEditor,oldData:J,newData:I});}}}},cancelCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(this._oCellEditor.isActive){this.resetCellEditor();this.fireEvent("e!
 ditorCancelEvent",{editor:this._oCellEditor});}}}},destroyCellEditor:function(){if(this._oCellEditor){this._oCellEditor.destroy();this._oCellEditor=null;}},_onEditorShowEvent:function(I){this.fireEvent("editorShowEvent",I);},_onEditorKeydownEvent:function(I){this.fireEvent("editorKeydownEvent",I);},_onEditorRevertEvent:function(I){this.fireEvent("editorRevertEvent",I);},_onEditorSaveEvent:function(I){this.fireEvent("editorSaveEvent",I);},_onEditorCancelEvent:function(I){this.fireEvent("editorCancelEvent",I);},_onEditorBlurEvent:function(I){this.fireEvent("editorBlurEvent",I);},_onEditorBlockEvent:function(I){this.fireEvent("editorBlockEvent",I);},_onEditorUnblockEvent:function(I){this.fireEvent("editorUnblockEvent",I);},onEditorBlurEvent:function(I){if(I.editor.disableBtns){if(I.editor.save){I.editor.save();}}else{if(I.editor.cancel){I.editor.cancel();}}},onEditorBlockEvent:function(I){this.disable();},onEditorUnblockEvent:function(I){this.undisable();},doBeforeLoadData:fun!
 ction(I,J,K){return true;},onEventSortColumn:function(K){var I!
 =K.event
;var M=K.target;var J=this.getThEl(M)||this.getTdEl(M);if(J){var L=this.getColumn(J);if(L.sortable){G.stopEvent(I);this.sortColumn(L);}}else{}},onEventSelectColumn:function(I){this.selectColumn(I.target);},onEventHighlightColumn:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightColumn(I.target);}},onEventUnhighlightColumn:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.unhighlightColumn(I.target);}},onEventSelectRow:function(J){var I=this.get("selectionMode");if(I=="single"){this._handleSingleSelectionByMouse(J);}else{this._handleStandardSelectionByMouse(J);}},onEventSelectCell:function(J){var I=this.get("selectionMode");if(I=="cellblock"){this._handleCellBlockSelectionByMouse(J);}else{if(I=="cellrange"){this._handleCellRangeSelectionByMouse(J);}else{this._handleSingleCellSelectionByMouse(J);}}},onEventHighlightRow:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightRow(I.target);}},onEven!
 tUnhighlightRow:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.unhighlightRow(I.target);}},onEventHighlightCell:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightCell(I.target);}},onEventUnhighlightCell:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.unhighlightCell(I.target);}},onEventFormatCell:function(I){var L=I.target;var J=this.getTdEl(L);if(J){var K=this.getColumn(J.cellIndex);this.formatCell(J.firstChild,this.getRecord(J),K);}else{}},onEventShowCellEditor:function(I){this.showCellEditor(I.target);},onEventSaveCellEditor:function(I){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();}else{this.saveCellEditor();}}},onEventCancelCellEditor:function(I){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{this.cancelCellEditor();}}},onDataReturnInitializeTable:function(I,J,K){if((this instanceof D)&&this._sId){this.initializeTable();thi!
 s.onDataReturnSetRows(I,J,K);}},onDataReturnReplaceRows:functi!
 on(M,L,N
){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:M,response:L,payload:N});var J=this.doBeforeLoadData(M,L,N),K=this.get("paginator"),I=0;if(J&&L&&!L.error&&H.isArray(L.results)){this._oRecordSet.reset();if(this.get("dynamicData")){if(N&&N.pagination&&H.isNumber(N.pagination.recordOffset)){I=N.pagination.recordOffset;}else{if(K){I=K.getStartIndex();}}}this._oRecordSet.setRecords(L.results,I|0);this._handleDataReturnPayload(M,L,N);this.render();}else{if(J&&L.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnAppendRows:function(J,K,L){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:J,response:K,payload:L});var I=this.doBeforeLoadData(J,K,L);if(I&&K&&!K.error&&H.isArray(K.results)){this.addRows(K.results);this._handleDataReturnPayload(J,K,L);}else{if(I&&K.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnInsertRows:function(J,K,L){if((this instanceof D)&&t!
 his._sId){this.fireEvent("dataReturnEvent",{request:J,response:K,payload:L});var I=this.doBeforeLoadData(J,K,L);if(I&&K&&!K.error&&H.isArray(K.results)){this.addRows(K.results,L.insertIndex|0);this._handleDataReturnPayload(J,K,L);}else{if(I&&K.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnSetRows:function(M,L,N){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:M,response:L,payload:N});var J=this.doBeforeLoadData(M,L,N),K=this.get("paginator"),I=0;if(J&&L&&!L.error&&H.isArray(L.results)){if(this.get("dynamicData")){if(N&&N.pagination&&H.isNumber(N.pagination.recordOffset)){I=N.pagination.recordOffset;}else{if(K){I=K.getStartIndex();}}}this._oRecordSet.setRecords(L.results,I|0);this._handleDataReturnPayload(M,L,N);this.render();}else{if(J&&L.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}else{}},handleDataReturnPayload:function(J,I,K){return K;
-},_handleDataReturnPayload:function(K,J,L){L=this.handleDataReturnPayload(K,J,L);if(L){var I=this.get("paginator");if(I){if(this.get("dynamicData")){if(H.isNumber(L.totalRecords)){I.set("totalRecords",L.totalRecords);}}else{I.set("totalRecords",this._oRecordSet.getLength());}if(H.isObject(L.pagination)){I.set("rowsPerPage",L.pagination.rowsPerPage);I.set("recordOffset",L.pagination.recordOffset);}}if(L.sortedBy){this.set("sortedBy",L.sortedBy);}else{if(L.sorting){this.set("sortedBy",L.sorting);}}}},showCellEditorBtns:function(K){var L=K.appendChild(document.createElement("div"));C.addClass(L,D.CLASS_BUTTON);var J=L.appendChild(document.createElement("button"));C.addClass(J,D.CLASS_DEFAULT);J.innerHTML="OK";G.addListener(J,"click",function(N,M){M.onEventSaveCellEditor(N,M);M.focusTbodyEl();},this,true);var I=L.appendChild(document.createElement("button"));I.innerHTML="Cancel";G.addListener(I,"click",function(N,M){M.onEventCancelCellEditor(N,M);M.focusTbodyEl();},this,true);}!
 ,resetCellEditor:function(){var I=this._oCellEditor.container;I.style.display="none";G.purgeElement(I,true);I.innerHTML="";this._oCellEditor.value=null;this._oCellEditor.isActive=false;},getBody:function(){return this.getTbodyEl();},getCell:function(I){return this.getTdEl(I);},getRow:function(I){return this.getTrEl(I);},refreshView:function(){this.render();},select:function(J){if(!H.isArray(J)){J=[J];}for(var I=0;I<J.length;I++){this.selectRow(J[I]);}},onEventEditCell:function(I){this.onEventShowCellEditor(I);},_syncColWidths:function(){this.validateColumnWidths();}});D.prototype.onDataReturnSetRecords=D.prototype.onDataReturnSetRows;D.prototype.onPaginatorChange=D.prototype.onPaginatorChangeRequest;D.formatTheadCell=function(){};D.editCheckbox=function(){};D.editDate=function(){};D.editDropdown=function(){};D.editRadio=function(){};D.editTextarea=function(){};D.editTextbox=function(){};})();(function(){var C=YAHOO.lang,F=YAHOO.util,E=YAHOO.widget,A=YAHOO.env.ua,D=F.Dom,J=F!
 .Event,I=F.DataSourceBase,G=E.DataTable,B=E.Paginator;E.Scroll!
 ingDataT
able=function(N,M,K,L){L=L||{};if(L.scrollable){L.scrollable=false;}E.ScrollingDataTable.superclass.constructor.call(this,N,M,K,L);this.subscribe("columnShowEvent",this._onColumnChange);};var H=E.ScrollingDataTable;C.augmentObject(H,{CLASS_HEADER:"yui-dt-hd",CLASS_BODY:"yui-dt-bd"});C.extend(H,G,{_elHdContainer:null,_elHdTable:null,_elBdContainer:null,_elBdThead:null,_elTmpContainer:null,_elTmpTable:null,_bScrollbarX:null,initAttributes:function(K){K=K||{};H.superclass.initAttributes.call(this,K);this.setAttributeConfig("width",{value:null,validator:C.isString,method:function(L){if(this._elHdContainer&&this._elBdContainer){this._elHdContainer.style.width=L;this._elBdContainer.style.width=L;this._syncScrollX();this._syncScrollOverhang();}}});this.setAttributeConfig("height",{value:null,validator:C.isString,method:function(L){if(this._elHdContainer&&this._elBdContainer){this._elBdContainer.style.height=L;this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();}}});t!
 his.setAttributeConfig("COLOR_COLUMNFILLER",{value:"#F2F2F2",validator:C.isString,method:function(L){this._elHdContainer.style.backgroundColor=L;}});},_initDomElements:function(K){this._initContainerEl(K);if(this._elContainer&&this._elHdContainer&&this._elBdContainer){this._initTableEl();if(this._elHdTable&&this._elTable){this._initColgroupEl(this._elHdTable);this._initTheadEl(this._elHdTable,this._elTable);this._initTbodyEl(this._elTable);this._initMsgTbodyEl(this._elTable);}}if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody||!this._elHdTable||!this._elBdThead){return false;}else{return true;}},_destroyContainerEl:function(K){D.removeClass(K,G.CLASS_SCROLLABLE);H.superclass._destroyContainerEl.call(this,K);this._elHdContainer=null;this._elBdContainer=null;},_initContainerEl:function(L){H.superclass._initContainerEl.call(this,L);if(this._elContainer){L=this._elContainer;D.addClass(L,G.CLASS_SCROLLABLE);var K=document!
 .createElement("div");K.style.width=this.get("width")||"";K.st!
 yle.back
groundColor=this.get("COLOR_COLUMNFILLER");D.addClass(K,H.CLASS_HEADER);this._elHdContainer=K;L.appendChild(K);var M=document.createElement("div");M.style.width=this.get("width")||"";M.style.height=this.get("height")||"";D.addClass(M,H.CLASS_BODY);J.addListener(M,"scroll",this._onScroll,this);this._elBdContainer=M;L.appendChild(M);}},_initCaptionEl:function(K){},_destroyHdTableEl:function(){var K=this._elHdTable;if(K){J.purgeElement(K,true);K.parentNode.removeChild(K);this._elBdThead=null;}},_initTableEl:function(){if(this._elHdContainer){this._destroyHdTableEl();this._elHdTable=this._elHdContainer.appendChild(document.createElement("table"));}H.superclass._initTableEl.call(this,this._elBdContainer);},_initTheadEl:function(L,K){L=L||this._elHdTable;K=K||this._elTable;this._initBdTheadEl(K);H.superclass._initTheadEl.call(this,L);},_initThEl:function(L,K){H.superclass._initThEl.call(this,L,K);L.id=this.getId()+"-fixedth-"+K.getSanitizedKey();},_destroyBdTheadEl:function(){var !
 K=this._elBdThead;if(K){var L=K.parentNode;J.purgeElement(K,true);L.removeChild(K);this._elBdThead=null;this._destroyColumnHelpers();}},_initBdTheadEl:function(S){if(S){this._destroyBdTheadEl();var O=S.insertBefore(document.createElement("thead"),S.firstChild);var U=this._oColumnSet,T=U.tree,N,K,R,P,M,L,Q;for(P=0,L=T.length;P<L;P++){K=O.appendChild(document.createElement("tr"));for(M=0,Q=T[P].length;M<Q;M++){R=T[P][M];N=K.appendChild(document.createElement("th"));this._initBdThEl(N,R,P,M);}}this._elBdThead=O;}},_initBdThEl:function(N,M){N.id=this.getId()+"-th-"+M.getSanitizedKey();N.rowSpan=M.getRowspan();N.colSpan=M.getColspan();if(M.abbr){N.abbr=M.abbr;}var L=M.getKey();var K=C.isValue(M.label)?M.label:L;N.innerHTML=K;},_initTbodyEl:function(K){H.superclass._initTbodyEl.call(this,K);K.style.marginTop="-"+this._elTbody.offsetTop+"px";},_focusEl:function(L){L=L||this._elTbody;var K=this;this._storeScrollPositions();
-setTimeout(function(){setTimeout(function(){try{L.focus();K._restoreScrollPositions();}catch(M){}},0);},0);},_runRenderChain:function(){this._storeScrollPositions();this._oChainRender.run();},_storeScrollPositions:function(){this._nScrollTop=this._elBdContainer.scrollTop;this._nScrollLeft=this._elBdContainer.scrollLeft;},_restoreScrollPositions:function(){if(this._nScrollTop){this._elBdContainer.scrollTop=this._nScrollTop;this._nScrollTop=null;}if(this._nScrollLeft){this._elBdContainer.scrollLeft=this._nScrollLeft;this._nScrollLeft=null;}},_validateColumnWidth:function(N,K){if(!N.width&&!N.hidden){var P=N.getThEl();if(N._calculatedWidth){this._setColumnWidth(N,"auto","visible");}if(P.offsetWidth!==K.offsetWidth){var M=(P.offsetWidth>K.offsetWidth)?N.getThLinerEl():K.firstChild;var L=Math.max(0,(M.offsetWidth-(parseInt(D.getStyle(M,"paddingLeft"),10)|0)-(parseInt(D.getStyle(M,"paddingRight"),10)|0)),N.minWidth);var O="visible";if((N.maxAutoWidth>0)&&(L>N.maxAutoWidth)){L=N.m!
 axAutoWidth;O="hidden";}this._elTbody.style.display="none";this._setColumnWidth(N,L+"px",O);N._calculatedWidth=L;this._elTbody.style.display="";}}},validateColumnWidths:function(S){var U=this._oColumnSet.keys,W=U.length,L=this.getFirstTrEl();if(A.ie){this._setOverhangValue(1);}if(U&&L&&(L.childNodes.length===W)){var M=this.get("width");if(M){this._elHdContainer.style.width="";this._elBdContainer.style.width="";}this._elContainer.style.width="";if(S&&C.isNumber(S.getKeyIndex())){this._validateColumnWidth(S,L.childNodes[S.getKeyIndex()]);}else{var T,K=[],O,Q,R;for(Q=0;Q<W;Q++){S=U[Q];if(!S.width&&!S.hidden&&S._calculatedWidth){K[K.length]=S;}}this._elTbody.style.display="none";for(Q=0,R=K.length;Q<R;Q++){this._setColumnWidth(K[Q],"auto","visible");}this._elTbody.style.display="";K=[];for(Q=0;Q<W;Q++){S=U[Q];T=L.childNodes[Q];if(!S.width&&!S.hidden){var N=S.getThEl();if(N.offsetWidth!==T.offsetWidth){var V=(N.offsetWidth>T.offsetWidth)?S.getThLinerEl():T.firstChild;var P=Math.!
 max(0,(V.offsetWidth-(parseInt(D.getStyle(V,"paddingLeft"),10)!
 |0)-(par
seInt(D.getStyle(V,"paddingRight"),10)|0)),S.minWidth);var X="visible";if((S.maxAutoWidth>0)&&(P>S.maxAutoWidth)){P=S.maxAutoWidth;X="hidden";}K[K.length]=[S,P,X];}}}this._elTbody.style.display="none";for(Q=0,R=K.length;Q<R;Q++){O=K[Q];this._setColumnWidth(O[0],O[1]+"px",O[2]);O[0]._calculatedWidth=O[1];}this._elTbody.style.display="";}if(M){this._elHdContainer.style.width=M;this._elBdContainer.style.width=M;}}this._syncScroll();this._restoreScrollPositions();},_syncScroll:function(){this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();if(A.opera){this._elHdContainer.scrollLeft=this._elBdContainer.scrollLeft;if(!this.get("width")){document.body.style+="";}}},_syncScrollY:function(){var K=this._elTbody,L=this._elBdContainer;if(!this.get("width")){this._elContainer.style.width=(L.scrollHeight>L.clientHeight)?(K.parentNode.clientWidth+19)+"px":(K.parentNode.clientWidth+2)+"px";}},_syncScrollX:function(){var K=this._elTbody,L=this._elBdContainer;if(!this.get("heigh!
 t")&&(A.ie)){L.style.height=(L.scrollWidth>L.offsetWidth)?(K.parentNode.offsetHeight+18)+"px":K.parentNode.offsetHeight+"px";}if(this._elTbody.rows.length===0){this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";}else{this._elMsgTbody.parentNode.style.width="";}},_syncScrollOverhang:function(){var L=this._elBdContainer,K=1;if((L.scrollHeight>L.clientHeight)&&(L.scrollWidth>L.clientWidth)){K=18;}this._setOverhangValue(K);},_setOverhangValue:function(N){var P=this._oColumnSet.headers[this._oColumnSet.headers.length-1]||[],L=P.length,K=this._sId+"-fixedth-",O=N+"px solid "+this.get("COLOR_COLUMNFILLER");this._elThead.style.display="none";for(var M=0;M<L;M++){D.get(K+P[M]).style.borderRight=O;}this._elThead.style.display="";},getHdContainerEl:function(){return this._elHdContainer;},getBdContainerEl:function(){return this._elBdContainer;},getHdTableEl:function(){return this._elHdTable;},getBdTableEl:function(){return this._elTable;},disable:func!
 tion(){var K=this._elMask;K.style.width=this._elBdContainer.of!
 fsetWidt
h+"px";K.style.height=this._elHdContainer.offsetHeight+this._elBdContainer.offsetHeight+"px";K.style.display="";this.fireEvent("disableEvent");},removeColumn:function(M){var K=this._elHdContainer.scrollLeft;var L=this._elBdContainer.scrollLeft;M=H.superclass.removeColumn.call(this,M);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=L;return M;},insertColumn:function(N,L){var K=this._elHdContainer.scrollLeft;var M=this._elBdContainer.scrollLeft;var O=H.superclass.insertColumn.call(this,N,L);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=M;return O;},reorderColumn:function(N,L){var K=this._elHdContainer.scrollLeft;var M=this._elBdContainer.scrollLeft;var O=H.superclass.reorderColumn.call(this,N,L);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=M;return O;},setColumnWidth:function(L,K){L=this.getColumn(L);if(L){if(C.isNumber(K)){K=(K>L.minWidth)?K:L.minWidth;L.width=K;this._setColumnWidth(L,K+"px");this._syncScroll();this.fireEve!
 nt("columnSetWidthEvent",{column:L,width:K});return ;}else{if(K===null){L.width=K;this._setColumnWidth(L,"auto");this.validateColumnWidths(L);this.fireEvent("columnUnsetWidthEvent",{column:L});return ;}}}},showTableMessage:function(O,K){var P=this._elMsgTd;if(C.isString(O)){P.firstChild.innerHTML=O;}if(C.isString(K)){D.addClass(P.firstChild,K);}var N=this.getTheadEl();var L=N.parentNode;var M=L.offsetWidth;this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:O,className:K});},_onColumnChange:function(K){var L=(K.column)?K.column:(K.editor)?K.editor.column:null;this._storeScrollPositions();this.validateColumnWidths(L);},_onScroll:function(M,L){L._elHdContainer.scrollLeft=L._elBdContainer.scrollLeft;if(L._oCellEditor&&L._oCellEditor.isActive){L.fireEvent("editorBlurEvent",{editor:L._oCellEditor});L.cancelCellEditor();
-}var N=J.getTarget(M);var K=N.nodeName.toLowerCase();L.fireEvent("tableScrollEvent",{event:M,target:N});},_onTheadKeydown:function(N,L){if(J.getCharCode(N)===9){setTimeout(function(){if((L instanceof H)&&L._sId){L._elBdContainer.scrollLeft=L._elHdContainer.scrollLeft;}},0);}var O=J.getTarget(N);var K=O.nodeName.toLowerCase();var M=true;while(O&&(K!="table")){switch(K){case"body":return ;case"input":case"textarea":break;case"thead":M=L.fireEvent("theadKeyEvent",{target:O,event:N});break;default:break;}if(M===false){return ;}else{O=O.parentNode;if(O){K=O.nodeName.toLowerCase();}}}L.fireEvent("tableKeyEvent",{target:(O||L._elContainer),event:N});}});})();(function(){var C=YAHOO.lang,F=YAHOO.util,E=YAHOO.widget,B=YAHOO.env.ua,D=F.Dom,I=F.Event,H=E.DataTable;E.BaseCellEditor=function(K,J){this._sId=this._sId||"yui-ceditor"+YAHOO.widget.BaseCellEditor._nCount++;this._sType=K;this._initConfigs(J);this._initEvents();this.render();};var A=E.BaseCellEditor;C.augmentObject(A,{_nCount:!
 0,CLASS_CELLEDITOR:"yui-ceditor"});A.prototype={_sId:null,_sType:null,_oDataTable:null,_oColumn:null,_oRecord:null,_elTd:null,_elContainer:null,_elCancelBtn:null,_elSaveBtn:null,_initConfigs:function(K){if(K&&YAHOO.lang.isObject(K)){for(var J in K){if(J){this[J]=K[J];}}}},_initEvents:function(){this.createEvent("showEvent");this.createEvent("keydownEvent");this.createEvent("invalidDataEvent");this.createEvent("revertEvent");this.createEvent("saveEvent");this.createEvent("cancelEvent");this.createEvent("blurEvent");this.createEvent("blockEvent");this.createEvent("unblockEvent");},asyncSubmitter:null,value:null,defaultValue:null,validator:null,isActive:false,LABEL_SAVE:"Save",LABEL_CANCEL:"Cancel",disableBtns:false,toString:function(){return"CellEditor instance "+this._sId;},getId:function(){return this._sId;},getDataTable:function(){return this._oDataTable;},getColumn:function(){return this._oColumn;},getRecord:function(){return this._oRecord;},getTdEl:function(){return this!
 ._elTd;},getContainerEl:function(){return this._elContainer;},!
 destroy:
function(){this.unsubscribeAll();var K=this.getColumn();if(K){this.getColumn().editor=null;}var J=this.getContainerEl();I.purgeElement(J,true);J.parentNode.removeChild(J);},render:function(){var J=document.createElement("div");J.id=this.getId()+"-container";J.style.display="none";J.tabIndex=0;J.className=H.CLASS_EDITOR;document.body.insertBefore(J,document.body.firstChild);this._elContainer=J;I.addListener(J,"keydown",function(L,K){if((L.keyCode==27)){K.cancel();}K.fireEvent("keydownEvent",{editor:this,event:L});},this);this.renderForm();if(!this.disableBtns){this.renderBtns();}this.doAfterRender();},renderBtns:function(){var L=this.getContainerEl().appendChild(document.createElement("div"));L.className=H.CLASS_BUTTON;var K=L.appendChild(document.createElement("button"));K.className=H.CLASS_DEFAULT;K.innerHTML=this.LABEL_SAVE;I.addListener(K,"click",function(M){this.save();},this,true);this._elSaveBtn=K;var J=L.appendChild(document.createElement("button"));J.innerHTML=this.L!
 ABEL_CANCEL;I.addListener(J,"click",function(M){this.cancel();},this,true);this._elCancelBtn=J;},attach:function(N,L){if(N instanceof YAHOO.widget.DataTable){this._oDataTable=N;L=N.getTdEl(L);if(L){this._elTd=L;var M=N.getColumn(L);if(M){this._oColumn=M;var J=N.getRecord(L);if(J){this._oRecord=J;var K=J.getData(this.getColumn().getKey());this.value=(K!==undefined)?K:this.defaultValue;return true;}}}}return false;},move:function(){var M=this.getContainerEl(),L=this.getTdEl(),J=D.getX(L),N=D.getY(L);if(isNaN(J)||isNaN(N)){var K=this.getDataTable().getTbodyEl();J=L.offsetLeft+D.getX(K.parentNode)-K.scrollLeft;N=L.offsetTop+D.getY(K.parentNode)-K.scrollTop+this.getDataTable().getTheadEl().offsetHeight;}M.style.left=J+"px";M.style.top=N+"px";},show:function(){this.resetForm();this.isActive=true;this.getContainerEl().style.display="";this.focus();this.fireEvent("showEvent",{editor:this});},block:function(){this.fireEvent("blockEvent",{editor:this});},unblock:function(){this.fireE!
 vent("unblockEvent",{editor:this});},save:function(){var K=thi!
 s.getInp
utValue();var L=K;if(this.validator){L=this.validator.call(this.getDataTable(),K,this.value,this);if(L===undefined){this.resetForm();this.fireEvent("invalidDataEvent",{editor:this,oldData:this.value,newData:K});return ;}}var M=this;var J=function(O,N){var P=YAHOO.widget.DataTable._cloneObject(M.value);if(O){M.value=N;M.getDataTable().updateCell(M.getRecord(),M.getColumn(),N);M.getContainerEl().style.display="none";M.isActive=false;M.getDataTable()._oCellEditor=null;M.fireEvent("saveEvent",{editor:M,oldData:P,newData:M.value});}else{M.resetForm();M.fireEvent("revertEvent",{editor:M,oldData:P,newData:N});}M.unblock();};this.block();if(C.isFunction(this.asyncSubmitter)){this.asyncSubmitter.call(this,J,L);}else{J(true,L);}},cancel:function(){if(this.isActive){this.getContainerEl().style.display="none";this.isActive=false;this.getDataTable._oCellEditor=null;this.fireEvent("cancelEvent",{editor:this});}else{}},renderForm:function(){},doAfterRender:function(){},handleDisabledBtns:f!
 unction(){},resetForm:function(){},focus:function(){},getInputValue:function(){}};C.augmentProto(A,F.EventProvider);E.CheckboxCellEditor=function(J){this._sId="yui-checkboxceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.CheckboxCellEditor.superclass.constructor.call(this,"checkbox",J);};C.extend(E.CheckboxCellEditor,A,{checkboxOptions:null,checkboxes:null,value:null,renderForm:function(){if(C.isArray(this.checkboxOptions)){var M,N,P,K,L,J;for(L=0,J=this.checkboxOptions.length;L<J;L++){M=this.checkboxOptions[L];N=C.isValue(M.value)?M.value:M;P=this.getId()+"-chk"+L;this.getContainerEl().innerHTML+='<input type="checkbox"'+' id="'+P+'"'+' value="'+N+'" />';K=this.getContainerEl().appendChild(document.createElement("label"));K.htmlFor=P;K.innerHTML=C.isValue(M.label)?M.label:M;}var O=[];for(L=0;L<J;L++){O[O.length]=this.getContainerEl().childNodes[L*2];}this.checkboxes=O;if(this.disableBtns){this.handleDisabledBtns();
-}}else{}},handleDisabledBtns:function(){I.addListener(this.getContainerEl(),"click",function(J){if(I.getTarget(J).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){var N=C.isArray(this.value)?this.value:[this.value];for(var M=0,L=this.checkboxes.length;M<L;M++){this.checkboxes[M].checked=false;for(var K=0,J=N.length;K<J;K++){if(this.checkboxes[M].value===N[K]){this.checkboxes[M].checked=true;}}}},focus:function(){this.checkboxes[0].focus();},getInputValue:function(){var J=[];for(var L=0,K=this.checkboxes.length;L<K;L++){if(this.checkboxes[L].checked){J[J.length]=this.checkboxes[L].value;}}return J;}});C.augmentObject(E.CheckboxCellEditor,A);E.DateCellEditor=function(J){this._sId="yui-dateceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.DateCellEditor.superclass.constructor.call(this,"date",J);};C.extend(E.DateCellEditor,A,{calendar:null,defaultValue:new Date(),renderForm:function(){if(YAHOO.widget.Calendar){var K=this.getContainerEl().appendC!
 hild(document.createElement("div"));K.id=this.getId()+"-dateContainer";var L=new YAHOO.widget.Calendar(this.getId()+"-date",K.id);L.render();K.style.cssFloat="none";if(B.ie){var J=this.getContainerEl().appendChild(document.createElement("br"));J.style.clear="both";}this.calendar=L;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){this.calendar.selectEvent.subscribe(function(J){this.save();},this,true);},resetForm:function(){var K=this.value;var J=(K.getMonth()+1)+"/"+K.getDate()+"/"+K.getFullYear();this.calendar.cfg.setProperty("selected",J,false);this.calendar.render();},focus:function(){},getInputValue:function(){return this.calendar.getSelectedDates()[0];}});C.augmentObject(E.DateCellEditor,A);E.DropdownCellEditor=function(J){this._sId="yui-dropdownceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.DropdownCellEditor.superclass.constructor.call(this,"dropdown",J);};C.extend(E.DropdownCellEditor,A,{dropdownOptions:null,dropdown:null,rend!
 erForm:function(){var M=this.getContainerEl().appendChild(docu!
 ment.cre
ateElement("select"));M.style.zoom=1;this.dropdown=M;if(C.isArray(this.dropdownOptions)){var N,L;for(var K=0,J=this.dropdownOptions.length;K<J;K++){N=this.dropdownOptions[K];L=document.createElement("option");L.value=(C.isValue(N.value))?N.value:N;L.innerHTML=(C.isValue(N.label))?N.label:N;L=M.appendChild(L);}if(this.disableBtns){this.handleDisabledBtns();}}},handleDisabledBtns:function(){I.addListener(this.dropdown,"change",function(J){this.save();},this,true);},resetForm:function(){for(var K=0,J=this.dropdown.options.length;K<J;K++){if(this.value===this.dropdown.options[K].value){this.dropdown.options[K].selected=true;}}},focus:function(){this.getDataTable()._focusEl(this.dropdown);},getInputValue:function(){return this.dropdown.options[this.dropdown.options.selectedIndex].value;}});C.augmentObject(E.DropdownCellEditor,A);E.RadioCellEditor=function(J){this._sId="yui-radioceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.RadioCellEditor.superclass.constructor.call(this,"radi!
 o",J);};C.extend(E.RadioCellEditor,A,{radios:null,radioOptions:null,renderForm:function(){if(C.isArray(this.radioOptions)){var J,K,Q,N;for(var M=0,O=this.radioOptions.length;M<O;M++){J=this.radioOptions[M];K=C.isValue(J.value)?J.value:J;Q=this.getId()+"-radio"+M;this.getContainerEl().innerHTML+='<input type="radio"'+' name="'+this.getId()+'"'+' value="'+K+'"'+' id="'+Q+'" />';N=this.getContainerEl().appendChild(document.createElement("label"));N.htmlFor=Q;N.innerHTML=(C.isValue(J.label))?J.label:J;}var P=[],R;for(var L=0;L<O;L++){R=this.getContainerEl().childNodes[L*2];P[P.length]=R;}this.radios=P;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){I.addListener(this.getContainerEl(),"click",function(J){if(I.getTarget(J).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){for(var L=0,K=this.radios.length;L<K;L++){var J=this.radios[L];if(this.value===J.value){J.checked=true;return ;}}},focus:function(){for(var !
 K=0,J=this.radios.length;K<J;K++){if(this.radios[K].checked){t!
 his.radi
os[K].focus();return ;}}},getInputValue:function(){for(var K=0,J=this.radios.length;K<J;K++){if(this.radios[K].checked){return this.radios[K].value;}}}});C.augmentObject(E.RadioCellEditor,A);E.TextareaCellEditor=function(J){this._sId="yui-textareaceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.TextareaCellEditor.superclass.constructor.call(this,"textarea",J);};C.extend(E.TextareaCellEditor,A,{textarea:null,renderForm:function(){var J=this.getContainerEl().appendChild(document.createElement("textarea"));this.textarea=J;if(this.disableBtns){this.handleDisabledBtns();}},handleDisabledBtns:function(){I.addListener(this.textarea,"blur",function(J){this.save();},this,true);},move:function(){this.textarea.style.width=this.getTdEl().offsetWidth+"px";this.textarea.style.height="3em";YAHOO.widget.TextareaCellEditor.superclass.move.call(this);},resetForm:function(){this.textarea.value=this.value;},focus:function(){this.textarea.focus();this.textarea.select();},getInputValue:function()!
 {return this.textarea.value;}});C.augmentObject(E.TextareaCellEditor,A);E.TextboxCellEditor=function(J){this._sId="yui-textboxceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.TextboxCellEditor.superclass.constructor.call(this,"textbox",J);};C.extend(E.TextboxCellEditor,A,{textbox:null,renderForm:function(){var J;if(B.webkit>420){J=this.getContainerEl().appendChild(document.createElement("form")).appendChild(document.createElement("input"));}else{J=this.getContainerEl().appendChild(document.createElement("input"));}J.type="text";this.textbox=J;I.addListener(J,"keypress",function(K){if((K.keyCode===13)){YAHOO.util.Event.preventDefault(K);this.save();}},this,true);if(this.disableBtns){this.handleDisabledBtns();}},move:function(){this.textbox.style.width=this.getTdEl().offsetWidth+"px";E.TextboxCellEditor.superclass.move.call(this);},resetForm:function(){this.textbox.value=C.isValue(this.value)?this.value.toString():"";
-},focus:function(){this.textbox.focus();this.textbox.select();},getInputValue:function(){return this.textbox.value;}});C.augmentObject(E.TextboxCellEditor,A);H.Editors={checkbox:E.CheckboxCellEditor,"date":E.DateCellEditor,dropdown:E.DropdownCellEditor,radio:E.RadioCellEditor,textarea:E.TextareaCellEditor,textbox:E.TextboxCellEditor};E.CellEditor=function(K,J){if(K&&H.Editors[K]){C.augmentObject(A,H.Editors[K]);return new H.Editors[K](J);}else{return new A(null,J);}};var G=E.CellEditor;C.augmentObject(G,A);})();YAHOO.register("datatable",YAHOO.widget.DataTable,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+},toString:function(){return"Column instance "+this._sId;},getDefinition:function(){var A={};A.abbr=this.abbr;A.className=this.className;A.editor=this.editor;A.editorOptions=this.editorOptions;A.field=this.field;A.formatter=this.formatter;A.hidden=this.hidden;A.key=this.key;A.label=this.label;A.minWidth=this.minWidth;A.maxAutoWidth=this.maxAutoWidth;A.resizeable=this.resizeable;A.selected=this.selected;A.sortable=this.sortable;A.sortOptions=this.sortOptions;A.width=this.width;return A;},getKey:function(){return this.key;},getField:function(){return this.field;},getSanitizedKey:function(){return this.getKey().replace(/[^\w\-]/g,"");},getKeyIndex:function(){return this._nKeyIndex;},getTreeIndex:function(){return this._nTreeIndex;},getParent:function(){return this._oParent;},getColspan:function(){return this._nColspan;},getColSpan:function(){return this.getColspan();},getRowspan:function(){return this._nRowspan;},getThEl:function(){return this._elTh;},getThLinerEl:function(){r!
 eturn this._elThLiner;},getResizerEl:function(){return this._elResizer;},getColEl:function(){return this.getThEl();},getIndex:function(){return this.getKeyIndex();},format:function(){}};YAHOO.util.Sort={compare:function(B,A,C){if((B===null)||(typeof B=="undefined")){if((A===null)||(typeof A=="undefined")){return 0;}else{return 1;}}else{if((A===null)||(typeof A=="undefined")){return -1;}}if(B.constructor==String){B=B.toLowerCase();}if(A.constructor==String){A=A.toLowerCase();}if(B<A){return(C)?1:-1;}else{if(B>A){return(C)?-1:1;}else{return 0;}}}};YAHOO.widget.ColumnDD=function(D,A,C,B){if(D&&A&&C&&B){this.datatable=D;this.table=D.getTableEl();this.column=A;this.headCell=C;this.pointer=B;this.newIndex=null;this.init(C);this.initFrame();this.invalidHandleTypes={};this.setPadding(10,0,(this.datatable.getTheadEl().offsetHeight+10),0);YAHOO.util.Event.on(window,"resize",function(){this.initConstraints();},this,true);}else{}};if(YAHOO.util.DDProxy){YAHOO.extend(YAHOO.widget.Column!
 DD,YAHOO.util.DDProxy,{initConstraints:function(){var G=YAHOO.!
 util.Dom
.getRegion(this.table),D=this.getEl(),F=YAHOO.util.Dom.getXY(D),C=parseInt(YAHOO.util.Dom.getStyle(D,"width"),10),A=parseInt(YAHOO.util.Dom.getStyle(D,"height"),10),E=((F[0]-G.left)+15),B=((G.right-F[0]-C)+15);this.setXConstraint(E,B);this.setYConstraint(10,10);},_resizeProxy:function(){this.constructor.superclass._resizeProxy.apply(this,arguments);var A=this.getDragEl(),B=this.getEl();YAHOO.util.Dom.setStyle(this.pointer,"height",(this.table.parentNode.offsetHeight+10)+"px");YAHOO.util.Dom.setStyle(this.pointer,"display","block");var C=YAHOO.util.Dom.getXY(B);YAHOO.util.Dom.setXY(this.pointer,[C[0],(C[1]-5)]);YAHOO.util.Dom.setStyle(A,"height",this.datatable.getContainerEl().offsetHeight+"px");YAHOO.util.Dom.setStyle(A,"width",(parseInt(YAHOO.util.Dom.getStyle(A,"width"),10)+4)+"px");YAHOO.util.Dom.setXY(this.dragEl,C);},onMouseDown:function(){this.initConstraints();this.resetConstraints();},clickValidator:function(B){if(!this.column.hidden){var A=YAHOO.util.Event.getTarget!
 (B);return(this.isValidHandleChild(A)&&(this.id==this.handleElId||this.DDM.handleWasClicked(A,this.id)));}},onDragOver:function(H,A){var F=this.datatable.getColumn(A);if(F){var C=F.getTreeIndex();while((C===null)&&F.getParent()){F=F.getParent();C=F.getTreeIndex();}if(C!==null){var B=F.getThEl();var K=C;var D=YAHOO.util.Event.getPageX(H),I=YAHOO.util.Dom.getX(B),J=I+((YAHOO.util.Dom.get(B).offsetWidth)/2),E=this.column.getTreeIndex();if(D<J){YAHOO.util.Dom.setX(this.pointer,I);}else{var G=parseInt(B.offsetWidth,10);YAHOO.util.Dom.setX(this.pointer,(I+G));K++;}if(C>E){K--;}if(K<0){K=0;}else{if(K>this.datatable.getColumnSet().tree[0].length){K=this.datatable.getColumnSet().tree[0].length;}}this.newIndex=K;}}},onDragDrop:function(){this.datatable.reorderColumn(this.column,this.newIndex);},endDrag:function(){this.newIndex=null;YAHOO.util.Dom.setStyle(this.pointer,"display","none");}});}YAHOO.util.ColumnResizer=function(E,C,D,A,B){if(E&&C&&D&&A){this.datatable=E;this.column=C;thi!
 s.headCell=D;this.headCellLiner=C.getThLinerEl();this.resizerL!
 iner=D.f
irstChild;this.init(A,A,{dragOnly:true,dragElId:B.id});this.initFrame();this.resetResizerEl();this.setPadding(0,1,0,0);}else{}};if(YAHOO.util.DD){YAHOO.extend(YAHOO.util.ColumnResizer,YAHOO.util.DDProxy,{resetResizerEl:function(){var A=YAHOO.util.Dom.get(this.handleElId).style;A.left="auto";A.right=0;A.top="auto";A.bottom=0;A.height=this.headCell.offsetHeight+"px";},onMouseUp:function(G){var E=this.datatable.getColumnSet().keys,B;for(var C=0,A=E.length;C<A;C++){B=E[C];if(B._ddResizer){B._ddResizer.resetResizerEl();}}this.resetResizerEl();var D=this.headCellLiner;var F=D.offsetWidth-(parseInt(YAHOO.util.Dom.getStyle(D,"paddingLeft"),10)|0)-(parseInt(YAHOO.util.Dom.getStyle(D,"paddingRight"),10)|0);this.datatable.fireEvent("columnResizeEvent",{column:this.column,target:this.headCell,width:F});},onMouseDown:function(A){this.startWidth=this.headCellLiner.offsetWidth;this.startX=YAHOO.util.Event.getXY(A)[0];this.nLinerPadding=(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"!
 paddingLeft"),10)|0)+(parseInt(YAHOO.util.Dom.getStyle(this.headCellLiner,"paddingRight"),10)|0);},clickValidator:function(B){if(!this.column.hidden){var A=YAHOO.util.Event.getTarget(B);return(this.isValidHandleChild(A)&&(this.id==this.handleElId||this.DDM.handleWasClicked(A,this.id)));}},startDrag:function(){var E=this.datatable.getColumnSet().keys,D=this.column.getKeyIndex(),B;for(var C=0,A=E.length;C<A;C++){B=E[C];if(B._ddResizer){YAHOO.util.Dom.get(B._ddResizer.handleElId).style.height="1em";}}},onDrag:function(C){var D=YAHOO.util.Event.getXY(C)[0];if(D>YAHOO.util.Dom.getX(this.headCellLiner)){var A=D-this.startX;var B=this.startWidth+A-this.nLinerPadding;if(B>0){this.datatable.setColumnWidth(this.column,B);}}}});}(function(){var G=YAHOO.lang,A=YAHOO.util,E=YAHOO.widget,C=A.Dom,F=A.Event,D=E.DataTable;YAHOO.widget.RecordSet=function(H){this._sId="yui-rs"+E.RecordSet._nCount;E.RecordSet._nCount++;this._records=[];
+if(H){if(G.isArray(H)){this.addRecords(H);}else{if(G.isObject(H)){this.addRecord(H);}}}};var B=E.RecordSet;B._nCount=0;B.prototype={_sId:null,_addRecord:function(J,H){var I=new YAHOO.widget.Record(J);if(YAHOO.lang.isNumber(H)&&(H>-1)){this._records.splice(H,0,I);}else{this._records[this._records.length]=I;}return I;},_setRecord:function(I,H){if(!G.isNumber(H)||H<0){H=this._records.length;}return(this._records[H]=new E.Record(I));},_deleteRecord:function(I,H){if(!G.isNumber(H)||(H<0)){H=1;}this._records.splice(I,H);},getId:function(){return this._sId;},toString:function(){return"RecordSet instance "+this._sId;},getLength:function(){return this._records.length;},getRecord:function(H){var I;if(H instanceof E.Record){for(I=0;I<this._records.length;I++){if(this._records[I]&&(this._records[I]._sId===H._sId)){return H;}}}else{if(G.isNumber(H)){if((H>-1)&&(H<this.getLength())){return this._records[H];}}else{if(G.isString(H)){for(I=0;I<this._records.length;I++){if(this._records[I]&&!
 (this._records[I]._sId===H)){return this._records[I];}}}}}return null;},getRecords:function(I,H){if(!G.isNumber(I)){return this._records;}if(!G.isNumber(H)){return this._records.slice(I);}return this._records.slice(I,I+H);},hasRecords:function(I,H){var K=this.getRecords(I,H);for(var J=0;J<H;++J){if(typeof K[J]==="undefined"){return false;}}return true;},getRecordIndex:function(I){if(I){for(var H=this._records.length-1;H>-1;H--){if(this._records[H]&&I.getId()===this._records[H].getId()){return H;}}}return null;},addRecord:function(J,H){if(G.isObject(J)){var I=this._addRecord(J,H);this.fireEvent("recordAddEvent",{record:I,data:J});return I;}else{return null;}},addRecords:function(L,K){if(G.isArray(L)){var O=[],I,M,H;K=G.isNumber(K)?K:this._records.length;I=K;for(M=0,H=L.length;M<H;++M){if(G.isObject(L[M])){var J=this._addRecord(L[M],I++);O.push(J);}}this.fireEvent("recordsAddEvent",{records:O,data:L});return O;}else{if(G.isObject(L)){var N=this._addRecord(L);this.fireEvent("r!
 ecordsAddEvent",{records:[N],data:L});return N;}else{return nu!
 ll;}}},s
etRecord:function(J,H){if(G.isObject(J)){var I=this._setRecord(J,H);this.fireEvent("recordSetEvent",{record:I,data:J});return I;}else{return null;}},setRecords:function(L,K){var O=E.Record,I=G.isArray(L)?L:[L],N=[],M=0,H=I.length,J=0;K=parseInt(K,10)|0;for(;M<H;++M){if(typeof I[M]==="object"&&I[M]){N[J++]=this._records[K+M]=new O(I[M]);}}this.fireEvent("recordsSetEvent",{records:N,data:L});this.fireEvent("recordsSet",{records:N,data:L});if(I.length&&!N.length){}return N.length>1?N:N[0];},updateRecord:function(H,L){var J=this.getRecord(H);if(J&&G.isObject(L)){var K={};for(var I in J._oData){if(G.hasOwnProperty(J._oData,I)){K[I]=J._oData[I];}}J._oData=L;this.fireEvent("recordUpdateEvent",{record:J,newData:L,oldData:K});return J;}else{return null;}},updateKey:function(H,I,J){this.updateRecordValue(H,I,J);},updateRecordValue:function(H,K,N){var J=this.getRecord(H);if(J){var M=null;var L=J._oData[K];if(L&&G.isObject(L)){M={};for(var I in L){if(G.hasOwnProperty(L,I)){M[I]=L[I];}}}!
 else{M=L;}J._oData[K]=N;this.fireEvent("keyUpdateEvent",{record:J,key:K,newData:N,oldData:M});this.fireEvent("recordValueUpdateEvent",{record:J,key:K,newData:N,oldData:M});}else{}},replaceRecords:function(H){this.reset();return this.addRecords(H);},sortRecords:function(H,I){return this._records.sort(function(K,J){return H(K,J,I);});},reverseRecords:function(){return this._records.reverse();},deleteRecord:function(H){if(G.isNumber(H)&&(H>-1)&&(H<this.getLength())){var I=E.DataTable._cloneObject(this.getRecord(H).getData());this._deleteRecord(H);this.fireEvent("recordDeleteEvent",{data:I,index:H});return I;}else{return null;}},deleteRecords:function(J,H){if(!G.isNumber(H)){H=1;}if(G.isNumber(J)&&(J>-1)&&(J<this.getLength())){var L=this.getRecords(J,H);var I=[];for(var K=0;K<L.length;K++){I[I.length]=E.DataTable._cloneObject(L[K]);}this._deleteRecord(J,H);this.fireEvent("recordsDeleteEvent",{data:I,index:J});return I;}else{return null;}},reset:function(){this._records=[];this.!
 fireEvent("resetEvent");}};G.augmentProto(B,A.EventProvider);Y!
 AHOO.wid
get.Record=function(H){this._nCount=E.Record._nCount;this._sId="yui-rec"+this._nCount;E.Record._nCount++;this._oData={};if(G.isObject(H)){for(var I in H){if(G.hasOwnProperty(H,I)){this._oData[I]=H[I];}}}};YAHOO.widget.Record._nCount=0;YAHOO.widget.Record.prototype={_nCount:null,_sId:null,_oData:null,getCount:function(){return this._nCount;},getId:function(){return this._sId;},getData:function(H){if(G.isString(H)){return this._oData[H];}else{return this._oData;}},setData:function(H,I){this._oData[H]=I;}};})();(function(){var H=YAHOO.lang,A=YAHOO.util,E=YAHOO.widget,B=YAHOO.env.ua,C=A.Dom,G=A.Event,F=A.DataSourceBase;YAHOO.widget.DataTable=function(I,M,O,K){var L=E.DataTable;if(K&&K.scrollable){return new YAHOO.widget.ScrollingDataTable(I,M,O,K);}this._nIndex=L._nCount;this._sId="yui-dt"+this._nIndex;this._oChainRender=new YAHOO.util.Chain();this._oChainRender.subscribe("end",this._onRenderChainEnd,this,true);this._initConfigs(K);this._initDataSource(O);if(!this._oDataSource){!
 return;}this._initColumnSet(M);if(!this._oColumnSet){return;}this._initRecordSet();if(!this._oRecordSet){}L.superclass.constructor.call(this,I,this.configs);var Q=this._initDomElements(I);if(!Q){return;}this.showTableMessage(this.get("MSG_LOADING"),L.CLASS_LOADING);this._initEvents();L._nCount++;L._nCurrentCount++;var N={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,scope:this,argument:this.getState()};var P=this.get("initialLoad");if(P===true){this._oDataSource.sendRequest(this.get("initialRequest"),N);}else{if(P===false){this.showTableMessage(this.get("MSG_EMPTY"),L.CLASS_EMPTY);}else{var J=P||{};N.argument=J.argument||{};this._oDataSource.sendRequest(J.request,N);}}};var D=E.DataTable;H.augmentObject(D,{CLASS_DATATABLE:"yui-dt",CLASS_LINER:"yui-dt-liner",CLASS_LABEL:"yui-dt-label",CLASS_MESSAGE:"yui-dt-message",CLASS_MASK:"yui-dt-mask",CLASS_DATA:"yui-dt-data",CLASS_COLTARGET:"yui-dt-coltarget",CLASS_RESIZER:"yui-dt-resizer",CLASS_RESIZERLINER:"yui-dt!
 -resizerliner",CLASS_RESIZERPROXY:"yui-dt-resizerproxy",CLASS_!
 EDITOR:"
yui-dt-editor",CLASS_PAGINATOR:"yui-dt-paginator",CLASS_PAGE:"yui-dt-page",CLASS_DEFAULT:"yui-dt-default",CLASS_PREVIOUS:"yui-dt-previous",CLASS_NEXT:"yui-dt-next",CLASS_FIRST:"yui-dt-first",CLASS_LAST:"yui-dt-last",CLASS_EVEN:"yui-dt-even",CLASS_ODD:"yui-dt-odd",CLASS_SELECTED:"yui-dt-selected",CLASS_HIGHLIGHTED:"yui-dt-highlighted",CLASS_HIDDEN:"yui-dt-hidden",CLASS_DISABLED:"yui-dt-disabled",CLASS_EMPTY:"yui-dt-empty",CLASS_LOADING:"yui-dt-loading",CLASS_ERROR:"yui-dt-error",CLASS_EDITABLE:"yui-dt-editable",CLASS_DRAGGABLE:"yui-dt-draggable",CLASS_RESIZEABLE:"yui-dt-resizeable",CLASS_SCROLLABLE:"yui-dt-scrollable",CLASS_SORTABLE:"yui-dt-sortable",CLASS_ASC:"yui-dt-asc",CLASS_DESC:"yui-dt-desc",CLASS_BUTTON:"yui-dt-button",CLASS_CHECKBOX:"yui-dt-checkbox",CLASS_DROPDOWN:"yui-dt-dropdown",CLASS_RADIO:"yui-dt-radio",_nCount:0,_nCurrentCount:0,_elDynStyleNode:null,_bDynStylesFallback:(B.ie&&(B.ie<7))?true:false,_oDynStyles:{},_elColumnDragTarget:null,_elColumnResizerProxy:nul!
 l,_cloneObject:function(L){if(!H.isValue(L)){return L;
+}var N={};if(L instanceof YAHOO.widget.BaseCellEditor){N=L;}else{if(H.isFunction(L)){N=L;}else{if(H.isArray(L)){var M=[];for(var K=0,J=L.length;K<J;K++){M[K]=D._cloneObject(L[K]);}N=M;}else{if(H.isObject(L)){for(var I in L){if(H.hasOwnProperty(L,I)){if(H.isValue(L[I])&&H.isObject(L[I])||H.isArray(L[I])){N[I]=D._cloneObject(L[I]);}else{N[I]=L[I];}}}}else{N=L;}}}}return N;},_destroyColumnDragTargetEl:function(){if(D._elColumnDragTarget){var I=D._elColumnDragTarget;YAHOO.util.Event.purgeElement(I);I.parentNode.removeChild(I);D._elColumnDragTarget=null;}},_initColumnDragTargetEl:function(){if(!D._elColumnDragTarget){var I=document.createElement("div");I.className=D.CLASS_COLTARGET;I.style.display="none";document.body.insertBefore(I,document.body.firstChild);D._elColumnDragTarget=I;}return D._elColumnDragTarget;},_destroyColumnResizerProxyEl:function(){if(D._elColumnResizerProxy){var I=D._elColumnResizerProxy;YAHOO.util.Event.purgeElement(I);I.parentNode.removeChild(I);D._elColu!
 mnResizerProxy=null;}},_initColumnResizerProxyEl:function(){if(!D._elColumnResizerProxy){var I=document.createElement("div");I.id="yui-dt-colresizerproxy";I.className=D.CLASS_RESIZERPROXY;document.body.insertBefore(I,document.body.firstChild);D._elColumnResizerProxy=I;}return D._elColumnResizerProxy;},formatButton:function(I,J,K,M){var L=H.isValue(M)?M:"Click";I.innerHTML='<button type="button" class="'+D.CLASS_BUTTON+'">'+L+"</button>";},formatCheckbox:function(I,J,K,M){var L=M;L=(L)?' checked="checked"':"";I.innerHTML='<input type="checkbox"'+L+' class="'+D.CLASS_CHECKBOX+'" />';},formatCurrency:function(I,J,K,L){I.innerHTML=A.Number.format(L,K.currencyOptions||this.get("currencyOptions"));},formatDate:function(I,K,L,M){var J=L.dateOptions||this.get("dateOptions");I.innerHTML=A.Date.format(M,J,J.locale);},formatDropdown:function(K,R,P,I){var Q=(H.isValue(I))?I:R.getData(P.field),S=(H.isArray(P.dropdownOptions))?P.dropdownOptions:null,J,O=K.getElementsByTagName("select");i!
 f(O.length===0){J=document.createElement("select");J.className!
 =D.CLASS
_DROPDOWN;J=K.appendChild(J);G.addListener(J,"change",this._onDropdownChange,this);}J=O[0];if(J){J.innerHTML="";if(S){for(var M=0;M<S.length;M++){var N=S[M];var L=document.createElement("option");L.value=(H.isValue(N.value))?N.value:N;L.innerHTML=(H.isValue(N.text))?N.text:(H.isValue(N.label))?N.label:N;L=J.appendChild(L);if(L.value==Q){L.selected=true;}}}else{J.innerHTML='<option selected value="'+Q+'">'+Q+"</option>";}}else{K.innerHTML=H.isValue(I)?I:"";}},formatEmail:function(I,J,K,L){if(H.isString(L)){I.innerHTML='<a href="mailto:'+L+'">'+L+"</a>";}else{I.innerHTML=H.isValue(L)?L:"";}},formatLink:function(I,J,K,L){if(H.isString(L)){I.innerHTML='<a href="'+L+'">'+L+"</a>";}else{I.innerHTML=H.isValue(L)?L:"";}},formatNumber:function(I,J,K,L){I.innerHTML=A.Number.format(L,K.numberOptions||this.get("numberOptions"));},formatRadio:function(I,J,K,M){var L=M;L=(L)?' checked="checked"':"";I.innerHTML='<input type="radio"'+L+' name="'+this.getId()+"-col-"+K.getSanitizedKey()+'"'+!
 ' class="'+D.CLASS_RADIO+'" />';},formatText:function(I,J,L,M){var K=(H.isValue(M))?M:"";I.innerHTML=K.toString().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");},formatTextarea:function(J,K,M,N){var L=(H.isValue(N))?N:"",I="<textarea>"+L+"</textarea>";J.innerHTML=I;},formatTextbox:function(J,K,M,N){var L=(H.isValue(N))?N:"",I='<input type="text" value="'+L+'" />';J.innerHTML=I;},formatDefault:function(I,J,K,L){I.innerHTML=L===undefined||L===null||(typeof L==="number"&&isNaN(L))?" ":L.toString();},validateNumber:function(J){var I=J*1;if(H.isNumber(I)){return I;}else{return undefined;}}});D.Formatter={button:D.formatButton,checkbox:D.formatCheckbox,currency:D.formatCurrency,"date":D.formatDate,dropdown:D.formatDropdown,email:D.formatEmail,link:D.formatLink,"number":D.formatNumber,radio:D.formatRadio,text:D.formatText,textarea:D.formatTextarea,textbox:D.formatTextbox,defaultFormatter:D.formatDefault};H.extend(D,A.Element,{initAttributes:function(I){I=I!
 ||{};D.superclass.initAttributes.call(this,I);this.setAttribut!
 eConfig(
"summary",{value:"",validator:H.isString,method:function(J){if(this._elTable){this._elTable.summary=J;}}});this.setAttributeConfig("selectionMode",{value:"standard",validator:H.isString});this.setAttributeConfig("sortedBy",{value:null,validator:function(J){if(J){return(H.isObject(J)&&J.key);}else{return(J===null);}},method:function(K){var R=this.get("sortedBy");this._configs.sortedBy.value=K;var J,O,M,Q;if(this._elThead){if(R&&R.key&&R.dir){J=this._oColumnSet.getColumn(R.key);O=J.getKeyIndex();var U=J.getThEl();C.removeClass(U,R.dir);this.formatTheadCell(J.getThLinerEl().firstChild,J,K);}if(K){M=(K.column)?K.column:this._oColumnSet.getColumn(K.key);Q=M.getKeyIndex();var V=M.getThEl();if(K.dir&&((K.dir=="asc")||(K.dir=="desc"))){var P=(K.dir=="desc")?D.CLASS_DESC:D.CLASS_ASC;C.addClass(V,P);}else{var L=K.dir||D.CLASS_ASC;C.addClass(V,L);}this.formatTheadCell(M.getThLinerEl().firstChild,M,K);}}if(this._elTbody){this._elTbody.style.display="none";var S=this._elTbody.rows,T;for(!
 var N=S.length-1;N>-1;N--){T=S[N].childNodes;if(T[O]){C.removeClass(T[O],R.dir);}if(T[Q]){C.addClass(T[Q],K.dir);}}this._elTbody.style.display="";}this._clearTrTemplateEl();}});this.setAttributeConfig("paginator",{value:null,validator:function(J){return J===null||J instanceof E.Paginator;},method:function(){this._updatePaginator.apply(this,arguments);}});this.setAttributeConfig("caption",{value:null,validator:H.isString,method:function(J){this._initCaptionEl(J);}});this.setAttributeConfig("draggableColumns",{value:false,validator:H.isBoolean,method:function(J){if(this._elThead){if(J){this._initDraggableColumns();}else{this._destroyDraggableColumns();}}}});this.setAttributeConfig("renderLoopSize",{value:0,validator:H.isNumber});this.setAttributeConfig("formatRow",{value:null,validator:H.isFunction});this.setAttributeConfig("generateRequest",{value:function(K,N){K=K||{pagination:null,sortedBy:null};var M=(K.sortedBy)?K.sortedBy.key:N.getColumnSet().keys[0].getKey();
+var J=(K.sortedBy&&K.sortedBy.dir===YAHOO.widget.DataTable.CLASS_DESC)?"desc":"asc";var O=(K.pagination)?K.pagination.recordOffset:0;var L=(K.pagination)?K.pagination.rowsPerPage:null;return"sort="+M+"&dir="+J+"&startIndex="+O+((L!==null)?"&results="+L:"");},validator:H.isFunction});this.setAttributeConfig("initialRequest",{value:null});this.setAttributeConfig("initialLoad",{value:true});this.setAttributeConfig("dynamicData",{value:false,validator:H.isBoolean});this.setAttributeConfig("MSG_EMPTY",{value:"No records found.",validator:H.isString});this.setAttributeConfig("MSG_LOADING",{value:"Loading...",validator:H.isString});this.setAttributeConfig("MSG_ERROR",{value:"Data error.",validator:H.isString});this.setAttributeConfig("MSG_SORTASC",{value:"Click to sort ascending",validator:H.isString,method:function(K){if(this._elThead){for(var L=0,M=this.getColumnSet().keys,J=M.length;L<J;L++){if(M[L].sortable&&this.getColumnSortDir(M[L])===D.CLASS_ASC){M[L]._elThLabel.firstChild!
 .title=K;}}}}});this.setAttributeConfig("MSG_SORTDESC",{value:"Click to sort descending",validator:H.isString,method:function(K){if(this._elThead){for(var L=0,M=this.getColumnSet().keys,J=M.length;L<J;L++){if(M[L].sortable&&this.getColumnSortDir(M[L])===D.CLASS_DESC){M[L]._elThLabel.firstChild.title=K;}}}}});this.setAttributeConfig("currencySymbol",{value:"$",validator:H.isString});this.setAttributeConfig("currencyOptions",{value:{prefix:this.get("currencySymbol"),decimalPlaces:2,decimalSeparator:".",thousandsSeparator:","}});this.setAttributeConfig("dateOptions",{value:{format:"%m/%d/%Y",locale:"en"}});this.setAttributeConfig("numberOptions",{value:{decimalPlaces:0,thousandsSeparator:","}});},_bInit:true,_nIndex:null,_nTrCount:0,_nTdCount:0,_sId:null,_oChainRender:null,_elContainer:null,_elMask:null,_elTable:null,_elCaption:null,_elColgroup:null,_elThead:null,_elTbody:null,_elMsgTbody:null,_elMsgTr:null,_elMsgTd:null,_oDataSource:null,_oColumnSet:null,_oRecordSet:null,_oCe!
 llEditor:null,_sFirstTrId:null,_sLastTrId:null,_elTrTemplate:n!
 ull,_aDy
nFunctions:[],clearTextSelection:function(){var I;if(window.getSelection){I=window.getSelection();}else{if(document.getSelection){I=document.getSelection();}else{if(document.selection){I=document.selection;}}}if(I){if(I.empty){I.empty();}else{if(I.removeAllRanges){I.removeAllRanges();}else{if(I.collapse){I.collapse();}}}}},_focusEl:function(I){I=I||this._elTbody;setTimeout(function(){try{I.focus();}catch(J){}},0);},_repaintGecko:(B.gecko)?function(J){J=J||this._elContainer;var I=J.parentNode;var K=J.nextSibling;I.insertBefore(I.removeChild(J),K);}:function(){},_repaintOpera:(B.opera)?function(){if(B.opera){document.documentElement.className+=" ";document.documentElement.className.trim();}}:function(){},_repaintWebkit:(B.webkit)?function(J){J=J||this._elContainer;var I=J.parentNode;var K=J.nextSibling;I.insertBefore(I.removeChild(J),K);}:function(){},_initConfigs:function(I){if(!I||!H.isObject(I)){I={};}this.configs=I;},_initColumnSet:function(M){var L,J,I;if(this._oColumnSet!
 ){for(J=0,I=this._oColumnSet.keys.length;J<I;J++){L=this._oColumnSet.keys[J];D._oDynStyles["."+this.getId()+"-col-"+L.getSanitizedKey()+" ."+D.CLASS_LINER]=undefined;if(L.editor&&L.editor.unsubscribeAll){L.editor.unsubscribeAll();}}this._oColumnSet=null;this._clearTrTemplateEl();}if(H.isArray(M)){this._oColumnSet=new YAHOO.widget.ColumnSet(M);}else{if(M instanceof YAHOO.widget.ColumnSet){this._oColumnSet=M;}}var K=this._oColumnSet.keys;for(J=0,I=K.length;J<I;J++){L=K[J];if(L.editor&&L.editor.subscribe){L.editor.subscribe("showEvent",this._onEditorShowEvent,this,true);L.editor.subscribe("keydownEvent",this._onEditorKeydownEvent,this,true);L.editor.subscribe("revertEvent",this._onEditorRevertEvent,this,true);L.editor.subscribe("saveEvent",this._onEditorSaveEvent,this,true);L.editor.subscribe("cancelEvent",this._onEditorCancelEvent,this,true);L.editor.subscribe("blurEvent",this._onEditorBlurEvent,this,true);L.editor.subscribe("blockEvent",this._onEditorBlockEvent,this,true);L.!
 editor.subscribe("unblockEvent",this._onEditorUnblockEvent,thi!
 s,true);
}}},_initDataSource:function(I){this._oDataSource=null;if(I&&(I instanceof F)){this._oDataSource=I;}else{var J=null;var N=this._elContainer;var K=0;if(N.hasChildNodes()){var M=N.childNodes;for(K=0;K<M.length;K++){if(M[K].nodeName&&M[K].nodeName.toLowerCase()=="table"){J=M[K];break;}}if(J){var L=[];for(;K<this._oColumnSet.keys.length;K++){L.push({key:this._oColumnSet.keys[K].key});}this._oDataSource=new F(J);this._oDataSource.responseType=F.TYPE_HTMLTABLE;this._oDataSource.responseSchema={fields:L};}}}},_initRecordSet:function(){if(this._oRecordSet){this._oRecordSet.reset();}else{this._oRecordSet=new YAHOO.widget.RecordSet();}},_initDomElements:function(I){this._initContainerEl(I);this._initTableEl(this._elContainer);this._initColgroupEl(this._elTable);this._initTheadEl(this._elTable);this._initMsgTbodyEl(this._elTable);this._initTbodyEl(this._elTable);if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody){return false;}el!
 se{return true;}},_destroyContainerEl:function(I){C.removeClass(I,D.CLASS_DATATABLE);G.purgeElement(I,true);I.innerHTML="";this._elContainer=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;},_initContainerEl:function(J){J=C.get(J);if(J&&J.nodeName&&(J.nodeName.toLowerCase()=="div")){this._destroyContainerEl(J);C.addClass(J,D.CLASS_DATATABLE);G.addListener(J,"focus",this._onTableFocus,this);G.addListener(J,"dblclick",this._onTableDblclick,this);this._elContainer=J;var I=document.createElement("div");I.className=D.CLASS_MASK;I.style.display="none";this._elMask=J.appendChild(I);}},_destroyTableEl:function(){var I=this._elTable;if(I){G.purgeElement(I,true);I.parentNode.removeChild(I);this._elCaption=null;this._elColgroup=null;this._elThead=null;this._elTbody=null;}},_initCaptionEl:function(I){if(this._elTable&&I){if(!this._elCaption){this._elCaption=this._elTable.createCaption();}this._elCaption.innerHTML=I;
+}else{if(this._elCaption){this._elCaption.parentNode.removeChild(this._elCaption);}}},_initTableEl:function(I){if(I){this._destroyTableEl();this._elTable=I.appendChild(document.createElement("table"));this._elTable.summary=this.get("summary");if(this.get("caption")){this._initCaptionEl(this.get("caption"));}}},_destroyColgroupEl:function(){var I=this._elColgroup;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elColgroup=null;}},_initColgroupEl:function(R){if(R){this._destroyColgroupEl();var K=this._aColIds||[],Q=this._oColumnSet.keys,L=0,O=K.length,I,N,P=document.createDocumentFragment(),M=document.createElement("col");for(L=0,O=Q.length;L<O;L++){N=Q[L];I=P.appendChild(M.cloneNode(false));}var J=R.insertBefore(document.createElement("colgroup"),R.firstChild);J.appendChild(P);this._elColgroup=J;}},_insertColgroupColEl:function(I){if(H.isNumber(I)&&this._elColgroup){var J=this._elColgroup.childNodes[I]||null;this._elColgroup.insertBefore(document.create!
 Element("col"),J);}},_removeColgroupColEl:function(I){if(H.isNumber(I)&&this._elColgroup&&this._elColgroup.childNodes[I]){this._elColgroup.removeChild(this._elColgroup.childNodes[I]);}},_reorderColgroupColEl:function(K,J){if(H.isArray(K)&&H.isNumber(J)&&this._elColgroup&&(this._elColgroup.childNodes.length>K[K.length-1])){var I,M=[];for(I=K.length-1;I>-1;I--){M.push(this._elColgroup.removeChild(this._elColgroup.childNodes[K[I]]));}var L=this._elColgroup.childNodes[J]||null;for(I=M.length-1;I>-1;I--){this._elColgroup.insertBefore(M[I],L);}}},_destroyTheadEl:function(){var J=this._elThead;if(J){var I=J.parentNode;G.purgeElement(J,true);this._destroyColumnHelpers();I.removeChild(J);this._elThead=null;}},_initTheadEl:function(S){S=S||this._elTable;if(S){this._destroyTheadEl();var N=(this._elColgroup)?S.insertBefore(document.createElement("thead"),this._elColgroup.nextSibling):S.appendChild(document.createElement("thead"));G.addListener(N,"focus",this._onTheadFocus,this);G.addLi!
 stener(N,"keydown",this._onTheadKeydown,this);G.addListener(N,!
 "mouseov
er",this._onTableMouseover,this);G.addListener(N,"mouseout",this._onTableMouseout,this);G.addListener(N,"mousedown",this._onTableMousedown,this);G.addListener(N,"mouseup",this._onTableMouseup,this);G.addListener(N,"click",this._onTheadClick,this);var U=this._oColumnSet,Q,O,M,K;var T=U.tree;var L;for(O=0;O<T.length;O++){var J=N.appendChild(document.createElement("tr"));for(M=0;M<T[O].length;M++){Q=T[O][M];L=J.appendChild(document.createElement("th"));this._initThEl(L,Q);}if(O===0){C.addClass(J,D.CLASS_FIRST);}if(O===(T.length-1)){C.addClass(J,D.CLASS_LAST);}}var I=U.headers[0]||[];for(O=0;O<I.length;O++){C.addClass(C.get(this.getId()+"-th-"+I[O]),D.CLASS_FIRST);}var P=U.headers[U.headers.length-1]||[];for(O=0;O<P.length;O++){C.addClass(C.get(this.getId()+"-th-"+P[O]),D.CLASS_LAST);}if(B.webkit&&B.webkit<420){var R=this;setTimeout(function(){N.style.display="";},0);N.style.display="none";}this._elThead=N;this._initColumnHelpers();}},_initThEl:function(M,L){M.id=this.getId()+"-!
 th-"+L.getSanitizedKey();M.innerHTML="";M.rowSpan=L.getRowspan();M.colSpan=L.getColspan();L._elTh=M;var I=M.appendChild(document.createElement("div"));I.id=M.id+"-liner";I.className=D.CLASS_LINER;L._elThLiner=I;var J=I.appendChild(document.createElement("span"));J.className=D.CLASS_LABEL;if(L.abbr){M.abbr=L.abbr;}if(L.hidden){this._clearMinWidth(L);}M.className=this._getColumnClassNames(L);if(L.width){var K=(L.minWidth&&(L.width<L.minWidth))?L.minWidth:L.width;if(D._bDynStylesFallback){M.firstChild.style.overflow="hidden";M.firstChild.style.width=K+"px";}else{this._setColumnWidthDynStyles(L,K+"px","hidden");}}this.formatTheadCell(J,L,this.get("sortedBy"));L._elThLabel=J;},formatTheadCell:function(I,M,K){var Q=M.getKey();var P=H.isValue(M.label)?M.label:Q;if(M.sortable){var N=this.getColumnSortDir(M,K);var J=(N===D.CLASS_DESC);if(K&&(M.key===K.key)){J=!(K.dir===D.CLASS_DESC);}var L=this.getId()+"-href-"+M.getSanitizedKey();var O=(J)?this.get("MSG_SORTDESC"):this.get("MSG_SOR!
 TASC");I.innerHTML='<a href="'+L+'" title="'+O+'" class="'+D.C!
 LASS_SOR
TABLE+'">'+P+"</a>";}else{I.innerHTML=P;}},_destroyDraggableColumns:function(){var K,L;for(var J=0,I=this._oColumnSet.tree[0].length;J<I;J++){K=this._oColumnSet.tree[0][J];if(K._dd){K._dd=K._dd.unreg();C.removeClass(K.getThEl(),D.CLASS_DRAGGABLE);}}},_initDraggableColumns:function(){this._destroyDraggableColumns();if(A.DD){var L,M,J;for(var K=0,I=this._oColumnSet.tree[0].length;K<I;K++){L=this._oColumnSet.tree[0][K];M=L.getThEl();C.addClass(M,D.CLASS_DRAGGABLE);J=D._initColumnDragTargetEl();L._dd=new YAHOO.widget.ColumnDD(this,L,M,J);}}else{}},_destroyResizeableColumns:function(){var J=this._oColumnSet.keys;for(var K=0,I=J.length;K<I;K++){if(J[K]._ddResizer){J[K]._ddResizer=J[K]._ddResizer.unreg();C.removeClass(J[K].getThEl(),D.CLASS_RESIZEABLE);}}},_initResizeableColumns:function(){this._destroyResizeableColumns();if(A.DD){var O,J,M,P,I,Q,L;for(var K=0,N=this._oColumnSet.keys.length;K<N;K++){O=this._oColumnSet.keys[K];if(O.resizeable){J=O.getThEl();C.addClass(J,D.CLASS_RESI!
 ZEABLE);M=O.getThLinerEl();P=J.appendChild(document.createElement("div"));P.className=D.CLASS_RESIZERLINER;P.appendChild(M);I=P.appendChild(document.createElement("div"));I.id=J.id+"-resizer";I.className=D.CLASS_RESIZER;O._elResizer=I;Q=D._initColumnResizerProxyEl();O._ddResizer=new YAHOO.util.ColumnResizer(this,O,J,I,Q);L=function(R){G.stopPropagation(R);};G.addListener(I,"click",L);}}}else{}},_destroyColumnHelpers:function(){this._destroyDraggableColumns();this._destroyResizeableColumns();},_initColumnHelpers:function(){if(this.get("draggableColumns")){this._initDraggableColumns();}this._initResizeableColumns();},_destroyTbodyEl:function(){var I=this._elTbody;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elTbody=null;}},_initTbodyEl:function(J){if(J){this._destroyTbodyEl();var I=J.appendChild(document.createElement("tbody"));I.tabIndex=0;I.className=D.CLASS_DATA;G.addListener(I,"focus",this._onTbodyFocus,this);
+G.addListener(I,"mouseover",this._onTableMouseover,this);G.addListener(I,"mouseout",this._onTableMouseout,this);G.addListener(I,"mousedown",this._onTableMousedown,this);G.addListener(I,"mouseup",this._onTableMouseup,this);G.addListener(I,"keydown",this._onTbodyKeydown,this);G.addListener(I,"keypress",this._onTableKeypress,this);G.addListener(I,"click",this._onTbodyClick,this);if(B.ie){I.hideFocus=true;}this._elTbody=I;}},_destroyMsgTbodyEl:function(){var I=this._elMsgTbody;if(I){var J=I.parentNode;G.purgeElement(I,true);J.removeChild(I);this._elTbody=null;}},_initMsgTbodyEl:function(L){if(L){var K=document.createElement("tbody");K.className=D.CLASS_MESSAGE;var J=K.appendChild(document.createElement("tr"));J.className=D.CLASS_FIRST+" "+D.CLASS_LAST;this._elMsgTr=J;var M=J.appendChild(document.createElement("td"));M.colSpan=this._oColumnSet.keys.length||1;M.className=D.CLASS_FIRST+" "+D.CLASS_LAST;this._elMsgTd=M;K=L.insertBefore(K,this._elTbody);var I=M.appendChild(document.!
 createElement("div"));I.className=D.CLASS_LINER;this._elMsgTbody=K;}},_initEvents:function(){this._initColumnSort();YAHOO.util.Event.addListener(document,"click",this._onDocumentClick,this);this.subscribe("paginatorChange",function(){this._handlePaginatorChange.apply(this,arguments);});this.subscribe("initEvent",function(){this.renderPaginator();});this._initCellEditing();},_initColumnSort:function(){this.subscribe("theadCellClickEvent",this.onEventSortColumn);var I=this.get("sortedBy");if(I){if(I.dir=="desc"){this._configs.sortedBy.value.dir=D.CLASS_DESC;}else{if(I.dir=="asc"){this._configs.sortedBy.value.dir=D.CLASS_ASC;}}}},_initCellEditing:function(){this.subscribe("editorBlurEvent",function(){this.onEditorBlurEvent.apply(this,arguments);});this.subscribe("editorBlockEvent",function(){this.onEditorBlockEvent.apply(this,arguments);});this.subscribe("editorUnblockEvent",function(){this.onEditorUnblockEvent.apply(this,arguments);});},_getColumnClassNames:function(L,K){var !
 I;if(H.isString(L.className)){I=[L.className];}else{if(H.isArr!
 ay(L.cla
ssName)){I=L.className;}else{I=[];}}I[I.length]=this.getId()+"-col-"+L.getSanitizedKey();I[I.length]="yui-dt-col-"+L.getSanitizedKey();var J=this.get("sortedBy")||{};if(L.key===J.key){I[I.length]=J.dir||"";}if(L.hidden){I[I.length]=D.CLASS_HIDDEN;}if(L.selected){I[I.length]=D.CLASS_SELECTED;}if(L.sortable){I[I.length]=D.CLASS_SORTABLE;}if(L.resizeable){I[I.length]=D.CLASS_RESIZEABLE;}if(L.editor){I[I.length]=D.CLASS_EDITABLE;}if(K){I=I.concat(K);}return I.join(" ");},_clearTrTemplateEl:function(){this._elTrTemplate=null;},_getTrTemplateEl:function(T,N){if(this._elTrTemplate){return this._elTrTemplate;}else{var P=document,R=P.createElement("tr"),K=P.createElement("td"),J=P.createElement("div");K.appendChild(J);var S=document.createDocumentFragment(),Q=this._oColumnSet.keys,M;var O;for(var L=0,I=Q.length;L<I;L++){M=K.cloneNode(true);M=this._formatTdEl(Q[L],M,L,(L===I-1));S.appendChild(M);}R.appendChild(S);this._elTrTemplate=R;return R;}},_formatTdEl:function(M,O,P,L){var S=thi!
 s._oColumnSet;var I=S.headers,J=I[P],N="",U;for(var K=0,T=J.length;K<T;K++){U=this._sId+"-th-"+J[K]+" ";N+=U;}O.headers=N;var R=[];if(P===0){R[R.length]=D.CLASS_FIRST;}if(L){R[R.length]=D.CLASS_LAST;}O.className=this._getColumnClassNames(M,R);O.firstChild.className=D.CLASS_LINER;if(M.width&&D._bDynStylesFallback){var Q=(M.minWidth&&(M.width<M.minWidth))?M.minWidth:M.width;O.firstChild.style.overflow="hidden";O.firstChild.style.width=Q+"px";}return O;},_addTrEl:function(K){var J=this._getTrTemplateEl();var I=J.cloneNode(true);return this._updateTrEl(I,K);},_updateTrEl:function(J,N){var M=this.get("formatRow")?this.get("formatRow").call(this,J,N):true;if(M){J.style.display="none";var O=J.childNodes,K;for(var L=0,I=O.length;L<I;++L){K=O[L];this.formatCell(O[L].firstChild,N,this._oColumnSet.keys[L]);}J.style.display="";}J.id=N.getId();return J;},_deleteTrEl:function(I){var J;if(!H.isNumber(I)){J=C.get(I).sectionRowIndex;}else{J=I;}if(H.isNumber(J)&&(J>-2)&&(J<this._elTbody.rows!
 .length)){return this._elTbody.removeChild(this.getTrEl(I));}e!
 lse{retu
rn null;}},_unsetFirstRow:function(){if(this._sFirstTrId){C.removeClass(this._sFirstTrId,D.CLASS_FIRST);this._sFirstTrId=null;}},_setFirstRow:function(){this._unsetFirstRow();var I=this.getFirstTrEl();if(I){C.addClass(I,D.CLASS_FIRST);this._sFirstTrId=I.id;}},_unsetLastRow:function(){if(this._sLastTrId){C.removeClass(this._sLastTrId,D.CLASS_LAST);this._sLastTrId=null;}},_setLastRow:function(){this._unsetLastRow();var I=this.getLastTrEl();if(I){C.addClass(I,D.CLASS_LAST);this._sLastTrId=I.id;}},_setRowStripes:function(S,K){var L=this._elTbody.rows,P=0,R=L.length,O=[],Q=0,M=[],I=0;if((S!==null)&&(S!==undefined)){var N=this.getTrEl(S);if(N){P=N.sectionRowIndex;if(H.isNumber(K)&&(K>1)){R=P+K;}}}for(var J=P;J<R;J++){if(J%2){O[Q++]=L[J];}else{M[I++]=L[J];}}if(O.length){C.replaceClass(O,D.CLASS_EVEN,D.CLASS_ODD);}if(M.length){C.replaceClass(M,D.CLASS_ODD,D.CLASS_EVEN);}},_setSelections:function(){var K=this.getSelectedRows();var M=this.getSelectedCells();if((K.length>0)||(M.length>!
 0)){var L=this._oColumnSet,J;for(var I=0;I<K.length;I++){J=C.get(K[I]);if(J){C.addClass(J,D.CLASS_SELECTED);}}for(I=0;I<M.length;I++){J=C.get(M[I].recordId);if(J){C.addClass(J.childNodes[L.getColumn(M[I].columnKey).getKeyIndex()],D.CLASS_SELECTED);}}}},_onRenderChainEnd:function(){this.hideTableMessage();if(this._elTbody.rows.length===0){this.showTableMessage(this.get("MSG_EMPTY"),D.CLASS_EMPTY);}var I=this;setTimeout(function(){if((I instanceof D)&&I._sId){if(I._bInit){I._bInit=false;I.fireEvent("initEvent");}I.fireEvent("renderEvent");I.fireEvent("refreshEvent");I.validateColumnWidths();I.fireEvent("postRenderEvent");}},0);},_onDocumentClick:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();if(!C.isAncestor(J._elContainer,M)){J.fireEvent("tableBlurEvent");if(J._oCellEditor){if(J._oCellEditor.getContainerEl){var K=J._oCellEditor.getContainerEl();if(!C.isAncestor(K,M)&&(K.id!==M.id)){J._oCellEditor.fireEvent("blurEvent",{editor:J._oCellEditor});
+}}else{if(J._oCellEditor.isActive){if(!C.isAncestor(J._oCellEditor.container,M)&&(J._oCellEditor.container.id!==M.id)){J.fireEvent("editorBlurEvent",{editor:J._oCellEditor});}}}}}},_onTableFocus:function(J,I){I.fireEvent("tableFocusEvent");},_onTheadFocus:function(J,I){I.fireEvent("theadFocusEvent");I.fireEvent("tableFocusEvent");},_onTbodyFocus:function(J,I){I.fireEvent("tbodyFocusEvent");I.fireEvent("tableFocusEvent");},_onTableMouseover:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"a":break;case"td":K=J.fireEvent("cellMouseoverEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseoverEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseoverEvent",{target:M,event:L});break;case"tr":if(M.parentNod!
 e.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMouseoverEvent",{target:M,event:L});K=J.fireEvent("headerRowMouseoverEvent",{target:M,event:L});}else{K=J.fireEvent("rowMouseoverEvent",{target:M,event:L});}break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMouseoverEvent",{target:(M||J._elContainer),event:L});},_onTableMouseout:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"a":break;case"td":K=J.fireEvent("cellMouseoutEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseoutEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseoutEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseoutEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseoutEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireE!
 vent("theadRowMouseoutEvent",{target:M,event:L});K=J.fireEvent!
 ("header
RowMouseoutEvent",{target:M,event:L});}else{K=J.fireEvent("rowMouseoutEvent",{target:M,event:L});}break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMouseoutEvent",{target:(M||J._elContainer),event:L});},_onTableMousedown:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"a":break;case"td":K=J.fireEvent("cellMousedownEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMousedownEvent",{target:M,event:L});K=J.fireEvent("headerLabelMousedownEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMousedownEvent",{target:M,event:L});K=J.fireEvent("headerCellMousedownEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMousedownEvent",{target:M,event:L});K=J.fireEvent("headerRowMousedownEvent",{target:M,event:L});}el!
 se{K=J.fireEvent("rowMousedownEvent",{target:M,event:L});}break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMousedownEvent",{target:(M||J._elContainer),event:L});},_onTableMouseup:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"a":break;case"td":K=J.fireEvent("cellMouseupEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelMouseupEvent",{target:M,event:L});K=J.fireEvent("headerLabelMouseupEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellMouseupEvent",{target:M,event:L});K=J.fireEvent("headerCellMouseupEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowMouseupEvent",{target:M,event:L});K=J.fireEvent("headerRowMouseupEvent",{target:M,event:L});}else{K=J.fireEvent("rowMouseupEvent",{target:M,event:L})!
 ;}break;default:break;}if(K===false){return;}else{M=M.parentNo!
 de;if(M)
{I=M.nodeName.toLowerCase();}}}J.fireEvent("tableMouseupEvent",{target:(M||J._elContainer),event:L});},_onTableDblclick:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"td":K=J.fireEvent("cellDblclickEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelDblclickEvent",{target:M,event:L});K=J.fireEvent("headerLabelDblclickEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellDblclickEvent",{target:M,event:L});K=J.fireEvent("headerCellDblclickEvent",{target:M,event:L});break;case"tr":if(M.parentNode.nodeName.toLowerCase()=="thead"){K=J.fireEvent("theadRowDblclickEvent",{target:M,event:L});K=J.fireEvent("headerRowDblclickEvent",{target:M,event:L});}else{K=J.fireEvent("rowDblclickEvent",{target:M,event:L});}break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableDblclickEvent",!
 {target:(M||J._elContainer),event:L});},_onTheadKeydown:function(L,J){var M=G.getTarget(L);var I=M.nodeName.toLowerCase();var K=true;while(M&&(I!="table")){switch(I){case"body":return;case"input":case"textarea":break;case"thead":K=J.fireEvent("theadKeyEvent",{target:M,event:L});break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableKeyEvent",{target:(M||J._elContainer),event:L});},_onTbodyKeydown:function(M,K){var J=K.get("selectionMode");if(J=="standard"){K._handleStandardSelectionByKey(M);}else{if(J=="single"){K._handleSingleSelectionByKey(M);}else{if(J=="cellblock"){K._handleCellBlockSelectionByKey(M);}else{if(J=="cellrange"){K._handleCellRangeSelectionByKey(M);}else{if(J=="singlecell"){K._handleSingleCellSelectionByKey(M);}}}}}if(K._oCellEditor){if(K._oCellEditor.fireEvent){K._oCellEditor.fireEvent("blurEvent",{editor:K._oCellEditor});}else{if(K._oCellEditor.isActive){K.fireEvent("editorBlurEvent",{editor:K._!
 oCellEditor});
+}}}var N=G.getTarget(M);var I=N.nodeName.toLowerCase();var L=true;while(N&&(I!="table")){switch(I){case"body":return;case"tbody":L=K.fireEvent("tbodyKeyEvent",{target:N,event:M});break;default:break;}if(L===false){return;}else{N=N.parentNode;if(N){I=N.nodeName.toLowerCase();}}}K.fireEvent("tableKeyEvent",{target:(N||K._elContainer),event:M});},_onTableKeypress:function(K,J){if(B.opera||(navigator.userAgent.toLowerCase().indexOf("mac")!==-1)&&(B.webkit<420)){var I=G.getCharCode(K);if(I==40){G.stopEvent(K);}else{if(I==38){G.stopEvent(K);}}}},_onTheadClick:function(L,J){if(J._oCellEditor){if(J._oCellEditor.fireEvent){J._oCellEditor.fireEvent("blurEvent",{editor:J._oCellEditor});}else{if(J._oCellEditor.isActive){J.fireEvent("editorBlurEvent",{editor:J._oCellEditor});}}}var M=G.getTarget(L),I=M.nodeName.toLowerCase(),K=true;while(M&&(I!="table")){switch(I){case"body":return;case"input":var N=M.type.toLowerCase();if(N=="checkbox"){K=J.fireEvent("theadCheckboxClickEvent",{target:M!
 ,event:L});}else{if(N=="radio"){K=J.fireEvent("theadRadioClickEvent",{target:M,event:L});}else{if((N=="button")||(N=="image")||(N=="submit")||(N=="reset")){K=J.fireEvent("theadButtonClickEvent",{target:M,event:L});}}}break;case"a":K=J.fireEvent("theadLinkClickEvent",{target:M,event:L});break;case"button":K=J.fireEvent("theadButtonClickEvent",{target:M,event:L});break;case"span":if(C.hasClass(M,D.CLASS_LABEL)){K=J.fireEvent("theadLabelClickEvent",{target:M,event:L});K=J.fireEvent("headerLabelClickEvent",{target:M,event:L});}break;case"th":K=J.fireEvent("theadCellClickEvent",{target:M,event:L});K=J.fireEvent("headerCellClickEvent",{target:M,event:L});break;case"tr":K=J.fireEvent("theadRowClickEvent",{target:M,event:L});K=J.fireEvent("headerRowClickEvent",{target:M,event:L});break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableClickEvent",{target:(M||J._elContainer),event:L});},_onTbodyClick:function(L,J){if(J._oC!
 ellEditor){if(J._oCellEditor.fireEvent){J._oCellEditor.fireEve!
 nt("blur
Event",{editor:J._oCellEditor});}else{if(J._oCellEditor.isActive){J.fireEvent("editorBlurEvent",{editor:J._oCellEditor});}}}var M=G.getTarget(L),I=M.nodeName.toLowerCase(),K=true;while(M&&(I!="table")){switch(I){case"body":return;case"input":var N=M.type.toLowerCase();if(N=="checkbox"){K=J.fireEvent("checkboxClickEvent",{target:M,event:L});}else{if(N=="radio"){K=J.fireEvent("radioClickEvent",{target:M,event:L});}else{if((N=="button")||(N=="image")||(N=="submit")||(N=="reset")){K=J.fireEvent("buttonClickEvent",{target:M,event:L});}}}break;case"a":K=J.fireEvent("linkClickEvent",{target:M,event:L});break;case"button":K=J.fireEvent("buttonClickEvent",{target:M,event:L});break;case"td":K=J.fireEvent("cellClickEvent",{target:M,event:L});break;case"tr":K=J.fireEvent("rowClickEvent",{target:M,event:L});break;default:break;}if(K===false){return;}else{M=M.parentNode;if(M){I=M.nodeName.toLowerCase();}}}J.fireEvent("tableClickEvent",{target:(M||J._elContainer),event:L});},_onDropdownCha!
 nge:function(J,I){var K=G.getTarget(J);I.fireEvent("dropdownChangeEvent",{event:J,target:K});},configs:null,getId:function(){return this._sId;},toString:function(){return"DataTable instance "+this._sId;},getDataSource:function(){return this._oDataSource;},getColumnSet:function(){return this._oColumnSet;},getRecordSet:function(){return this._oRecordSet;},getState:function(){return{totalRecords:this.get("paginator")?this.get("paginator").get("totalRecords"):this._oRecordSet.getLength(),pagination:this.get("paginator")?this.get("paginator").getState():null,sortedBy:this.get("sortedBy"),selectedRows:this.getSelectedRows(),selectedCells:this.getSelectedCells()};},getContainerEl:function(){return this._elContainer;},getTableEl:function(){return this._elTable;},getTheadEl:function(){return this._elThead;},getTbodyEl:function(){return this._elTbody;},getMsgTbodyEl:function(){return this._elMsgTbody;},getMsgTdEl:function(){return this._elMsgTd;},getTrEl:function(K){if(K instanceof Y!
 AHOO.widget.Record){return document.getElementById(K.getId());!
 }else{if
(H.isNumber(K)){var J=this._elTbody.rows;return((K>-1)&&(K<J.length))?J[K]:null;}else{var I=(H.isString(K))?document.getElementById(K):K;if(I&&(I.ownerDocument==document)){if(I.nodeName.toLowerCase()!="tr"){I=C.getAncestorByTagName(I,"tr");}return I;}}}return null;},getFirstTrEl:function(){return this._elTbody.rows[0]||null;},getLastTrEl:function(){var I=this._elTbody.rows;if(I.length>0){return I[I.length-1]||null;}},getNextTrEl:function(K){var I=this.getTrIndex(K);if(I!==null){var J=this._elTbody.rows;if(I<J.length-1){return J[I+1];}}return null;},getPreviousTrEl:function(K){var I=this.getTrIndex(K);if(I!==null){var J=this._elTbody.rows;if(I>0){return J[I-1];}}return null;},getTdLinerEl:function(I){var J=this.getTdEl(I);return J.firstChild||null;},getTdEl:function(I){var N;var L=C.get(I);if(L&&(L.ownerDocument==document)){if(L.nodeName.toLowerCase()!="td"){N=C.getAncestorByTagName(L,"td");}else{N=L;}return N;}else{if(I){var M,K;if(H.isString(I.columnKey)&&H.isString(I.recor!
 dId)){M=this.getRecord(I.recordId);var O=this.getColumn(I.columnKey);if(O){K=O.getKeyIndex();}}if(I.record&&I.column&&I.column.getKeyIndex){M=I.record;K=I.column.getKeyIndex();}var J=this.getTrEl(M);if((K!==null)&&J&&J.cells&&J.cells.length>0){return J.cells[K]||null;}}}return null;},getFirstTdEl:function(J){var I=this.getTrEl(J)||this.getFirstTrEl();if(I&&(I.cells.length>0)){return I.cells[0];}return null;},getLastTdEl:function(J){var I=this.getTrEl(J)||this.getLastTrEl();if(I&&(I.cells.length>0)){return I.cells[I.cells.length-1];}return null;},getNextTdEl:function(I){var M=this.getTdEl(I);if(M){var K=M.cellIndex;var J=this.getTrEl(M);if(K<J.cells.length-1){return J.cells[K+1];}else{var L=this.getNextTrEl(J);if(L){return L.cells[0];}}}return null;},getPreviousTdEl:function(I){var M=this.getTdEl(I);if(M){var K=M.cellIndex;var J=this.getTrEl(M);if(K>0){return J.cells[K-1];}else{var L=this.getPreviousTrEl(J);
+if(L){return this.getLastTdEl(L);}}}return null;},getAboveTdEl:function(I){var K=this.getTdEl(I);if(K){var J=this.getPreviousTrEl(K);if(J){return J.cells[K.cellIndex];}}return null;},getBelowTdEl:function(I){var K=this.getTdEl(I);if(K){var J=this.getNextTrEl(K);if(J){return J.cells[K.cellIndex];}}return null;},getThLinerEl:function(J){var I=this.getColumn(J);return(I)?I.getThLinerEl():null;},getThEl:function(K){var L;if(K instanceof YAHOO.widget.Column){var J=K;L=J.getThEl();if(L){return L;}}else{var I=C.get(K);if(I&&(I.ownerDocument==document)){if(I.nodeName.toLowerCase()!="th"){L=C.getAncestorByTagName(I,"th");}else{L=I;}return L;}}return null;},getTrIndex:function(M){var L;if(M instanceof YAHOO.widget.Record){L=this._oRecordSet.getRecordIndex(M);if(L===null){return null;}}else{if(H.isNumber(M)){L=M;}}if(H.isNumber(L)){if((L>-1)&&(L<this._oRecordSet.getLength())){var K=this.get("paginator");if(K){var J=K.getPageRecords();if(J&&L>=J[0]&&L<=J[1]){return L-J[0];}else{return !
 null;}}else{return L;}}else{return null;}}else{var I=this.getTrEl(M);if(I&&(I.ownerDocument==document)&&(I.parentNode==this._elTbody)){return I.sectionRowIndex;}}return null;},initializeTable:function(){this._bInit=true;this._oRecordSet.reset();var I=this.get("paginator");if(I){I.set("totalRecords",0);}this._unselectAllTrEls();this._unselectAllTdEls();this._aSelections=null;this._oAnchorRecord=null;this._oAnchorCell=null;this.set("sortedBy",null);},_runRenderChain:function(){this._oChainRender.run();},render:function(){this._oChainRender.stop();var O,M,L,P,I;var R=this.get("paginator");if(R){I=this._oRecordSet.getRecords(R.getStartIndex(),R.getRowsPerPage());}else{I=this._oRecordSet.getRecords();}var J=this._elTbody,N=this.get("renderLoopSize"),Q=I.length;if(Q>0){J.style.display="none";while(J.lastChild){J.removeChild(J.lastChild);}J.style.display="";this._oChainRender.add({method:function(U){if((this instanceof D)&&this._sId){var T=U.nCurrentRecord,W=((U.nCurrentRecord+U.n!
 LoopLength)>Q)?Q:(U.nCurrentRecord+U.nLoopLength),S,V;J.style.!
 display=
"none";for(;T<W;T++){S=C.get(I[T].getId());S=S||this._addTrEl(I[T]);V=J.childNodes[T]||null;J.insertBefore(S,V);}J.style.display="";U.nCurrentRecord=T;}},scope:this,iterations:(N>0)?Math.ceil(Q/N):1,argument:{nCurrentRecord:0,nLoopLength:(N>0)?N:Q},timeout:(N>0)?0:-1});this._oChainRender.add({method:function(S){if((this instanceof D)&&this._sId){while(J.rows.length>Q){J.removeChild(J.lastChild);}this._setFirstRow();this._setLastRow();this._setRowStripes();this._setSelections();}},scope:this,timeout:(N>0)?0:-1});}else{var K=J.rows.length;if(K>0){this._oChainRender.add({method:function(T){if((this instanceof D)&&this._sId){var S=T.nCurrent,V=T.nLoopLength,U=(S-V<0)?-1:S-V;J.style.display="none";for(;S>U;S--){J.deleteRow(-1);}J.style.display="";T.nCurrent=S;}},scope:this,iterations:(N>0)?Math.ceil(K/N):1,argument:{nCurrent:K,nLoopLength:(N>0)?N:K},timeout:(N>0)?0:-1});}}this._runRenderChain();},disable:function(){var I=this._elTable;var J=this._elMask;J.style.width=I.offsetWidt!
 h+"px";J.style.height=I.offsetHeight+"px";J.style.display="";this.fireEvent("disableEvent");},undisable:function(){this._elMask.style.display="none";this.fireEvent("undisableEvent");},destroy:function(){var J=this.toString();this._oChainRender.stop();D._destroyColumnDragTargetEl();D._destroyColumnResizerProxyEl();this._destroyColumnHelpers();var L;for(var K=0,I=this._oColumnSet.flat.length;K<I;K++){L=this._oColumnSet.flat[K].editor;if(L&&L.destroy){L.destroy();this._oColumnSet.flat[K].editor=null;}}this._oRecordSet.unsubscribeAll();this.unsubscribeAll();G.removeListener(document,"click",this._onDocumentClick);this._destroyContainerEl(this._elContainer);for(var M in this){if(H.hasOwnProperty(this,M)){this[M]=null;}}D._nCurrentCount--;if(D._nCurrentCount<1){if(D._elDynStyleNode){document.getElementsByTagName("head")[0].removeChild(D._elDynStyleNode);D._elDynStyleNode=null;}}},showTableMessage:function(J,I){var K=this._elMsgTd;if(H.isString(J)){K.firstChild.innerHTML=J;}if(H.i!
 sString(I)){K.className=I;}this._elMsgTbody.style.display="";t!
 his.fire
Event("tableMsgShowEvent",{html:J,className:I});},hideTableMessage:function(){if(this._elMsgTbody.style.display!="none"){this._elMsgTbody.style.display="none";this._elMsgTbody.parentNode.style.width="";this.fireEvent("tableMsgHideEvent");}},focus:function(){this.focusTbodyEl();},focusTheadEl:function(){this._focusEl(this._elThead);},focusTbodyEl:function(){this._focusEl(this._elTbody);},onShow:function(){this.validateColumnWidths();for(var L=this._oColumnSet.keys,K=0,I=L.length,J;K<I;K++){J=L[K];if(J._ddResizer){J._ddResizer.resetResizerEl();}}},getRecordIndex:function(L){var K;if(!H.isNumber(L)){if(L instanceof YAHOO.widget.Record){return this._oRecordSet.getRecordIndex(L);}else{var J=this.getTrEl(L);if(J){K=J.sectionRowIndex;}}}else{K=L;}if(H.isNumber(K)){var I=this.get("paginator");if(I){return I.get("recordOffset")+K;}else{return K;}}return null;},getRecord:function(K){var J=this._oRecordSet.getRecord(K);if(!J){var I=this.getTrEl(K);if(I){J=this._oRecordSet.getRecord(thi!
 s.getRecordIndex(I.sectionRowIndex));}}if(J instanceof YAHOO.widget.Record){return this._oRecordSet.getRecord(J);}else{return null;}},getColumn:function(L){var N=this._oColumnSet.getColumn(L);if(!N){var M=this.getTdEl(L);if(M){N=this._oColumnSet.getColumn(M.cellIndex);}else{M=this.getThEl(L);if(M){var J=this._oColumnSet.flat;for(var K=0,I=J.length;K<I;K++){if(J[K].getThEl().id===M.id){N=J[K];}}}}}if(!N){}return N;},getColumnById:function(I){return this._oColumnSet.getColumnById(I);},getColumnSortDir:function(K,L){if(K.sortOptions&&K.sortOptions.defaultOrder){if(K.sortOptions.defaultOrder=="asc"){K.sortOptions.defaultDir=D.CLASS_ASC;}else{if(K.sortOptions.defaultOrder=="desc"){K.sortOptions.defaultDir=D.CLASS_DESC;}}}var J=(K.sortOptions&&K.sortOptions.defaultDir)?K.sortOptions.defaultDir:D.CLASS_ASC;var I=false;L=L||this.get("sortedBy");if(L&&(L.key===K.key)){I=true;if(L.dir){J=(L.dir===D.CLASS_ASC)?D.CLASS_DESC:D.CLASS_ASC;
+}else{J=(J===D.CLASS_ASC)?D.CLASS_DESC:D.CLASS_ASC;}}return J;},doBeforeSortColumn:function(J,I){this.showTableMessage(this.get("MSG_LOADING"),D.CLASS_LOADING);return true;},sortColumn:function(M,J){if(M&&(M instanceof YAHOO.widget.Column)){if(!M.sortable){C.addClass(this.getThEl(M),D.CLASS_SORTABLE);}if(J&&(J!==D.CLASS_ASC)&&(J!==D.CLASS_DESC)){J=null;}var N=J||this.getColumnSortDir(M);var L=this.get("sortedBy")||{};var T=(L.key===M.key)?true:false;var P=this.doBeforeSortColumn(M,N);if(P){if(this.get("dynamicData")){var S=this.getState();if(S.pagination){S.pagination.recordOffset=0;}S.sortedBy={key:M.key,dir:N};var K=this.get("generateRequest")(S,this);this.unselectAllRows();this.unselectAllCells();var R={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:S,scope:this};this._oDataSource.sendRequest(K,R);}else{var I=(M.sortOptions&&H.isFunction(M.sortOptions.sortFunction))?M.sortOptions.sortFunction:null;if(!T||J||I){var Q=(M.sortOptions&&M.sortOptio!
 ns.field)?M.sortOptions.field:M.field;I=I||function(V,U,X){var W=YAHOO.util.Sort.compare(V.getData(Q),U.getData(Q),X);if(W===0){return YAHOO.util.Sort.compare(V.getCount(),U.getCount(),X);}else{return W;}};this._oRecordSet.sortRecords(I,((N==D.CLASS_DESC)?true:false));}else{this._oRecordSet.reverseRecords();}var O=this.get("paginator");if(O){O.setPage(1,true);}this.render();this.set("sortedBy",{key:M.key,dir:N,column:M});}this.fireEvent("columnSortEvent",{column:M,dir:N});return;}}},setColumnWidth:function(J,I){if(!(J instanceof YAHOO.widget.Column)){J=this.getColumn(J);}if(J){if(H.isNumber(I)){I=(I>J.minWidth)?I:J.minWidth;J.width=I;this._setColumnWidth(J,I+"px");this.fireEvent("columnSetWidthEvent",{column:J,width:I});}else{if(I===null){J.width=I;this._setColumnWidth(J,"auto");this.validateColumnWidths(J);this.fireEvent("columnUnsetWidthEvent",{column:J});}}this._clearTrTemplateEl();}else{}},_setColumnWidth:function(J,I,K){if(J&&(J.getKeyIndex()!==null)){K=K||(((I==="")||!
 (I==="auto"))?"visible":"hidden");if(!D._bDynStylesFallback){t!
 his._set
ColumnWidthDynStyles(J,I,K);}else{this._setColumnWidthDynFunction(J,I,K);}}else{}},_setColumnWidthDynStyles:function(M,L,N){var J=D._elDynStyleNode,K;if(!J){J=document.createElement("style");J.type="text/css";J=document.getElementsByTagName("head").item(0).appendChild(J);D._elDynStyleNode=J;}if(J){var I="."+this.getId()+"-col-"+M.getSanitizedKey()+" ."+D.CLASS_LINER;if(this._elTbody){this._elTbody.style.display="none";}K=D._oDynStyles[I];if(!K){if(J.styleSheet&&J.styleSheet.addRule){J.styleSheet.addRule(I,"overflow:"+N);J.styleSheet.addRule(I,"width:"+L);K=J.styleSheet.rules[J.styleSheet.rules.length-1];D._oDynStyles[I]=K;}else{if(J.sheet&&J.sheet.insertRule){J.sheet.insertRule(I+" {overflow:"+N+";width:"+L+";}",J.sheet.cssRules.length);K=J.sheet.cssRules[J.sheet.cssRules.length-1];D._oDynStyles[I]=K;}}}else{K.style.overflow=N;K.style.width=L;}if(this._elTbody){this._elTbody.style.display="";}}if(!K){D._bDynStylesFallback=true;this._setColumnWidthDynFunction(M,L);}},_setColu!
 mnWidthDynFunction:function(O,J,P){if(J=="auto"){J="";}var I=this._elTbody?this._elTbody.rows.length:0;if(!this._aDynFunctions[I]){var N,M,L;var Q=["var colIdx=oColumn.getKeyIndex();","oColumn.getThLinerEl().style.overflow="];for(N=I-1,M=2;N>=0;--N){Q[M++]="this._elTbody.rows[";Q[M++]=N;Q[M++]="].cells[colIdx].firstChild.style.overflow=";}Q[M]="sOverflow;";Q[M+1]="oColumn.getThLinerEl().style.width=";for(N=I-1,L=M+2;N>=0;--N){Q[L++]="this._elTbody.rows[";Q[L++]=N;Q[L++]="].cells[colIdx].firstChild.style.width=";}Q[L]="sWidth;";this._aDynFunctions[I]=new Function("oColumn","sWidth","sOverflow",Q.join(""));}var K=this._aDynFunctions[I];if(K){K.call(this,O,J,P);}},validateColumnWidths:function(N){var K=this._elColgroup;var P=K.cloneNode(true);var O=false;var M=this._oColumnSet.keys;var J;if(N&&!N.hidden&&!N.width&&(N.getKeyIndex()!==null)){J=N.getThLinerEl();if((N.minWidth>0)&&(J.offsetWidth<N.minWidth)){P.childNodes[N.getKeyIndex()].style.width=N.minWidth+(parseInt(C.getStyle!
 (J,"paddingLeft"),10)|0)+(parseInt(C.getStyle(J,"paddingRight"!
 ),10)|0)
+"px";O=true;}else{if((N.maxAutoWidth>0)&&(J.offsetWidth>N.maxAutoWidth)){this._setColumnWidth(N,N.maxAutoWidth+"px","hidden");}}}else{for(var L=0,I=M.length;L<I;L++){N=M[L];if(!N.hidden&&!N.width){J=N.getThLinerEl();if((N.minWidth>0)&&(J.offsetWidth<N.minWidth)){P.childNodes[L].style.width=N.minWidth+(parseInt(C.getStyle(J,"paddingLeft"),10)|0)+(parseInt(C.getStyle(J,"paddingRight"),10)|0)+"px";O=true;}else{if((N.maxAutoWidth>0)&&(J.offsetWidth>N.maxAutoWidth)){this._setColumnWidth(N,N.maxAutoWidth+"px","hidden");}}}}}if(O){K.parentNode.replaceChild(P,K);this._elColgroup=P;}},_clearMinWidth:function(I){if(I.getKeyIndex()!==null){this._elColgroup.childNodes[I.getKeyIndex()].style.width="";}},_restoreMinWidth:function(I){if(I.minWidth&&(I.getKeyIndex()!==null)){this._elColgroup.childNodes[I.getKeyIndex()].style.width=I.minWidth+"px";}},hideColumn:function(N){if(!(N instanceof YAHOO.widget.Column)){N=this.getColumn(N);}if(N&&!N.hidden&&N.getTreeIndex()!==null){var O=this.getTb!
 odyEl().rows;var I=O.length;var M=this._oColumnSet.getDescendants(N);for(var L=0;L<M.length;L++){var K=M[L];K.hidden=true;C.addClass(K.getThEl(),D.CLASS_HIDDEN);var P=K.getKeyIndex();if(P!==null){this._clearMinWidth(N);for(var J=0;J<I;J++){C.addClass(O[J].cells[P],D.CLASS_HIDDEN);}}this.fireEvent("columnHideEvent",{column:K});}this._repaintOpera();this._clearTrTemplateEl();}else{}},showColumn:function(N){if(!(N instanceof YAHOO.widget.Column)){N=this.getColumn(N);}if(N&&N.hidden&&(N.getTreeIndex()!==null)){var O=this.getTbodyEl().rows;var I=O.length;var M=this._oColumnSet.getDescendants(N);for(var L=0;L<M.length;L++){var K=M[L];K.hidden=false;C.removeClass(K.getThEl(),D.CLASS_HIDDEN);var P=K.getKeyIndex();if(P!==null){this._restoreMinWidth(N);for(var J=0;J<I;J++){C.removeClass(O[J].cells[P],D.CLASS_HIDDEN);}}this.fireEvent("columnShowEvent",{column:K});}this._clearTrTemplateEl();}else{}},removeColumn:function(O){if(!(O instanceof YAHOO.widget.Column)){O=this.getColumn(O);
+}if(O){var L=O.getTreeIndex();if(L!==null){var N,Q,P=O.getKeyIndex();if(P===null){var T=[];var I=this._oColumnSet.getDescendants(O);for(N=0,Q=I.length;N<Q;N++){var R=I[N].getKeyIndex();if(R!==null){T[T.length]=R;}}if(T.length>0){P=T;}}else{P=[P];}if(P!==null){P.sort(function(V,U){return YAHOO.util.Sort.compare(V,U);});this._destroyTheadEl();var J=this._oColumnSet.getDefinitions();O=J.splice(L,1)[0];this._initColumnSet(J);this._initTheadEl();for(N=P.length-1;N>-1;N--){this._removeColgroupColEl(P[N]);}var S=this._elTbody.rows;if(S.length>0){var M=this.get("renderLoopSize"),K=S.length;this._oChainRender.add({method:function(X){if((this instanceof D)&&this._sId){var W=X.nCurrentRow,U=M>0?Math.min(W+M,S.length):S.length,Y=X.aIndexes,V;for(;W<U;++W){for(V=Y.length-1;V>-1;V--){S[W].removeChild(S[W].childNodes[Y[V]]);}}X.nCurrentRow=W;}},iterations:(M>0)?Math.ceil(K/M):1,argument:{nCurrentRow:0,aIndexes:P},scope:this,timeout:(M>0)?0:-1});this._runRenderChain();}this.fireEvent("colu!
 mnRemoveEvent",{column:O});return O;}}}},insertColumn:function(Q,R){if(Q instanceof YAHOO.widget.Column){Q=Q.getDefinition();}else{if(Q.constructor!==Object){return;}}var W=this._oColumnSet;if(!H.isValue(R)||!H.isNumber(R)){R=W.tree[0].length;}this._destroyTheadEl();var Y=this._oColumnSet.getDefinitions();Y.splice(R,0,Q);this._initColumnSet(Y);this._initTheadEl();W=this._oColumnSet;var M=W.tree[0][R];var O,S,V=[];var K=W.getDescendants(M);for(O=0,S=K.length;O<S;O++){var T=K[O].getKeyIndex();if(T!==null){V[V.length]=T;}}if(V.length>0){var X=V.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);})[0];for(O=V.length-1;O>-1;O--){this._insertColgroupColEl(V[O]);}var U=this._elTbody.rows;if(U.length>0){var N=this.get("renderLoopSize"),L=U.length;var J=[],P;for(O=0,S=V.length;O<S;O++){var I=V[O];P=this._getTrTemplateEl().childNodes[O].cloneNode(true);P=this._formatTdEl(this._oColumnSet.keys[I],P,I,(I===this._oColumnSet.keys.length-1));J[I]=P;}this._oChainRender.add({method:func!
 tion(c){if((this instanceof D)&&this._sId){var b=c.nCurrentRow!
 ,a,e=c.d
escKeyIndexes,Z=N>0?Math.min(b+N,U.length):U.length,d;for(;b<Z;++b){d=U[b].childNodes[X]||null;for(a=e.length-1;a>-1;a--){U[b].insertBefore(c.aTdTemplates[e[a]].cloneNode(true),d);}}c.nCurrentRow=b;}},iterations:(N>0)?Math.ceil(L/N):1,argument:{nCurrentRow:0,aTdTemplates:J,descKeyIndexes:V},scope:this,timeout:(N>0)?0:-1});this._runRenderChain();}this.fireEvent("columnInsertEvent",{column:Q,index:R});return M;}},reorderColumn:function(P,Q){if(!(P instanceof YAHOO.widget.Column)){P=this.getColumn(P);}if(P&&YAHOO.lang.isNumber(Q)){var Y=P.getTreeIndex();if((Y!==null)&&(Y!==Q)){var O,R,K=P.getKeyIndex(),J,U=[],S;if(K===null){J=this._oColumnSet.getDescendants(P);for(O=0,R=J.length;O<R;O++){S=J[O].getKeyIndex();if(S!==null){U[U.length]=S;}}if(U.length>0){K=U;}}else{K=[K];}if(K!==null){K.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);});this._destroyTheadEl();var V=this._oColumnSet.getDefinitions();var I=V.splice(Y,1)[0];V.splice(Q,0,I);this._initColumnSet(V);this._initThea!
 dEl();var M=this._oColumnSet.tree[0][Q];var X=M.getKeyIndex();if(X===null){U=[];J=this._oColumnSet.getDescendants(M);for(O=0,R=J.length;O<R;O++){S=J[O].getKeyIndex();if(S!==null){U[U.length]=S;}}if(U.length>0){X=U;}}else{X=[X];}var W=X.sort(function(c,Z){return YAHOO.util.Sort.compare(c,Z);})[0];this._reorderColgroupColEl(K,W);var T=this._elTbody.rows;if(T.length>0){var N=this.get("renderLoopSize"),L=T.length;this._oChainRender.add({method:function(c){if((this instanceof D)&&this._sId){var b=c.nCurrentRow,a,e,d,Z=N>0?Math.min(b+N,T.length):T.length,g=c.aIndexes,f;for(;b<Z;++b){e=[];f=T[b];for(a=g.length-1;a>-1;a--){e.push(f.removeChild(f.childNodes[g[a]]));}d=f.childNodes[W]||null;for(a=e.length-1;a>-1;a--){f.insertBefore(e[a],d);}}c.nCurrentRow=b;}},iterations:(N>0)?Math.ceil(L/N):1,argument:{nCurrentRow:0,aIndexes:K},scope:this,timeout:(N>0)?0:-1});this._runRenderChain();}this.fireEvent("columnReorderEvent",{column:M});return M;}}}},selectColumn:function(K){K=this.getColu!
 mn(K);if(K&&!K.selected){if(K.getKeyIndex()!==null){K.selected!
 =true;va
r L=K.getThEl();C.addClass(L,D.CLASS_SELECTED);var J=this.getTbodyEl().rows;var I=this._oChainRender;I.add({method:function(M){if((this instanceof D)&&this._sId&&J[M.rowIndex]&&J[M.rowIndex].cells[M.cellIndex]){C.addClass(J[M.rowIndex].cells[M.cellIndex],D.CLASS_SELECTED);}M.rowIndex++;},scope:this,iterations:J.length,argument:{rowIndex:0,cellIndex:K.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnSelectEvent",{column:K});}else{}}},unselectColumn:function(K){K=this.getColumn(K);if(K&&K.selected){if(K.getKeyIndex()!==null){K.selected=false;var L=K.getThEl();C.removeClass(L,D.CLASS_SELECTED);var J=this.getTbodyEl().rows;var I=this._oChainRender;I.add({method:function(M){if((this instanceof D)&&this._sId&&J[M.rowIndex]&&J[M.rowIndex].cells[M.cellIndex]){C.removeClass(J[M.rowIndex].cells[M.cellIndex],D.CLASS_SELECTED);}M.rowIndex++;},scope:this,iterations:J.length,argument:{!
 rowIndex:0,cellIndex:K.getKeyIndex()}});this._clearTrTemplateEl();this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnselectEvent",{column:K});}else{}}},getSelectedColumns:function(M){var J=[];var K=this._oColumnSet.keys;for(var L=0,I=K.length;L<I;L++){if(K[L].selected){J[J.length]=K[L];}}return J;},highlightColumn:function(I){var L=this.getColumn(I);if(L&&(L.getKeyIndex()!==null)){var M=L.getThEl();C.addClass(M,D.CLASS_HIGHLIGHTED);var K=this.getTbodyEl().rows;var J=this._oChainRender;J.add({method:function(N){if((this instanceof D)&&this._sId&&K[N.rowIndex]&&K[N.rowIndex].cells[N.cellIndex]){C.addClass(K[N.rowIndex].cells[N.cellIndex],D.CLASS_HIGHLIGHTED);}N.rowIndex++;},scope:this,iterations:K.length,argument:{rowIndex:0,cellIndex:L.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";
+this.fireEvent("columnHighlightEvent",{column:L});}else{}},unhighlightColumn:function(I){var L=this.getColumn(I);if(L&&(L.getKeyIndex()!==null)){var M=L.getThEl();C.removeClass(M,D.CLASS_HIGHLIGHTED);var K=this.getTbodyEl().rows;var J=this._oChainRender;J.add({method:function(N){if((this instanceof D)&&this._sId&&K[N.rowIndex]&&K[N.rowIndex].cells[N.cellIndex]){C.removeClass(K[N.rowIndex].cells[N.cellIndex],D.CLASS_HIGHLIGHTED);}N.rowIndex++;},scope:this,iterations:K.length,argument:{rowIndex:0,cellIndex:L.getKeyIndex()},timeout:-1});this._elTbody.style.display="none";this._runRenderChain();this._elTbody.style.display="";this.fireEvent("columnUnhighlightEvent",{column:L});}else{}},addRow:function(O,K){if(H.isNumber(K)&&(K<0||K>this._oRecordSet.getLength())){return;}if(O&&H.isObject(O)){var M=this._oRecordSet.addRecord(O,K);if(M){var I;var J=this.get("paginator");if(J){var N=J.get("totalRecords");if(N!==E.Paginator.VALUE_UNLIMITED){J.set("totalRecords",N+1);}I=this.getRecord!
 Index(M);var L=(J.getPageRecords())[1];if(I<=L){this.render();}this.fireEvent("rowAddEvent",{record:M});return;}else{I=this.getTrIndex(M);if(H.isNumber(I)){this._oChainRender.add({method:function(R){if((this instanceof D)&&this._sId){var S=R.record;var P=R.recIndex;var T=this._addTrEl(S);if(T){var Q=(this._elTbody.rows[P])?this._elTbody.rows[P]:null;this._elTbody.insertBefore(T,Q);if(P===0){this._setFirstRow();}if(Q===null){this._setLastRow();}this._setRowStripes();this.hideTableMessage();this.fireEvent("rowAddEvent",{record:S});}}},argument:{record:M,recIndex:I},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}}},addRows:function(K,N){if(H.isNumber(N)&&(N<0||N>this._oRecordSet.getLength())){return;}if(H.isArray(K)){var O=this._oRecordSet.addRecords(K,N);if(O){var S=this.getRecordIndex(O[0]);var R=this.get("paginator");if(R){var P=R.get("totalRecords");if(P!==E.Paginator.VALUE_UNLIMITED){R.set("totalRecords",P+O.length);}var Q=(R.get!
 PageRecords())[1];if(S<=Q){this.render();}this.fireEvent("rows!
 AddEvent
",{records:O});return;}else{var M=this.get("renderLoopSize");var J=S+K.length;var I=(J-S);var L=(S>=this._elTbody.rows.length);this._oChainRender.add({method:function(X){if((this instanceof D)&&this._sId){var Y=X.aRecords,W=X.nCurrentRow,V=X.nCurrentRecord,T=M>0?Math.min(W+M,J):J,Z=document.createDocumentFragment(),U=(this._elTbody.rows[W])?this._elTbody.rows[W]:null;for(;W<T;W++,V++){Z.appendChild(this._addTrEl(Y[V]));}this._elTbody.insertBefore(Z,U);X.nCurrentRow=W;X.nCurrentRecord=V;}},iterations:(M>0)?Math.ceil(J/M):1,argument:{nCurrentRow:S,nCurrentRecord:0,aRecords:O},scope:this,timeout:(M>0)?0:-1});this._oChainRender.add({method:function(U){var T=U.recIndex;if(T===0){this._setFirstRow();}if(U.isLast){this._setLastRow();}this._setRowStripes();this.fireEvent("rowsAddEvent",{records:O});},argument:{recIndex:S,isLast:L},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage();return;}}}},updateRow:function(T,J){var Q=T;if(!H.isNumber(Q)){Q=this.getRecordInde!
 x(T);}if(H.isNumber(Q)&&(Q>=0)){var R=this._oRecordSet,P=R.getRecord(Q);if(P){var N=this._oRecordSet.setRecord(J,Q),I=this.getTrEl(P),O=P?P.getData():null;if(N){var S=this._aSelections||[],M=0,K=P.getId(),L=N.getId();for(;M<S.length;M++){if((S[M]===K)){S[M]=L;}else{if(S[M].recordId===K){S[M].recordId=L;}}}this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){var V=this.get("paginator");if(V){var U=(V.getPageRecords())[0],W=(V.getPageRecords())[1];if((Q>=U)||(Q<=W)){this.render();}}else{if(I){this._updateTrEl(I,N);}else{this.getTbodyEl().appendChild(this._addTrEl(N));}}this.fireEvent("rowUpdateEvent",{record:N,oldData:O});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}return;},updateRows:function(V,K){if(H.isArray(K)){var O=V,J=this._oRecordSet;if(!H.isNumber(V)){O=this.getRecordIndex(V);}if(H.isNumber(O)&&(O>=0)&&(O<J.getLength())){var Z=O+K.length,W=J.getRecords(O,K.length),b=J.setRecords(K,O);if(b){var Q!
 =this._aSelections||[],Y=0,X,T,U;for(;Y<Q.length;Y++){for(X=0;!
 X<W.leng
th;X++){U=W[X].getId();if((Q[Y]===U)){Q[Y]=b[X].getId();}else{if(Q[Y].recordId===U){Q[Y].recordId=b[X].getId();}}}}var a=this.get("paginator");if(a){var P=(a.getPageRecords())[0],M=(a.getPageRecords())[1];if((O>=P)||(Z<=M)){this.render();}this.fireEvent("rowsAddEvent",{newRecords:b,oldRecords:W});return;}else{var I=this.get("renderLoopSize"),R=K.length,L=this._elTbody.rows.length,S=(Z>=L),N=(Z>L);this._oChainRender.add({method:function(f){if((this instanceof D)&&this._sId){var g=f.aRecords,e=f.nCurrentRow,d=f.nDataPointer,c=I>0?Math.min(e+I,O+g.length):O+g.length;for(;e<c;e++,d++){if(N&&(e>=L)){this._elTbody.appendChild(this._addTrEl(g[d]));}else{this._updateTrEl(this._elTbody.rows[e],g[d]);}}f.nCurrentRow=e;f.nDataPointer=d;}},iterations:(I>0)?Math.ceil(R/I):1,argument:{nCurrentRow:O,aRecords:b,nDataPointer:0,isAdding:N},scope:this,timeout:(I>0)?0:-1});this._oChainRender.add({method:function(d){var c=d.recIndex;if(c===0){this._setFirstRow();}if(d.isLast){this._setLastRow();!
 }this._setRowStripes();this.fireEvent("rowsAddEvent",{newRecords:b,oldRecords:W});},argument:{recIndex:O,isLast:S},scope:this,timeout:-1});this._runRenderChain();this.hideTableMessage();return;}}}}},deleteRow:function(R){var J=(H.isNumber(R))?R:this.getRecordIndex(R);if(H.isNumber(J)){var S=this.getRecord(J);if(S){var L=this.getTrIndex(J);var O=S.getId();var Q=this._aSelections||[];for(var M=Q.length-1;M>-1;M--){if((H.isString(Q[M])&&(Q[M]===O))||(H.isObject(Q[M])&&(Q[M].recordId===O))){Q.splice(M,1);}}var K=this._oRecordSet.deleteRecord(J);if(K){var P=this.get("paginator");if(P){var N=P.get("totalRecords"),I=P.getPageRecords();if(N!==E.Paginator.VALUE_UNLIMITED){P.set("totalRecords",N-1);}if(!I||J<=I[1]){this.render();}this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){this.fireEvent("rowDeleteEvent",{recordIndex:J,oldData:K,trElIndex:L});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});
+this._runRenderChain();}else{if(H.isNumber(L)){this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){var T=(L==this.getLastTrEl().sectionRowIndex);this._deleteTrEl(L);if(this._elTbody.rows.length>0){if(L===0){this._setFirstRow();}if(T){this._setLastRow();}if(L!=this._elTbody.rows.length){this._setRowStripes(L);}}this.fireEvent("rowDeleteEvent",{recordIndex:J,oldData:K,trElIndex:L});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();return;}}}}}return null;},deleteRows:function(X,R){var K=(H.isNumber(X))?X:this.getRecordIndex(X);if(H.isNumber(K)){var Y=this.getRecord(K);if(Y){var L=this.getTrIndex(K);var T=Y.getId();var W=this._aSelections||[];for(var P=W.length-1;P>-1;P--){if((H.isString(W[P])&&(W[P]===T))||(H.isObject(W[P])&&(W[P].recordId===T))){W.splice(P,1);}}var M=K;var V=K;if(R&&H.isNumber(R)){M=(R>0)?K+R-1:K;V=(R>0)?K:K+R+1;R=(R>0)?R:R*-1;if(V<0){V=0;R=M-V+1;}}else{R=1;}var O=this._oRecordSet.deleteRecords(V,R);i!
 f(O){var U=this.get("paginator"),Q=this.get("renderLoopSize");if(U){var S=U.get("totalRecords"),J=U.getPageRecords();if(S!==E.Paginator.VALUE_UNLIMITED){U.set("totalRecords",S-O.length);}if(!J||V<=J[1]){this.render();}this._oChainRender.add({method:function(Z){if((this instanceof D)&&this._sId){this.fireEvent("rowsDeleteEvent",{recordIndex:V,oldData:O,count:R});}},scope:this,timeout:(Q>0)?0:-1});this._runRenderChain();return;}else{if(H.isNumber(L)){var N=V;var I=R;this._oChainRender.add({method:function(b){if((this instanceof D)&&this._sId){var a=b.nCurrentRow,Z=(Q>0)?(Math.max(a-Q,N)-1):N-1;for(;a>Z;--a){this._deleteTrEl(a);}b.nCurrentRow=a;}},iterations:(Q>0)?Math.ceil(R/Q):1,argument:{nCurrentRow:M},scope:this,timeout:(Q>0)?0:-1});this._oChainRender.add({method:function(){if(this._elTbody.rows.length>0){this._setFirstRow();this._setLastRow();this._setRowStripes();}this.fireEvent("rowsDeleteEvent",{recordIndex:V,oldData:O,count:R});},scope:this,timeout:-1});this._runRende!
 rChain();return;}}}}}return null;},formatCell:function(L,K,M){!
 if(!K){K
=this.getRecord(L);}if(!M){M=this.getColumn(L.parentNode.cellIndex);}if(K&&M){var I=M.field;var N=K.getData(I);var J=typeof M.formatter==="function"?M.formatter:D.Formatter[M.formatter+""]||D.Formatter.defaultFormatter;if(J){J.call(this,L,K,M,N);}else{L.innerHTML=N;}this.fireEvent("cellFormatEvent",{record:K,column:M,key:M.key,el:L});}else{}},updateCell:function(J,L,N){L=(L instanceof YAHOO.widget.Column)?L:this.getColumn(L);if(L&&L.getKey()&&(J instanceof YAHOO.widget.Record)){var K=L.getKey(),M=J.getData(K);this._oRecordSet.updateRecordValue(J,K,N);var I=this.getTdEl({record:J,column:L});if(I){this._oChainRender.add({method:function(){if((this instanceof D)&&this._sId){this.formatCell(I.firstChild);this.fireEvent("cellUpdateEvent",{record:J,column:L,oldData:M});}},scope:this,timeout:(this.get("renderLoopSize")>0)?0:-1});this._runRenderChain();}else{this.fireEvent("cellUpdateEvent",{record:J,column:L,oldData:M});}}},_updatePaginator:function(J){var I=this.get("paginator");i!
 f(I&&J!==I){I.unsubscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}if(J){J.subscribe("changeRequest",this.onPaginatorChangeRequest,this,true);}},_handlePaginatorChange:function(K){if(K.prevValue===K.newValue){return;}var M=K.newValue,L=K.prevValue,J=this._defaultPaginatorContainers();if(L){if(L.getContainerNodes()[0]==J[0]){L.set("containers",[]);}L.destroy();if(J[0]){if(M&&!M.getContainerNodes().length){M.set("containers",J);}else{for(var I=J.length-1;I>=0;--I){if(J[I]){J[I].parentNode.removeChild(J[I]);}}}}}if(!this._bInit){this.render();}if(M){this.renderPaginator();}},_defaultPaginatorContainers:function(L){var J=this._sId+"-paginator0",K=this._sId+"-paginator1",I=C.get(J),M=C.get(K);if(L&&(!I||!M)){if(!I){I=document.createElement("div");I.id=J;C.addClass(I,D.CLASS_PAGINATOR);this._elContainer.insertBefore(I,this._elContainer.firstChild);}if(!M){M=document.createElement("div");M.id=K;C.addClass(M,D.CLASS_PAGINATOR);this._elContainer.appendChild(M);}}ret!
 urn[I,M];},renderPaginator:function(){var I=this.get("paginato!
 r");if(!
I){return;}if(!I.getContainerNodes().length){I.set("containers",this._defaultPaginatorContainers(true));}I.render();},doBeforePaginatorChange:function(I){this.showTableMessage(this.get("MSG_LOADING"),D.CLASS_LOADING);return true;},onPaginatorChangeRequest:function(L){var J=this.doBeforePaginatorChange(L);if(J){if(this.get("dynamicData")){var I=this.getState();I.pagination=L;var K=this.get("generateRequest")(I,this);this.unselectAllRows();this.unselectAllCells();var M={success:this.onDataReturnSetRows,failure:this.onDataReturnSetRows,argument:I,scope:this};this._oDataSource.sendRequest(K,M);}else{L.paginator.setStartIndex(L.recordOffset,true);L.paginator.setRowsPerPage(L.rowsPerPage,true);this.render();}}else{}},_elLastHighlightedTd:null,_aSelections:null,_oAnchorRecord:null,_oAnchorCell:null,_unselectAllTrEls:function(){var I=C.getElementsByClassName(D.CLASS_SELECTED,"tr",this._elTbody);C.removeClass(I,D.CLASS_SELECTED);},_getSelectionTrigger:function(){var L=this.get("selec!
 tionMode");var K={};var O,I,J,N,M;if((L=="cellblock")||(L=="cellrange")||(L=="singlecell")){O=this.getLastSelectedCell();if(!O){return null;}else{I=this.getRecord(O.recordId);J=this.getRecordIndex(I);N=this.getTrEl(I);M=this.getTrIndex(N);if(M===null){return null;}else{K.record=I;K.recordIndex=J;K.el=this.getTdEl(O);K.trIndex=M;K.column=this.getColumn(O.columnKey);K.colKeyIndex=K.column.getKeyIndex();K.cell=O;return K;}}}else{I=this.getLastSelectedRecord();if(!I){return null;}else{I=this.getRecord(I);J=this.getRecordIndex(I);N=this.getTrEl(I);M=this.getTrIndex(N);if(M===null){return null;}else{K.record=I;K.recordIndex=J;K.el=N;K.trIndex=M;return K;}}}},_getSelectionAnchor:function(K){var J=this.get("selectionMode");var L={};var M,O,I;if((J=="cellblock")||(J=="cellrange")||(J=="singlecell")){var N=this._oAnchorCell;if(!N){if(K){N=this._oAnchorCell=K.cell;}else{return null;}}M=this._oAnchorCell.record;O=this._oRecordSet.getRecordIndex(M);
+I=this.getTrIndex(M);if(I===null){if(O<this.getRecordIndex(this.getFirstTrEl())){I=0;}else{I=this.getRecordIndex(this.getLastTrEl());}}L.record=M;L.recordIndex=O;L.trIndex=I;L.column=this._oAnchorCell.column;L.colKeyIndex=L.column.getKeyIndex();L.cell=N;return L;}else{M=this._oAnchorRecord;if(!M){if(K){M=this._oAnchorRecord=K.record;}else{return null;}}O=this.getRecordIndex(M);I=this.getTrIndex(M);if(I===null){if(O<this.getRecordIndex(this.getFirstTrEl())){I=0;}else{I=this.getRecordIndex(this.getLastTrEl());}}L.record=M;L.recordIndex=O;L.trIndex=I;return L;}},_handleStandardSelectionByMouse:function(J){var I=J.target;var L=this.getTrEl(I);if(L){var O=J.event;var R=O.shiftKey;var N=O.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&O.metaKey);var Q=this.getRecord(L);var K=this._oRecordSet.getRecordIndex(Q);var P=this._getSelectionAnchor();var M;if(R&&N){if(P){if(this.isSelected(P.record)){if(P.recordIndex<K){for(M=P.recordIndex+1;M<=K;M++){if(!this.isSelecte!
 d(M)){this.selectRow(M);}}}else{for(M=P.recordIndex-1;M>=K;M--){if(!this.isSelected(M)){this.selectRow(M);}}}}else{if(P.recordIndex<K){for(M=P.recordIndex+1;M<=K-1;M++){if(this.isSelected(M)){this.unselectRow(M);}}}else{for(M=K+1;M<=P.recordIndex-1;M++){if(this.isSelected(M)){this.unselectRow(M);}}}this.selectRow(Q);}}else{this._oAnchorRecord=Q;if(this.isSelected(Q)){this.unselectRow(Q);}else{this.selectRow(Q);}}}else{if(R){this.unselectAllRows();if(P){if(P.recordIndex<K){for(M=P.recordIndex;M<=K;M++){this.selectRow(M);}}else{for(M=P.recordIndex;M>=K;M--){this.selectRow(M);}}}else{this._oAnchorRecord=Q;this.selectRow(Q);}}else{if(N){this._oAnchorRecord=Q;if(this.isSelected(Q)){this.unselectRow(Q);}else{this.selectRow(Q);}}else{this._handleSingleSelectionByMouse(J);return;}}}}},_handleStandardSelectionByKey:function(M){var I=G.getCharCode(M);if((I==38)||(I==40)){var K=M.shiftKey;var J=this._getSelectionTrigger();if(!J){return null;}G.stopEvent(M);var L=this._getSelectionAnch!
 or(J);if(K){if((I==40)&&(L.recordIndex<=J.trIndex)){this.selec!
 tRow(thi
s.getNextTrEl(J.el));}else{if((I==38)&&(L.recordIndex>=J.trIndex)){this.selectRow(this.getPreviousTrEl(J.el));}else{this.unselectRow(J.el);}}}else{this._handleSingleSelectionByKey(M);}}},_handleSingleSelectionByMouse:function(K){var L=K.target;var J=this.getTrEl(L);if(J){var I=this.getRecord(J);this._oAnchorRecord=I;this.unselectAllRows();this.selectRow(I);}},_handleSingleSelectionByKey:function(L){var I=G.getCharCode(L);if((I==38)||(I==40)){var J=this._getSelectionTrigger();if(!J){return null;}G.stopEvent(L);var K;if(I==38){K=this.getPreviousTrEl(J.el);if(K===null){K=this.getFirstTrEl();}}else{if(I==40){K=this.getNextTrEl(J.el);if(K===null){K=this.getLastTrEl();}}}this.unselectAllRows();this.selectRow(K);this._oAnchorRecord=this.getRecord(K);}},_handleCellBlockSelectionByMouse:function(Y){var Z=Y.target;var J=this.getTdEl(Z);if(J){var X=Y.event;var O=X.shiftKey;var K=X.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&X.metaKey);var Q=this.getTrEl(J);var P=t!
 his.getTrIndex(Q);var T=this.getColumn(J);var U=T.getKeyIndex();var S=this.getRecord(Q);var b=this._oRecordSet.getRecordIndex(S);var N={record:S,column:T};var R=this._getSelectionAnchor();var M=this.getTbodyEl().rows;var L,I,a,W,V;if(O&&K){if(R){if(this.isSelected(R.cell)){if(R.recordIndex===b){if(R.colKeyIndex<U){for(W=R.colKeyIndex+1;W<=U;W++){this.selectCell(Q.cells[W]);}}else{if(U<R.colKeyIndex){for(W=U;W<R.colKeyIndex;W++){this.selectCell(Q.cells[W]);}}}}else{if(R.recordIndex<b){L=Math.min(R.colKeyIndex,U);I=Math.max(R.colKeyIndex,U);for(W=R.trIndex;W<=P;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}else{L=Math.min(R.trIndex,U);I=Math.max(R.trIndex,U);for(W=R.trIndex;W>=P;W--){for(V=I;V>=L;V--){this.selectCell(M[W].cells[V]);}}}}}else{if(R.recordIndex===b){if(R.colKeyIndex<U){for(W=R.colKeyIndex+1;W<U;W++){this.unselectCell(Q.cells[W]);}}else{if(U<R.colKeyIndex){for(W=U+1;W<R.colKeyIndex;W++){this.unselectCell(Q.cells[W]);}}}}if(R.recordIndex<b){for(W=R.trIn!
 dex;W<=P;W++){a=M[W];for(V=0;V<a.cells.length;V++){if(a.sectio!
 nRowInde
x===R.trIndex){if(V>R.colKeyIndex){this.unselectCell(a.cells[V]);}}else{if(a.sectionRowIndex===P){if(V<U){this.unselectCell(a.cells[V]);}}else{this.unselectCell(a.cells[V]);}}}}}else{for(W=P;W<=R.trIndex;W++){a=M[W];for(V=0;V<a.cells.length;V++){if(a.sectionRowIndex==P){if(V>U){this.unselectCell(a.cells[V]);}}else{if(a.sectionRowIndex==R.trIndex){if(V<R.colKeyIndex){this.unselectCell(a.cells[V]);}}else{this.unselectCell(a.cells[V]);}}}}}this.selectCell(J);}}else{this._oAnchorCell=N;if(this.isSelected(N)){this.unselectCell(N);}else{this.selectCell(N);}}}else{if(O){this.unselectAllCells();if(R){if(R.recordIndex===b){if(R.colKeyIndex<U){for(W=R.colKeyIndex;W<=U;W++){this.selectCell(Q.cells[W]);}}else{if(U<R.colKeyIndex){for(W=U;W<=R.colKeyIndex;W++){this.selectCell(Q.cells[W]);}}}}else{if(R.recordIndex<b){L=Math.min(R.colKeyIndex,U);I=Math.max(R.colKeyIndex,U);for(W=R.trIndex;W<=P;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}else{L=Math.min(R.colKeyIndex,U);I=Math.m!
 ax(R.colKeyIndex,U);for(W=P;W<=R.trIndex;W++){for(V=L;V<=I;V++){this.selectCell(M[W].cells[V]);}}}}}else{this._oAnchorCell=N;this.selectCell(N);}}else{if(K){this._oAnchorCell=N;if(this.isSelected(N)){this.unselectCell(N);}else{this.selectCell(N);}}else{this._handleSingleCellSelectionByMouse(Y);}}}}},_handleCellBlockSelectionByKey:function(N){var I=G.getCharCode(N);var S=N.shiftKey;if((I==9)||!S){this._handleSingleCellSelectionByKey(N);return;}if((I>36)&&(I<41)){var T=this._getSelectionTrigger();if(!T){return null;}G.stopEvent(N);var Q=this._getSelectionAnchor(T);var J,R,K,P,L;var O=this.getTbodyEl().rows;var M=T.el.parentNode;if(I==40){if(Q.recordIndex<=T.recordIndex){L=this.getNextTrEl(T.el);if(L){R=Q.colKeyIndex;K=T.colKeyIndex;if(R>K){for(J=R;J>=K;J--){P=L.cells[J];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=L.cells[J];this.selectCell(P);}}}}else{R=Math.min(Q.colKeyIndex,T.colKeyIndex);K=Math.max(Q.colKeyIndex,T.colKeyIndex);
+for(J=R;J<=K;J++){this.unselectCell(M.cells[J]);}}}else{if(I==38){if(Q.recordIndex>=T.recordIndex){L=this.getPreviousTrEl(T.el);if(L){R=Q.colKeyIndex;K=T.colKeyIndex;if(R>K){for(J=R;J>=K;J--){P=L.cells[J];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=L.cells[J];this.selectCell(P);}}}}else{R=Math.min(Q.colKeyIndex,T.colKeyIndex);K=Math.max(Q.colKeyIndex,T.colKeyIndex);for(J=R;J<=K;J++){this.unselectCell(M.cells[J]);}}}else{if(I==39){if(Q.colKeyIndex<=T.colKeyIndex){if(T.colKeyIndex<M.cells.length-1){R=Q.trIndex;K=T.trIndex;if(R>K){for(J=R;J>=K;J--){P=O[J].cells[T.colKeyIndex+1];this.selectCell(P);}}else{for(J=R;J<=K;J++){P=O[J].cells[T.colKeyIndex+1];this.selectCell(P);}}}}else{R=Math.min(Q.trIndex,T.trIndex);K=Math.max(Q.trIndex,T.trIndex);for(J=R;J<=K;J++){this.unselectCell(O[J].cells[T.colKeyIndex]);}}}else{if(I==37){if(Q.colKeyIndex>=T.colKeyIndex){if(T.colKeyIndex>0){R=Q.trIndex;K=T.trIndex;if(R>K){for(J=R;J>=K;J--){P=O[J].cells[T.colKeyIndex-1];this.selectCell(P);}}els!
 e{for(J=R;J<=K;J++){P=O[J].cells[T.colKeyIndex-1];this.selectCell(P);}}}}else{R=Math.min(Q.trIndex,T.trIndex);K=Math.max(Q.trIndex,T.trIndex);for(J=R;J<=K;J++){this.unselectCell(O[J].cells[T.colKeyIndex]);}}}}}}}},_handleCellRangeSelectionByMouse:function(W){var X=W.target;var I=this.getTdEl(X);if(I){var V=W.event;var M=V.shiftKey;var J=V.ctrlKey||((navigator.userAgent.toLowerCase().indexOf("mac")!=-1)&&V.metaKey);var O=this.getTrEl(I);var N=this.getTrIndex(O);var R=this.getColumn(I);var S=R.getKeyIndex();var Q=this.getRecord(O);var Z=this._oRecordSet.getRecordIndex(Q);var L={record:Q,column:R};var P=this._getSelectionAnchor();var K=this.getTbodyEl().rows;var Y,U,T;if(M&&J){if(P){if(this.isSelected(P.cell)){if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex+1;U<=S;U++){this.selectCell(O.cells[U]);}}else{if(S<P.colKeyIndex){for(U=S;U<P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex<Z){for(U=P.colKeyIndex+1;U<O.cells.length;U++){this.selectC!
 ell(O.cells[U]);}for(U=P.trIndex+1;U<N;U++){for(T=0;T<K[U].cel!
 ls.lengt
h;T++){this.selectCell(K[U].cells[T]);}}for(U=0;U<=S;U++){this.selectCell(O.cells[U]);}}else{for(U=S;U<O.cells.length;U++){this.selectCell(O.cells[U]);}for(U=N+1;U<P.trIndex;U++){for(T=0;T<K[U].cells.length;T++){this.selectCell(K[U].cells[T]);}}for(U=0;U<P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex+1;U<S;U++){this.unselectCell(O.cells[U]);}}else{if(S<P.colKeyIndex){for(U=S+1;U<P.colKeyIndex;U++){this.unselectCell(O.cells[U]);}}}}if(P.recordIndex<Z){for(U=P.trIndex;U<=N;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex===P.trIndex){if(T>P.colKeyIndex){this.unselectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex===N){if(T<S){this.unselectCell(Y.cells[T]);}}else{this.unselectCell(Y.cells[T]);}}}}}else{for(U=N;U<=P.trIndex;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==N){if(T>S){this.unselectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==P.trIndex){if(T<P.colKeyIndex){this.unselec!
 tCell(Y.cells[T]);}}else{this.unselectCell(Y.cells[T]);}}}}}this.selectCell(I);}}else{this._oAnchorCell=L;if(this.isSelected(L)){this.unselectCell(L);}else{this.selectCell(L);}}}else{if(M){this.unselectAllCells();if(P){if(P.recordIndex===Z){if(P.colKeyIndex<S){for(U=P.colKeyIndex;U<=S;U++){this.selectCell(O.cells[U]);}}else{if(S<P.colKeyIndex){for(U=S;U<=P.colKeyIndex;U++){this.selectCell(O.cells[U]);}}}}else{if(P.recordIndex<Z){for(U=P.trIndex;U<=N;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==P.trIndex){if(T>=P.colKeyIndex){this.selectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==N){if(T<=S){this.selectCell(Y.cells[T]);}}else{this.selectCell(Y.cells[T]);}}}}}else{for(U=N;U<=P.trIndex;U++){Y=K[U];for(T=0;T<Y.cells.length;T++){if(Y.sectionRowIndex==N){if(T>=S){this.selectCell(Y.cells[T]);}}else{if(Y.sectionRowIndex==P.trIndex){if(T<=P.colKeyIndex){this.selectCell(Y.cells[T]);}}else{this.selectCell(Y.cells[T]);}}}}}}}else{this._oAnchorCell=L;this.selectCell!
 (L);}}else{if(J){this._oAnchorCell=L;if(this.isSelected(L)){th!
 is.unsel
ectCell(L);}else{this.selectCell(L);}}else{this._handleSingleCellSelectionByMouse(W);}}}}},_handleCellRangeSelectionByKey:function(M){var I=G.getCharCode(M);var Q=M.shiftKey;if((I==9)||!Q){this._handleSingleCellSelectionByKey(M);return;}if((I>36)&&(I<41)){var R=this._getSelectionTrigger();if(!R){return null;}G.stopEvent(M);var P=this._getSelectionAnchor(R);var J,K,O;var N=this.getTbodyEl().rows;var L=R.el.parentNode;if(I==40){K=this.getNextTrEl(R.el);if(P.recordIndex<=R.recordIndex){for(J=R.colKeyIndex+1;J<L.cells.length;J++){O=L.cells[J];this.selectCell(O);}if(K){for(J=0;J<=R.colKeyIndex;J++){O=K.cells[J];this.selectCell(O);}}}else{for(J=R.colKeyIndex;J<L.cells.length;J++){this.unselectCell(L.cells[J]);}if(K){for(J=0;J<R.colKeyIndex;J++){this.unselectCell(K.cells[J]);}}}}else{if(I==38){K=this.getPreviousTrEl(R.el);if(P.recordIndex>=R.recordIndex){for(J=R.colKeyIndex-1;J>-1;J--){O=L.cells[J];this.selectCell(O);}if(K){for(J=L.cells.length-1;J>=R.colKeyIndex;J--){O=K.cells[J];!
 this.selectCell(O);}}}else{for(J=R.colKeyIndex;J>-1;J--){this.unselectCell(L.cells[J]);}if(K){for(J=L.cells.length-1;J>R.colKeyIndex;J--){this.unselectCell(K.cells[J]);}}}}else{if(I==39){K=this.getNextTrEl(R.el);if(P.recordIndex<R.recordIndex){if(R.colKeyIndex<L.cells.length-1){O=L.cells[R.colKeyIndex+1];this.selectCell(O);}else{if(K){O=K.cells[0];this.selectCell(O);}}}else{if(P.recordIndex>R.recordIndex){this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex<L.cells.length-1){}else{}}else{if(P.colKeyIndex<=R.colKeyIndex){if(R.colKeyIndex<L.cells.length-1){O=L.cells[R.colKeyIndex+1];this.selectCell(O);}else{if(R.trIndex<N.length-1){O=K.cells[0];this.selectCell(O);}}}else{this.unselectCell(L.cells[R.colKeyIndex]);}}}}else{if(I==37){K=this.getPreviousTrEl(R.el);if(P.recordIndex<R.recordIndex){this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex>0){}else{}}else{if(P.recordIndex>R.recordIndex){if(R.colKeyIndex>0){O=L.cells[R.colKeyIndex-1];
+this.selectCell(O);}else{if(R.trIndex>0){O=K.cells[K.cells.length-1];this.selectCell(O);}}}else{if(P.colKeyIndex>=R.colKeyIndex){if(R.colKeyIndex>0){O=L.cells[R.colKeyIndex-1];this.selectCell(O);}else{if(R.trIndex>0){O=K.cells[K.cells.length-1];this.selectCell(O);}}}else{this.unselectCell(L.cells[R.colKeyIndex]);if(R.colKeyIndex>0){}else{}}}}}}}}}},_handleSingleCellSelectionByMouse:function(N){var O=N.target;var K=this.getTdEl(O);if(K){var J=this.getTrEl(K);var I=this.getRecord(J);var M=this.getColumn(K);var L={record:I,column:M};this._oAnchorCell=L;this.unselectAllCells();this.selectCell(L);}},_handleSingleCellSelectionByKey:function(M){var I=G.getCharCode(M);if((I==9)||((I>36)&&(I<41))){var K=M.shiftKey;var J=this._getSelectionTrigger();if(!J){return null;}var L;if(I==40){L=this.getBelowTdEl(J.el);if(L===null){L=J.el;}}else{if(I==38){L=this.getAboveTdEl(J.el);if(L===null){L=J.el;}}else{if((I==39)||(!K&&(I==9))){L=this.getNextTdEl(J.el);if(L===null){return;}}else{if((I==37!
 )||(K&&(I==9))){L=this.getPreviousTdEl(J.el);if(L===null){return;}}}}}G.stopEvent(M);this.unselectAllCells();this.selectCell(L);this._oAnchorCell={record:this.getRecord(L),column:this.getColumn(L)};}},getSelectedTrEls:function(){return C.getElementsByClassName(D.CLASS_SELECTED,"tr",this._elTbody);},selectRow:function(O){var N,I;if(O instanceof YAHOO.widget.Record){N=this._oRecordSet.getRecord(O);I=this.getTrEl(N);}else{if(H.isNumber(O)){N=this.getRecord(O);I=this.getTrEl(N);}else{I=this.getTrEl(O);N=this.getRecord(I);}}if(N){var M=this._aSelections||[];var L=N.getId();var K=-1;if(M.indexOf){K=M.indexOf(L);}else{for(var J=M.length-1;J>-1;J--){if(M[J]===L){K=J;break;}}}if(K>-1){M.splice(K,1);}M.push(L);this._aSelections=M;if(!this._oAnchorRecord){this._oAnchorRecord=N;}if(I){C.addClass(I,D.CLASS_SELECTED);}this.fireEvent("rowSelectEvent",{record:N,el:I});}else{}},unselectRow:function(O){var I=this.getTrEl(O);var N;if(O instanceof YAHOO.widget.Record){N=this._oRecordSet.getRec!
 ord(O);}else{if(H.isNumber(O)){N=this.getRecord(O);}else{N=thi!
 s.getRec
ord(I);}}if(N){var M=this._aSelections||[];var L=N.getId();var K=-1;if(M.indexOf){K=M.indexOf(L);}else{for(var J=M.length-1;J>-1;J--){if(M[J]===L){K=J;break;}}}if(K>-1){M.splice(K,1);this._aSelections=M;C.removeClass(I,D.CLASS_SELECTED);this.fireEvent("rowUnselectEvent",{record:N,el:I});return;}}},unselectAllRows:function(){var J=this._aSelections||[],L,K=[];for(var I=J.length-1;I>-1;I--){if(H.isString(J[I])){L=J.splice(I,1);K[K.length]=this.getRecord(H.isArray(L)?L[0]:L);}}this._aSelections=J;this._unselectAllTrEls();this.fireEvent("unselectAllRowsEvent",{records:K});},_unselectAllTdEls:function(){var I=C.getElementsByClassName(D.CLASS_SELECTED,"td",this._elTbody);C.removeClass(I,D.CLASS_SELECTED);},getSelectedTdEls:function(){return C.getElementsByClassName(D.CLASS_SELECTED,"td",this._elTbody);},selectCell:function(I){var O=this.getTdEl(I);if(O){var N=this.getRecord(O);var L=this.getColumn(O.cellIndex).getKey();if(N&&L){var M=this._aSelections||[];var K=N.getId();for(var J!
 =M.length-1;J>-1;J--){if((M[J].recordId===K)&&(M[J].columnKey===L)){M.splice(J,1);break;}}M.push({recordId:K,columnKey:L});this._aSelections=M;if(!this._oAnchorCell){this._oAnchorCell={record:N,column:this.getColumn(L)};}C.addClass(O,D.CLASS_SELECTED);this.fireEvent("cellSelectEvent",{record:N,column:this.getColumn(O.cellIndex),key:this.getColumn(O.cellIndex).getKey(),el:O});return;}}},unselectCell:function(I){var N=this.getTdEl(I);if(N){var M=this.getRecord(N);var K=this.getColumn(N.cellIndex).getKey();if(M&&K){var L=this._aSelections||[];var O=M.getId();for(var J=L.length-1;J>-1;J--){if((L[J].recordId===O)&&(L[J].columnKey===K)){L.splice(J,1);this._aSelections=L;C.removeClass(N,D.CLASS_SELECTED);this.fireEvent("cellUnselectEvent",{record:M,column:this.getColumn(N.cellIndex),key:this.getColumn(N.cellIndex).getKey(),el:N});return;}}}}},unselectAllCells:function(){var J=this._aSelections||[];for(var I=J.length-1;I>-1;I--){if(H.isObject(J[I])){J.splice(I,1);}}this._aSelection!
 s=J;this._unselectAllTdEls();this.fireEvent("unselectAllCellsE!
 vent");}
,isSelected:function(N){if(N&&(N.ownerDocument==document)){return(C.hasClass(this.getTdEl(N),D.CLASS_SELECTED)||C.hasClass(this.getTrEl(N),D.CLASS_SELECTED));}else{var M,J,I;var L=this._aSelections;if(L&&L.length>0){if(N instanceof YAHOO.widget.Record){M=N;}else{if(H.isNumber(N)){M=this.getRecord(N);}}if(M){J=M.getId();if(L.indexOf){if(L.indexOf(J)>-1){return true;}}else{for(I=L.length-1;I>-1;I--){if(L[I]===J){return true;}}}}else{if(N.record&&N.column){J=N.record.getId();var K=N.column.getKey();for(I=L.length-1;I>-1;I--){if((L[I].recordId===J)&&(L[I].columnKey===K)){return true;}}}}}}return false;},getSelectedRows:function(){var I=[];var K=this._aSelections||[];for(var J=0;J<K.length;J++){if(H.isString(K[J])){I.push(K[J]);}}return I;},getSelectedCells:function(){var J=[];var K=this._aSelections||[];for(var I=0;I<K.length;I++){if(K[I]&&H.isObject(K[I])){J.push(K[I]);}}return J;},getLastSelectedRecord:function(){var J=this._aSelections;if(J&&J.length>0){for(var I=J.length-1;I!
 >-1;I--){if(H.isString(J[I])){return J[I];}}}},getLastSelectedCell:function(){var J=this._aSelections;if(J&&J.length>0){for(var I=J.length-1;I>-1;I--){if(J[I].recordId&&J[I].columnKey){return J[I];}}}},highlightRow:function(K){var I=this.getTrEl(K);if(I){var J=this.getRecord(I);C.addClass(I,D.CLASS_HIGHLIGHTED);this.fireEvent("rowHighlightEvent",{record:J,el:I});return;}},unhighlightRow:function(K){var I=this.getTrEl(K);if(I){var J=this.getRecord(I);C.removeClass(I,D.CLASS_HIGHLIGHTED);this.fireEvent("rowUnhighlightEvent",{record:J,el:I});return;}},highlightCell:function(I){var L=this.getTdEl(I);if(L){if(this._elLastHighlightedTd){this.unhighlightCell(this._elLastHighlightedTd);}var K=this.getRecord(L);var J=this.getColumn(L.cellIndex).getKey();C.addClass(L,D.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=L;this.fireEvent("cellHighlightEvent",{record:K,column:this.getColumn(L.cellIndex),key:this.getColumn(L.cellIndex).getKey(),el:L});
+return;}},unhighlightCell:function(I){var K=this.getTdEl(I);if(K){var J=this.getRecord(K);C.removeClass(K,D.CLASS_HIGHLIGHTED);this._elLastHighlightedTd=null;this.fireEvent("cellUnhighlightEvent",{record:J,column:this.getColumn(K.cellIndex),key:this.getColumn(K.cellIndex).getKey(),el:K});return;}},getCellEditor:function(){return this._oCellEditor;},showCellEditor:function(P,Q,L){P=this.getTdEl(P);if(P){L=this.getColumn(P);if(L&&L.editor){var J=this._oCellEditor;if(J){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(J.isActive){this.cancelCellEditor();}}}if(L.editor instanceof YAHOO.widget.BaseCellEditor){J=L.editor;var N=J.attach(this,P);if(N){J.move();N=this.doBeforeShowCellEditor(J);if(N){J.show();this._oCellEditor=J;}}}else{if(!Q||!(Q instanceof YAHOO.widget.Record)){Q=this.getRecord(P);}if(!L||!(L instanceof YAHOO.widget.Column)){L=this.getColumn(P);}if(Q&&L){if(!this._oCellEditor||this._oCellEditor.container){this._initCellEditorEl();}J=this._oCellEdito!
 r;J.cell=P;J.record=Q;J.column=L;J.validator=(L.editorOptions&&H.isFunction(L.editorOptions.validator))?L.editorOptions.validator:null;J.value=Q.getData(L.key);J.defaultValue=null;var K=J.container;var O=C.getX(P);var M=C.getY(P);if(isNaN(O)||isNaN(M)){O=P.offsetLeft+C.getX(this._elTbody.parentNode)-this._elTbody.scrollLeft;M=P.offsetTop+C.getY(this._elTbody.parentNode)-this._elTbody.scrollTop+this._elThead.offsetHeight;}K.style.left=O+"px";K.style.top=M+"px";this.doBeforeShowCellEditor(this._oCellEditor);K.style.display="";G.addListener(K,"keydown",function(S,R){if((S.keyCode==27)){R.cancelCellEditor();R.focusTbodyEl();}else{R.fireEvent("editorKeydownEvent",{editor:R._oCellEditor,event:S});}},this);var I;if(H.isString(L.editor)){switch(L.editor){case"checkbox":I=D.editCheckbox;break;case"date":I=D.editDate;break;case"dropdown":I=D.editDropdown;break;case"radio":I=D.editRadio;break;case"textarea":I=D.editTextarea;break;case"textbox":I=D.editTextbox;break;default:I=null;}}el!
 se{if(H.isFunction(L.editor)){I=L.editor;}}if(I){I(this._oCell!
 Editor,t
his);if(!L.editorOptions||!L.editorOptions.disableBtns){this.showCellEditorBtns(K);}J.isActive=true;this.fireEvent("editorShowEvent",{editor:J});return;}}}}}},_initCellEditorEl:function(){var I=document.createElement("div");I.id=this._sId+"-celleditor";I.style.display="none";I.tabIndex=0;C.addClass(I,D.CLASS_EDITOR);var K=C.getFirstChild(document.body);if(K){I=C.insertBefore(I,K);}else{I=document.body.appendChild(I);}var J={};J.container=I;J.value=null;J.isActive=false;this._oCellEditor=J;},doBeforeShowCellEditor:function(I){return true;},saveCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();}else{if(this._oCellEditor.isActive){var I=this._oCellEditor.value;var J=this._oCellEditor.record.getData(this._oCellEditor.column.key);if(this._oCellEditor.validator){I=this._oCellEditor.value=this._oCellEditor.validator.call(this,I,J,this._oCellEditor);if(I===null){this.resetCellEditor();this.fireEvent("editorRevertEvent",{editor:this._oCel!
 lEditor,oldData:J,newData:I});return;}}this._oRecordSet.updateRecordValue(this._oCellEditor.record,this._oCellEditor.column.key,this._oCellEditor.value);this.formatCell(this._oCellEditor.cell.firstChild);this._oChainRender.add({method:function(){this.validateColumnWidths();},scope:this});this._oChainRender.run();this.resetCellEditor();this.fireEvent("editorSaveEvent",{editor:this._oCellEditor,oldData:J,newData:I});}}}},cancelCellEditor:function(){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{if(this._oCellEditor.isActive){this.resetCellEditor();this.fireEvent("editorCancelEvent",{editor:this._oCellEditor});}}}},destroyCellEditor:function(){if(this._oCellEditor){this._oCellEditor.destroy();this._oCellEditor=null;}},_onEditorShowEvent:function(I){this.fireEvent("editorShowEvent",I);},_onEditorKeydownEvent:function(I){this.fireEvent("editorKeydownEvent",I);},_onEditorRevertEvent:function(I){this.fireEvent("editorRevertEvent",I);},_onEditor!
 SaveEvent:function(I){this.fireEvent("editorSaveEvent",I);},_o!
 nEditorC
ancelEvent:function(I){this.fireEvent("editorCancelEvent",I);},_onEditorBlurEvent:function(I){this.fireEvent("editorBlurEvent",I);},_onEditorBlockEvent:function(I){this.fireEvent("editorBlockEvent",I);},_onEditorUnblockEvent:function(I){this.fireEvent("editorUnblockEvent",I);},onEditorBlurEvent:function(I){if(I.editor.disableBtns){if(I.editor.save){I.editor.save();}}else{if(I.editor.cancel){I.editor.cancel();}}},onEditorBlockEvent:function(I){this.disable();},onEditorUnblockEvent:function(I){this.undisable();},doBeforeLoadData:function(I,J,K){return true;},onEventSortColumn:function(K){var I=K.event;var M=K.target;var J=this.getThEl(M)||this.getTdEl(M);if(J){var L=this.getColumn(J);if(L.sortable){G.stopEvent(I);this.sortColumn(L);}}else{}},onEventSelectColumn:function(I){this.selectColumn(I.target);},onEventHighlightColumn:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightColumn(I.target);}},onEventUnhighlightColumn:function(I){if(!C.isAncesto!
 r(I.target,G.getRelatedTarget(I.event))){this.unhighlightColumn(I.target);}},onEventSelectRow:function(J){var I=this.get("selectionMode");if(I=="single"){this._handleSingleSelectionByMouse(J);}else{this._handleStandardSelectionByMouse(J);}},onEventSelectCell:function(J){var I=this.get("selectionMode");if(I=="cellblock"){this._handleCellBlockSelectionByMouse(J);}else{if(I=="cellrange"){this._handleCellRangeSelectionByMouse(J);}else{this._handleSingleCellSelectionByMouse(J);}}},onEventHighlightRow:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightRow(I.target);}},onEventUnhighlightRow:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.unhighlightRow(I.target);}},onEventHighlightCell:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.highlightCell(I.target);}},onEventUnhighlightCell:function(I){if(!C.isAncestor(I.target,G.getRelatedTarget(I.event))){this.unhighlightCell(I.target);
+}},onEventFormatCell:function(I){var L=I.target;var J=this.getTdEl(L);if(J){var K=this.getColumn(J.cellIndex);this.formatCell(J.firstChild,this.getRecord(J),K);}else{}},onEventShowCellEditor:function(I){this.showCellEditor(I.target);},onEventSaveCellEditor:function(I){if(this._oCellEditor){if(this._oCellEditor.save){this._oCellEditor.save();}else{this.saveCellEditor();}}},onEventCancelCellEditor:function(I){if(this._oCellEditor){if(this._oCellEditor.cancel){this._oCellEditor.cancel();}else{this.cancelCellEditor();}}},onDataReturnInitializeTable:function(I,J,K){if((this instanceof D)&&this._sId){this.initializeTable();this.onDataReturnSetRows(I,J,K);}},onDataReturnReplaceRows:function(M,L,N){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:M,response:L,payload:N});var J=this.doBeforeLoadData(M,L,N),K=this.get("paginator"),I=0;if(J&&L&&!L.error&&H.isArray(L.results)){this._oRecordSet.reset();if(this.get("dynamicData")){if(N&&N.pagination&&H.isNumbe!
 r(N.pagination.recordOffset)){I=N.pagination.recordOffset;}else{if(K){I=K.getStartIndex();}}}this._oRecordSet.setRecords(L.results,I|0);this._handleDataReturnPayload(M,L,N);this.render();}else{if(J&&L.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnAppendRows:function(J,K,L){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:J,response:K,payload:L});var I=this.doBeforeLoadData(J,K,L);if(I&&K&&!K.error&&H.isArray(K.results)){this.addRows(K.results);this._handleDataReturnPayload(J,K,L);}else{if(I&&K.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnInsertRows:function(J,K,L){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:J,response:K,payload:L});var I=this.doBeforeLoadData(J,K,L);if(I&&K&&!K.error&&H.isArray(K.results)){this.addRows(K.results,(L?L.insertIndex:0));this._handleDataReturnPayload(J,K,L);}else{if(I&&K.error){this.showTableMessage(this.get("MS!
 G_ERROR"),D.CLASS_ERROR);}}}},onDataReturnUpdateRows:function(!
 J,K,L){i
f((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:J,response:K,payload:L});var I=this.doBeforeLoadData(J,K,L);if(I&&K&&!K.error&&H.isArray(K.results)){this.updateRows((L?L.updateIndex:0),K.results);this._handleDataReturnPayload(J,K,L);}else{if(I&&K.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}},onDataReturnSetRows:function(M,L,N){if((this instanceof D)&&this._sId){this.fireEvent("dataReturnEvent",{request:M,response:L,payload:N});var J=this.doBeforeLoadData(M,L,N),K=this.get("paginator"),I=0;if(J&&L&&!L.error&&H.isArray(L.results)){if(this.get("dynamicData")){if(N&&N.pagination&&H.isNumber(N.pagination.recordOffset)){I=N.pagination.recordOffset;}else{if(K){I=K.getStartIndex();}}this._oRecordSet.reset();}this._oRecordSet.setRecords(L.results,I|0);this._handleDataReturnPayload(M,L,N);this.render();}else{if(J&&L.error){this.showTableMessage(this.get("MSG_ERROR"),D.CLASS_ERROR);}}}else{}},handleDataReturnPayload:function(J,I,K){r!
 eturn K;},_handleDataReturnPayload:function(K,J,L){L=this.handleDataReturnPayload(K,J,L);if(L){var I=this.get("paginator");if(I){if(this.get("dynamicData")){if(E.Paginator.isNumeric(L.totalRecords)){I.set("totalRecords",L.totalRecords);}}else{I.set("totalRecords",this._oRecordSet.getLength());}if(H.isObject(L.pagination)){I.set("rowsPerPage",L.pagination.rowsPerPage);I.set("recordOffset",L.pagination.recordOffset);}}if(L.sortedBy){this.set("sortedBy",L.sortedBy);}else{if(L.sorting){this.set("sortedBy",L.sorting);}}}},showCellEditorBtns:function(K){var L=K.appendChild(document.createElement("div"));C.addClass(L,D.CLASS_BUTTON);var J=L.appendChild(document.createElement("button"));C.addClass(J,D.CLASS_DEFAULT);J.innerHTML="OK";G.addListener(J,"click",function(N,M){M.onEventSaveCellEditor(N,M);M.focusTbodyEl();},this,true);var I=L.appendChild(document.createElement("button"));I.innerHTML="Cancel";G.addListener(I,"click",function(N,M){M.onEventCancelCellEditor(N,M);M.focusTbody!
 El();},this,true);},resetCellEditor:function(){var I=this._oCe!
 llEditor
.container;I.style.display="none";G.purgeElement(I,true);I.innerHTML="";this._oCellEditor.value=null;this._oCellEditor.isActive=false;},getBody:function(){return this.getTbodyEl();},getCell:function(I){return this.getTdEl(I);},getRow:function(I){return this.getTrEl(I);},refreshView:function(){this.render();},select:function(J){if(!H.isArray(J)){J=[J];}for(var I=0;I<J.length;I++){this.selectRow(J[I]);}},onEventEditCell:function(I){this.onEventShowCellEditor(I);},_syncColWidths:function(){this.validateColumnWidths();}});D.prototype.onDataReturnSetRecords=D.prototype.onDataReturnSetRows;D.prototype.onPaginatorChange=D.prototype.onPaginatorChangeRequest;D.formatTheadCell=function(){};D.editCheckbox=function(){};D.editDate=function(){};D.editDropdown=function(){};D.editRadio=function(){};D.editTextarea=function(){};D.editTextbox=function(){};})();(function(){var C=YAHOO.lang,F=YAHOO.util,E=YAHOO.widget,A=YAHOO.env.ua,D=F.Dom,J=F.Event,I=F.DataSourceBase,G=E.DataTable,B=E.Paginato!
 r;E.ScrollingDataTable=function(N,M,K,L){L=L||{};if(L.scrollable){L.scrollable=false;}E.ScrollingDataTable.superclass.constructor.call(this,N,M,K,L);this.subscribe("columnShowEvent",this._onColumnChange);};var H=E.ScrollingDataTable;C.augmentObject(H,{CLASS_HEADER:"yui-dt-hd",CLASS_BODY:"yui-dt-bd"});C.extend(H,G,{_elHdContainer:null,_elHdTable:null,_elBdContainer:null,_elBdThead:null,_elTmpContainer:null,_elTmpTable:null,_bScrollbarX:null,initAttributes:function(K){K=K||{};H.superclass.initAttributes.call(this,K);this.setAttributeConfig("width",{value:null,validator:C.isString,method:function(L){if(this._elHdContainer&&this._elBdContainer){this._elHdContainer.style.width=L;this._elBdContainer.style.width=L;this._syncScrollX();this._syncScrollOverhang();}}});this.setAttributeConfig("height",{value:null,validator:C.isString,method:function(L){if(this._elHdContainer&&this._elBdContainer){this._elBdContainer.style.height=L;
+this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();}}});this.setAttributeConfig("COLOR_COLUMNFILLER",{value:"#F2F2F2",validator:C.isString,method:function(L){this._elHdContainer.style.backgroundColor=L;}});},_initDomElements:function(K){this._initContainerEl(K);if(this._elContainer&&this._elHdContainer&&this._elBdContainer){this._initTableEl();if(this._elHdTable&&this._elTable){this._initColgroupEl(this._elHdTable);this._initTheadEl(this._elHdTable,this._elTable);this._initTbodyEl(this._elTable);this._initMsgTbodyEl(this._elTable);}}if(!this._elContainer||!this._elTable||!this._elColgroup||!this._elThead||!this._elTbody||!this._elMsgTbody||!this._elHdTable||!this._elBdThead){return false;}else{return true;}},_destroyContainerEl:function(K){D.removeClass(K,G.CLASS_SCROLLABLE);H.superclass._destroyContainerEl.call(this,K);this._elHdContainer=null;this._elBdContainer=null;},_initContainerEl:function(L){H.superclass._initContainerEl.call(this,L);if(this._elConta!
 iner){L=this._elContainer;D.addClass(L,G.CLASS_SCROLLABLE);var K=document.createElement("div");K.style.width=this.get("width")||"";K.style.backgroundColor=this.get("COLOR_COLUMNFILLER");D.addClass(K,H.CLASS_HEADER);this._elHdContainer=K;L.appendChild(K);var M=document.createElement("div");M.style.width=this.get("width")||"";M.style.height=this.get("height")||"";D.addClass(M,H.CLASS_BODY);J.addListener(M,"scroll",this._onScroll,this);this._elBdContainer=M;L.appendChild(M);}},_initCaptionEl:function(K){},_destroyHdTableEl:function(){var K=this._elHdTable;if(K){J.purgeElement(K,true);K.parentNode.removeChild(K);this._elBdThead=null;}},_initTableEl:function(){if(this._elHdContainer){this._destroyHdTableEl();this._elHdTable=this._elHdContainer.appendChild(document.createElement("table"));}H.superclass._initTableEl.call(this,this._elBdContainer);},_initTheadEl:function(L,K){L=L||this._elHdTable;K=K||this._elTable;this._initBdTheadEl(K);H.superclass._initTheadEl.call(this,L);},_in!
 itThEl:function(L,K){H.superclass._initThEl.call(this,L,K);L.i!
 d=this.g
etId()+"-fixedth-"+K.getSanitizedKey();},_destroyBdTheadEl:function(){var K=this._elBdThead;if(K){var L=K.parentNode;J.purgeElement(K,true);L.removeChild(K);this._elBdThead=null;this._destroyColumnHelpers();}},_initBdTheadEl:function(S){if(S){this._destroyBdTheadEl();var O=S.insertBefore(document.createElement("thead"),S.firstChild);var U=this._oColumnSet,T=U.tree,N,K,R,P,M,L,Q;for(P=0,L=T.length;P<L;P++){K=O.appendChild(document.createElement("tr"));for(M=0,Q=T[P].length;M<Q;M++){R=T[P][M];N=K.appendChild(document.createElement("th"));this._initBdThEl(N,R,P,M);}}this._elBdThead=O;}},_initBdThEl:function(N,M){N.id=this.getId()+"-th-"+M.getSanitizedKey();N.rowSpan=M.getRowspan();N.colSpan=M.getColspan();if(M.abbr){N.abbr=M.abbr;}var L=M.getKey();var K=C.isValue(M.label)?M.label:L;N.innerHTML=K;},_initTbodyEl:function(K){H.superclass._initTbodyEl.call(this,K);K.style.marginTop=(this._elTbody.offsetTop>0)?"-"+this._elTbody.offsetTop+"px":0;},_focusEl:function(L){L=L||this._elTb!
 ody;var K=this;this._storeScrollPositions();setTimeout(function(){setTimeout(function(){try{L.focus();K._restoreScrollPositions();}catch(M){}},0);},0);},_runRenderChain:function(){this._storeScrollPositions();this._oChainRender.run();},_storeScrollPositions:function(){this._nScrollTop=this._elBdContainer.scrollTop;this._nScrollLeft=this._elBdContainer.scrollLeft;},_restoreScrollPositions:function(){if(this._nScrollTop){this._elBdContainer.scrollTop=this._nScrollTop;this._nScrollTop=null;}if(this._nScrollLeft){this._elBdContainer.scrollLeft=this._nScrollLeft;this._nScrollLeft=null;}},_validateColumnWidth:function(N,K){if(!N.width&&!N.hidden){var P=N.getThEl();if(N._calculatedWidth){this._setColumnWidth(N,"auto","visible");}if(P.offsetWidth!==K.offsetWidth){var M=(P.offsetWidth>K.offsetWidth)?N.getThLinerEl():K.firstChild;var L=Math.max(0,(M.offsetWidth-(parseInt(D.getStyle(M,"paddingLeft"),10)|0)-(parseInt(D.getStyle(M,"paddingRight"),10)|0)),N.minWidth);var O="visible";if((!
 N.maxAutoWidth>0)&&(L>N.maxAutoWidth)){L=N.maxAutoWidth;O="hid!
 den";}th
is._elTbody.style.display="none";this._setColumnWidth(N,L+"px",O);N._calculatedWidth=L;this._elTbody.style.display="";}}},validateColumnWidths:function(S){var U=this._oColumnSet.keys,W=U.length,L=this.getFirstTrEl();if(A.ie){this._setOverhangValue(1);}if(U&&L&&(L.childNodes.length===W)){var M=this.get("width");if(M){this._elHdContainer.style.width="";this._elBdContainer.style.width="";}this._elContainer.style.width="";if(S&&C.isNumber(S.getKeyIndex())){this._validateColumnWidth(S,L.childNodes[S.getKeyIndex()]);}else{var T,K=[],O,Q,R;for(Q=0;Q<W;Q++){S=U[Q];if(!S.width&&!S.hidden&&S._calculatedWidth){K[K.length]=S;}}this._elTbody.style.display="none";for(Q=0,R=K.length;Q<R;Q++){this._setColumnWidth(K[Q],"auto","visible");}this._elTbody.style.display="";K=[];for(Q=0;Q<W;Q++){S=U[Q];T=L.childNodes[Q];if(!S.width&&!S.hidden){var N=S.getThEl();if(N.offsetWidth!==T.offsetWidth){var V=(N.offsetWidth>T.offsetWidth)?S.getThLinerEl():T.firstChild;var P=Math.max(0,(V.offsetWidth-(parse!
 Int(D.getStyle(V,"paddingLeft"),10)|0)-(parseInt(D.getStyle(V,"paddingRight"),10)|0)),S.minWidth);var X="visible";if((S.maxAutoWidth>0)&&(P>S.maxAutoWidth)){P=S.maxAutoWidth;X="hidden";}K[K.length]=[S,P,X];}}}this._elTbody.style.display="none";for(Q=0,R=K.length;Q<R;Q++){O=K[Q];this._setColumnWidth(O[0],O[1]+"px",O[2]);O[0]._calculatedWidth=O[1];}this._elTbody.style.display="";}if(M){this._elHdContainer.style.width=M;this._elBdContainer.style.width=M;}}this._syncScroll();this._restoreScrollPositions();},_syncScroll:function(){this._syncScrollX();this._syncScrollY();this._syncScrollOverhang();if(A.opera){this._elHdContainer.scrollLeft=this._elBdContainer.scrollLeft;if(!this.get("width")){document.body.style+="";}}},_syncScrollY:function(){var K=this._elTbody,L=this._elBdContainer;if(!this.get("width")){this._elContainer.style.width=(L.scrollHeight>L.clientHeight)?(K.parentNode.clientWidth+19)+"px":(K.parentNode.clientWidth+2)+"px";
+}},_syncScrollX:function(){var K=this._elTbody,L=this._elBdContainer;if(!this.get("height")&&(A.ie)){L.style.height=(L.scrollWidth>L.offsetWidth)?(K.parentNode.offsetHeight+18)+"px":K.parentNode.offsetHeight+"px";}if(this._elTbody.rows.length===0){this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";}else{this._elMsgTbody.parentNode.style.width="";}},_syncScrollOverhang:function(){var L=this._elBdContainer,K=1;if((L.scrollHeight>L.clientHeight)&&(L.scrollWidth>L.clientWidth)){K=18;}this._setOverhangValue(K);},_setOverhangValue:function(N){var P=this._oColumnSet.headers[this._oColumnSet.headers.length-1]||[],L=P.length,K=this._sId+"-fixedth-",O=N+"px solid "+this.get("COLOR_COLUMNFILLER");this._elThead.style.display="none";for(var M=0;M<L;M++){D.get(K+P[M]).style.borderRight=O;}this._elThead.style.display="";},getHdContainerEl:function(){return this._elHdContainer;},getBdContainerEl:function(){return this._elBdContainer;},getHdTableEl:functio!
 n(){return this._elHdTable;},getBdTableEl:function(){return this._elTable;},disable:function(){var K=this._elMask;K.style.width=this._elBdContainer.offsetWidth+"px";K.style.height=this._elHdContainer.offsetHeight+this._elBdContainer.offsetHeight+"px";K.style.display="";this.fireEvent("disableEvent");},removeColumn:function(M){var K=this._elHdContainer.scrollLeft;var L=this._elBdContainer.scrollLeft;M=H.superclass.removeColumn.call(this,M);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=L;return M;},insertColumn:function(N,L){var K=this._elHdContainer.scrollLeft;var M=this._elBdContainer.scrollLeft;var O=H.superclass.insertColumn.call(this,N,L);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=M;return O;},reorderColumn:function(N,L){var K=this._elHdContainer.scrollLeft;var M=this._elBdContainer.scrollLeft;var O=H.superclass.reorderColumn.call(this,N,L);this._elHdContainer.scrollLeft=K;this._elBdContainer.scrollLeft=M;return O;},setColumnWidth:f!
 unction(L,K){L=this.getColumn(L);if(L){if(C.isNumber(K)){K=(K>!
 L.minWid
th)?K:L.minWidth;L.width=K;this._setColumnWidth(L,K+"px");this._syncScroll();this.fireEvent("columnSetWidthEvent",{column:L,width:K});}else{if(K===null){L.width=K;this._setColumnWidth(L,"auto");this.validateColumnWidths(L);this.fireEvent("columnUnsetWidthEvent",{column:L});}}this._clearTrTemplateEl();}else{}},showTableMessage:function(O,K){var P=this._elMsgTd;if(C.isString(O)){P.firstChild.innerHTML=O;}if(C.isString(K)){D.addClass(P.firstChild,K);}var N=this.getTheadEl();var L=N.parentNode;var M=L.offsetWidth;this._elMsgTbody.parentNode.style.width=this.getTheadEl().parentNode.offsetWidth+"px";this._elMsgTbody.style.display="";this.fireEvent("tableMsgShowEvent",{html:O,className:K});},_onColumnChange:function(K){var L=(K.column)?K.column:(K.editor)?K.editor.column:null;this._storeScrollPositions();this.validateColumnWidths(L);},_onScroll:function(M,L){L._elHdContainer.scrollLeft=L._elBdContainer.scrollLeft;if(L._oCellEditor&&L._oCellEditor.isActive){L.fireEvent("editorBlurEv!
 ent",{editor:L._oCellEditor});L.cancelCellEditor();}var N=J.getTarget(M);var K=N.nodeName.toLowerCase();L.fireEvent("tableScrollEvent",{event:M,target:N});},_onTheadKeydown:function(N,L){if(J.getCharCode(N)===9){setTimeout(function(){if((L instanceof H)&&L._sId){L._elBdContainer.scrollLeft=L._elHdContainer.scrollLeft;}},0);}var O=J.getTarget(N);var K=O.nodeName.toLowerCase();var M=true;while(O&&(K!="table")){switch(K){case"body":return;case"input":case"textarea":break;case"thead":M=L.fireEvent("theadKeyEvent",{target:O,event:N});break;default:break;}if(M===false){return;}else{O=O.parentNode;if(O){K=O.nodeName.toLowerCase();}}}L.fireEvent("tableKeyEvent",{target:(O||L._elContainer),event:N});}});})();(function(){var C=YAHOO.lang,F=YAHOO.util,E=YAHOO.widget,B=YAHOO.env.ua,D=F.Dom,I=F.Event,H=E.DataTable;E.BaseCellEditor=function(K,J){this._sId=this._sId||"yui-ceditor"+YAHOO.widget.BaseCellEditor._nCount++;this._sType=K;this._initConfigs(J);this._initEvents();this.render();};v!
 ar A=E.BaseCellEditor;C.augmentObject(A,{_nCount:0,CLASS_CELLE!
 DITOR:"y
ui-ceditor"});A.prototype={_sId:null,_sType:null,_oDataTable:null,_oColumn:null,_oRecord:null,_elTd:null,_elContainer:null,_elCancelBtn:null,_elSaveBtn:null,_initConfigs:function(K){if(K&&YAHOO.lang.isObject(K)){for(var J in K){if(J){this[J]=K[J];}}}},_initEvents:function(){this.createEvent("showEvent");this.createEvent("keydownEvent");this.createEvent("invalidDataEvent");this.createEvent("revertEvent");this.createEvent("saveEvent");this.createEvent("cancelEvent");this.createEvent("blurEvent");this.createEvent("blockEvent");this.createEvent("unblockEvent");},asyncSubmitter:null,value:null,defaultValue:null,validator:null,resetInvalidData:true,isActive:false,LABEL_SAVE:"Save",LABEL_CANCEL:"Cancel",disableBtns:false,toString:function(){return"CellEditor instance "+this._sId;},getId:function(){return this._sId;},getDataTable:function(){return this._oDataTable;},getColumn:function(){return this._oColumn;},getRecord:function(){return this._oRecord;},getTdEl:function(){return this!
 ._elTd;},getContainerEl:function(){return this._elContainer;},destroy:function(){this.unsubscribeAll();var K=this.getColumn();if(K){K.editor=null;}var J=this.getContainerEl();I.purgeElement(J,true);J.parentNode.removeChild(J);},render:function(){if(this._elContainer){YAHOO.util.Event.purgeElement(this._elContainer,true);this._elContainer.innerHTML="";}var J=document.createElement("div");J.id=this.getId()+"-container";J.style.display="none";J.tabIndex=0;J.className=H.CLASS_EDITOR;document.body.insertBefore(J,document.body.firstChild);this._elContainer=J;I.addListener(J,"keydown",function(M,K){if((M.keyCode==27)){var L=I.getTarget(M);if(L.nodeName&&L.nodeName.toLowerCase()==="select"){L.blur();}K.cancel();}K.fireEvent("keydownEvent",{editor:this,event:M});},this);this.renderForm();if(!this.disableBtns){this.renderBtns();}this.doAfterRender();},renderBtns:function(){var L=this.getContainerEl().appendChild(document.createElement("div"));
+L.className=H.CLASS_BUTTON;var K=L.appendChild(document.createElement("button"));K.className=H.CLASS_DEFAULT;K.innerHTML=this.LABEL_SAVE;I.addListener(K,"click",function(M){this.save();},this,true);this._elSaveBtn=K;var J=L.appendChild(document.createElement("button"));J.innerHTML=this.LABEL_CANCEL;I.addListener(J,"click",function(M){this.cancel();},this,true);this._elCancelBtn=J;},attach:function(N,L){if(N instanceof YAHOO.widget.DataTable){this._oDataTable=N;L=N.getTdEl(L);if(L){this._elTd=L;var M=N.getColumn(L);if(M){this._oColumn=M;var J=N.getRecord(L);if(J){this._oRecord=J;var K=J.getData(this.getColumn().getKey());this.value=(K!==undefined)?K:this.defaultValue;return true;}}}}return false;},move:function(){var M=this.getContainerEl(),L=this.getTdEl(),J=D.getX(L),N=D.getY(L);if(isNaN(J)||isNaN(N)){var K=this.getDataTable().getTbodyEl();J=L.offsetLeft+D.getX(K.parentNode)-K.scrollLeft;N=L.offsetTop+D.getY(K.parentNode)-K.scrollTop+this.getDataTable().getTheadEl().offset!
 Height;}M.style.left=J+"px";M.style.top=N+"px";},show:function(){this.resetForm();this.isActive=true;this.getContainerEl().style.display="";this.focus();this.fireEvent("showEvent",{editor:this});},block:function(){this.fireEvent("blockEvent",{editor:this});},unblock:function(){this.fireEvent("unblockEvent",{editor:this});},save:function(){var K=this.getInputValue();var L=K;if(this.validator){L=this.validator.call(this.getDataTable(),K,this.value,this);if(L===undefined){if(this.resetInvalidData){this.resetForm();}this.fireEvent("invalidDataEvent",{editor:this,oldData:this.value,newData:K});return;}}var M=this;var J=function(O,N){var P=M.value;if(O){M.value=N;M.getDataTable().updateCell(M.getRecord(),M.getColumn(),N);M.getContainerEl().style.display="none";M.isActive=false;M.getDataTable()._oCellEditor=null;M.fireEvent("saveEvent",{editor:M,oldData:P,newData:M.value});}else{M.resetForm();M.fireEvent("revertEvent",{editor:M,oldData:P,newData:N});}M.unblock();};this.block();if(!
 C.isFunction(this.asyncSubmitter)){this.asyncSubmitter.call(th!
 is,J,L);
}else{J(true,L);}},cancel:function(){if(this.isActive){this.getContainerEl().style.display="none";this.isActive=false;this.getDataTable()._oCellEditor=null;this.fireEvent("cancelEvent",{editor:this});}else{}},renderForm:function(){},doAfterRender:function(){},handleDisabledBtns:function(){},resetForm:function(){},focus:function(){},getInputValue:function(){}};C.augmentProto(A,F.EventProvider);E.CheckboxCellEditor=function(J){this._sId="yui-checkboxceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.CheckboxCellEditor.superclass.constructor.call(this,"checkbox",J);};C.extend(E.CheckboxCellEditor,A,{checkboxOptions:null,checkboxes:null,value:null,renderForm:function(){if(C.isArray(this.checkboxOptions)){var M,N,P,K,L,J;for(L=0,J=this.checkboxOptions.length;L<J;L++){M=this.checkboxOptions[L];N=C.isValue(M.value)?M.value:M;P=this.getId()+"-chk"+L;this.getContainerEl().innerHTML+='<input type="checkbox"'+' id="'+P+'"'+' value="'+N+'" />';K=this.getContainerEl().appendChild(document.!
 createElement("label"));K.htmlFor=P;K.innerHTML=C.isValue(M.label)?M.label:M;}var O=[];for(L=0;L<J;L++){O[O.length]=this.getContainerEl().childNodes[L*2];}this.checkboxes=O;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){I.addListener(this.getContainerEl(),"click",function(J){if(I.getTarget(J).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){var N=C.isArray(this.value)?this.value:[this.value];for(var M=0,L=this.checkboxes.length;M<L;M++){this.checkboxes[M].checked=false;for(var K=0,J=N.length;K<J;K++){if(this.checkboxes[M].value===N[K]){this.checkboxes[M].checked=true;}}}},focus:function(){this.checkboxes[0].focus();},getInputValue:function(){var J=[];for(var L=0,K=this.checkboxes.length;L<K;L++){if(this.checkboxes[L].checked){J[J.length]=this.checkboxes[L].value;}}return J;}});C.augmentObject(E.CheckboxCellEditor,A);E.DateCellEditor=function(J){this._sId="yui-dateceditor"+YAHOO.widget.BaseCellEditor._n!
 Count++;E.DateCellEditor.superclass.constructor.call(this,"dat!
 e",J);};
C.extend(E.DateCellEditor,A,{calendar:null,calendarOptions:null,defaultValue:new Date(),renderForm:function(){if(YAHOO.widget.Calendar){var K=this.getContainerEl().appendChild(document.createElement("div"));K.id=this.getId()+"-dateContainer";var L=new YAHOO.widget.Calendar(this.getId()+"-date",K.id,this.calendarOptions);L.render();K.style.cssFloat="none";if(B.ie){var J=this.getContainerEl().appendChild(document.createElement("div"));J.style.clear="both";}this.calendar=L;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){this.calendar.selectEvent.subscribe(function(J){this.save();},this,true);},resetForm:function(){var K=this.value;var J=(K.getMonth()+1)+"/"+K.getDate()+"/"+K.getFullYear();this.calendar.cfg.setProperty("selected",J,false);this.calendar.render();},focus:function(){},getInputValue:function(){return this.calendar.getSelectedDates()[0];}});C.augmentObject(E.DateCellEditor,A);E.DropdownCellEditor=function(J){this._sId="yui-dropd!
 ownceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.DropdownCellEditor.superclass.constructor.call(this,"dropdown",J);};C.extend(E.DropdownCellEditor,A,{dropdownOptions:null,dropdown:null,renderForm:function(){var M=this.getContainerEl().appendChild(document.createElement("select"));M.style.zoom=1;this.dropdown=M;if(C.isArray(this.dropdownOptions)){var N,L;for(var K=0,J=this.dropdownOptions.length;K<J;K++){N=this.dropdownOptions[K];L=document.createElement("option");L.value=(C.isValue(N.value))?N.value:N;L.innerHTML=(C.isValue(N.label))?N.label:N;L=M.appendChild(L);}if(this.disableBtns){this.handleDisabledBtns();}}},handleDisabledBtns:function(){I.addListener(this.dropdown,"change",function(J){this.save();},this,true);},resetForm:function(){for(var K=0,J=this.dropdown.options.length;K<J;K++){if(this.value===this.dropdown.options[K].value){this.dropdown.options[K].selected=true;}}},focus:function(){this.getDataTable()._focusEl(this.dropdown);
+},getInputValue:function(){return this.dropdown.options[this.dropdown.options.selectedIndex].value;}});C.augmentObject(E.DropdownCellEditor,A);E.RadioCellEditor=function(J){this._sId="yui-radioceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.RadioCellEditor.superclass.constructor.call(this,"radio",J);};C.extend(E.RadioCellEditor,A,{radios:null,radioOptions:null,renderForm:function(){if(C.isArray(this.radioOptions)){var J,K,Q,N;for(var M=0,O=this.radioOptions.length;M<O;M++){J=this.radioOptions[M];K=C.isValue(J.value)?J.value:J;Q=this.getId()+"-radio"+M;this.getContainerEl().innerHTML+='<input type="radio"'+' name="'+this.getId()+'"'+' value="'+K+'"'+' id="'+Q+'" />';N=this.getContainerEl().appendChild(document.createElement("label"));N.htmlFor=Q;N.innerHTML=(C.isValue(J.label))?J.label:J;}var P=[],R;for(var L=0;L<O;L++){R=this.getContainerEl().childNodes[L*2];P[P.length]=R;}this.radios=P;if(this.disableBtns){this.handleDisabledBtns();}}else{}},handleDisabledBtns:function(){!
 I.addListener(this.getContainerEl(),"click",function(J){if(I.getTarget(J).tagName.toLowerCase()==="input"){this.save();}},this,true);},resetForm:function(){for(var L=0,K=this.radios.length;L<K;L++){var J=this.radios[L];if(this.value===J.value){J.checked=true;return;}}},focus:function(){for(var K=0,J=this.radios.length;K<J;K++){if(this.radios[K].checked){this.radios[K].focus();return;}}},getInputValue:function(){for(var K=0,J=this.radios.length;K<J;K++){if(this.radios[K].checked){return this.radios[K].value;}}}});C.augmentObject(E.RadioCellEditor,A);E.TextareaCellEditor=function(J){this._sId="yui-textareaceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.TextareaCellEditor.superclass.constructor.call(this,"textarea",J);};C.extend(E.TextareaCellEditor,A,{textarea:null,renderForm:function(){var J=this.getContainerEl().appendChild(document.createElement("textarea"));this.textarea=J;if(this.disableBtns){this.handleDisabledBtns();}},handleDisabledBtns:function(){I.addListener(this.!
 textarea,"blur",function(J){this.save();},this,true);},move:fu!
 nction()
{this.textarea.style.width=this.getTdEl().offsetWidth+"px";this.textarea.style.height="3em";YAHOO.widget.TextareaCellEditor.superclass.move.call(this);},resetForm:function(){this.textarea.value=this.value;},focus:function(){this.getDataTable()._focusEl(this.textarea);this.textarea.select();},getInputValue:function(){return this.textarea.value;}});C.augmentObject(E.TextareaCellEditor,A);E.TextboxCellEditor=function(J){this._sId="yui-textboxceditor"+YAHOO.widget.BaseCellEditor._nCount++;E.TextboxCellEditor.superclass.constructor.call(this,"textbox",J);};C.extend(E.TextboxCellEditor,A,{textbox:null,renderForm:function(){var J;if(B.webkit>420){J=this.getContainerEl().appendChild(document.createElement("form")).appendChild(document.createElement("input"));}else{J=this.getContainerEl().appendChild(document.createElement("input"));}J.type="text";this.textbox=J;I.addListener(J,"keypress",function(K){if((K.keyCode===13)){YAHOO.util.Event.preventDefault(K);this.save();}},this,true);if!
 (this.disableBtns){this.handleDisabledBtns();}},move:function(){this.textbox.style.width=this.getTdEl().offsetWidth+"px";E.TextboxCellEditor.superclass.move.call(this);},resetForm:function(){this.textbox.value=C.isValue(this.value)?this.value.toString():"";},focus:function(){this.getDataTable()._focusEl(this.textbox);this.textbox.select();},getInputValue:function(){return this.textbox.value;}});C.augmentObject(E.TextboxCellEditor,A);H.Editors={checkbox:E.CheckboxCellEditor,"date":E.DateCellEditor,dropdown:E.DropdownCellEditor,radio:E.RadioCellEditor,textarea:E.TextareaCellEditor,textbox:E.TextboxCellEditor};E.CellEditor=function(K,J){if(K&&H.Editors[K]){C.augmentObject(A,H.Editors[K]);return new H.Editors[K](J);}else{return new A(null,J);}};var G=E.CellEditor;C.augmentObject(G,A);})();YAHOO.register("datatable",YAHOO.widget.DataTable,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/datatable/datatable.js
===================================================================
--- trunk/root/static/yui/datatable/datatable.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/datatable/datatable.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Mechanism to execute a series of callbacks in a non-blocking queue.  Each callback is executed via setTimout unless configured with a negative timeout, in which case it is run in blocking mode in the same execution thread as the previous callback.  Callbacks can be function references or object literals with the following keys:
@@ -1150,7 +1150,7 @@
      * @return {String} Sanitized Column key.
      */
     getSanitizedKey : function() {
-        return this.getKey().replace(/[^\w\-.:]/g,"");
+        return this.getKey().replace(/[^\w\-]/g,"");
     },
 
     /**
@@ -2441,7 +2441,6 @@
  * @requires yahoo, dom, event, element, datasource
  * @optional dragdrop, dragdrop
  * @title DataTable Widget
- * @beta
  */
 
 /****************************************************************************/
@@ -2453,7 +2452,7 @@
  *
  * @namespace YAHOO.widget
  * @class DataTable
- * @extends Element
+ * @extends YAHOO.util.Element
  * @constructor
  * @param elContainer {HTMLElement} Container element for the TABLE.
  * @param aColumnDefs {Object[]} Array of object literal Column definitions.
@@ -3266,12 +3265,12 @@
      * @static
      */
     formatDropdown : function(el, oRecord, oColumn, oData) {
-        var selectedValue = (lang.isValue(oData)) ? oData : oRecord.getData(oColumn.field);
-        var options = (lang.isArray(oColumn.dropdownOptions)) ?
-                oColumn.dropdownOptions : null;
+        var selectedValue = (lang.isValue(oData)) ? oData : oRecord.getData(oColumn.field),
+            options = (lang.isArray(oColumn.dropdownOptions)) ?
+                oColumn.dropdownOptions : null,
 
-        var selectEl;
-        var collection = el.getElementsByTagName("select");
+            selectEl,
+            collection = el.getElementsByTagName("select");
 
         // Create the form element only once, so we can attach the onChange listener
         if(collection.length === 0) {
@@ -3299,8 +3298,9 @@
                     var optionEl = document.createElement("option");
                     optionEl.value = (lang.isValue(option.value)) ?
                             option.value : option;
+                    // Bug 2334323: Support legacy text, support label for consistency with DropdownCellEditor
                     optionEl.innerHTML = (lang.isValue(option.text)) ?
-                            option.text : option;
+                            option.text : (lang.isValue(option.label)) ? option.label : option;
                     optionEl = selectEl.appendChild(optionEl);
                     if (optionEl.value == selectedValue) {
                         optionEl.selected = true;
@@ -3398,8 +3398,7 @@
      * @static
      */
     formatText : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
+        var value = (lang.isValue(oData)) ? oData : "";
         //TODO: move to util function
         el.innerHTML = value.toString().replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
     },
@@ -3415,9 +3414,8 @@
      * @static
      */
     formatTextarea : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
-        var markup = "<textarea>" + value + "</textarea>";
+        var value = (lang.isValue(oData)) ? oData : "",
+            markup = "<textarea>" + value + "</textarea>";
         el.innerHTML = markup;
     },
 
@@ -3432,9 +3430,8 @@
      * @static
      */
     formatTextbox : function(el, oRecord, oColumn, oData) {
-        var value = (lang.isValue(oRecord.getData(oColumn.field))) ?
-                oRecord.getData(oColumn.field) : "";
-        var markup = "<input type=\"text\" value=\"" + value + "\" />";
+        var value = (lang.isValue(oData)) ? oData : "",
+            markup = "<input type=\"text\" value=\"" + value + "\" />";
         el.innerHTML = markup;
     },
 
@@ -3775,7 +3772,7 @@
             // Set defaults
             oState = oState || {pagination:null, sortedBy:null};
             var sort = (oState.sortedBy) ? oState.sortedBy.key : oSelf.getColumnSet().keys[0].getKey();
-            var dir = (oState.sortedBy && oState.sortedBy.dir === DT.CLASS_DESC) ? "desc" : "asc";
+            var dir = (oState.sortedBy && oState.sortedBy.dir === YAHOO.widget.DataTable.CLASS_DESC) ? "desc" : "asc";
             var startIndex = (oState.pagination) ? oState.pagination.recordOffset : 0;
             var results = (oState.pagination) ? oState.pagination.rowsPerPage : null;
             
@@ -4839,12 +4836,20 @@
         
     elTh.className = this._getColumnClassNames(oColumn);
             
-    // Set Column width for non fallback cases
-    if(oColumn.width && !this._bDynStylesFallback) {
+    // Set Column width...
+    if(oColumn.width) {
         // Validate minWidth
         var nWidth = (oColumn.minWidth && (oColumn.width < oColumn.minWidth)) ?
                 oColumn.minWidth : oColumn.width;
-        this._setColumnWidthDynStyles(oColumn, nWidth + 'px', 'hidden');
+        // ...for fallback cases
+        if(DT._bDynStylesFallback) {
+            elTh.firstChild.style.overflow = 'hidden';
+            elTh.firstChild.style.width = nWidth + 'px';        
+        }
+        // ...for non fallback cases
+        else {
+            this._setColumnWidthDynStyles(oColumn, nWidth + 'px', 'hidden');
+        }
     }
 
     this.formatTheadCell(elThLabel, oColumn, this.get("sortedBy"));
@@ -5103,7 +5108,7 @@
         elMsgTr.className = DT.CLASS_FIRST + " " + DT.CLASS_LAST;
         this._elMsgTr = elMsgTr;
         var elMsgTd = elMsgTr.appendChild(document.createElement("td"));
-        elMsgTd.colSpan = this._oColumnSet.keys.length;
+        elMsgTd.colSpan = this._oColumnSet.keys.length || 1;
         elMsgTd.className = DT.CLASS_FIRST + " " + DT.CLASS_LAST;
         this._elMsgTd = elMsgTd;
         elMsgTbody = elTable.insertBefore(elMsgTbody, this._elTbody);
@@ -5370,7 +5375,7 @@
     elTd.firstChild.className = DT.CLASS_LINER;
 
     // Set Column width for fallback cases
-    if(oColumn.width && this._bDynStylesFallback) {
+    if(oColumn.width && DT._bDynStylesFallback) {
         // Validate minWidth
         var nWidth = (oColumn.minWidth && (oColumn.width < oColumn.minWidth)) ?
                 oColumn.minWidth : oColumn.width;
@@ -5413,7 +5418,7 @@
  * @private
  */
 _updateTrEl : function(elTr, oRecord) {
-    var ok = this.get("formatRow") ? this.get("formatRow")(elTr, oRecord) : true;
+    var ok = this.get("formatRow") ? this.get("formatRow").call(this, elTr, oRecord) : true;
     if(ok) {
         // Hide the row to prevent constant reflows
         elTr.style.display = 'none';
@@ -6248,20 +6253,24 @@
         }
     }
 
-    var elTarget = Ev.getTarget(e);
-    var elTag = elTarget.nodeName.toLowerCase();
-    var bKeepBubbling = true;
+    var elTarget = Ev.getTarget(e),
+        elTag = elTarget.nodeName.toLowerCase(),
+        bKeepBubbling = true;
     while(elTarget && (elTag != "table")) {
         switch(elTag) {
             case "body":
                 return;
             case "input":
-                if(elTarget.type.toLowerCase() == "checkbox") {
+                var sType = elTarget.type.toLowerCase();
+                if(sType == "checkbox") {
                     bKeepBubbling = oSelf.fireEvent("theadCheckboxClickEvent",{target:elTarget,event:e});
                 }
-                else if(elTarget.type.toLowerCase() == "radio") {
+                else if(sType == "radio") {
                     bKeepBubbling = oSelf.fireEvent("theadRadioClickEvent",{target:elTarget,event:e});
                 }
+                else if((sType == "button") || (sType == "image") || (sType == "submit") || (sType == "reset")) {
+                    bKeepBubbling = oSelf.fireEvent("theadButtonClickEvent",{target:elTarget,event:e});
+                }
                 break;
             case "a":
                 bKeepBubbling = oSelf.fireEvent("theadLinkClickEvent",{target:elTarget,event:e});
@@ -6322,20 +6331,24 @@
     }
 
     // Fire Custom Events
-    var elTarget = Ev.getTarget(e);
-    var elTag = elTarget.nodeName.toLowerCase();
-    var bKeepBubbling = true;
+    var elTarget = Ev.getTarget(e),
+        elTag = elTarget.nodeName.toLowerCase(),
+        bKeepBubbling = true;
     while(elTarget && (elTag != "table")) {
         switch(elTag) {
             case "body":
                 return;
             case "input":
-                if(elTarget.type.toLowerCase() == "checkbox") {
+                var sType = elTarget.type.toLowerCase();
+                if(sType == "checkbox") {
                     bKeepBubbling = oSelf.fireEvent("checkboxClickEvent",{target:elTarget,event:e});
                 }
-                else if(elTarget.type.toLowerCase() == "radio") {
+                else if(sType == "radio") {
                     bKeepBubbling = oSelf.fireEvent("radioClickEvent",{target:elTarget,event:e});
                 }
+                else if((sType == "button") || (sType == "image") || (sType == "submit") || (sType == "reset")) {
+                    bKeepBubbling = oSelf.fireEvent("buttonClickEvent",{target:elTarget,event:e});
+                }
                 break;
             case "a":
                 bKeepBubbling = oSelf.fireEvent("linkClickEvent",{target:elTarget,event:e});
@@ -6659,11 +6672,7 @@
                 elRow = Dom.getAncestorByTagName(elRow,"tr");
             }
 
-            // Make sure the TR is in this TBODY
-            if(elRow && (elRow.parentNode == this._elTbody)) {
-                // Now we can return the TR element
-                return elRow;
-            }
+            return elRow;
         }
     }
 
@@ -6769,11 +6778,7 @@
             elCell = el;
         }
 
-        // Make sure the TD is in this TBODY
-        if(elCell && (elCell.parentNode.parentNode == this._elTbody)) {
-            // Now we can return the TD element
-            return elCell;
-        }
+        return elCell;
     }
     else if(cell) {
         var oRecord, nColKeyIndex;
@@ -6968,11 +6973,7 @@
                 elTh = el;
             }
 
-            // Make sure the TH is in this THEAD
-            if(elTh && (elTh.parentNode.parentNode == this._elThead)) {
-                // Now we can return the TD element
-                return elTh;
-            }
+            return elTh;
         }
     }
 
@@ -7159,19 +7160,13 @@
         allRecords = this._oRecordSet.getRecords();
     }
 
-
-    /* NEW METHOD */
     // From the top, update in-place existing rows, so as to reuse DOM elements
     var elTbody = this._elTbody,
         loopN = this.get("renderLoopSize"),
         nRecordsLength = allRecords.length;
     
     // Table has rows
-    if(nRecordsLength > 0) {        
-        // So you don't see the borders in random places
-        //this._unsetFirstRow();
-        //this._unsetLastRow();
-        
+    if(nRecordsLength > 0) {                
         elTbody.style.display = "none";
         while(elTbody.lastChild) {
             elTbody.removeChild(elTbody.lastChild);
@@ -7226,58 +7221,40 @@
             scope: this,
             timeout: (loopN > 0) ? 0 : -1
         });
-        
-        // Fire events in separate timeout thread so implementers can
-        // subscribe immediately after the constructor
-        /*this._oChainRender.add({
-            method: function(oArg) {
-                if((this instanceof DT) && this._sId) {
-                    // Fire initEvent for first render
-                    if(this._bInit) {
-                        this._bInit = false;
-                        this.fireEvent("initEvent");
-                    }
-
-                    // Always fire renderEvent
-                    this.fireEvent("renderEvent");
-                    // Backward compatibility
-                    this.fireEvent("refreshEvent");
-                
-                }
-            },
-            scope: this
-        });*/
+     
     }
     // Table has no rows
     else {
         // Set up the loop Chain to delete rows
         var nTotal = elTbody.rows.length;
-        this._oChainRender.add({
-            method: function(oArg) {
-                if((this instanceof DT) && this._sId) {
-                    var i = oArg.nCurrent,
-                        loopN = oArg.nLoopLength,
-                        nIterEnd = (i - loopN < 0) ? -1 : i - loopN;
-
-                    elTbody.style.display = "none";
-                    
-                    for(; i>nIterEnd; i--) {
-                        elTbody.deleteRow(-1);
+        if(nTotal > 0) {
+            this._oChainRender.add({
+                method: function(oArg) {
+                    if((this instanceof DT) && this._sId) {
+                        var i = oArg.nCurrent,
+                            loopN = oArg.nLoopLength,
+                            nIterEnd = (i - loopN < 0) ? -1 : i - loopN;
+    
+                        elTbody.style.display = "none";
+                        
+                        for(; i>nIterEnd; i--) {
+                            elTbody.deleteRow(-1);
+                        }
+                        elTbody.style.display = "";
+                        
+                        // Set up for the next loop
+                        oArg.nCurrent = i;
                     }
-                    elTbody.style.display = "";
-                    
-                    // Set up for the next loop
-                    oArg.nCurrent = i;
-                }
-            },
-            scope: this,
-            iterations: (loopN > 0) ? Math.ceil(nTotal/loopN) : 1,
-            argument: {
-                nCurrent: nTotal, 
-                nLoopLength: (loopN > 0) ? loopN : nTotal
-            },
-            timeout: (loopN > 0) ? 0 : -1
-        });
+                },
+                scope: this,
+                iterations: (loopN > 0) ? Math.ceil(nTotal/loopN) : 1,
+                argument: {
+                    nCurrent: nTotal, 
+                    nLoopLength: (loopN > 0) ? loopN : nTotal
+                },
+                timeout: (loopN > 0) ? 0 : -1
+            });
+        }
     }
     this._runRenderChain();
 },
@@ -7436,6 +7413,13 @@
  */
 onShow : function() {
     this.validateColumnWidths();
+    
+    for(var allKeys = this._oColumnSet.keys, i=0, len=allKeys.length, col; i<len; i++) {
+        col = allKeys[i];
+        if(col._ddResizer) {
+            col._ddResizer.resetResizerEl();
+        }
+    }
 },
 
 
@@ -7788,27 +7772,28 @@
             }
             // Client-side sort
             else {
+                // Is there a custom sort handler function defined?
+                var sortFnc = (oColumn.sortOptions && lang.isFunction(oColumn.sortOptions.sortFunction)) ?
+                        // Custom sort function
+                        oColumn.sortOptions.sortFunction : null;
+                   
                 // Sort the Records
-                if(!bSorted || sDir) {
+                if(!bSorted || sDir || sortFnc) {
                     // Get the field to sort
                     var sField = (oColumn.sortOptions && oColumn.sortOptions.field) ? oColumn.sortOptions.field : oColumn.field;
-                    // Is there a custom sort handler function defined?
-                    var sortFnc = (oColumn.sortOptions && lang.isFunction(oColumn.sortOptions.sortFunction)) ?
-                            // Custom sort function
-                            oColumn.sortOptions.sortFunction :
-        
-                            // Default sort function
-                            function(a, b, desc) {
-                                YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
-                                var sorted = YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
-                                if(sorted === 0) {
-                                    return YAHOO.util.Sort.compare(a.getCount(),b.getCount(), desc); // Bug 1932978
-                                }
-                                else {
-                                    return sorted;
-                                }
-                            };
-        
+
+                    // Default sort function if necessary
+                    sortFnc = sortFnc || 
+                        function(a, b, desc) {
+                            var sorted = YAHOO.util.Sort.compare(a.getData(sField),b.getData(sField), desc);
+                            if(sorted === 0) {
+                                return YAHOO.util.Sort.compare(a.getCount(),b.getCount(), desc); // Bug 1932978
+                            }
+                            else {
+                                return sorted;
+                            }
+                        };
+                    // Sort the Records        
                     this._oRecordSet.sortRecords(sortFnc, ((sSortDir == DT.CLASS_DESC) ? true : false));
                 }
                 // Just reverse the Records
@@ -7860,7 +7845,6 @@
             this._setColumnWidth(oColumn, nWidth+"px");
             
             this.fireEvent("columnSetWidthEvent",{column:oColumn,width:nWidth});
-            return;
         }
         // Unsets a width to auto-size
         else if(nWidth === null) {
@@ -7871,10 +7855,13 @@
             this._setColumnWidth(oColumn, "auto");
             this.validateColumnWidths(oColumn);
             this.fireEvent("columnUnsetWidthEvent",{column:oColumn});
-            
-            return;
         }
+                
+        // Bug 2339454: resize then sort misaligment
+        this._clearTrTemplateEl();
     }
+    else {
+    }
 },
 
 /**
@@ -8805,6 +8792,10 @@
  * @param index {Number} (optional) RecordSet position index at which to add data.
  */
 addRow : function(oData, index) {
+    if(lang.isNumber(index) && (index < 0 || index > this._oRecordSet.getLength())) {
+        return;
+    }
+
     if(oData && lang.isObject(oData)) {
         var oRecord = this._oRecordSet.addRecord(oData, index);
         if(oRecord) {
@@ -8882,6 +8873,10 @@
  * @param index {Number} (optional) RecordSet position index at which to add data.
  */
 addRows : function(aData, index) {
+    if(lang.isNumber(index) && (index < 0 || index > this._oRecordSet.getLength())) {
+        return;
+    }
+
     if(lang.isArray(aData)) {
         var aRecords = this._oRecordSet.addRecords(aData, index);
         if(aRecords) {
@@ -8912,6 +8907,7 @@
                 var loopN = this.get("renderLoopSize");
                 var loopEnd = recIndex + aData.length;
                 var nRowsNeeded = (loopEnd - recIndex); // how many needed
+                var isLast = (recIndex >= this._elTbody.rows.length);
                 this._oChainRender.add({
                     method: function(oArg) {
                         if((this instanceof DT) && this._sId) {
@@ -8920,11 +8916,10 @@
                                 j = oArg.nCurrentRecord,
                                 len = loopN > 0 ? Math.min(i + loopN,loopEnd) : loopEnd,
                                 df = document.createDocumentFragment(),
-                                tr;
-                            for(; i < len; ++i,++j) {
+                                elNext = (this._elTbody.rows[i]) ? this._elTbody.rows[i] : null;
+                            for(; i < len; i++, j++) {
                                 df.appendChild(this._addTrEl(aRecords[j]));
                             }
-                            var elNext = (this._elTbody.rows[index]) ? this._elTbody.rows[index] : null;
                             this._elTbody.insertBefore(df, elNext);
                             oArg.nCurrentRow = i;
                             oArg.nCurrentRecord = j;
@@ -8942,7 +8937,7 @@
                         if(recIndex === 0) {
                             this._setFirstRow();
                         }
-                        if(recIndex === this._elTbody.rows.length-1) {
+                        if(oArg.isLast) {
                             this._setLastRow();
                         }
                         // Set EVEN/ODD
@@ -8950,7 +8945,7 @@
 
                         this.fireEvent("rowsAddEvent", {records:aRecords});
                     },
-                    argument: {recIndex: recIndex},
+                    argument: {recIndex: recIndex, isLast: isLast},
                     scope: this,
                     timeout: -1 // Needs to run immediately after the DOM insertions above
                 });
@@ -8974,54 +8969,192 @@
  * @param oData {Object} Object literal of data for the row.
  */
 updateRow : function(row, oData) {
-    var oldRecord, oldData, updatedRecord, elRow;
-
-    // Get the Record directly
-    if((row instanceof YAHOO.widget.Record) || (lang.isNumber(row))) {
-        // Get the Record directly
-        oldRecord = this._oRecordSet.getRecord(row);
-
-        // Is this row on current page?
-        elRow = this.getTrEl(oldRecord);
+    var index = row;
+    if (!lang.isNumber(index)) {
+        index = this.getRecordIndex(row);
     }
-    // Get the Record by TR element
-    else {
-        elRow = this.getTrEl(row);
-        if(elRow) {
-            oldRecord = this.getRecord(elRow);
-        }
-    }
 
     // Update the Record
-    if(oldRecord) {
-        // Copy data from the Record for the event that gets fired later
-        var oRecordData = oldRecord.getData();
-        oldData = YAHOO.widget.DataTable._cloneObject(oRecordData);
+    if(lang.isNumber(index) && (index >= 0)) {
+        var oRecordSet = this._oRecordSet,
+            oldRecord = oRecordSet.getRecord(index);
+            
+        
+        if(oldRecord) {
+            var updatedRecord = this._oRecordSet.setRecord(oData, index),
+                elRow = this.getTrEl(oldRecord),
+                // Copy data from the Record for the event that gets fired later
+                oldData = oldRecord ? oldRecord.getData() : null;
+               
+            if(updatedRecord) {
+                // Update selected rows as necessary
+                var tracker = this._aSelections || [],
+                i=0,
+                oldId = oldRecord.getId(),
+                newId = updatedRecord.getId();
+                for(; i<tracker.length; i++) {
+                    if((tracker[i] === oldId)) {
+                        tracker[i] = newId;
+                    }
+                    else if(tracker[i].recordId === oldId) {
+                        tracker[i].recordId = newId;
+                    }
+                }
 
-        updatedRecord = this._oRecordSet.updateRecord(oldRecord, oData);
+                // Update the TR only if row is on current page
+                this._oChainRender.add({
+                    method: function() {
+                        if((this instanceof DT) && this._sId) {
+                            // Paginated
+                            var oPaginator = this.get('paginator');
+                            if (oPaginator) {
+                                var pageStartIndex = (oPaginator.getPageRecords())[0],
+                                    pageLastIndex = (oPaginator.getPageRecords())[1];
+        
+                                // At least one of the new records affects the view
+                                if ((index >= pageStartIndex) || (index <= pageLastIndex)) {
+                                    this.render();
+                                }
+                            }
+                            else {
+                                if(elRow) {
+                                    this._updateTrEl(elRow, updatedRecord);
+                                }
+                                else {
+                                    this.getTbodyEl().appendChild(this._addTrEl(updatedRecord));
+                                }
+                            }
+                            this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
+                        }
+                    },
+                    scope: this,
+                    timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
+                });
+                this._runRenderChain();
+                return;
+            }
+        }
     }
-    else {
-        return;
+    return;
+},
 
-    }
-
-    // Update the TR only if row is on current page
-    if(elRow) {
-        this._oChainRender.add({
-            method: function() {
-                if((this instanceof DT) && this._sId) {
-                    this._updateTrEl(elRow, updatedRecord);
-                    this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
+/**
+ * Starting with the given row, updates associated Records with the given data.
+ * The number of rows to update are determined by the array of data provided.
+ * Undefined data (i.e., not an object literal) causes a row to be skipped. If
+ * any of the rows are on current page, the corresponding DOM elements are also
+ * updated.
+ *
+ * @method updateRows
+ * @param startrow {YAHOO.widget.Record | Number | HTMLElement | String}
+ * Starting row to update: By Record instance, by Record's RecordSet
+ * position index, by HTMLElement reference to the TR element, or by ID string
+ * of the TR element.
+ * @param aData {Object[]} Array of object literal of data for the rows.
+ */
+updateRows : function(startrow, aData) {
+    if(lang.isArray(aData)) {
+        var startIndex = startrow,
+            oRecordSet = this._oRecordSet;
+            
+        if (!lang.isNumber(startrow)) {
+            startIndex = this.getRecordIndex(startrow);
+        }
+            
+        if(lang.isNumber(startIndex) && (startIndex >= 0) && (startIndex < oRecordSet.getLength())) {
+            var lastIndex = startIndex + aData.length,
+                aOldRecords = oRecordSet.getRecords(startIndex, aData.length),
+                aNewRecords = oRecordSet.setRecords(aData, startIndex);
+            if(aNewRecords) {
+                // Update selected rows as necessary
+                var tracker = this._aSelections || [],
+                    i=0, j, newId, oldId;
+                for(; i<tracker.length; i++) {
+                    for(j=0; j<aOldRecords.length; j++) {
+                        oldId = aOldRecords[j].getId();
+                        if((tracker[i] === oldId)) {
+                            tracker[i] = aNewRecords[j].getId();
+                        }
+                        else if(tracker[i].recordId === oldId) {
+                            tracker[i].recordId = aNewRecords[j].getId();
+                        }
+                    }
                 }
-            },
-            scope: this,
-            timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
-        });
-        this._runRenderChain();
+            
+                // Paginated
+                var oPaginator = this.get('paginator');
+                if (oPaginator) {
+                    var pageStartIndex = (oPaginator.getPageRecords())[0],
+                        pageLastIndex = (oPaginator.getPageRecords())[1];
+    
+                    // At least one of the new records affects the view
+                    if ((startIndex >= pageStartIndex) || (lastIndex <= pageLastIndex)) {
+                        this.render();
+                    }
+                    
+                    this.fireEvent("rowsAddEvent", {newRecords:aNewRecords, oldRecords:aOldRecords});
+                    return;
+                }
+                // Not paginated
+                else {
+                    // Update the TR elements
+                    var loopN = this.get("renderLoopSize"),
+                        rowCount = aData.length, // how many needed
+                        lastRowIndex = this._elTbody.rows.length,
+                        isLast = (lastIndex >= lastRowIndex),
+                        isAdding = (lastIndex > lastRowIndex);
+                                           
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            if((this instanceof DT) && this._sId) {
+                                var aRecords = oArg.aRecords,
+                                    i = oArg.nCurrentRow,
+                                    j = oArg.nDataPointer,
+                                    len = loopN > 0 ? Math.min(i+loopN, startIndex+aRecords.length) : startIndex+aRecords.length;
+                                    
+                                for(; i < len; i++,j++) {
+                                    if(isAdding && (i>=lastRowIndex)) {
+                                        this._elTbody.appendChild(this._addTrEl(aRecords[j]));
+                                    }
+                                    else {
+                                        this._updateTrEl(this._elTbody.rows[i], aRecords[j]);
+                                    }
+                                }
+                                oArg.nCurrentRow = i;
+                                oArg.nDataPointer = j;
+                            }
+                        },
+                        iterations: (loopN > 0) ? Math.ceil(rowCount/loopN) : 1,
+                        argument: {nCurrentRow:startIndex,aRecords:aNewRecords,nDataPointer:0,isAdding:isAdding},
+                        scope: this,
+                        timeout: (loopN > 0) ? 0 : -1
+                    });
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            var recIndex = oArg.recIndex;
+                            // Set FIRST/LAST
+                            if(recIndex === 0) {
+                                this._setFirstRow();
+                            }
+                            if(oArg.isLast) {
+                                this._setLastRow();
+                            }
+                            // Set EVEN/ODD
+                            this._setRowStripes();                           
+    
+                            this.fireEvent("rowsAddEvent", {newRecords:aNewRecords, oldRecords:aOldRecords});
+                        },
+                        argument: {recIndex: startIndex, isLast: isLast},
+                        scope: this,
+                        timeout: -1 // Needs to run immediately after the DOM insertions above
+                    });
+                    this._runRenderChain();
+                    this.hideTableMessage();                
+                    return;
+                }            
+            }
+        }
     }
-    else {
-        this.fireEvent("rowUpdateEvent", {record:updatedRecord, oldData:oldData});
-    }
 },
 
 /**
@@ -9033,7 +9166,7 @@
  * to DataTable page element or RecordSet index.
  */
 deleteRow : function(row) {
-    var nRecordIndex = this.getRecordIndex(row);
+    var nRecordIndex = (lang.isNumber(row)) ? row : this.getRecordIndex(row);
     if(lang.isNumber(nRecordIndex)) {
         var oRecord = this.getRecord(nRecordIndex);
         if(oRecord) {
@@ -9043,7 +9176,7 @@
             var sRecordId = oRecord.getId();
             var tracker = this._aSelections || [];
             for(var j=tracker.length-1; j>-1; j--) {
-                if((lang.isNumber(tracker[j]) && (tracker[j] === sRecordId)) ||
+                if((lang.isString(tracker[j]) && (tracker[j] === sRecordId)) ||
                         (lang.isObject(tracker[j]) && (tracker[j].recordId === sRecordId))) {
                     tracker.splice(j,1);
                 }
@@ -9072,7 +9205,17 @@
                     if (!rng || nRecordIndex <= rng[1]) {
                         this.render();
                     }
-                    return;
+
+                    this._oChainRender.add({
+                        method: function() {
+                            if((this instanceof DT) && this._sId) {
+                                this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex, oldData:oData, trElIndex:nTrIndex});
+                            }
+                        },
+                        scope: this,
+                        timeout: (this.get("renderLoopSize") > 0) ? 0 : -1
+                    });
+                    this._runRenderChain();
                 }
                 // Not paginated
                 else {
@@ -9098,8 +9241,7 @@
                                         }                                
                                     }
                     
-                                    this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex,
-                                    oldData:oData, trElIndex:nTrIndex});
+                                    this.fireEvent("rowDeleteEvent", {recordIndex:nRecordIndex,oldData:oData, trElIndex:nTrIndex});
                                 }
                             },
                             scope: this,
@@ -9125,7 +9267,7 @@
  * will delete towards the beginning.
  */
 deleteRows : function(row, count) {
-    var nRecordIndex = this.getRecordIndex(row);
+    var nRecordIndex = (lang.isNumber(row)) ? row : this.getRecordIndex(row);
     if(lang.isNumber(nRecordIndex)) {
         var oRecord = this.getRecord(nRecordIndex);
         if(oRecord) {
@@ -9135,7 +9277,7 @@
             var sRecordId = oRecord.getId();
             var tracker = this._aSelections || [];
             for(var j=tracker.length-1; j>-1; j--) {
-                if((lang.isNumber(tracker[j]) && (tracker[j] === sRecordId)) ||
+                if((lang.isString(tracker[j]) && (tracker[j] === sRecordId)) ||
                         (lang.isObject(tracker[j]) && (tracker[j].recordId === sRecordId))) {
                     tracker.splice(j,1);
                 }
@@ -9150,6 +9292,10 @@
                 highIndex = (count > 0) ? nRecordIndex + count -1 : nRecordIndex;
                 lowIndex = (count > 0) ? nRecordIndex : nRecordIndex + count + 1;
                 count = (count > 0) ? count : count*-1;
+                if(lowIndex < 0) {
+                    lowIndex = 0;
+                    count = highIndex - lowIndex + 1;
+                }
             }
             else {
                 count = 1;
@@ -9159,7 +9305,8 @@
     
             // Update the UI
             if(aData) {
-                var oPaginator = this.get('paginator');
+                var oPaginator = this.get('paginator'),
+                    loopN = this.get("renderLoopSize");
                 // If paginated and the deleted row was on this or a prior page, just
                 // re-render
                 if (oPaginator) {
@@ -9177,13 +9324,23 @@
                     if (!rng || lowIndex <= rng[1]) {
                         this.render();
                     }
+
+                    this._oChainRender.add({
+                        method: function(oArg) {
+                            if((this instanceof DT) && this._sId) {
+                                this.fireEvent("rowsDeleteEvent", {recordIndex:lowIndex, oldData:aData, count:count});
+                            }
+                        },
+                        scope: this,
+                        timeout: (loopN > 0) ? 0 : -1
+                    });
+                    this._runRenderChain();
                     return;
                 }
                 // Not paginated
                 else {
                     if(lang.isNumber(nTrIndex)) {
                         // Delete the TR elements starting with highest index
-                        var loopN = this.get("renderLoopSize");
                         var loopEnd = lowIndex;
                         var nRowsNeeded = count; // how many needed
                         this._oChainRender.add({
@@ -9211,8 +9368,7 @@
                                     this._setRowStripes();
                                 }
                                 
-                                this.fireEvent("rowsDeleteEvent", {recordIndex:count,
-                                oldData:aData, count:nTrIndex});
+                                this.fireEvent("rowsDeleteEvent", {recordIndex:lowIndex, oldData:aData, count:count});
                             },
                             scope: this,
                             timeout: -1 // Needs to run immediately after the DOM deletions above
@@ -9320,17 +9476,20 @@
  * @method updateCell
  * @param oRecord {YAHOO.widget.Record} Record instance.
  * @param oColumn {YAHOO.widget.Column | String | Number} A Column key, or a ColumnSet key index.
- * @param oData {Object} Object literal of data for the cell.
+ * @param oData {Object} New data value for the cell.
  */
 updateCell : function(oRecord, oColumn, oData) {    
     // Validate Column and Record
     oColumn = (oColumn instanceof YAHOO.widget.Column) ? oColumn : this.getColumn(oColumn);
     if(oColumn && oColumn.getKey() && (oRecord instanceof YAHOO.widget.Record)) {
+        var sKey = oColumn.getKey(),
+        
         // Copy data from the Record for the event that gets fired later
-        var oldData = YAHOO.widget.DataTable._cloneObject(oRecord.getData());
+        //var oldData = YAHOO.widget.DataTable._cloneObject(oRecord.getData());
+            oldData = oRecord.getData(sKey);
 
         // Update Record with new data
-        this._oRecordSet.updateRecordValue(oRecord, oColumn.getKey(), oData);
+        this._oRecordSet.updateRecordValue(oRecord, sKey, oData);
     
         // Update the TD only if row is on current page
         var elTd = this.getTdEl({record: oRecord, column: oColumn});
@@ -11250,7 +11409,7 @@
 },
 
 /**
- * Sets given row to the selected state.
+ * Sets given row to the unselected state.
  *
  * @method unselectRow
  * @param row {HTMLElement | String | YAHOO.widget.Record | Number} HTML element
@@ -11940,7 +12099,8 @@
         else if(this._oCellEditor.isActive) {
             var newData = this._oCellEditor.value;
             // Copy the data to pass to the event
-            var oldData = YAHOO.widget.DataTable._cloneObject(this._oCellEditor.record.getData(this._oCellEditor.column.key));
+            //var oldData = YAHOO.widget.DataTable._cloneObject(this._oCellEditor.record.getData(this._oCellEditor.column.key));
+            var oldData = this._oCellEditor.record.getData(this._oCellEditor.column.key);
     
             // Validate input data
             if(this._oCellEditor.validator) {
@@ -12601,7 +12761,7 @@
         // Data ok to append
         if(ok && oResponse && !oResponse.error && lang.isArray(oResponse.results)) {
             // Insert rows
-            this.addRows(oResponse.results, oPayload.insertIndex | 0);
+            this.addRows(oResponse.results, (oPayload ? oPayload.insertIndex : 0));
     
             // Update state
             this._handleDataReturnPayload(sRequest, oResponse, oPayload);
@@ -12614,6 +12774,40 @@
 },
 
 /**
+ * Callback function receives data from DataSource and incrementally updates Records
+ * starting at the index specified in oPayload.updateIndex. The value for
+ * oPayload.updateIndex can be populated when sending the request to the DataSource,
+ * or by accessing oPayload.updateIndex with the doBeforeLoadData() method at runtime.
+ * If applicable, creates or updates corresponding TR elements.
+ *
+ * @method onDataReturnUpdateRows
+ * @param sRequest {String} Original request.
+ * @param oResponse {Object} Response object.
+ * @param oPayload {MIXED} Argument payload, looks in oPayload.updateIndex.
+ */
+onDataReturnUpdateRows : function(sRequest, oResponse, oPayload) {
+    if((this instanceof DT) && this._sId) {
+        this.fireEvent("dataReturnEvent", {request:sRequest,response:oResponse,payload:oPayload});
+    
+        // Pass data through abstract method for any transformations
+        var ok = this.doBeforeLoadData(sRequest, oResponse, oPayload);
+    
+        // Data ok to append
+        if(ok && oResponse && !oResponse.error && lang.isArray(oResponse.results)) {
+            // Insert rows
+            this.updateRows((oPayload ? oPayload.updateIndex : 0), oResponse.results);
+    
+            // Update state
+            this._handleDataReturnPayload(sRequest, oResponse, oPayload);
+        }
+        // Error
+        else if(ok && oResponse.error) {
+            this.showTableMessage(this.get("MSG_ERROR"), DT.CLASS_ERROR);
+        }
+    }
+},
+
+/**
  * Callback function receives reponse from DataSource and populates the
  * RecordSet with the results.
  *  
@@ -12641,6 +12835,8 @@
                 } else if (pag) {
                     index = pag.getStartIndex();
                 }
+                
+                this._oRecordSet.reset(); // Bug 2290604: dyanmic data shouldn't keep accumulating by default
             }
     
             this._oRecordSet.setRecords(oResponse.results, index | 0);
@@ -12689,7 +12885,7 @@
         if (oPaginator) {
             // Update totalRecords
             if(this.get("dynamicData")) {
-                if (lang.isNumber(oPayload.totalRecords)) {
+                if (widget.Paginator.isNumeric(oPayload.totalRecords)) {
                     oPaginator.set('totalRecords',oPayload.totalRecords);
                 }
             }
@@ -13301,7 +13497,7 @@
      * @event cellUpdateEvent
      * @param oArgs.record {YAHOO.widget.Record} The updated Record.
      * @param oArgs.column {YAHOO.widget.Column} The updated Column.
-     * @param oArgs.oldData {Object} Object literal of the old data.
+     * @param oArgs.oldData {Object} Original data value of the updated cell.
      */
 
     /**
@@ -13485,7 +13681,8 @@
      */
 
     /**
-     * Fired when a BUTTON element is clicked.
+     * Fired when a BUTTON element or INPUT element of type "button", "image",
+     * "submit", "reset" is clicked.
      *
      * @event buttonClickEvent
      * @param oArgs.event {HTMLEvent} The event object.
@@ -13972,8 +14169,7 @@
 
     /**
     * @attribute width
-    * @description Table width for scrollable tables. Note: When setting width
-    * and height at runtime, please set height first.
+    * @description Table width for scrollable tables (e.g., "40em").
     * @type String
     */
     this.setAttributeConfig("width", {
@@ -13991,7 +14187,7 @@
 
     /**
     * @attribute height
-    * @description Table body height for scrollable tables, not including headers.
+    * @description Table body height for scrollable tables, not including headers (e.g., "40em").
     * @type String
     */
     this.setAttributeConfig("height", {
@@ -14283,8 +14479,10 @@
 _initTbodyEl : function(elTable) {
     SDT.superclass._initTbodyEl.call(this, elTable);
     
-    // Bug 2105534 - Safari gap
-    elTable.style.marginTop = "-"+this._elTbody.offsetTop+"px";
+    // Bug 2105534 - Safari 3 gap
+    // Bug 2492591 - IE8 offsetTop
+    elTable.style.marginTop = (this._elTbody.offsetTop > 0) ?
+            "-"+this._elTbody.offsetTop+"px" : 0;
 },
 
 
@@ -14848,7 +15046,6 @@
             this._syncScroll();
             
             this.fireEvent("columnSetWidthEvent",{column:oColumn,width:nWidth});
-            return;
         }
         // Unsets a width to auto-size
         else if(nWidth === null) {
@@ -14859,10 +15056,13 @@
             this._setColumnWidth(oColumn, "auto");
             this.validateColumnWidths(oColumn);
             this.fireEvent("columnUnsetWidthEvent",{column:oColumn});
-
-            return;
         }
+        
+        // Bug 2339454: resize then sort misaligment
+        this._clearTrTemplateEl();
     }
+    else {
+    }
 },
 
 /**
@@ -15305,6 +15505,15 @@
 validator : null,
 
 /**
+ * If validation is enabled, resets input field of invalid data.
+ *
+ * @property resetInvalidData
+ * @type Boolean
+ * @default true
+ */
+resetInvalidData : true,
+
+/**
  * True if currently active.
  *
  * @property isActive
@@ -15442,7 +15651,7 @@
     // Column is late-binding in attach()
     var oColumn = this.getColumn();
     if(oColumn) {
-        this.getColumn().editor = null;
+        oColumn.editor = null;
     }
     
     var elContainer = this.getContainerEl();
@@ -15456,6 +15665,11 @@
  * @method render
  */
 render : function() {
+    if(this._elContainer) {
+        YAHOO.util.Event.purgeElement(this._elContainer, true);
+        this._elContainer.innerHTML = "";
+    }
+
     // Render Cell Editor container element as first child of body
     var elContainer = document.createElement("div");
     elContainer.id = this.getId() + "-container"; // Needed for tracking blur event
@@ -15469,6 +15683,12 @@
     Ev.addListener(elContainer, "keydown", function(e, oSelf) {
         // ESC cancels Cell Editor
         if((e.keyCode == 27)) {
+            var target = Ev.getTarget(e);
+            // workaround for Mac FF3 bug that disabled clicks when ESC hit when
+            // select is open. [bug 2273056]
+            if (target.nodeName && target.nodeName.toLowerCase() === 'select') {
+                target.blur();
+            }
             oSelf.cancel();
         }
         // Pass through event
@@ -15624,7 +15844,9 @@
     if(this.validator) {
         validValue = this.validator.call(this.getDataTable(), inputValue, this.value, this);
         if(validValue === undefined ) {
-            this.resetForm();
+            if(this.resetInvalidData) {
+                this.resetForm();
+            }
             this.fireEvent("invalidDataEvent",
                     {editor:this, oldData:this.value, newData:inputValue});
             return;
@@ -15633,7 +15855,7 @@
         
     var oSelf = this;
     var finishSave = function(bSuccess, oNewValue) {
-        var oOrigValue = YAHOO.widget.DataTable._cloneObject(oSelf.value);
+        var oOrigValue = oSelf.value;
         if(bSuccess) {
             // Update new value
             oSelf.value = oNewValue;
@@ -15673,7 +15895,7 @@
     if(this.isActive) {
         this.getContainerEl().style.display = "none";
         this.isActive = false;
-        this.getDataTable._oCellEditor =  null;
+        this.getDataTable()._oCellEditor =  null;
         this.fireEvent("cancelEvent", {editor:this});
     }
     else {
@@ -16024,6 +16246,14 @@
 calendar : null,
 
 /**
+ * Configs for the calendar instance, to be passed to Calendar constructor.
+ *
+ * @property calendarOptions
+ * @type Object
+ */
+calendarOptions : null,
+
+/**
  * Default value.
  *
  * @property defaultValue
@@ -16051,12 +16281,12 @@
         calContainer.id = this.getId() + "-dateContainer"; // Needed for Calendar constructor
         var calendar =
                 new YAHOO.widget.Calendar(this.getId() + "-date",
-                calContainer.id);
+                calContainer.id, this.calendarOptions);
         calendar.render();
         calContainer.style.cssFloat = "none";
 
         if(ua.ie) {
-            var calFloatClearer = this.getContainerEl().appendChild(document.createElement("br"));
+            var calFloatClearer = this.getContainerEl().appendChild(document.createElement("div"));
             calFloatClearer.style.clear = "both";
         }
         
@@ -16158,7 +16388,7 @@
  * Array of dropdown values. Can either be a simple array (e.g., 
  * ["Alabama","Alaska","Arizona","Arkansas"]) or a an array of objects (e.g., 
  * [{label:"Alabama", value:"AL"}, {label:"Alaska", value:"AK"},
- * {label:"Arizona", value:"AZ}, {label:"Arkansas", value:"AR}]). 
+ * {label:"Arizona", value:"AZ"}, {label:"Arkansas", value:"AR"}]). 
  *
  * @property dropdownOptions
  * @type String[] | Object[]
@@ -16519,7 +16749,8 @@
  * @method focus
  */
 focus : function() {
-    this.textarea.focus();
+    // Bug 2303181, Bug 2263600
+    this.getDataTable()._focusEl(this.textarea);
     this.textarea.select();
 },
 
@@ -16644,7 +16875,8 @@
  * @method focus
  */
 focus : function() {
-    this.textbox.focus();
+    // Bug 2303181, Bug 2263600
+    this.getDataTable()._focusEl(this.textbox);
     this.textbox.select();
 },
 
@@ -16722,4 +16954,4 @@
 
 })();
 
-YAHOO.register("datatable", YAHOO.widget.DataTable, {version: "2.6.0", build: "1321"});
+YAHOO.register("datatable", YAHOO.widget.DataTable, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/dom/README
===================================================================
--- trunk/root/static/yui/dom/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dom/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,135 +0,0 @@
-Dom Release Notes
-
-** Known Issues **
-* margin/padding/borders on HTML element cause getXY to misreport
-* margin/borders on BODY element may cause getXY to misreport
-* Fixed postioning causes getXY to misreport in some cases
-
-----------------------------
-*** version 2.6.0 ***
-- now rounding getXY return for clientRect branch
-- now trimming className arg in getElementsByClassName
-- class attribute now removed if empty after removeClass
-- normalized isAncestor (needle === haystack no longer returns true in some browsers) 
-
-*** version 2.5.2 ***
-* no change
-
-*** version 2.5.1 ***
-* getStyle fix for getting computedStyle across documents
-
-*** version 2.5.0 ***
-* get() now correctly handles textNodes
-
-*** version 2.4.0 ***
-* no longer accounting for safari body margin when offsetParent == body
-* isAncestor and inDocument no longer use batch
-* added getClientRegion()
-
-*** version 2.3.1 ***
-* allow batch() to work on array-like object
-* return null from Dom.get(undefined)
-
-*** version 2.3.0 ***
-* added getAncestorBy methods
-* added getChildren methods
-* added getSibling methods
-* trimming added for class mgmt methods
-* fixed getXY inside table for Opera 
-
-*** version 2.3.0 ***
-* added getAncestorBy methods
-* added getChildren methods
-* added getSibling methods
-* trimming added for class mgmt methods
-* fixed getXY inside table for Opera 
-
-*** version 2.2.2 ***
-
-* fixed getXY scroll regression
-
-*** version 2.2.1 ***
-* fixed toCamel propertyCache used by set/getStyle
-* added set/getStyle support for float property
-* optimized get() for common use case
-* fixed getXY for safari when el has absolute ancestors
-* using className property instead of string literal for class mgmt methods
-* added getXY/getRegion support for body element
-
-*** version 2.2.0 ***
-* no change
-
-
-*** version 0.12.2 ***
-* no change
-
-*** version 0.12.1 ***
-
-* getElementsByClassName no longer reverts to document when "root" not found
-* setXY no longer makes a second call to getXY unless noRetry is false
-* minified version no longer strips line breaks
-
-*** version 0.12.0 ***
-
-* fixed getXY for IE null parent
-* branching set/getStyle at load time instead of run time 
-
-*** version 0.11.3 ***
-
-* fixed getX and getY returning incorrect values for collections 
-* fixed getXY incorrectly calculated for Opera inline elements
-* fixed isAncestor failure in safari when 2nd arg is document.documentElement
-* fixed infinite loop in replaceClass when oldClassName == newClassName 
-* getDocumentWidth no longer includes scrollbars 
-
-
-*** version 0.11.2 ***
-* limit depth of parent.document crawl to 1 for getXY
-* test offsetParent instead of parentNode for getXY
-* return null if no el fo r get
-* just addClass if no class to replace for replaceClass
-
-
-*** version 0.11.1 ***
-
-* return null if el is null for get()
-* test offsetParent rather than parentNode for getXY()
-* limit depth of parent.document crawl for IE getXY() to 1
-* if no oldClassName to replace, just addClass for replaceClass()
-
-
-*** version 0.11.0 ***
-* Work around Opera 9 broken currentStyle
-* Removed timeout wrapper from setXY retry
-* Tagname tests now case-insensitive
-* Internal "this" references changed to allow for method shorthand
-* get/setStyle now accept both camel and hyphen case
-* Gecko reverted to crawling offsets for getXY
- 
-
-*** version 0.10.0 ***
-
-* Safari now fails gracefully when querying computedStyle of an unavailable element 
-
-* Class management functions added (hasClass, addClass, removeClass, replaceClass, getElementsByClassName) 
-
-* All methods that accept HTMLElements or IDs now also accept arrays of HTMLElements and/or IDs
-
-* GenerateId method added
-
-* isAncestor method added
-
-* inDocument method added
-
-* getElementsBy method added
-
-* batch method added
-
-* getClientHeight/Width deprecated in favor of getViewportHeight/Width
-
-* getDocumentHeight/Width methods added 
-
-*** version 0.9.0 ***
-
-* Initial release
-

Modified: trunk/root/static/yui/dom/dom-debug.js
===================================================================
--- trunk/root/static/yui/dom/dom-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dom/dom-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The dom module provides helper methods for manipulating Dom elements.
@@ -11,141 +11,77 @@
  */
 
 (function() {
-    var Y = YAHOO.util,     // internal shorthand
+    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;     // for use with generateId (global to save state if Dom is overwritten)
+
+        // internal shorthand
+    var Y = YAHOO.util,
         lang = YAHOO.lang,
-        getStyle,           // for load time browser branching
-        setStyle,           // ditto
+        UA = YAHOO.env.ua,
+        trim = YAHOO.lang.trim,
         propertyCache = {}, // for faster hyphen converts
-        reClassNameCache = {},          // cache regexes for className
-        document = window.document;     // cache for faster lookups
-    
-    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;     // for use with generateId (global to save state if Dom is overwritten)
+        reCache = {}, // cache className regexes
+        RE_TABLE = /^t(?:able|d|h)$/i, // for _calcBorders
+        RE_COLOR = /color$/i,
 
-    // brower detection
-    var isOpera = YAHOO.env.ua.opera,
-        isSafari = YAHOO.env.ua.webkit, 
-        isGecko = YAHOO.env.ua.gecko,
-        isIE = YAHOO.env.ua.ie; 
-    
-    // regex cache
-    var patterns = {
-        HYPHEN: /(-[a-z])/i, // to normalize get/setStyle
-        ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
-        OP_SCROLL:/^(?:inline|table-row)$/i
-    };
+        // DOM aliases 
+        document = window.document,     
+        documentElement = document.documentElement,
 
-    var toCamel = function(property) {
-        if ( !patterns.HYPHEN.test(property) ) {
-            return property; // no hyphens
-        }
-        
-        if (propertyCache[property]) { // already converted
-            return propertyCache[property];
-        }
-       
-        var converted = property;
- 
-        while( patterns.HYPHEN.exec(converted) ) {
-            converted = converted.replace(RegExp.$1,
-                    RegExp.$1.substr(1).toUpperCase());
-        }
-        
-        propertyCache[property] = converted;
-        return converted;
-        //return property.replace(/-([a-z])/gi, function(m0, m1) {return m1.toUpperCase()}) // cant use function as 2nd arg yet due to safari bug
-    };
+        // string constants
+        OWNER_DOCUMENT = 'ownerDocument',
+        DEFAULT_VIEW = 'defaultView',
+        DOCUMENT_ELEMENT = 'documentElement',
+        COMPAT_MODE = 'compatMode',
+        OFFSET_LEFT = 'offsetLeft',
+        OFFSET_TOP = 'offsetTop',
+        OFFSET_PARENT = 'offsetParent',
+        PARENT_NODE = 'parentNode',
+        NODE_TYPE = 'nodeType',
+        TAG_NAME = 'tagName',
+        SCROLL_LEFT = 'scrollLeft',
+        SCROLL_TOP = 'scrollTop',
+        GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
+        GET_COMPUTED_STYLE = 'getComputedStyle',
+        CURRENT_STYLE = 'currentStyle',
+        CSS1_COMPAT = 'CSS1Compat',
+        _BACK_COMPAT = 'BackCompat',
+        _CLASS = 'class', // underscore due to reserved word
+        CLASS_NAME = 'className',
+        EMPTY = '',
+        SPACE = ' ',
+        C_START = '(?:^|\\s)',
+        C_END = '(?= |$)',
+        G = 'g',
+        POSITION = 'position',
+        FIXED = 'fixed',
+        RELATIVE = 'relative',
+        LEFT = 'left',
+        TOP = 'top',
+        MEDIUM = 'medium',
+        BORDER_LEFT_WIDTH = 'borderLeftWidth',
+        BORDER_TOP_WIDTH = 'borderTopWidth',
     
-    var getClassRegEx = function(className) {
-        var re = reClassNameCache[className];
-        if (!re) {
-            re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
-            reClassNameCache[className] = re;
-        }
-        return re;
-    };
-
-    // branching at load instead of runtime
-    if (document.defaultView && document.defaultView.getComputedStyle) { // W3C DOM method
-        getStyle = function(el, property) {
-            var value = null;
-            
-            if (property == 'float') { // fix reserved word
-                property = 'cssFloat';
-            }
-
-            var computed = el.ownerDocument.defaultView.getComputedStyle(el, '');
-            if (computed) { // test computed before touching for safari
-                value = computed[toCamel(property)];
-            }
-            
-            return el.style[property] || value;
-        };
-    } else if (document.documentElement.currentStyle && isIE) { // IE method
-        getStyle = function(el, property) {                         
-            switch( toCamel(property) ) {
-                case 'opacity' :// IE opacity uses filter
-                    var val = 100;
-                    try { // will error if no DXImageTransform
-                        val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
-
-                    } catch(e) {
-                        try { // make sure its in the document
-                            val = el.filters('alpha').opacity;
-                        } catch(e) {
-                            YAHOO.log('getStyle: IE filter failed',
-                                    'error', 'Dom');
-                        }
-                    }
-                    return val / 100;
-                case 'float': // fix reserved word
-                    property = 'styleFloat'; // fall through
-                default: 
-                    // test currentStyle before touching
-                    var value = el.currentStyle ? el.currentStyle[property] : null;
-                    return ( el.style[property] || value );
-            }
-        };
-    } else { // default to inline only
-        getStyle = function(el, property) { return el.style[property]; };
-    }
+    // brower detection
+        isOpera = UA.opera,
+        isSafari = UA.webkit, 
+        isGecko = UA.gecko, 
+        isIE = UA.ie; 
     
-    if (isIE) {
-        setStyle = function(el, property, val) {
-            switch (property) {
-                case 'opacity':
-                    if ( lang.isString(el.style.filter) ) { // in case not appended
-                        el.style.filter = 'alpha(opacity=' + val * 100 + ')';
-                        
-                        if (!el.currentStyle || !el.currentStyle.hasLayout) {
-                            el.style.zoom = 1; // when no layout or cant tell
-                        }
-                    }
-                    break;
-                case 'float':
-                    property = 'styleFloat';
-                default:
-                el.style[property] = val;
-            }
-        };
-    } else {
-        setStyle = function(el, property, val) {
-            if (property == 'float') {
-                property = 'cssFloat';
-            }
-            el.style[property] = val;
-        };
-    }
-
-    var testElement = function(node, method) {
-        return node && node.nodeType == 1 && ( !method || method(node) );
-    };
-
     /**
      * Provides helper methods for DOM elements.
      * @namespace YAHOO.util
      * @class Dom
+     * @requires yahoo, event
      */
-    YAHOO.util.Dom = {
+    Y.Dom = {
+        CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
+            'for': 'htmlFor',
+            'class': CLASS_NAME
+        } : { // w3c
+            'htmlFor': 'for',
+            'className': _CLASS
+        },
+
         /**
          * Returns an HTMLElement reference.
          * @method get
@@ -153,18 +89,37 @@
          * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements.
          */
         get: function(el) {
+            var id, nodes, c, i, len;
+
             if (el) {
-                if (el.nodeType || el.item) { // Node, or NodeList
+                if (el[NODE_TYPE] || el.item) { // Node, or NodeList
                     return el;
                 }
 
                 if (typeof el === 'string') { // id
-                    return document.getElementById(el);
+                    id = el;
+                    el = document.getElementById(el);
+                    if (el && el.id === id) { // IE: avoid false match on "name" attribute
+                    return el;
+                    } else if (el && document.all) { // filter by name
+                        el = null;
+                        nodes = document.all[id];
+                        for (i = 0, len = nodes.length; i < len; ++i) {
+                            if (nodes[i].id === id) {
+                                return nodes[i];
+                            }
+                        }
+                    }
+                    return el;
                 }
                 
+                if (el.DOM_EVENTS) { // YAHOO.util.Element
+                    el = el.get('element');
+                }
+
                 if ('length' in el) { // array-like 
-                    var c = [];
-                    for (var i = 0, len = el.length; i < len; ++i) {
+                    c = [];
+                    for (i = 0, len = el.length; i < len; ++i) {
                         c[c.length] = Y.Dom.get(el[i]);
                     }
                     
@@ -177,6 +132,14 @@
             return null;
         },
     
+        getComputedStyle: function(el, property) {
+            if (window[GET_COMPUTED_STYLE]) {
+                return el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null)[property];
+            } else if (el[CURRENT_STYLE]) {
+                return Y.Dom.IE_ComputedStyle.get(el, property);
+            }
+        },
+
         /**
          * Normalizes currentStyle and ComputedStyle.
          * @method getStyle
@@ -185,14 +148,57 @@
          * @return {String | Array} The current value of the style property for the element(s).
          */
         getStyle: function(el, property) {
-            property = toCamel(property);
-            
-            var f = function(element) {
-                return getStyle(element, property);
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return Y.Dom.batch(el, Y.Dom._getStyle, property);
         },
+
+        // branching at load instead of runtime
+        _getStyle: function() {
+            if (window[GET_COMPUTED_STYLE]) { // W3C DOM method
+                return function(el, property) {
+                    property = (property === 'float') ? property = 'cssFloat' :
+                            Y.Dom._toCamel(property);
+
+                    var value = el.style[property],
+                        computed;
+                    
+                    if (!value) {
+                        computed = el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null);
+                        if (computed) { // test computed before touching for safari
+                            value = computed[property];
+                        }
+                    }
+                    
+                    return value;
+                };
+            } else if (documentElement[CURRENT_STYLE]) {
+                return function(el, property) {                         
+                    var value;
+
+                    switch(property) {
+                        case 'opacity' :// IE opacity uses filter
+                            value = 100;
+                            try { // will error if no DXImageTransform
+                                value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+
+                            } catch(e) {
+                                try { // make sure its in the document
+                                    value = el.filters('alpha').opacity;
+                                } catch(err) {
+                                    YAHOO.log('getStyle: IE filter failed',
+                                            'error', 'Dom');
+                                }
+                            }
+                            return value / 100;
+                        case 'float': // fix reserved word
+                            property = 'styleFloat'; // fall through
+                        default: 
+                            property = Y.Dom._toCamel(property);
+                            value = el[CURRENT_STYLE] ? el[CURRENT_STYLE][property] : null;
+                            return ( el.style[property] || value );
+                    }
+                };
+            }
+        }(),
     
         /**
          * Wrapper for setting style properties of HTMLElements.  Normalizes "opacity" across modern browsers.
@@ -202,38 +208,191 @@
          * @param {String} val The value to apply to the given property.
          */
         setStyle: function(el, property, val) {
-            property = toCamel(property);
-            
-            var f = function(element) {
-                setStyle(element, property, val);
-                YAHOO.log('setStyle setting ' + property + ' to ' + val, 'info', 'Dom');
-                
-            };
-            
-            Y.Dom.batch(el, f, Y.Dom, true);
+            Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });
         },
+
+        _setStyle: function() {
+            if (isIE) {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+
+                    if (el) {
+                        switch (property) {
+                            case 'opacity':
+                                if ( lang.isString(el.style.filter) ) { // in case not appended
+                                    el.style.filter = 'alpha(opacity=' + val * 100 + ')';
+                                    
+                                    if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) {
+                                        el.style.zoom = 1; // when no layout or cant tell
+                                    }
+                                }
+                                break;
+                            case 'float':
+                                property = 'styleFloat';
+                            default:
+                            el.style[property] = val;
+                        }
+                    } else {
+                        YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
+                    }
+                };
+            } else {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+                    if (el) {
+                        if (property == 'float') {
+                            property = 'cssFloat';
+                        }
+                        el.style[property] = val;
+                    } else {
+                        YAHOO.log('element ' + el + ' is undefined', 'error', 'Dom');
+                    }
+                };
+            }
+
+        }(),
         
         /**
-         * Gets the current position of an element based on page coordinates.  Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+         * Gets the current position of an element based on page coordinates. 
+         * Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
          * @method getXY
-         * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+         * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM
+         * reference, or an Array of IDs and/or HTMLElements
          * @return {Array} The XY position of the element(s)
          */
         getXY: function(el) {
-            var f = function(el) {
-                // has to be part of document to have pageXY
-                if ( (el.parentNode === null || el.offsetParent === null ||
-                        this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
-                    YAHOO.log('getXY failed: element not available', 'error', 'Dom');
-                    return false;
-                }
-                
-                YAHOO.log('getXY returning ' + getXY(el), 'info', 'Dom');
-                return getXY(el);
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return Y.Dom.batch(el, Y.Dom._getXY);
         },
+
+        _canPosition: function(el) {
+            return ( Y.Dom._getStyle(el, 'display') !== 'none' && Y.Dom._inDoc(el) );
+        },
+
+        _getXY: function() {
+            if (document[DOCUMENT_ELEMENT][GET_BOUNDING_CLIENT_RECT]) {
+                return function(node) {
+                    var scrollLeft, scrollTop, box, doc,
+                        off1, off2, mode, bLeft, bTop,
+                        floor = Math.floor, // TODO: round?
+                        xy = false;
+
+                    if (Y.Dom._canPosition(node)) {
+                        box = node[GET_BOUNDING_CLIENT_RECT]();
+                        doc = node[OWNER_DOCUMENT];
+                        scrollLeft = Y.Dom.getDocumentScrollLeft(doc);
+                        scrollTop = Y.Dom.getDocumentScrollTop(doc);
+                        xy = [floor(box[LEFT]), floor(box[TOP])];
+
+                        if (isIE && UA.ie < 8) { // IE < 8: viewport off by 2
+                            off1 = 2;
+                            off2 = 2;
+                            mode = doc[COMPAT_MODE];
+                            bLeft = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_LEFT_WIDTH);
+                            bTop = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_TOP_WIDTH);
+
+                            if (UA.ie === 6) {
+                                if (mode !== _BACK_COMPAT) {
+                                    off1 = 0;
+                                    off2 = 0;
+                                }
+                            }
+                            
+                            if ((mode == _BACK_COMPAT)) {
+                                if (bLeft !== MEDIUM) {
+                                    off1 = parseInt(bLeft, 10);
+                                }
+                                if (bTop !== MEDIUM) {
+                                    off2 = parseInt(bTop, 10);
+                                }
+                            }
+                            
+                            xy[0] -= off1;
+                            xy[1] -= off2;
+
+                        }
+
+                        if ((scrollTop || scrollLeft)) {
+                            xy[0] += scrollLeft;
+                            xy[1] += scrollTop;
+                        }
+
+                        // gecko may return sub-pixel (non-int) values
+                        xy[0] = floor(xy[0]);
+                        xy[1] = floor(xy[1]);
+                    } else {
+                        YAHOO.log('getXY failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
+                    }
+
+                    return xy;
+                };
+            } else {
+                return function(node) { // ff2, safari: manually calculate by crawling up offsetParents
+                    var docScrollLeft, docScrollTop,
+                        scrollTop, scrollLeft,
+                        bCheck,
+                        xy = false,
+                        parentNode = node;
+
+                    if  (Y.Dom._canPosition(node) ) {
+                        xy = [node[OFFSET_LEFT], node[OFFSET_TOP]];
+                        docScrollLeft = Y.Dom.getDocumentScrollLeft(node[OWNER_DOCUMENT]);
+                        docScrollTop = Y.Dom.getDocumentScrollTop(node[OWNER_DOCUMENT]);
+
+                        // TODO: refactor with !! or just falsey
+                        bCheck = ((isGecko || UA.webkit > 519) ? true : false);
+
+                        // TODO: worth refactoring for TOP/LEFT only?
+                        while ((parentNode = parentNode[OFFSET_PARENT])) {
+                            xy[0] += parentNode[OFFSET_LEFT];
+                            xy[1] += parentNode[OFFSET_TOP];
+                            if (bCheck) {
+                                xy = Y.Dom._calcBorders(parentNode, xy);
+                            }
+                        }
+
+                        // account for any scrolled ancestors
+                        if (Y.Dom._getStyle(node, POSITION) !== FIXED) {
+                            parentNode = node;
+
+                            while ((parentNode = parentNode[PARENT_NODE]) && parentNode[TAG_NAME]) {
+                                scrollTop = parentNode[SCROLL_TOP];
+                                scrollLeft = parentNode[SCROLL_LEFT];
+
+                                //Firefox does something funky with borders when overflow is not visible.
+                                if (isGecko && (Y.Dom._getStyle(parentNode, 'overflow') !== 'visible')) {
+                                        xy = Y.Dom._calcBorders(parentNode, xy);
+                                }
+
+                                if (scrollTop || scrollLeft) {
+                                    xy[0] -= scrollLeft;
+                                    xy[1] -= scrollTop;
+                                }
+                            }
+                            xy[0] += docScrollLeft;
+                            xy[1] += docScrollTop;
+
+                        } else {
+                            //Fix FIXED position -- add scrollbars
+                            if (isOpera) {
+                                xy[0] -= docScrollLeft;
+                                xy[1] -= docScrollTop;
+                            } else if (isSafari || isGecko) {
+                                xy[0] += docScrollLeft;
+                                xy[1] += docScrollTop;
+                            }
+                        }
+                        //Round the numbers so we get sane data back
+                        xy[0] = Math.floor(xy[0]);
+                        xy[1] = Math.floor(xy[1]);
+                    } else {
+                        YAHOO.log('getXY failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
+                    }
+                    return xy;                
+                };
+            }
+        }(), // NOTE: Executing for loadtime branching
         
         /**
          * Gets the current X position of an element based on page coordinates.  The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
@@ -272,48 +431,61 @@
          * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
          */
         setXY: function(el, pos, noRetry) {
-            var f = function(el) {
-                var style_pos = this.getStyle(el, 'position');
-                if (style_pos == 'static') { // default to relative
-                    this.setStyle(el, 'position', 'relative');
-                    style_pos = 'relative';
-                }
+            Y.Dom.batch(el, Y.Dom._setXY, { pos: pos, noRetry: noRetry });
+        },
 
-                var pageXY = this.getXY(el);
-                if (pageXY === false) { // has to be part of doc to have pageXY
-                    YAHOO.log('setXY failed: element not available', 'error', 'Dom');
-                    return false; 
-                }
-                
-                var delta = [ // assuming pixels; if not we will have to retry
-                    parseInt( this.getStyle(el, 'left'), 10 ),
-                    parseInt( this.getStyle(el, 'top'), 10 )
-                ];
-            
-                if ( isNaN(delta[0]) ) {// in case of 'auto'
-                    delta[0] = (style_pos == 'relative') ? 0 : el.offsetLeft;
-                } 
-                if ( isNaN(delta[1]) ) { // in case of 'auto'
-                    delta[1] = (style_pos == 'relative') ? 0 : el.offsetTop;
-                } 
+        _setXY: function(node, args) {
+            var pos = Y.Dom._getStyle(node, POSITION),
+                setStyle = Y.Dom.setStyle,
+                xy = args.pos,
+                noRetry = args.noRetry,
+
+                delta = [ // assuming pixels; if not we will have to retry
+                    parseInt( Y.Dom.getComputedStyle(node, LEFT), 10 ),
+                    parseInt( Y.Dom.getComputedStyle(node, TOP), 10 )
+                ],
+
+                currentXY,
+                newXY;
         
-                if (pos[0] !== null) { el.style.left = pos[0] - pageXY[0] + delta[0] + 'px'; }
-                if (pos[1] !== null) { el.style.top = pos[1] - pageXY[1] + delta[1] + 'px'; }
-              
-                if (!noRetry) {
-                    var newXY = this.getXY(el);
+            if (pos == 'static') { // default to relative
+                pos = RELATIVE;
+                setStyle(node, POSITION, pos);
+            }
 
-                    // if retry is true, try one more time if we miss 
-                   if ( (pos[0] !== null && newXY[0] != pos[0]) || 
-                        (pos[1] !== null && newXY[1] != pos[1]) ) {
-                       this.setXY(el, pos, true);
-                   }
-                }        
-        
-                YAHOO.log('setXY setting position to ' + pos, 'info', 'Dom');
-            };
+            currentXY = Y.Dom._getXY(node);
+
+            if (!xy || currentXY === false) { // has to be part of doc to have xy
+                YAHOO.log('xy failed: node not available', 'error', 'Node');
+                return false; 
+            }
             
-            Y.Dom.batch(el, f, Y.Dom, true);
+            if ( isNaN(delta[0]) ) {// in case of 'auto'
+                delta[0] = (pos == RELATIVE) ? 0 : node[OFFSET_LEFT];
+            } 
+            if ( isNaN(delta[1]) ) { // in case of 'auto'
+                delta[1] = (pos == RELATIVE) ? 0 : node[OFFSET_TOP];
+            } 
+
+            if (xy[0] !== null) { // from setX
+                setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px');
+            }
+
+            if (xy[1] !== null) { // from setY
+                setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px');
+            }
+          
+            if (!noRetry) {
+                newXY = Y.Dom._getXY(node);
+
+                // if retry is true, try one more time if we miss 
+               if ( (xy[0] !== null && newXY[0] != xy[0]) || 
+                    (xy[1] !== null && newXY[1] != xy[1]) ) {
+                   Y.Dom._setXY(node, { pos: xy, noRetry: true });
+               }
+            }        
+
+            YAHOO.log('setXY setting position to ' + xy, 'info', 'Node');
         },
         
         /**
@@ -347,14 +519,14 @@
          */
         getRegion: function(el) {
             var f = function(el) {
-                if ( (el.parentNode === null || el.offsetParent === null ||
-                        this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
-                    YAHOO.log('getRegion failed: element not available', 'error', 'Dom');
-                    return false;
+                var region = false;
+                if ( Y.Dom._canPosition(el) ) {
+                    region = Y.Region.getRegion(el);
+                    YAHOO.log('getRegion returning ' + region, 'info', 'Dom');
+                } else {
+                    YAHOO.log('getRegion failed: element not positionable (either not in a document or not displayed)', 'error', 'Dom');
                 }
 
-                var region = Y.Region.getRegion(el);
-                YAHOO.log('getRegion returning ' + region, 'info', 'Dom');
                 return region;
             };
             
@@ -393,9 +565,11 @@
          * @param {String} tag (optional) The tag name of the elements being collected
          * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
          * @param {Function} apply (optional) A function to apply to each element when found 
+         * @param {Any} o (optional) An optional arg that is passed to the supplied method
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Array} An array of elements that have the given class name
          */
-        getElementsByClassName: function(className, tag, root, apply) {
+        getElementsByClassName: function(className, tag, root, apply, o, overrides) {
             className = lang.trim(className);
             tag = tag || '*';
             root = (root) ? Y.Dom.get(root) : null || document; 
@@ -405,17 +579,18 @@
 
             var nodes = [],
                 elements = root.getElementsByTagName(tag),
-                re = getClassRegEx(className);
+                hasClass = Y.Dom.hasClass;
 
             for (var i = 0, len = elements.length; i < len; ++i) {
-                if ( re.test(elements[i].className) ) {
+                if ( hasClass(elements[i], className) ) {
                     nodes[nodes.length] = elements[i];
-                    if (apply) {
-                        apply.call(elements[i], elements[i]);
-                    }
                 }
             }
             
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
             return nodes;
         },
 
@@ -427,14 +602,26 @@
          * @return {Boolean | Array} A boolean value or array of boolean values
          */
         hasClass: function(el, className) {
-            var re = getClassRegEx(className);
+            return Y.Dom.batch(el, Y.Dom._hasClass, className);
+        },
 
-            var f = function(el) {
-                YAHOO.log('hasClass returning ' + re.test(el.className), 'info', 'Dom');
-                return re.test(el.className);
-            };
+        _hasClass: function(el, className) {
+            var ret = false,
+                current;
             
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                if (className.exec) {
+                    ret = className.test(current);
+                } else {
+                    ret = className && (SPACE + current + SPACE).
+                        indexOf(SPACE + className + SPACE) > -1;
+                }
+            } else {
+                YAHOO.log('hasClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
         },
     
         /**
@@ -445,18 +632,24 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         addClass: function(el, className) {
-            var f = function(el) {
-                if (this.hasClass(el, className)) {
-                    return false; // already present
+            return Y.Dom.batch(el, Y.Dom._addClass, className);
+        },
+
+        _addClass: function(el, className) {
+            var ret = false,
+                current;
+
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                if ( !Y.Dom._hasClass(el, className) ) {
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className));
+                    ret = true;
                 }
-                
-                YAHOO.log('addClass adding ' + className, 'info', 'Dom');
-                
-                el.className = lang.trim([el.className, className].join(' '));
-                return true;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            } else {
+                YAHOO.log('addClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
         },
     
         /**
@@ -467,32 +660,36 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         removeClass: function(el, className) {
-            var re = getClassRegEx(className);
-            
-            var f = function(el) {
-                var ret = false,
-                    current = el.className;
+            return Y.Dom.batch(el, Y.Dom._removeClass, className);
+        },
+        
+        _removeClass: function(el, className) {
+            var ret = false,
+                current,
+                newClass,
+                attr;
 
-                if (className && current && this.hasClass(el, className)) {
-                    
-                    el.className = current.replace(re, ' ');
-                    if ( this.hasClass(el, className) ) { // in case of multiple adjacent
-                        this.removeClass(el, className);
-                    }
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                Y.Dom.setAttribute(el, CLASS_NAME, current.replace(Y.Dom._getClassRegex(className), EMPTY));
 
-                    el.className = lang.trim(el.className); // remove any trailing spaces
-                    if (el.className === '') { // remove class attribute if empty
-                        var attr = (el.hasAttribute) ? 'class' : 'className';
+                newClass = Y.Dom.getAttribute(el, CLASS_NAME);
+                if (current !== newClass) { // else nothing changed
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(newClass)); // trim after comparing to current class
+                    ret = true;
+
+                    if (Y.Dom.getAttribute(el, CLASS_NAME) === '') { // remove class attribute if empty
+                        attr = (el.hasAttribute && el.hasAttribute(_CLASS)) ? _CLASS : CLASS_NAME;
                         YAHOO.log('removeClass removing empty class attribute', 'info', 'Dom');
                         el.removeAttribute(attr);
                     }
-                    ret = true;
-                }                 
-                YAHOO.log('removeClass ' + className + ' result: ' + ret, 'info', 'Dom');
-                return ret;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+                }
+
+            } else {
+                YAHOO.log('removeClass called with invalid arguments', 'warn', 'Dom');
+            }
+
+            return ret;
         },
         
         /**
@@ -505,31 +702,40 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         replaceClass: function(el, oldClassName, newClassName) {
-            if (!newClassName || oldClassName === newClassName) { // avoid infinite loop
-                return false;
-            }
-            
-            var re = getClassRegEx(oldClassName);
+            return Y.Dom.batch(el, Y.Dom._replaceClass, { from: oldClassName, to: newClassName });
+        },
 
-            var f = function(el) {
-                YAHOO.log('replaceClass replacing ' + oldClassName + ' with ' + newClassName, 'info', 'Dom');
-            
-                if ( !this.hasClass(el, oldClassName) ) {
-                    this.addClass(el, newClassName); // just add it if nothing to replace
-                    return true; // NOTE: return
-                }
-            
-                el.className = el.className.replace(re, ' ' + newClassName + ' ');
+        _replaceClass: function(el, classObj) {
+            var className,
+                from,
+                to,
+                ret = false,
+                current;
 
-                if ( this.hasClass(el, oldClassName) ) { // in case of multiple adjacent
-                    this.removeClass(el, oldClassName);
+            if (el && classObj) {
+                from = classObj.from;
+                to = classObj.to;
+
+                if (!to) {
+                    ret = false;
+                }  else if (!from) { // just add if no "from"
+                    ret = Y.Dom._addClass(el, classObj.to);
+                } else if (from !== to) { // else nothing to replace
+                    // May need to lead with DBLSPACE?
+                    current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                    className = (SPACE + current.replace(Y.Dom._getClassRegex(from), SPACE + to)).
+                               split(Y.Dom._getClassRegex(to));
+
+                    // insert to into what would have been the first occurrence slot
+                    className.splice(1, 0, SPACE + to);
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(className.join(EMPTY)));
+                    ret = true;
                 }
+            } else {
+                YAHOO.log('replaceClass called with invalid arguments', 'warn', 'Dom');
+            }
 
-                el.className = lang.trim(el.className); // remove any trailing spaces
-                return true;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return ret;
         },
         
         /**
@@ -546,12 +752,16 @@
                 if (el && el.id) { // do not override existing ID
                     YAHOO.log('generateId returning existing id ' + el.id, 'info', 'Dom');
                     return el.id;
-                } 
+                }
 
                 var id = prefix + YAHOO.env._id_counter++;
                 YAHOO.log('generateId generating ' + id, 'info', 'Dom');
 
                 if (el) {
+                    if (el[OWNER_DOCUMENT].getElementById(id)) { // in case one already exists
+                        // use failed id plus prefix to help ensure uniqueness
+                        return Y.Dom.generateId(el, id + prefix);
+                    }
                     el.id = id;
                 }
                 
@@ -575,7 +785,7 @@
             
             var ret = false;
 
-            if ( (haystack && needle) && (haystack.nodeType && needle.nodeType) ) {
+            if ( (haystack && needle) && (haystack[NODE_TYPE] && needle[NODE_TYPE]) ) {
                 if (haystack.contains && haystack !== needle) { // contains returns true when equal
                     ret = haystack.contains(needle);
                 }
@@ -593,11 +803,23 @@
          * Determines whether an HTMLElement is present in the current document.
          * @method inDocument         
          * @param {String | HTMLElement} el The element to search for
+         * @param {Object} doc An optional document to search, defaults to element's owner document 
          * @return {Boolean} Whether or not the element is present in the current document
          */
-        inDocument: function(el) {
-            return this.isAncestor(document.documentElement, el);
+        inDocument: function(el, doc) {
+            return Y.Dom._inDoc(Y.Dom.get(el), doc);
         },
+
+        _inDoc: function(el, doc) {
+            var ret = false;
+            if (el && el[TAG_NAME]) {
+                doc = doc || el[OWNER_DOCUMENT]; 
+                ret = Y.Dom.isAncestor(doc[DOCUMENT_ELEMENT], el);
+            } else {
+                YAHOO.log('inDocument failed: invalid input', 'error', 'Dom');
+            }
+            return ret;
+        },
         
         /**
          * Returns a array of HTMLElements that pass the test applied by supplied boolean method.
@@ -611,9 +833,11 @@
          * @param {String} tag (optional) The tag name of the elements being collected
          * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
          * @param {Function} apply (optional) A function to apply to each element when found 
+         * @param {Any} o (optional) An optional arg that is passed to the supplied method
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Array} Array of HTMLElements
          */
-        getElementsBy: function(method, tag, root, apply) {
+        getElementsBy: function(method, tag, root, apply, o, overrides, firstOnly) {
             tag = tag || '*';
             root = (root) ? Y.Dom.get(root) : null || document; 
 
@@ -626,47 +850,63 @@
             
             for (var i = 0, len = elements.length; i < len; ++i) {
                 if ( method(elements[i]) ) {
-                    nodes[nodes.length] = elements[i];
-                    if (apply) {
-                        apply(elements[i]);
+                    if (firstOnly) {
+                        nodes = elements[i]; 
+                        break;
+                    } else {
+                        nodes[nodes.length] = elements[i];
                     }
                 }
             }
 
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
             YAHOO.log('getElementsBy returning ' + nodes, 'info', 'Dom');
             
             return nodes;
         },
         
         /**
+         * Returns the first HTMLElement that passes the test applied by the supplied boolean method.
+         * @method getElementBy
+         * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+         * @param {String} tag (optional) The tag name of the elements being collected
+         * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+         * @return {HTMLElement}
+         */
+        getElementBy: function(method, tag, root) {
+            return Y.Dom.getElementsBy(method, tag, root, null, null, null, true); 
+        },
+
+        /**
          * Runs the supplied method against each item in the Collection/Array.
          * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ).
          * @method batch
          * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to
          * @param {Function} method The method to apply to the element(s)
          * @param {Any} o (optional) An optional arg that is passed to the supplied method
-         * @param {Boolean} override (optional) Whether or not to override the scope of "method" with "o"
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Any | Array} The return value(s) from the supplied method
          */
-        batch: function(el, method, o, override) {
-            el = (el && (el.tagName || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+        batch: function(el, method, o, overrides) {
+            var collection = [],
+                scope = (overrides) ? o : window;
+                
+            el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+            if (el && method) {
+                if (el[TAG_NAME] || el.length === undefined) { // element or not array-like 
+                    return method.call(scope, el, o);
+                } 
 
-            if (!el || !method) {
-                YAHOO.log('batch failed: invalid arguments', 'error', 'Dom');
+                for (var i = 0; i < el.length; ++i) {
+                    collection[collection.length] = method.call(scope, el[i], o);
+                }
+            } else {
+                YAHOO.log('batch called with invalid arguments', 'warn', 'Dom');
                 return false;
             } 
-            var scope = (override) ? o : window;
-            
-            if (el.tagName || el.length === undefined) { // element or not array-like 
-                return method.call(scope, el, o);
-            } 
-
-            var collection = [];
-            
-            for (var i = 0, len = el.length; i < len; ++i) {
-                collection[collection.length] = method.call(scope, el[i], o);
-            }
-            
             return collection;
         },
         
@@ -676,9 +916,9 @@
          * @return {Int} The height of the actual document (which includes the body and its margin).
          */
         getDocumentHeight: function() {
-            var scrollHeight = (document.compatMode != 'CSS1Compat') ? document.body.scrollHeight : document.documentElement.scrollHeight;
+            var scrollHeight = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollHeight : documentElement.scrollHeight,
+                h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
 
-            var h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
             YAHOO.log('getDocumentHeight returning ' + h, 'info', 'Dom');
             return h;
         },
@@ -689,8 +929,8 @@
          * @return {Int} The width of the actual document (which includes the body and its margin).
          */
         getDocumentWidth: function() {
-            var scrollWidth = (document.compatMode != 'CSS1Compat') ? document.body.scrollWidth : document.documentElement.scrollWidth;
-            var w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
+            var scrollWidth = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollWidth : documentElement.scrollWidth,
+                w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
             YAHOO.log('getDocumentWidth returning ' + w, 'info', 'Dom');
             return w;
         },
@@ -701,12 +941,12 @@
          * @return {Int} The height of the viewable area of the page (excludes scrollbars).
          */
         getViewportHeight: function() {
-            var height = self.innerHeight; // Safari, Opera
-            var mode = document.compatMode;
+            var height = self.innerHeight, // Safari, Opera
+                mode = document[COMPAT_MODE];
         
             if ( (mode || isIE) && !isOpera ) { // IE, Gecko
-                height = (mode == 'CSS1Compat') ?
-                        document.documentElement.clientHeight : // Standards
+                height = (mode == CSS1_COMPAT) ?
+                        documentElement.clientHeight : // Standards
                         document.body.clientHeight; // Quirks
             }
         
@@ -721,12 +961,12 @@
          */
         
         getViewportWidth: function() {
-            var width = self.innerWidth;  // Safari
-            var mode = document.compatMode;
+            var width = self.innerWidth,  // Safari
+                mode = document[COMPAT_MODE];
             
             if (mode || isIE) { // IE, Gecko, Opera
-                width = (mode == 'CSS1Compat') ?
-                        document.documentElement.clientWidth : // Standards
+                width = (mode == CSS1_COMPAT) ?
+                        documentElement.clientWidth : // Standards
                         document.body.clientWidth; // Quirks
             }
             YAHOO.log('getViewportWidth returning ' + width, 'info', 'Dom');
@@ -742,8 +982,8 @@
          * @return {Object} HTMLElement or null if not found
          */
         getAncestorBy: function(node, method) {
-            while ( (node = node.parentNode) ) { // NOTE: assignment
-                if ( testElement(node, method) ) {
+            while ( (node = node[PARENT_NODE]) ) { // NOTE: assignment
+                if ( Y.Dom._testElement(node, method) ) {
                     YAHOO.log('getAncestorBy returning ' + node, 'info', 'Dom');
                     return node;
                 }
@@ -784,7 +1024,7 @@
                 return null;
             }
             var method = function(el) {
-                 return el.tagName && el.tagName.toUpperCase() == tagName.toUpperCase();
+                 return el[TAG_NAME] && el[TAG_NAME].toUpperCase() == tagName.toUpperCase();
             };
 
             return Y.Dom.getAncestorBy(node, method);
@@ -803,7 +1043,7 @@
         getPreviousSiblingBy: function(node, method) {
             while (node) {
                 node = node.previousSibling;
-                if ( testElement(node, method) ) {
+                if ( Y.Dom._testElement(node, method) ) {
                     return node;
                 }
             }
@@ -839,7 +1079,7 @@
         getNextSiblingBy: function(node, method) {
             while (node) {
                 node = node.nextSibling;
-                if ( testElement(node, method) ) {
+                if ( Y.Dom._testElement(node, method) ) {
                     return node;
                 }
             }
@@ -871,7 +1111,7 @@
          * @return {Object} HTMLElement or null if not found
          */
         getFirstChildBy: function(node, method) {
-            var child = ( testElement(node.firstChild, method) ) ? node.firstChild : null;
+            var child = ( Y.Dom._testElement(node.firstChild, method) ) ? node.firstChild : null;
             return child || Y.Dom.getNextSiblingBy(node.firstChild, method);
         }, 
 
@@ -903,7 +1143,7 @@
                 YAHOO.log('getLastChild failed: invalid node argument', 'error', 'Dom');
                 return null;
             }
-            var child = ( testElement(node.lastChild, method) ) ? node.lastChild : null;
+            var child = ( Y.Dom._testElement(node.lastChild, method) ) ? node.lastChild : null;
             return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method);
         }, 
 
@@ -927,8 +1167,8 @@
          * @return {Array} A static array of HTMLElements
          */
         getChildrenBy: function(node, method) {
-            var child = Y.Dom.getFirstChildBy(node, method);
-            var children = child ? [child] : [];
+            var child = Y.Dom.getFirstChildBy(node, method),
+                children = child ? [child] : [];
 
             Y.Dom.getNextSiblingBy(child, function(node) {
                 if ( !method || method(node) ) {
@@ -954,7 +1194,7 @@
 
             return Y.Dom.getChildrenBy(node);
         },
- 
+
         /**
          * Returns the left scroll value of the document 
          * @method getDocumentScrollLeft
@@ -963,7 +1203,7 @@
          */
         getDocumentScrollLeft: function(doc) {
             doc = doc || document;
-            return Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft);
         }, 
 
         /**
@@ -974,7 +1214,7 @@
          */
         getDocumentScrollTop: function(doc) {
             doc = doc || document;
-            return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop);
         },
 
         /**
@@ -988,12 +1228,12 @@
             newNode = Y.Dom.get(newNode); 
             referenceNode = Y.Dom.get(referenceNode); 
             
-            if (!newNode || !referenceNode || !referenceNode.parentNode) {
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
                 YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom');
                 return null;
             }       
 
-            return referenceNode.parentNode.insertBefore(newNode, referenceNode); 
+            return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode); 
         },
 
         /**
@@ -1007,15 +1247,15 @@
             newNode = Y.Dom.get(newNode); 
             referenceNode = Y.Dom.get(referenceNode); 
             
-            if (!newNode || !referenceNode || !referenceNode.parentNode) {
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
                 YAHOO.log('insertAfter failed: missing or invalid arg(s)', 'error', 'Dom');
                 return null;
             }       
 
             if (referenceNode.nextSibling) {
-                return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); 
+                return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode.nextSibling); 
             } else {
-                return referenceNode.parentNode.appendChild(newNode);
+                return referenceNode[PARENT_NODE].appendChild(newNode);
             }
         },
 
@@ -1031,62 +1271,114 @@
                 b = Y.Dom.getViewportHeight() + t;
 
             return new Y.Region(t, r, b, l);
-        }
-    };
-    
-    var getXY = function() {
-        if (document.documentElement.getBoundingClientRect) { // IE
-            return function(el) {
-                var box = el.getBoundingClientRect(),
-                    round = Math.round;
+        },
 
-                var rootNode = el.ownerDocument;
-                return [round(box.left + Y.Dom.getDocumentScrollLeft(rootNode)), round(box.top +
-                        Y.Dom.getDocumentScrollTop(rootNode))];
-            };
-        } else {
-            return function(el) { // manually calculate by crawling up offsetParents
-                var pos = [el.offsetLeft, el.offsetTop];
-                var parentNode = el.offsetParent;
+        /**
+         * Provides a normalized attribute interface. 
+         * @method setAttibute
+         * @param {String | HTMLElement} el The target element for the attribute.
+         * @param {String} attr The attribute to set.
+         * @param {String} val The value of the attribute.
+         */
+        setAttribute: function(el, attr, val) {
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+            el.setAttribute(attr, val);
+        },
 
-                // safari: subtract body offsets if el is abs (or any offsetParent), unless body is offsetParent
-                var accountForBody = (isSafari &&
-                        Y.Dom.getStyle(el, 'position') == 'absolute' &&
-                        el.offsetParent == el.ownerDocument.body);
 
-                if (parentNode != el) {
-                    while (parentNode) {
-                        pos[0] += parentNode.offsetLeft;
-                        pos[1] += parentNode.offsetTop;
-                        if (!accountForBody && isSafari && 
-                                Y.Dom.getStyle(parentNode,'position') == 'absolute' ) { 
-                            accountForBody = true;
-                        }
-                        parentNode = parentNode.offsetParent;
+        /**
+         * Provides a normalized attribute interface. 
+         * @method getAttibute
+         * @param {String | HTMLElement} el The target element for the attribute.
+         * @param {String} attr The attribute to get.
+         * @return {String} The current value of the attribute. 
+         */
+        getAttribute: function(el, attr) {
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+            return el.getAttribute(attr);
+        },
+
+        _toCamel: function(property) {
+            var c = propertyCache;
+
+            function tU(x,l) {
+                return l.toUpperCase();
+            }
+
+            return c[property] || (c[property] = property.indexOf('-') === -1 ? 
+                                    property :
+                                    property.replace( /-([a-z])/gi, tU ));
+        },
+
+        _getClassRegex: function(className) {
+            var re;
+            if (className !== undefined) { // allow empty string to pass
+                if (className.exec) { // already a RegExp
+                    re = className;
+                } else {
+                    re = reCache[className];
+                    if (!re) {
+                        // escape special chars (".", "[", etc.)
+                        className = className.replace(Y.Dom._patterns.CLASS_RE_TOKENS, '\\$1');
+                        re = reCache[className] = new RegExp(C_START + className + C_END, G);
                     }
                 }
+            }
+            return re;
+        },
 
-                if (accountForBody) { //safari doubles in this case
-                    pos[0] -= el.ownerDocument.body.offsetLeft;
-                    pos[1] -= el.ownerDocument.body.offsetTop;
-                } 
-                parentNode = el.parentNode;
+        _patterns: {
+            ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
+            CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g
+        },
 
-                // account for any scrolled ancestors
-                while ( parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName) ) 
-                {
-                    if (parentNode.scrollTop || parentNode.scrollLeft) {
-                        pos[0] -= parentNode.scrollLeft;
-                        pos[1] -= parentNode.scrollTop;
-                    }
-                    
-                    parentNode = parentNode.parentNode; 
+
+        _testElement: function(node, method) {
+            return node && node[NODE_TYPE] == 1 && ( !method || method(node) );
+        },
+
+        _calcBorders: function(node, xy2) {
+            var t = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0,
+                l = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0;
+            if (isGecko) {
+                if (RE_TABLE.test(node[TAG_NAME])) {
+                    t = 0;
+                    l = 0;
                 }
+            }
+            xy2[0] += l;
+            xy2[1] += t;
+            return xy2;
+        }
+    };
+        
+    var _getComputedStyle = Y.Dom[GET_COMPUTED_STYLE];
+    // fix opera computedStyle default color unit (convert to rgb)
+    if (UA.opera) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+            if (RE_COLOR.test(att)) {
+                val = Y.Dom.Color.toRGB(val);
+            }
 
-                return pos;
-            };
-        }
-    }() // NOTE: Executing for loadtime branching
+            return val;
+        };
+
+    }
+
+    // safari converts transparent to rgba(), others use "transparent"
+    if (UA.webkit) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+
+            if (val === 'rgba(0, 0, 0, 0)') {
+                val = 'transparent'; 
+            }
+
+            return val;
+        };
+
+    }
 })();
 /**
  * A region is a representation of an object on a grid.  It is defined
@@ -1110,6 +1402,13 @@
     this.top = t;
     
     /**
+     * The region's top extent
+     * @property y
+     * @type Int
+     */
+    this.y = t;
+    
+    /**
      * The region's top extent as index, for symmetry with set/getXY
      * @property 1
      * @type Int
@@ -1138,11 +1437,32 @@
     this.left = l;
     
     /**
+     * The region's left extent
+     * @property x
+     * @type Int
+     */
+    this.x = l;
+    
+    /**
      * The region's left extent as index, for symmetry with set/getXY
      * @property 0
      * @type Int
      */
     this[0] = l;
+
+    /**
+     * The region's total width 
+     * @property width 
+     * @type Int
+     */
+    this.width = this.right - this.left;
+
+    /**
+     * The region's total height 
+     * @property height 
+     * @type Int
+     */
+    this.height = this.bottom - this.top;
 };
 
 /**
@@ -1177,10 +1497,10 @@
  * @return {Region}        The overlap region, or null if there is no overlap
  */
 YAHOO.util.Region.prototype.intersect = function(region) {
-    var t = Math.max( this.top,    region.top    );
-    var r = Math.min( this.right,  region.right  );
-    var b = Math.min( this.bottom, region.bottom );
-    var l = Math.max( this.left,   region.left   );
+    var t = Math.max( this.top,    region.top    ),
+        r = Math.min( this.right,  region.right  ),
+        b = Math.min( this.bottom, region.bottom ),
+        l = Math.max( this.left,   region.left   );
     
     if (b >= t && r >= l) {
         return new YAHOO.util.Region(t, r, b, l);
@@ -1197,10 +1517,10 @@
  * @return {Region}        The union region
  */
 YAHOO.util.Region.prototype.union = function(region) {
-    var t = Math.min( this.top,    region.top    );
-    var r = Math.max( this.right,  region.right  );
-    var b = Math.max( this.bottom, region.bottom );
-    var l = Math.min( this.left,   region.left   );
+    var t = Math.min( this.top,    region.top    ),
+        r = Math.max( this.right,  region.right  ),
+        b = Math.max( this.bottom, region.bottom ),
+        l = Math.min( this.left,   region.left   );
 
     return new YAHOO.util.Region(t, r, b, l);
 };
@@ -1216,6 +1536,8 @@
              ", right: "   + this.right  + 
              ", bottom: "  + this.bottom + 
              ", left: "    + this.left   + 
+             ", height: "  + this.height + 
+             ", width: "    + this.width   + 
              "}" );
 };
 
@@ -1227,13 +1549,12 @@
  * @static
  */
 YAHOO.util.Region.getRegion = function(el) {
-    var p = YAHOO.util.Dom.getXY(el);
+    var p = YAHOO.util.Dom.getXY(el),
+        t = p[1],
+        r = p[0] + el.offsetWidth,
+        b = p[1] + el.offsetHeight,
+        l = p[0];
 
-    var t = p[1];
-    var r = p[0] + el.offsetWidth;
-    var b = p[1] + el.offsetHeight;
-    var l = p[0];
-
     return new YAHOO.util.Region(t, r, b, l);
 };
 
@@ -1255,23 +1576,262 @@
       y = x[1]; // dont blow away x yet
       x = x[0];
    }
-   
-    /**
-     * The X position of the point, which is also the right, left and index zero (for Dom.getXY symmetry)
-     * @property x
-     * @type Int
-     */
-
-    this.x = this.right = this.left = this[0] = x;
-     
-    /**
-     * The Y position of the point, which is also the top, bottom and index one (for Dom.getXY symmetry)
-     * @property y
-     * @type Int
-     */
-    this.y = this.top = this.bottom = this[1] = y;
+ 
+    YAHOO.util.Point.superclass.constructor.call(this, y, x, y, x);
 };
 
-YAHOO.util.Point.prototype = new YAHOO.util.Region();
+YAHOO.extend(YAHOO.util.Point, YAHOO.util.Region);
 
-YAHOO.register("dom", YAHOO.util.Dom, {version: "2.6.0", build: "1321"});
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var Y = YAHOO.util, 
+    CLIENT_TOP = 'clientTop',
+    CLIENT_LEFT = 'clientLeft',
+    PARENT_NODE = 'parentNode',
+    RIGHT = 'right',
+    HAS_LAYOUT = 'hasLayout',
+    PX = 'px',
+    OPACITY = 'opacity',
+    AUTO = 'auto',
+    BORDER_LEFT_WIDTH = 'borderLeftWidth',
+    BORDER_TOP_WIDTH = 'borderTopWidth',
+    BORDER_RIGHT_WIDTH = 'borderRightWidth',
+    BORDER_BOTTOM_WIDTH = 'borderBottomWidth',
+    VISIBLE = 'visible',
+    TRANSPARENT = 'transparent',
+    HEIGHT = 'height',
+    WIDTH = 'width',
+    STYLE = 'style',
+    CURRENT_STYLE = 'currentStyle',
+
+// IE getComputedStyle
+// TODO: unit-less lineHeight (e.g. 1.22)
+    re_size = /^width|height$/,
+    re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
+
+    ComputedStyle = {
+        get: function(el, property) {
+            var value = '',
+                current = el[CURRENT_STYLE][property];
+
+            if (property === OPACITY) {
+                value = Y.Dom.getStyle(el, OPACITY);        
+            } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert
+                value = current;
+            } else if (Y.Dom.IE_COMPUTED[property]) { // use compute function
+                value = Y.Dom.IE_COMPUTED[property](el, property);
+            } else if (re_unit.test(current)) { // convert to pixel
+                value = Y.Dom.IE.ComputedStyle.getPixel(el, property);
+            } else {
+                value = current;
+            }
+
+            return value;
+        },
+
+        getOffset: function(el, prop) {
+            var current = el[CURRENT_STYLE][prop],                        // value of "width", "top", etc.
+                capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc.
+                offset = 'offset' + capped,                             // "offsetWidth", "offsetTop", etc.
+                pixel = 'pixel' + capped,                               // "pixelWidth", "pixelTop", etc.
+                value = '',
+                actual;
+
+            if (current == AUTO) {
+                actual = el[offset]; // offsetHeight/Top etc.
+                if (actual === undefined) { // likely "right" or "bottom"
+                    value = 0;
+                }
+
+                value = actual;
+                if (re_size.test(prop)) { // account for box model diff 
+                    el[STYLE][prop] = actual; 
+                    if (el[offset] > actual) {
+                        // the difference is padding + border (works in Standards & Quirks modes)
+                        value = actual - (el[offset] - actual);
+                    }
+                    el[STYLE][prop] = AUTO; // revert to auto
+                }
+            } else { // convert units to px
+                if (!el[STYLE][pixel] && !el[STYLE][prop]) { // need to map style.width to currentStyle (no currentStyle.pixelWidth)
+                    el[STYLE][prop] = current;              // no style.pixelWidth if no style.width
+                }
+                value = el[STYLE][pixel];
+            }
+            return value + PX;
+        },
+
+        getBorderWidth: function(el, property) {
+            // clientHeight/Width = paddingBox (e.g. offsetWidth - borderWidth)
+            // clientTop/Left = borderWidth
+            var value = null;
+            if (!el[CURRENT_STYLE][HAS_LAYOUT]) { // TODO: unset layout?
+                el[STYLE].zoom = 1; // need layout to measure client
+            }
+
+            switch(property) {
+                case BORDER_TOP_WIDTH:
+                    value = el[CLIENT_TOP];
+                    break;
+                case BORDER_BOTTOM_WIDTH:
+                    value = el.offsetHeight - el.clientHeight - el[CLIENT_TOP];
+                    break;
+                case BORDER_LEFT_WIDTH:
+                    value = el[CLIENT_LEFT];
+                    break;
+                case BORDER_RIGHT_WIDTH:
+                    value = el.offsetWidth - el.clientWidth - el[CLIENT_LEFT];
+                    break;
+            }
+            return value + PX;
+        },
+
+        getPixel: function(node, att) {
+            // use pixelRight to convert to px
+            var val = null,
+                styleRight = node[CURRENT_STYLE][RIGHT],
+                current = node[CURRENT_STYLE][att];
+
+            node[STYLE][RIGHT] = current;
+            val = node[STYLE].pixelRight;
+            node[STYLE][RIGHT] = styleRight; // revert
+
+            return val + PX;
+        },
+
+        getMargin: function(node, att) {
+            var val;
+            if (node[CURRENT_STYLE][att] == AUTO) {
+                val = 0 + PX;
+            } else {
+                val = Y.Dom.IE.ComputedStyle.getPixel(node, att);
+            }
+            return val;
+        },
+
+        getVisibility: function(node, att) {
+            var current;
+            while ( (current = node[CURRENT_STYLE]) && current[att] == 'inherit') { // NOTE: assignment in test
+                node = node[PARENT_NODE];
+            }
+            return (current) ? current[att] : VISIBLE;
+        },
+
+        getColor: function(node, att) {
+            return Y.Dom.Color.toRGB(node[CURRENT_STYLE][att]) || TRANSPARENT;
+        },
+
+        getBorderColor: function(node, att) {
+            var current = node[CURRENT_STYLE],
+                val = current[att] || current.color;
+            return Y.Dom.Color.toRGB(Y.Dom.Color.toHex(val));
+        }
+
+    },
+
+//fontSize: getPixelFont,
+    IEComputed = {};
+
+IEComputed.top = IEComputed.right = IEComputed.bottom = IEComputed.left = 
+        IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset;
+
+IEComputed.color = ComputedStyle.getColor;
+
+IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] =
+        IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] =
+        ComputedStyle.getBorderWidth;
+
+IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom =
+        IEComputed.marginLeft = ComputedStyle.getMargin;
+
+IEComputed.visibility = ComputedStyle.getVisibility;
+IEComputed.borderColor = IEComputed.borderTopColor =
+        IEComputed.borderRightColor = IEComputed.borderBottomColor =
+        IEComputed.borderLeftColor = ComputedStyle.getBorderColor;
+
+Y.Dom.IE_COMPUTED = IEComputed;
+Y.Dom.IE_ComputedStyle = ComputedStyle;
+})();
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var TO_STRING = 'toString',
+    PARSE_INT = parseInt,
+    RE = RegExp,
+    Y = YAHOO.util;
+
+Y.Dom.Color = {
+    KEYWORDS: {
+        black: '000',
+        silver: 'c0c0c0',
+        gray: '808080',
+        white: 'fff',
+        maroon: '800000',
+        red: 'f00',
+        purple: '800080',
+        fuchsia: 'f0f',
+        green: '008000',
+        lime: '0f0',
+        olive: '808000',
+        yellow: 'ff0',
+        navy: '000080',
+        blue: '00f',
+        teal: '008080',
+        aqua: '0ff'
+    },
+
+    re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
+    re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
+    re_hex3: /([0-9A-F])/gi,
+
+    toRGB: function(val) {
+        if (!Y.Dom.Color.re_RGB.test(val)) {
+            val = Y.Dom.Color.toHex(val);
+        }
+
+        if(Y.Dom.Color.re_hex.exec(val)) {
+            val = 'rgb(' + [
+                PARSE_INT(RE.$1, 16),
+                PARSE_INT(RE.$2, 16),
+                PARSE_INT(RE.$3, 16)
+            ].join(', ') + ')';
+        }
+        return val;
+    },
+
+    toHex: function(val) {
+        val = Y.Dom.Color.KEYWORDS[val] || val;
+        if (Y.Dom.Color.re_RGB.exec(val)) {
+            var r = (RE.$1.length === 1) ? '0' + RE.$1 : Number(RE.$1),
+                g = (RE.$2.length === 1) ? '0' + RE.$2 : Number(RE.$2),
+                b = (RE.$3.length === 1) ? '0' + RE.$3 : Number(RE.$3);
+
+            val = [
+                r[TO_STRING](16),
+                g[TO_STRING](16),
+                b[TO_STRING](16)
+            ].join('');
+        }
+
+        if (val.length < 6) {
+            val = val.replace(Y.Dom.Color.re_hex3, '$1$1');
+        }
+
+        if (val !== 'transparent' && val.indexOf('#') < 0) {
+            val = '#' + val;
+        }
+
+        return val.toLowerCase();
+    }
+};
+}());
+YAHOO.register("dom", YAHOO.util.Dom, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/dom/dom-min.js
===================================================================
--- trunk/root/static/yui/dom/dom-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dom/dom-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,9 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var B=YAHOO.util,F=YAHOO.lang,L,J,K={},G={},N=window.document;YAHOO.env._id_counter=YAHOO.env._id_counter||0;var C=YAHOO.env.ua.opera,M=YAHOO.env.ua.webkit,A=YAHOO.env.ua.gecko,H=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var O=function(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return K[Q];}var R=Q;while(E.HYPHEN.exec(R)){R=R.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}K[Q]=R;return R;};var P=function(R){var Q=G[R];if(!Q){Q=new RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");G[R]=Q;}return Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=function(Q,T){var S=null;if(T=="float"){T="cssFloat";}var R=Q.ownerDocument.defaultView.getComputedStyle(Q,"");if(R){S=R[O(T)];}return Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&H){L=function(Q,S){switch(O(S)){case"opacity":var U=100;try{U=Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(T){try{U=Q.filters("alpha").opacity;}catch(T){}}re!
 turn U/100;case"float":S="styleFloat";default:var R=Q.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{L=function(Q,R){return Q.style[R];};}}if(H){J=function(Q,R,S){switch(R){case"opacity":if(F.isString(Q.style.filter)){Q.style.filter="alpha(opacity="+S*100+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=1;}}break;case"float":R="styleFloat";default:Q.style[R]=S;}};}else{J=function(Q,R,S){if(R=="float"){R="cssFloat";}Q.style[R]=S;};}var D=function(Q,R){return Q&&Q.nodeType==1&&(!R||R(Q));};YAHOO.util.Dom={get:function(S){if(S){if(S.nodeType||S.item){return S;}if(typeof S==="string"){return N.getElementById(S);}if("length" in S){var T=[];for(var R=0,Q=S.length;R<Q;++R){T[T.length]=B.Dom.get(S[R]);}return T;}return S;}return null;},getStyle:function(Q,S){S=O(S);var R=function(T){return L(T,S);};return B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=O(S);var R=function(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q){var R!
 =function(S){if((S.parentNode===null||S.offsetParent===null||t!
 his.getS
tyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}return I(S);};return B.Dom.batch(Q,R,B.Dom,true);},getX:function(Q){var R=function(S){return B.Dom.getXY(S)[0];};return B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var R=function(S){return B.Dom.getXY(S)[1];};return B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var R=function(W){var V=this.getStyle(W,"position");if(V=="static"){this.setStyle(W,"position","relative");V="relative";}var Y=this.getXY(W);if(Y===false){return false;}var X=[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top"),10)];if(isNaN(X[0])){X[0]=(V=="relative")?0:W.offsetLeft;}if(isNaN(X[1])){X[1]=(V=="relative")?0:W.offsetTop;}if(T[0]!==null){W.style.left=T[0]-Y[0]+X[0]+"px";}if(T[1]!==null){W.style.top=T[1]-Y[1]+X[1]+"px";}if(!S){var U=this.getXY(W);if((T[0]!==null&&U[0]!=T[0])||(T[1]!==null&&U[1]!=T[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function!
 (Q,R){B.Dom.setXY(Q,[null,R]);},getRegion:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}var T=B.Region.getRegion(S);return T;};return B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){U=F.trim(U);Y=Y||"*";V=(V)?B.Dom.get(V):null||N;if(!V){return[];}var R=[],Q=V.getElementsByTagName(Y),X=P(U);for(var S=0,T=Q.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=Q[S];if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var Q=P(R);var T=function(U){return Q.test(U.className);};return B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var S=function(T){if(this.hasClass(T,Q)){return false;}T.className=F.trim([T.className,Q].join(" "));return true;};return B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=P(R);!
 var T=function(W){var V=false,X=W.className;if(R&&X&&this.hasC!
 lass(W,R
)){W.className=X.replace(Q," ");if(this.hasClass(W,R)){this.removeClass(W,R);}W.className=F.trim(W.className);if(W.className===""){var U=(W.hasAttribute)?"class":"className";W.removeAttribute(U);}V=true;}return V;};return B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R===Q){return false;}var S=P(R);var U=function(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return true;}V.className=V.className.replace(S," "+Q+" ");if(this.hasClass(V,R)){this.removeClass(V,R);}V.className=F.trim(V.className);return true;};return B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=S||"yui-gen";var R=function(T){if(T&&T.id){return T.id;}var U=S+YAHOO.env._id_counter++;if(T){T.id=U;}return U;};return B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:function(R,S){R=B.Dom.get(R);S=B.Dom.get(S);var Q=false;if((R&&S)&&(R.nodeType&&S.nodeType)){if(R.contains&&R!==S){Q=R.contains(S);}else{if(R.compareDocumentPosition){Q=!!(R.compareDocumentPosition(S)&16);}}!
 }else{}return Q;},inDocument:function(Q){return this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=R||"*";S=(S)?B.Dom.get(S):null||N;if(!S){return[];}var T=[],W=S.getElementsByTagName(R);for(var V=0,Q=W.length;V<Q;++V){if(X(W[V])){T[T.length]=W[V];if(U){U(W[V]);}}}return T;},batch:function(U,X,W,S){U=(U&&(U.tagName||U.item))?U:B.Dom.get(U);if(!U||!X){return false;}var T=(S)?W:window;if(U.tagName||U.length===undefined){return X.call(T,U,W);}var V=[];for(var R=0,Q=U.length;R<Q;++R){V[V.length]=X.call(T,U[R],W);}return V;},getDocumentHeight:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollHeight:N.documentElement.scrollHeight;var Q=Math.max(R,B.Dom.getViewportHeight());return Q;},getDocumentWidth:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollWidth:N.documentElement.scrollWidth;var Q=Math.max(R,B.Dom.getViewportWidth());return Q;},getViewportHeight:function(){var Q=self.innerHeight;
-var R=N.compatMode;if((R||H)&&!C){Q=(R=="CSS1Compat")?N.documentElement.clientHeight:N.body.clientHeight;}return Q;},getViewportWidth:function(){var Q=self.innerWidth;var R=N.compatMode;if(R||H){Q=(R=="CSS1Compat")?N.documentElement.clientWidth:N.body.clientWidth;}return Q;},getAncestorBy:function(Q,R){while((Q=Q.parentNode)){if(D(Q,R)){return Q;}}return null;},getAncestorByClassName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return B.Dom.hasClass(T,Q);};return B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return T.tagName&&T.tagName.toUpperCase()==Q.toUpperCase();};return B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=Q.previousSibling;if(D(Q,R)){return Q;}}return null;},getPreviousSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=Q.nextSibling;if(D(Q,R)){return Q;}}retur!
 n null;},getNextSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var R=(D(Q.firstChild,S))?Q.firstChild:null;return R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return null;}var R=(D(Q.lastChild,S))?Q.lastChild:null;return R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=B.Dom.get(Q);return B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var S=B.Dom.getFirstChildBy(R,T);var Q=S?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length]=U;}return false;});return Q;},getChildren:function(Q){Q=B.Dom.get(Q);if(!Q){}return B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScrollTop:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollTop,Q.bo!
 dy.scrollTop);},insertBefore:function(R,Q){R=B.Dom.get(R);Q=B.!
 Dom.get(
Q);if(!R||!Q||!Q.parentNode){return null;}return Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}if(Q.nextSibling){return Q.parentNode.insertBefore(R,Q.nextSibling);}else{return Q.parentNode.appendChild(R);}},getClientRegion:function(){var S=B.Dom.getDocumentScrollTop(),R=B.Dom.getDocumentScrollLeft(),T=B.Dom.getViewportWidth()+R,Q=B.Dom.getViewportHeight()+S;return new B.Region(S,T,Q,R);}};var I=function(){if(N.documentElement.getBoundingClientRect){return function(S){var T=S.getBoundingClientRect(),R=Math.round;var Q=S.ownerDocument;return[R(T.left+B.Dom.getDocumentScrollLeft(Q)),R(T.top+B.Dom.getDocumentScrollTop(Q))];};}else{return function(S){var T=[S.offsetLeft,S.offsetTop];var R=S.offsetParent;var Q=(M&&B.Dom.getStyle(S,"position")=="absolute"&&S.offsetParent==S.ownerDocument.body);if(R!=S){while(R){T[0]+=R.offsetLeft;T[1]+=R.offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=="absolute"){Q=!
 true;}R=R.offsetParent;}}if(Q){T[0]-=S.ownerDocument.body.offsetLeft;T[1]-=S.ownerDocument.body.offsetTop;}R=S.parentNode;while(R.tagName&&!E.ROOT_TAG.test(R.tagName)){if(R.scrollTop||R.scrollLeft){T[0]-=R.scrollLeft;T[1]-=R.scrollTop;}R=R.parentNode;}return T;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.r!
 ight);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this!
 .left,E.
left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.lengt!
 h;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){retu!
 rn function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){sw!
 itch(x){
case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return functio!
 n(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.!
 Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,!
 p,AA);}A
C=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(!
 Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
+},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}retur!
 n G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHei!
 ght;}return G;},getViewportWidth:function(){var G=self.innerWi!
 dth,Y=K[
t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))!
 ?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(!
 Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibl!
 ing){ret
urn G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(!
 H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
+}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomW!
 idth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=nul!
 l,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;re!
 turn a+I
;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy!
 :"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/dom/dom.js
===================================================================
--- trunk/root/static/yui/dom/dom.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dom/dom.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The dom module provides helper methods for manipulating Dom elements.
@@ -11,139 +11,77 @@
  */
 
 (function() {
-    var Y = YAHOO.util,     // internal shorthand
+    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;     // for use with generateId (global to save state if Dom is overwritten)
+
+        // internal shorthand
+    var Y = YAHOO.util,
         lang = YAHOO.lang,
-        getStyle,           // for load time browser branching
-        setStyle,           // ditto
+        UA = YAHOO.env.ua,
+        trim = YAHOO.lang.trim,
         propertyCache = {}, // for faster hyphen converts
-        reClassNameCache = {},          // cache regexes for className
-        document = window.document;     // cache for faster lookups
-    
-    YAHOO.env._id_counter = YAHOO.env._id_counter || 0;     // for use with generateId (global to save state if Dom is overwritten)
+        reCache = {}, // cache className regexes
+        RE_TABLE = /^t(?:able|d|h)$/i, // for _calcBorders
+        RE_COLOR = /color$/i,
 
-    // brower detection
-    var isOpera = YAHOO.env.ua.opera,
-        isSafari = YAHOO.env.ua.webkit, 
-        isGecko = YAHOO.env.ua.gecko,
-        isIE = YAHOO.env.ua.ie; 
-    
-    // regex cache
-    var patterns = {
-        HYPHEN: /(-[a-z])/i, // to normalize get/setStyle
-        ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
-        OP_SCROLL:/^(?:inline|table-row)$/i
-    };
+        // DOM aliases 
+        document = window.document,     
+        documentElement = document.documentElement,
 
-    var toCamel = function(property) {
-        if ( !patterns.HYPHEN.test(property) ) {
-            return property; // no hyphens
-        }
-        
-        if (propertyCache[property]) { // already converted
-            return propertyCache[property];
-        }
-       
-        var converted = property;
- 
-        while( patterns.HYPHEN.exec(converted) ) {
-            converted = converted.replace(RegExp.$1,
-                    RegExp.$1.substr(1).toUpperCase());
-        }
-        
-        propertyCache[property] = converted;
-        return converted;
-        //return property.replace(/-([a-z])/gi, function(m0, m1) {return m1.toUpperCase()}) // cant use function as 2nd arg yet due to safari bug
-    };
+        // string constants
+        OWNER_DOCUMENT = 'ownerDocument',
+        DEFAULT_VIEW = 'defaultView',
+        DOCUMENT_ELEMENT = 'documentElement',
+        COMPAT_MODE = 'compatMode',
+        OFFSET_LEFT = 'offsetLeft',
+        OFFSET_TOP = 'offsetTop',
+        OFFSET_PARENT = 'offsetParent',
+        PARENT_NODE = 'parentNode',
+        NODE_TYPE = 'nodeType',
+        TAG_NAME = 'tagName',
+        SCROLL_LEFT = 'scrollLeft',
+        SCROLL_TOP = 'scrollTop',
+        GET_BOUNDING_CLIENT_RECT = 'getBoundingClientRect',
+        GET_COMPUTED_STYLE = 'getComputedStyle',
+        CURRENT_STYLE = 'currentStyle',
+        CSS1_COMPAT = 'CSS1Compat',
+        _BACK_COMPAT = 'BackCompat',
+        _CLASS = 'class', // underscore due to reserved word
+        CLASS_NAME = 'className',
+        EMPTY = '',
+        SPACE = ' ',
+        C_START = '(?:^|\\s)',
+        C_END = '(?= |$)',
+        G = 'g',
+        POSITION = 'position',
+        FIXED = 'fixed',
+        RELATIVE = 'relative',
+        LEFT = 'left',
+        TOP = 'top',
+        MEDIUM = 'medium',
+        BORDER_LEFT_WIDTH = 'borderLeftWidth',
+        BORDER_TOP_WIDTH = 'borderTopWidth',
     
-    var getClassRegEx = function(className) {
-        var re = reClassNameCache[className];
-        if (!re) {
-            re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)');
-            reClassNameCache[className] = re;
-        }
-        return re;
-    };
-
-    // branching at load instead of runtime
-    if (document.defaultView && document.defaultView.getComputedStyle) { // W3C DOM method
-        getStyle = function(el, property) {
-            var value = null;
-            
-            if (property == 'float') { // fix reserved word
-                property = 'cssFloat';
-            }
-
-            var computed = el.ownerDocument.defaultView.getComputedStyle(el, '');
-            if (computed) { // test computed before touching for safari
-                value = computed[toCamel(property)];
-            }
-            
-            return el.style[property] || value;
-        };
-    } else if (document.documentElement.currentStyle && isIE) { // IE method
-        getStyle = function(el, property) {                         
-            switch( toCamel(property) ) {
-                case 'opacity' :// IE opacity uses filter
-                    var val = 100;
-                    try { // will error if no DXImageTransform
-                        val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
-
-                    } catch(e) {
-                        try { // make sure its in the document
-                            val = el.filters('alpha').opacity;
-                        } catch(e) {
-                        }
-                    }
-                    return val / 100;
-                case 'float': // fix reserved word
-                    property = 'styleFloat'; // fall through
-                default: 
-                    // test currentStyle before touching
-                    var value = el.currentStyle ? el.currentStyle[property] : null;
-                    return ( el.style[property] || value );
-            }
-        };
-    } else { // default to inline only
-        getStyle = function(el, property) { return el.style[property]; };
-    }
+    // brower detection
+        isOpera = UA.opera,
+        isSafari = UA.webkit, 
+        isGecko = UA.gecko, 
+        isIE = UA.ie; 
     
-    if (isIE) {
-        setStyle = function(el, property, val) {
-            switch (property) {
-                case 'opacity':
-                    if ( lang.isString(el.style.filter) ) { // in case not appended
-                        el.style.filter = 'alpha(opacity=' + val * 100 + ')';
-                        
-                        if (!el.currentStyle || !el.currentStyle.hasLayout) {
-                            el.style.zoom = 1; // when no layout or cant tell
-                        }
-                    }
-                    break;
-                case 'float':
-                    property = 'styleFloat';
-                default:
-                el.style[property] = val;
-            }
-        };
-    } else {
-        setStyle = function(el, property, val) {
-            if (property == 'float') {
-                property = 'cssFloat';
-            }
-            el.style[property] = val;
-        };
-    }
-
-    var testElement = function(node, method) {
-        return node && node.nodeType == 1 && ( !method || method(node) );
-    };
-
     /**
      * Provides helper methods for DOM elements.
      * @namespace YAHOO.util
      * @class Dom
+     * @requires yahoo, event
      */
-    YAHOO.util.Dom = {
+    Y.Dom = {
+        CUSTOM_ATTRIBUTES: (!documentElement.hasAttribute) ? { // IE < 8
+            'for': 'htmlFor',
+            'class': CLASS_NAME
+        } : { // w3c
+            'htmlFor': 'for',
+            'className': _CLASS
+        },
+
         /**
          * Returns an HTMLElement reference.
          * @method get
@@ -151,18 +89,37 @@
          * @return {HTMLElement | Array} A DOM reference to an HTML element or an array of HTMLElements.
          */
         get: function(el) {
+            var id, nodes, c, i, len;
+
             if (el) {
-                if (el.nodeType || el.item) { // Node, or NodeList
+                if (el[NODE_TYPE] || el.item) { // Node, or NodeList
                     return el;
                 }
 
                 if (typeof el === 'string') { // id
-                    return document.getElementById(el);
+                    id = el;
+                    el = document.getElementById(el);
+                    if (el && el.id === id) { // IE: avoid false match on "name" attribute
+                    return el;
+                    } else if (el && document.all) { // filter by name
+                        el = null;
+                        nodes = document.all[id];
+                        for (i = 0, len = nodes.length; i < len; ++i) {
+                            if (nodes[i].id === id) {
+                                return nodes[i];
+                            }
+                        }
+                    }
+                    return el;
                 }
                 
+                if (el.DOM_EVENTS) { // YAHOO.util.Element
+                    el = el.get('element');
+                }
+
                 if ('length' in el) { // array-like 
-                    var c = [];
-                    for (var i = 0, len = el.length; i < len; ++i) {
+                    c = [];
+                    for (i = 0, len = el.length; i < len; ++i) {
                         c[c.length] = Y.Dom.get(el[i]);
                     }
                     
@@ -175,6 +132,14 @@
             return null;
         },
     
+        getComputedStyle: function(el, property) {
+            if (window[GET_COMPUTED_STYLE]) {
+                return el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null)[property];
+            } else if (el[CURRENT_STYLE]) {
+                return Y.Dom.IE_ComputedStyle.get(el, property);
+            }
+        },
+
         /**
          * Normalizes currentStyle and ComputedStyle.
          * @method getStyle
@@ -183,14 +148,55 @@
          * @return {String | Array} The current value of the style property for the element(s).
          */
         getStyle: function(el, property) {
-            property = toCamel(property);
-            
-            var f = function(element) {
-                return getStyle(element, property);
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return Y.Dom.batch(el, Y.Dom._getStyle, property);
         },
+
+        // branching at load instead of runtime
+        _getStyle: function() {
+            if (window[GET_COMPUTED_STYLE]) { // W3C DOM method
+                return function(el, property) {
+                    property = (property === 'float') ? property = 'cssFloat' :
+                            Y.Dom._toCamel(property);
+
+                    var value = el.style[property],
+                        computed;
+                    
+                    if (!value) {
+                        computed = el[OWNER_DOCUMENT][DEFAULT_VIEW][GET_COMPUTED_STYLE](el, null);
+                        if (computed) { // test computed before touching for safari
+                            value = computed[property];
+                        }
+                    }
+                    
+                    return value;
+                };
+            } else if (documentElement[CURRENT_STYLE]) {
+                return function(el, property) {                         
+                    var value;
+
+                    switch(property) {
+                        case 'opacity' :// IE opacity uses filter
+                            value = 100;
+                            try { // will error if no DXImageTransform
+                                value = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
+
+                            } catch(e) {
+                                try { // make sure its in the document
+                                    value = el.filters('alpha').opacity;
+                                } catch(err) {
+                                }
+                            }
+                            return value / 100;
+                        case 'float': // fix reserved word
+                            property = 'styleFloat'; // fall through
+                        default: 
+                            property = Y.Dom._toCamel(property);
+                            value = el[CURRENT_STYLE] ? el[CURRENT_STYLE][property] : null;
+                            return ( el.style[property] || value );
+                    }
+                };
+            }
+        }(),
     
         /**
          * Wrapper for setting style properties of HTMLElements.  Normalizes "opacity" across modern browsers.
@@ -200,35 +206,187 @@
          * @param {String} val The value to apply to the given property.
          */
         setStyle: function(el, property, val) {
-            property = toCamel(property);
-            
-            var f = function(element) {
-                setStyle(element, property, val);
-                
-            };
-            
-            Y.Dom.batch(el, f, Y.Dom, true);
+            Y.Dom.batch(el, Y.Dom._setStyle, { prop: property, val: val });
         },
+
+        _setStyle: function() {
+            if (isIE) {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+
+                    if (el) {
+                        switch (property) {
+                            case 'opacity':
+                                if ( lang.isString(el.style.filter) ) { // in case not appended
+                                    el.style.filter = 'alpha(opacity=' + val * 100 + ')';
+                                    
+                                    if (!el[CURRENT_STYLE] || !el[CURRENT_STYLE].hasLayout) {
+                                        el.style.zoom = 1; // when no layout or cant tell
+                                    }
+                                }
+                                break;
+                            case 'float':
+                                property = 'styleFloat';
+                            default:
+                            el.style[property] = val;
+                        }
+                    } else {
+                    }
+                };
+            } else {
+                return function(el, args) {
+                    var property = Y.Dom._toCamel(args.prop),
+                        val = args.val;
+                    if (el) {
+                        if (property == 'float') {
+                            property = 'cssFloat';
+                        }
+                        el.style[property] = val;
+                    } else {
+                    }
+                };
+            }
+
+        }(),
         
         /**
-         * Gets the current position of an element based on page coordinates.  Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
+         * Gets the current position of an element based on page coordinates. 
+         * Element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
          * @method getXY
-         * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM reference, or an Array of IDs and/or HTMLElements
+         * @param {String | HTMLElement | Array} el Accepts a string to use as an ID, an actual DOM
+         * reference, or an Array of IDs and/or HTMLElements
          * @return {Array} The XY position of the element(s)
          */
         getXY: function(el) {
-            var f = function(el) {
-                // has to be part of document to have pageXY
-                if ( (el.parentNode === null || el.offsetParent === null ||
-                        this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
-                    return false;
-                }
-                
-                return getXY(el);
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return Y.Dom.batch(el, Y.Dom._getXY);
         },
+
+        _canPosition: function(el) {
+            return ( Y.Dom._getStyle(el, 'display') !== 'none' && Y.Dom._inDoc(el) );
+        },
+
+        _getXY: function() {
+            if (document[DOCUMENT_ELEMENT][GET_BOUNDING_CLIENT_RECT]) {
+                return function(node) {
+                    var scrollLeft, scrollTop, box, doc,
+                        off1, off2, mode, bLeft, bTop,
+                        floor = Math.floor, // TODO: round?
+                        xy = false;
+
+                    if (Y.Dom._canPosition(node)) {
+                        box = node[GET_BOUNDING_CLIENT_RECT]();
+                        doc = node[OWNER_DOCUMENT];
+                        scrollLeft = Y.Dom.getDocumentScrollLeft(doc);
+                        scrollTop = Y.Dom.getDocumentScrollTop(doc);
+                        xy = [floor(box[LEFT]), floor(box[TOP])];
+
+                        if (isIE && UA.ie < 8) { // IE < 8: viewport off by 2
+                            off1 = 2;
+                            off2 = 2;
+                            mode = doc[COMPAT_MODE];
+                            bLeft = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_LEFT_WIDTH);
+                            bTop = _getComputedStyle(doc[DOCUMENT_ELEMENT], BORDER_TOP_WIDTH);
+
+                            if (UA.ie === 6) {
+                                if (mode !== _BACK_COMPAT) {
+                                    off1 = 0;
+                                    off2 = 0;
+                                }
+                            }
+                            
+                            if ((mode == _BACK_COMPAT)) {
+                                if (bLeft !== MEDIUM) {
+                                    off1 = parseInt(bLeft, 10);
+                                }
+                                if (bTop !== MEDIUM) {
+                                    off2 = parseInt(bTop, 10);
+                                }
+                            }
+                            
+                            xy[0] -= off1;
+                            xy[1] -= off2;
+
+                        }
+
+                        if ((scrollTop || scrollLeft)) {
+                            xy[0] += scrollLeft;
+                            xy[1] += scrollTop;
+                        }
+
+                        // gecko may return sub-pixel (non-int) values
+                        xy[0] = floor(xy[0]);
+                        xy[1] = floor(xy[1]);
+                    } else {
+                    }
+
+                    return xy;
+                };
+            } else {
+                return function(node) { // ff2, safari: manually calculate by crawling up offsetParents
+                    var docScrollLeft, docScrollTop,
+                        scrollTop, scrollLeft,
+                        bCheck,
+                        xy = false,
+                        parentNode = node;
+
+                    if  (Y.Dom._canPosition(node) ) {
+                        xy = [node[OFFSET_LEFT], node[OFFSET_TOP]];
+                        docScrollLeft = Y.Dom.getDocumentScrollLeft(node[OWNER_DOCUMENT]);
+                        docScrollTop = Y.Dom.getDocumentScrollTop(node[OWNER_DOCUMENT]);
+
+                        // TODO: refactor with !! or just falsey
+                        bCheck = ((isGecko || UA.webkit > 519) ? true : false);
+
+                        // TODO: worth refactoring for TOP/LEFT only?
+                        while ((parentNode = parentNode[OFFSET_PARENT])) {
+                            xy[0] += parentNode[OFFSET_LEFT];
+                            xy[1] += parentNode[OFFSET_TOP];
+                            if (bCheck) {
+                                xy = Y.Dom._calcBorders(parentNode, xy);
+                            }
+                        }
+
+                        // account for any scrolled ancestors
+                        if (Y.Dom._getStyle(node, POSITION) !== FIXED) {
+                            parentNode = node;
+
+                            while ((parentNode = parentNode[PARENT_NODE]) && parentNode[TAG_NAME]) {
+                                scrollTop = parentNode[SCROLL_TOP];
+                                scrollLeft = parentNode[SCROLL_LEFT];
+
+                                //Firefox does something funky with borders when overflow is not visible.
+                                if (isGecko && (Y.Dom._getStyle(parentNode, 'overflow') !== 'visible')) {
+                                        xy = Y.Dom._calcBorders(parentNode, xy);
+                                }
+
+                                if (scrollTop || scrollLeft) {
+                                    xy[0] -= scrollLeft;
+                                    xy[1] -= scrollTop;
+                                }
+                            }
+                            xy[0] += docScrollLeft;
+                            xy[1] += docScrollTop;
+
+                        } else {
+                            //Fix FIXED position -- add scrollbars
+                            if (isOpera) {
+                                xy[0] -= docScrollLeft;
+                                xy[1] -= docScrollTop;
+                            } else if (isSafari || isGecko) {
+                                xy[0] += docScrollLeft;
+                                xy[1] += docScrollTop;
+                            }
+                        }
+                        //Round the numbers so we get sane data back
+                        xy[0] = Math.floor(xy[0]);
+                        xy[1] = Math.floor(xy[1]);
+                    } else {
+                    }
+                    return xy;                
+                };
+            }
+        }(), // NOTE: Executing for loadtime branching
         
         /**
          * Gets the current X position of an element based on page coordinates.  The element must be part of the DOM tree to have page coordinates (display:none or elements not appended return false).
@@ -267,46 +425,59 @@
          * @param {Boolean} noRetry By default we try and set the position a second time if the first fails
          */
         setXY: function(el, pos, noRetry) {
-            var f = function(el) {
-                var style_pos = this.getStyle(el, 'position');
-                if (style_pos == 'static') { // default to relative
-                    this.setStyle(el, 'position', 'relative');
-                    style_pos = 'relative';
-                }
+            Y.Dom.batch(el, Y.Dom._setXY, { pos: pos, noRetry: noRetry });
+        },
 
-                var pageXY = this.getXY(el);
-                if (pageXY === false) { // has to be part of doc to have pageXY
-                    return false; 
-                }
-                
-                var delta = [ // assuming pixels; if not we will have to retry
-                    parseInt( this.getStyle(el, 'left'), 10 ),
-                    parseInt( this.getStyle(el, 'top'), 10 )
-                ];
-            
-                if ( isNaN(delta[0]) ) {// in case of 'auto'
-                    delta[0] = (style_pos == 'relative') ? 0 : el.offsetLeft;
-                } 
-                if ( isNaN(delta[1]) ) { // in case of 'auto'
-                    delta[1] = (style_pos == 'relative') ? 0 : el.offsetTop;
-                } 
+        _setXY: function(node, args) {
+            var pos = Y.Dom._getStyle(node, POSITION),
+                setStyle = Y.Dom.setStyle,
+                xy = args.pos,
+                noRetry = args.noRetry,
+
+                delta = [ // assuming pixels; if not we will have to retry
+                    parseInt( Y.Dom.getComputedStyle(node, LEFT), 10 ),
+                    parseInt( Y.Dom.getComputedStyle(node, TOP), 10 )
+                ],
+
+                currentXY,
+                newXY;
         
-                if (pos[0] !== null) { el.style.left = pos[0] - pageXY[0] + delta[0] + 'px'; }
-                if (pos[1] !== null) { el.style.top = pos[1] - pageXY[1] + delta[1] + 'px'; }
-              
-                if (!noRetry) {
-                    var newXY = this.getXY(el);
+            if (pos == 'static') { // default to relative
+                pos = RELATIVE;
+                setStyle(node, POSITION, pos);
+            }
 
-                    // if retry is true, try one more time if we miss 
-                   if ( (pos[0] !== null && newXY[0] != pos[0]) || 
-                        (pos[1] !== null && newXY[1] != pos[1]) ) {
-                       this.setXY(el, pos, true);
-                   }
-                }        
-        
-            };
+            currentXY = Y.Dom._getXY(node);
+
+            if (!xy || currentXY === false) { // has to be part of doc to have xy
+                return false; 
+            }
             
-            Y.Dom.batch(el, f, Y.Dom, true);
+            if ( isNaN(delta[0]) ) {// in case of 'auto'
+                delta[0] = (pos == RELATIVE) ? 0 : node[OFFSET_LEFT];
+            } 
+            if ( isNaN(delta[1]) ) { // in case of 'auto'
+                delta[1] = (pos == RELATIVE) ? 0 : node[OFFSET_TOP];
+            } 
+
+            if (xy[0] !== null) { // from setX
+                setStyle(node, LEFT, xy[0] - currentXY[0] + delta[0] + 'px');
+            }
+
+            if (xy[1] !== null) { // from setY
+                setStyle(node, TOP, xy[1] - currentXY[1] + delta[1] + 'px');
+            }
+          
+            if (!noRetry) {
+                newXY = Y.Dom._getXY(node);
+
+                // if retry is true, try one more time if we miss 
+               if ( (xy[0] !== null && newXY[0] != xy[0]) || 
+                    (xy[1] !== null && newXY[1] != xy[1]) ) {
+                   Y.Dom._setXY(node, { pos: xy, noRetry: true });
+               }
+            }        
+
         },
         
         /**
@@ -340,12 +511,12 @@
          */
         getRegion: function(el) {
             var f = function(el) {
-                if ( (el.parentNode === null || el.offsetParent === null ||
-                        this.getStyle(el, 'display') == 'none') && el != el.ownerDocument.body) {
-                    return false;
+                var region = false;
+                if ( Y.Dom._canPosition(el) ) {
+                    region = Y.Region.getRegion(el);
+                } else {
                 }
 
-                var region = Y.Region.getRegion(el);
                 return region;
             };
             
@@ -384,9 +555,11 @@
          * @param {String} tag (optional) The tag name of the elements being collected
          * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
          * @param {Function} apply (optional) A function to apply to each element when found 
+         * @param {Any} o (optional) An optional arg that is passed to the supplied method
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Array} An array of elements that have the given class name
          */
-        getElementsByClassName: function(className, tag, root, apply) {
+        getElementsByClassName: function(className, tag, root, apply, o, overrides) {
             className = lang.trim(className);
             tag = tag || '*';
             root = (root) ? Y.Dom.get(root) : null || document; 
@@ -396,17 +569,18 @@
 
             var nodes = [],
                 elements = root.getElementsByTagName(tag),
-                re = getClassRegEx(className);
+                hasClass = Y.Dom.hasClass;
 
             for (var i = 0, len = elements.length; i < len; ++i) {
-                if ( re.test(elements[i].className) ) {
+                if ( hasClass(elements[i], className) ) {
                     nodes[nodes.length] = elements[i];
-                    if (apply) {
-                        apply.call(elements[i], elements[i]);
-                    }
                 }
             }
             
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
             return nodes;
         },
 
@@ -418,13 +592,25 @@
          * @return {Boolean | Array} A boolean value or array of boolean values
          */
         hasClass: function(el, className) {
-            var re = getClassRegEx(className);
+            return Y.Dom.batch(el, Y.Dom._hasClass, className);
+        },
 
-            var f = function(el) {
-                return re.test(el.className);
-            };
+        _hasClass: function(el, className) {
+            var ret = false,
+                current;
             
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                if (className.exec) {
+                    ret = className.test(current);
+                } else {
+                    ret = className && (SPACE + current + SPACE).
+                        indexOf(SPACE + className + SPACE) > -1;
+                }
+            } else {
+            }
+
+            return ret;
         },
     
         /**
@@ -435,17 +621,23 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         addClass: function(el, className) {
-            var f = function(el) {
-                if (this.hasClass(el, className)) {
-                    return false; // already present
+            return Y.Dom.batch(el, Y.Dom._addClass, className);
+        },
+
+        _addClass: function(el, className) {
+            var ret = false,
+                current;
+
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                if ( !Y.Dom._hasClass(el, className) ) {
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(current + SPACE + className));
+                    ret = true;
                 }
-                
-                
-                el.className = lang.trim([el.className, className].join(' '));
-                return true;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            } else {
+            }
+
+            return ret;
         },
     
         /**
@@ -456,30 +648,34 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         removeClass: function(el, className) {
-            var re = getClassRegEx(className);
-            
-            var f = function(el) {
-                var ret = false,
-                    current = el.className;
+            return Y.Dom.batch(el, Y.Dom._removeClass, className);
+        },
+        
+        _removeClass: function(el, className) {
+            var ret = false,
+                current,
+                newClass,
+                attr;
 
-                if (className && current && this.hasClass(el, className)) {
-                    
-                    el.className = current.replace(re, ' ');
-                    if ( this.hasClass(el, className) ) { // in case of multiple adjacent
-                        this.removeClass(el, className);
-                    }
+            if (el && className) {
+                current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                Y.Dom.setAttribute(el, CLASS_NAME, current.replace(Y.Dom._getClassRegex(className), EMPTY));
 
-                    el.className = lang.trim(el.className); // remove any trailing spaces
-                    if (el.className === '') { // remove class attribute if empty
-                        var attr = (el.hasAttribute) ? 'class' : 'className';
+                newClass = Y.Dom.getAttribute(el, CLASS_NAME);
+                if (current !== newClass) { // else nothing changed
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(newClass)); // trim after comparing to current class
+                    ret = true;
+
+                    if (Y.Dom.getAttribute(el, CLASS_NAME) === '') { // remove class attribute if empty
+                        attr = (el.hasAttribute && el.hasAttribute(_CLASS)) ? _CLASS : CLASS_NAME;
                         el.removeAttribute(attr);
                     }
-                    ret = true;
-                }                 
-                return ret;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+                }
+
+            } else {
+            }
+
+            return ret;
         },
         
         /**
@@ -492,30 +688,39 @@
          * @return {Boolean | Array} A pass/fail boolean or array of booleans
          */
         replaceClass: function(el, oldClassName, newClassName) {
-            if (!newClassName || oldClassName === newClassName) { // avoid infinite loop
-                return false;
-            }
-            
-            var re = getClassRegEx(oldClassName);
+            return Y.Dom.batch(el, Y.Dom._replaceClass, { from: oldClassName, to: newClassName });
+        },
 
-            var f = function(el) {
-            
-                if ( !this.hasClass(el, oldClassName) ) {
-                    this.addClass(el, newClassName); // just add it if nothing to replace
-                    return true; // NOTE: return
-                }
-            
-                el.className = el.className.replace(re, ' ' + newClassName + ' ');
+        _replaceClass: function(el, classObj) {
+            var className,
+                from,
+                to,
+                ret = false,
+                current;
 
-                if ( this.hasClass(el, oldClassName) ) { // in case of multiple adjacent
-                    this.removeClass(el, oldClassName);
+            if (el && classObj) {
+                from = classObj.from;
+                to = classObj.to;
+
+                if (!to) {
+                    ret = false;
+                }  else if (!from) { // just add if no "from"
+                    ret = Y.Dom._addClass(el, classObj.to);
+                } else if (from !== to) { // else nothing to replace
+                    // May need to lead with DBLSPACE?
+                    current = Y.Dom.getAttribute(el, CLASS_NAME) || EMPTY;
+                    className = (SPACE + current.replace(Y.Dom._getClassRegex(from), SPACE + to)).
+                               split(Y.Dom._getClassRegex(to));
+
+                    // insert to into what would have been the first occurrence slot
+                    className.splice(1, 0, SPACE + to);
+                    Y.Dom.setAttribute(el, CLASS_NAME, trim(className.join(EMPTY)));
+                    ret = true;
                 }
+            } else {
+            }
 
-                el.className = lang.trim(el.className); // remove any trailing spaces
-                return true;
-            };
-            
-            return Y.Dom.batch(el, f, Y.Dom, true);
+            return ret;
         },
         
         /**
@@ -531,11 +736,15 @@
             var f = function(el) {
                 if (el && el.id) { // do not override existing ID
                     return el.id;
-                } 
+                }
 
                 var id = prefix + YAHOO.env._id_counter++;
 
                 if (el) {
+                    if (el[OWNER_DOCUMENT].getElementById(id)) { // in case one already exists
+                        // use failed id plus prefix to help ensure uniqueness
+                        return Y.Dom.generateId(el, id + prefix);
+                    }
                     el.id = id;
                 }
                 
@@ -559,7 +768,7 @@
             
             var ret = false;
 
-            if ( (haystack && needle) && (haystack.nodeType && needle.nodeType) ) {
+            if ( (haystack && needle) && (haystack[NODE_TYPE] && needle[NODE_TYPE]) ) {
                 if (haystack.contains && haystack !== needle) { // contains returns true when equal
                     ret = haystack.contains(needle);
                 }
@@ -575,11 +784,22 @@
          * Determines whether an HTMLElement is present in the current document.
          * @method inDocument         
          * @param {String | HTMLElement} el The element to search for
+         * @param {Object} doc An optional document to search, defaults to element's owner document 
          * @return {Boolean} Whether or not the element is present in the current document
          */
-        inDocument: function(el) {
-            return this.isAncestor(document.documentElement, el);
+        inDocument: function(el, doc) {
+            return Y.Dom._inDoc(Y.Dom.get(el), doc);
         },
+
+        _inDoc: function(el, doc) {
+            var ret = false;
+            if (el && el[TAG_NAME]) {
+                doc = doc || el[OWNER_DOCUMENT]; 
+                ret = Y.Dom.isAncestor(doc[DOCUMENT_ELEMENT], el);
+            } else {
+            }
+            return ret;
+        },
         
         /**
          * Returns a array of HTMLElements that pass the test applied by supplied boolean method.
@@ -593,9 +813,11 @@
          * @param {String} tag (optional) The tag name of the elements being collected
          * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
          * @param {Function} apply (optional) A function to apply to each element when found 
+         * @param {Any} o (optional) An optional arg that is passed to the supplied method
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Array} Array of HTMLElements
          */
-        getElementsBy: function(method, tag, root, apply) {
+        getElementsBy: function(method, tag, root, apply, o, overrides, firstOnly) {
             tag = tag || '*';
             root = (root) ? Y.Dom.get(root) : null || document; 
 
@@ -608,45 +830,61 @@
             
             for (var i = 0, len = elements.length; i < len; ++i) {
                 if ( method(elements[i]) ) {
-                    nodes[nodes.length] = elements[i];
-                    if (apply) {
-                        apply(elements[i]);
+                    if (firstOnly) {
+                        nodes = elements[i]; 
+                        break;
+                    } else {
+                        nodes[nodes.length] = elements[i];
                     }
                 }
             }
 
+            if (apply) {
+                Y.Dom.batch(nodes, apply, o, overrides);
+            }
+
             
             return nodes;
         },
         
         /**
+         * Returns the first HTMLElement that passes the test applied by the supplied boolean method.
+         * @method getElementBy
+         * @param {Function} method - A boolean method for testing elements which receives the element as its only argument.
+         * @param {String} tag (optional) The tag name of the elements being collected
+         * @param {String | HTMLElement} root (optional) The HTMLElement or an ID to use as the starting point 
+         * @return {HTMLElement}
+         */
+        getElementBy: function(method, tag, root) {
+            return Y.Dom.getElementsBy(method, tag, root, null, null, null, true); 
+        },
+
+        /**
          * Runs the supplied method against each item in the Collection/Array.
          * The method is called with the element(s) as the first arg, and the optional param as the second ( method(el, o) ).
          * @method batch
          * @param {String | HTMLElement | Array} el (optional) An element or array of elements to apply the method to
          * @param {Function} method The method to apply to the element(s)
          * @param {Any} o (optional) An optional arg that is passed to the supplied method
-         * @param {Boolean} override (optional) Whether or not to override the scope of "method" with "o"
+         * @param {Boolean} overrides (optional) Whether or not to override the scope of "method" with "o"
          * @return {Any | Array} The return value(s) from the supplied method
          */
-        batch: function(el, method, o, override) {
-            el = (el && (el.tagName || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+        batch: function(el, method, o, overrides) {
+            var collection = [],
+                scope = (overrides) ? o : window;
+                
+            el = (el && (el[TAG_NAME] || el.item)) ? el : Y.Dom.get(el); // skip get() when possible
+            if (el && method) {
+                if (el[TAG_NAME] || el.length === undefined) { // element or not array-like 
+                    return method.call(scope, el, o);
+                } 
 
-            if (!el || !method) {
+                for (var i = 0; i < el.length; ++i) {
+                    collection[collection.length] = method.call(scope, el[i], o);
+                }
+            } else {
                 return false;
             } 
-            var scope = (override) ? o : window;
-            
-            if (el.tagName || el.length === undefined) { // element or not array-like 
-                return method.call(scope, el, o);
-            } 
-
-            var collection = [];
-            
-            for (var i = 0, len = el.length; i < len; ++i) {
-                collection[collection.length] = method.call(scope, el[i], o);
-            }
-            
             return collection;
         },
         
@@ -656,9 +894,9 @@
          * @return {Int} The height of the actual document (which includes the body and its margin).
          */
         getDocumentHeight: function() {
-            var scrollHeight = (document.compatMode != 'CSS1Compat') ? document.body.scrollHeight : document.documentElement.scrollHeight;
+            var scrollHeight = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollHeight : documentElement.scrollHeight,
+                h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
 
-            var h = Math.max(scrollHeight, Y.Dom.getViewportHeight());
             return h;
         },
         
@@ -668,8 +906,8 @@
          * @return {Int} The width of the actual document (which includes the body and its margin).
          */
         getDocumentWidth: function() {
-            var scrollWidth = (document.compatMode != 'CSS1Compat') ? document.body.scrollWidth : document.documentElement.scrollWidth;
-            var w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
+            var scrollWidth = (document[COMPAT_MODE] != CSS1_COMPAT || isSafari) ? document.body.scrollWidth : documentElement.scrollWidth,
+                w = Math.max(scrollWidth, Y.Dom.getViewportWidth());
             return w;
         },
 
@@ -679,12 +917,12 @@
          * @return {Int} The height of the viewable area of the page (excludes scrollbars).
          */
         getViewportHeight: function() {
-            var height = self.innerHeight; // Safari, Opera
-            var mode = document.compatMode;
+            var height = self.innerHeight, // Safari, Opera
+                mode = document[COMPAT_MODE];
         
             if ( (mode || isIE) && !isOpera ) { // IE, Gecko
-                height = (mode == 'CSS1Compat') ?
-                        document.documentElement.clientHeight : // Standards
+                height = (mode == CSS1_COMPAT) ?
+                        documentElement.clientHeight : // Standards
                         document.body.clientHeight; // Quirks
             }
         
@@ -698,12 +936,12 @@
          */
         
         getViewportWidth: function() {
-            var width = self.innerWidth;  // Safari
-            var mode = document.compatMode;
+            var width = self.innerWidth,  // Safari
+                mode = document[COMPAT_MODE];
             
             if (mode || isIE) { // IE, Gecko, Opera
-                width = (mode == 'CSS1Compat') ?
-                        document.documentElement.clientWidth : // Standards
+                width = (mode == CSS1_COMPAT) ?
+                        documentElement.clientWidth : // Standards
                         document.body.clientWidth; // Quirks
             }
             return width;
@@ -718,8 +956,8 @@
          * @return {Object} HTMLElement or null if not found
          */
         getAncestorBy: function(node, method) {
-            while ( (node = node.parentNode) ) { // NOTE: assignment
-                if ( testElement(node, method) ) {
+            while ( (node = node[PARENT_NODE]) ) { // NOTE: assignment
+                if ( Y.Dom._testElement(node, method) ) {
                     return node;
                 }
             } 
@@ -756,7 +994,7 @@
                 return null;
             }
             var method = function(el) {
-                 return el.tagName && el.tagName.toUpperCase() == tagName.toUpperCase();
+                 return el[TAG_NAME] && el[TAG_NAME].toUpperCase() == tagName.toUpperCase();
             };
 
             return Y.Dom.getAncestorBy(node, method);
@@ -775,7 +1013,7 @@
         getPreviousSiblingBy: function(node, method) {
             while (node) {
                 node = node.previousSibling;
-                if ( testElement(node, method) ) {
+                if ( Y.Dom._testElement(node, method) ) {
                     return node;
                 }
             }
@@ -810,7 +1048,7 @@
         getNextSiblingBy: function(node, method) {
             while (node) {
                 node = node.nextSibling;
-                if ( testElement(node, method) ) {
+                if ( Y.Dom._testElement(node, method) ) {
                     return node;
                 }
             }
@@ -841,7 +1079,7 @@
          * @return {Object} HTMLElement or null if not found
          */
         getFirstChildBy: function(node, method) {
-            var child = ( testElement(node.firstChild, method) ) ? node.firstChild : null;
+            var child = ( Y.Dom._testElement(node.firstChild, method) ) ? node.firstChild : null;
             return child || Y.Dom.getNextSiblingBy(node.firstChild, method);
         }, 
 
@@ -871,7 +1109,7 @@
             if (!node) {
                 return null;
             }
-            var child = ( testElement(node.lastChild, method) ) ? node.lastChild : null;
+            var child = ( Y.Dom._testElement(node.lastChild, method) ) ? node.lastChild : null;
             return child || Y.Dom.getPreviousSiblingBy(node.lastChild, method);
         }, 
 
@@ -895,8 +1133,8 @@
          * @return {Array} A static array of HTMLElements
          */
         getChildrenBy: function(node, method) {
-            var child = Y.Dom.getFirstChildBy(node, method);
-            var children = child ? [child] : [];
+            var child = Y.Dom.getFirstChildBy(node, method),
+                children = child ? [child] : [];
 
             Y.Dom.getNextSiblingBy(child, function(node) {
                 if ( !method || method(node) ) {
@@ -921,7 +1159,7 @@
 
             return Y.Dom.getChildrenBy(node);
         },
- 
+
         /**
          * Returns the left scroll value of the document 
          * @method getDocumentScrollLeft
@@ -930,7 +1168,7 @@
          */
         getDocumentScrollLeft: function(doc) {
             doc = doc || document;
-            return Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollLeft, doc.body.scrollLeft);
         }, 
 
         /**
@@ -941,7 +1179,7 @@
          */
         getDocumentScrollTop: function(doc) {
             doc = doc || document;
-            return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
+            return Math.max(doc[DOCUMENT_ELEMENT].scrollTop, doc.body.scrollTop);
         },
 
         /**
@@ -955,11 +1193,11 @@
             newNode = Y.Dom.get(newNode); 
             referenceNode = Y.Dom.get(referenceNode); 
             
-            if (!newNode || !referenceNode || !referenceNode.parentNode) {
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
                 return null;
             }       
 
-            return referenceNode.parentNode.insertBefore(newNode, referenceNode); 
+            return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode); 
         },
 
         /**
@@ -973,14 +1211,14 @@
             newNode = Y.Dom.get(newNode); 
             referenceNode = Y.Dom.get(referenceNode); 
             
-            if (!newNode || !referenceNode || !referenceNode.parentNode) {
+            if (!newNode || !referenceNode || !referenceNode[PARENT_NODE]) {
                 return null;
             }       
 
             if (referenceNode.nextSibling) {
-                return referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling); 
+                return referenceNode[PARENT_NODE].insertBefore(newNode, referenceNode.nextSibling); 
             } else {
-                return referenceNode.parentNode.appendChild(newNode);
+                return referenceNode[PARENT_NODE].appendChild(newNode);
             }
         },
 
@@ -996,62 +1234,114 @@
                 b = Y.Dom.getViewportHeight() + t;
 
             return new Y.Region(t, r, b, l);
-        }
-    };
-    
-    var getXY = function() {
-        if (document.documentElement.getBoundingClientRect) { // IE
-            return function(el) {
-                var box = el.getBoundingClientRect(),
-                    round = Math.round;
+        },
 
-                var rootNode = el.ownerDocument;
-                return [round(box.left + Y.Dom.getDocumentScrollLeft(rootNode)), round(box.top +
-                        Y.Dom.getDocumentScrollTop(rootNode))];
-            };
-        } else {
-            return function(el) { // manually calculate by crawling up offsetParents
-                var pos = [el.offsetLeft, el.offsetTop];
-                var parentNode = el.offsetParent;
+        /**
+         * Provides a normalized attribute interface. 
+         * @method setAttibute
+         * @param {String | HTMLElement} el The target element for the attribute.
+         * @param {String} attr The attribute to set.
+         * @param {String} val The value of the attribute.
+         */
+        setAttribute: function(el, attr, val) {
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+            el.setAttribute(attr, val);
+        },
 
-                // safari: subtract body offsets if el is abs (or any offsetParent), unless body is offsetParent
-                var accountForBody = (isSafari &&
-                        Y.Dom.getStyle(el, 'position') == 'absolute' &&
-                        el.offsetParent == el.ownerDocument.body);
 
-                if (parentNode != el) {
-                    while (parentNode) {
-                        pos[0] += parentNode.offsetLeft;
-                        pos[1] += parentNode.offsetTop;
-                        if (!accountForBody && isSafari && 
-                                Y.Dom.getStyle(parentNode,'position') == 'absolute' ) { 
-                            accountForBody = true;
-                        }
-                        parentNode = parentNode.offsetParent;
+        /**
+         * Provides a normalized attribute interface. 
+         * @method getAttibute
+         * @param {String | HTMLElement} el The target element for the attribute.
+         * @param {String} attr The attribute to get.
+         * @return {String} The current value of the attribute. 
+         */
+        getAttribute: function(el, attr) {
+            attr = Y.Dom.CUSTOM_ATTRIBUTES[attr] || attr;
+            return el.getAttribute(attr);
+        },
+
+        _toCamel: function(property) {
+            var c = propertyCache;
+
+            function tU(x,l) {
+                return l.toUpperCase();
+            }
+
+            return c[property] || (c[property] = property.indexOf('-') === -1 ? 
+                                    property :
+                                    property.replace( /-([a-z])/gi, tU ));
+        },
+
+        _getClassRegex: function(className) {
+            var re;
+            if (className !== undefined) { // allow empty string to pass
+                if (className.exec) { // already a RegExp
+                    re = className;
+                } else {
+                    re = reCache[className];
+                    if (!re) {
+                        // escape special chars (".", "[", etc.)
+                        className = className.replace(Y.Dom._patterns.CLASS_RE_TOKENS, '\\$1');
+                        re = reCache[className] = new RegExp(C_START + className + C_END, G);
                     }
                 }
+            }
+            return re;
+        },
 
-                if (accountForBody) { //safari doubles in this case
-                    pos[0] -= el.ownerDocument.body.offsetLeft;
-                    pos[1] -= el.ownerDocument.body.offsetTop;
-                } 
-                parentNode = el.parentNode;
+        _patterns: {
+            ROOT_TAG: /^body|html$/i, // body for quirks mode, html for standards,
+            CLASS_RE_TOKENS: /([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g
+        },
 
-                // account for any scrolled ancestors
-                while ( parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName) ) 
-                {
-                    if (parentNode.scrollTop || parentNode.scrollLeft) {
-                        pos[0] -= parentNode.scrollLeft;
-                        pos[1] -= parentNode.scrollTop;
-                    }
-                    
-                    parentNode = parentNode.parentNode; 
+
+        _testElement: function(node, method) {
+            return node && node[NODE_TYPE] == 1 && ( !method || method(node) );
+        },
+
+        _calcBorders: function(node, xy2) {
+            var t = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_TOP_WIDTH), 10) || 0,
+                l = parseInt(Y.Dom[GET_COMPUTED_STYLE](node, BORDER_LEFT_WIDTH), 10) || 0;
+            if (isGecko) {
+                if (RE_TABLE.test(node[TAG_NAME])) {
+                    t = 0;
+                    l = 0;
                 }
+            }
+            xy2[0] += l;
+            xy2[1] += t;
+            return xy2;
+        }
+    };
+        
+    var _getComputedStyle = Y.Dom[GET_COMPUTED_STYLE];
+    // fix opera computedStyle default color unit (convert to rgb)
+    if (UA.opera) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+            if (RE_COLOR.test(att)) {
+                val = Y.Dom.Color.toRGB(val);
+            }
 
-                return pos;
-            };
-        }
-    }() // NOTE: Executing for loadtime branching
+            return val;
+        };
+
+    }
+
+    // safari converts transparent to rgba(), others use "transparent"
+    if (UA.webkit) {
+        Y.Dom[GET_COMPUTED_STYLE] = function(node, att) {
+            var val = _getComputedStyle(node, att);
+
+            if (val === 'rgba(0, 0, 0, 0)') {
+                val = 'transparent'; 
+            }
+
+            return val;
+        };
+
+    }
 })();
 /**
  * A region is a representation of an object on a grid.  It is defined
@@ -1075,6 +1365,13 @@
     this.top = t;
     
     /**
+     * The region's top extent
+     * @property y
+     * @type Int
+     */
+    this.y = t;
+    
+    /**
      * The region's top extent as index, for symmetry with set/getXY
      * @property 1
      * @type Int
@@ -1103,11 +1400,32 @@
     this.left = l;
     
     /**
+     * The region's left extent
+     * @property x
+     * @type Int
+     */
+    this.x = l;
+    
+    /**
      * The region's left extent as index, for symmetry with set/getXY
      * @property 0
      * @type Int
      */
     this[0] = l;
+
+    /**
+     * The region's total width 
+     * @property width 
+     * @type Int
+     */
+    this.width = this.right - this.left;
+
+    /**
+     * The region's total height 
+     * @property height 
+     * @type Int
+     */
+    this.height = this.bottom - this.top;
 };
 
 /**
@@ -1141,10 +1459,10 @@
  * @return {Region}        The overlap region, or null if there is no overlap
  */
 YAHOO.util.Region.prototype.intersect = function(region) {
-    var t = Math.max( this.top,    region.top    );
-    var r = Math.min( this.right,  region.right  );
-    var b = Math.min( this.bottom, region.bottom );
-    var l = Math.max( this.left,   region.left   );
+    var t = Math.max( this.top,    region.top    ),
+        r = Math.min( this.right,  region.right  ),
+        b = Math.min( this.bottom, region.bottom ),
+        l = Math.max( this.left,   region.left   );
     
     if (b >= t && r >= l) {
         return new YAHOO.util.Region(t, r, b, l);
@@ -1161,10 +1479,10 @@
  * @return {Region}        The union region
  */
 YAHOO.util.Region.prototype.union = function(region) {
-    var t = Math.min( this.top,    region.top    );
-    var r = Math.max( this.right,  region.right  );
-    var b = Math.max( this.bottom, region.bottom );
-    var l = Math.min( this.left,   region.left   );
+    var t = Math.min( this.top,    region.top    ),
+        r = Math.max( this.right,  region.right  ),
+        b = Math.max( this.bottom, region.bottom ),
+        l = Math.min( this.left,   region.left   );
 
     return new YAHOO.util.Region(t, r, b, l);
 };
@@ -1180,6 +1498,8 @@
              ", right: "   + this.right  + 
              ", bottom: "  + this.bottom + 
              ", left: "    + this.left   + 
+             ", height: "  + this.height + 
+             ", width: "    + this.width   + 
              "}" );
 };
 
@@ -1191,13 +1511,12 @@
  * @static
  */
 YAHOO.util.Region.getRegion = function(el) {
-    var p = YAHOO.util.Dom.getXY(el);
+    var p = YAHOO.util.Dom.getXY(el),
+        t = p[1],
+        r = p[0] + el.offsetWidth,
+        b = p[1] + el.offsetHeight,
+        l = p[0];
 
-    var t = p[1];
-    var r = p[0] + el.offsetWidth;
-    var b = p[1] + el.offsetHeight;
-    var l = p[0];
-
     return new YAHOO.util.Region(t, r, b, l);
 };
 
@@ -1219,23 +1538,262 @@
       y = x[1]; // dont blow away x yet
       x = x[0];
    }
-   
-    /**
-     * The X position of the point, which is also the right, left and index zero (for Dom.getXY symmetry)
-     * @property x
-     * @type Int
-     */
-
-    this.x = this.right = this.left = this[0] = x;
-     
-    /**
-     * The Y position of the point, which is also the top, bottom and index one (for Dom.getXY symmetry)
-     * @property y
-     * @type Int
-     */
-    this.y = this.top = this.bottom = this[1] = y;
+ 
+    YAHOO.util.Point.superclass.constructor.call(this, y, x, y, x);
 };
 
-YAHOO.util.Point.prototype = new YAHOO.util.Region();
+YAHOO.extend(YAHOO.util.Point, YAHOO.util.Region);
 
-YAHOO.register("dom", YAHOO.util.Dom, {version: "2.6.0", build: "1321"});
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var Y = YAHOO.util, 
+    CLIENT_TOP = 'clientTop',
+    CLIENT_LEFT = 'clientLeft',
+    PARENT_NODE = 'parentNode',
+    RIGHT = 'right',
+    HAS_LAYOUT = 'hasLayout',
+    PX = 'px',
+    OPACITY = 'opacity',
+    AUTO = 'auto',
+    BORDER_LEFT_WIDTH = 'borderLeftWidth',
+    BORDER_TOP_WIDTH = 'borderTopWidth',
+    BORDER_RIGHT_WIDTH = 'borderRightWidth',
+    BORDER_BOTTOM_WIDTH = 'borderBottomWidth',
+    VISIBLE = 'visible',
+    TRANSPARENT = 'transparent',
+    HEIGHT = 'height',
+    WIDTH = 'width',
+    STYLE = 'style',
+    CURRENT_STYLE = 'currentStyle',
+
+// IE getComputedStyle
+// TODO: unit-less lineHeight (e.g. 1.22)
+    re_size = /^width|height$/,
+    re_unit = /^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,
+
+    ComputedStyle = {
+        get: function(el, property) {
+            var value = '',
+                current = el[CURRENT_STYLE][property];
+
+            if (property === OPACITY) {
+                value = Y.Dom.getStyle(el, OPACITY);        
+            } else if (!current || (current.indexOf && current.indexOf(PX) > -1)) { // no need to convert
+                value = current;
+            } else if (Y.Dom.IE_COMPUTED[property]) { // use compute function
+                value = Y.Dom.IE_COMPUTED[property](el, property);
+            } else if (re_unit.test(current)) { // convert to pixel
+                value = Y.Dom.IE.ComputedStyle.getPixel(el, property);
+            } else {
+                value = current;
+            }
+
+            return value;
+        },
+
+        getOffset: function(el, prop) {
+            var current = el[CURRENT_STYLE][prop],                        // value of "width", "top", etc.
+                capped = prop.charAt(0).toUpperCase() + prop.substr(1), // "Width", "Top", etc.
+                offset = 'offset' + capped,                             // "offsetWidth", "offsetTop", etc.
+                pixel = 'pixel' + capped,                               // "pixelWidth", "pixelTop", etc.
+                value = '',
+                actual;
+
+            if (current == AUTO) {
+                actual = el[offset]; // offsetHeight/Top etc.
+                if (actual === undefined) { // likely "right" or "bottom"
+                    value = 0;
+                }
+
+                value = actual;
+                if (re_size.test(prop)) { // account for box model diff 
+                    el[STYLE][prop] = actual; 
+                    if (el[offset] > actual) {
+                        // the difference is padding + border (works in Standards & Quirks modes)
+                        value = actual - (el[offset] - actual);
+                    }
+                    el[STYLE][prop] = AUTO; // revert to auto
+                }
+            } else { // convert units to px
+                if (!el[STYLE][pixel] && !el[STYLE][prop]) { // need to map style.width to currentStyle (no currentStyle.pixelWidth)
+                    el[STYLE][prop] = current;              // no style.pixelWidth if no style.width
+                }
+                value = el[STYLE][pixel];
+            }
+            return value + PX;
+        },
+
+        getBorderWidth: function(el, property) {
+            // clientHeight/Width = paddingBox (e.g. offsetWidth - borderWidth)
+            // clientTop/Left = borderWidth
+            var value = null;
+            if (!el[CURRENT_STYLE][HAS_LAYOUT]) { // TODO: unset layout?
+                el[STYLE].zoom = 1; // need layout to measure client
+            }
+
+            switch(property) {
+                case BORDER_TOP_WIDTH:
+                    value = el[CLIENT_TOP];
+                    break;
+                case BORDER_BOTTOM_WIDTH:
+                    value = el.offsetHeight - el.clientHeight - el[CLIENT_TOP];
+                    break;
+                case BORDER_LEFT_WIDTH:
+                    value = el[CLIENT_LEFT];
+                    break;
+                case BORDER_RIGHT_WIDTH:
+                    value = el.offsetWidth - el.clientWidth - el[CLIENT_LEFT];
+                    break;
+            }
+            return value + PX;
+        },
+
+        getPixel: function(node, att) {
+            // use pixelRight to convert to px
+            var val = null,
+                styleRight = node[CURRENT_STYLE][RIGHT],
+                current = node[CURRENT_STYLE][att];
+
+            node[STYLE][RIGHT] = current;
+            val = node[STYLE].pixelRight;
+            node[STYLE][RIGHT] = styleRight; // revert
+
+            return val + PX;
+        },
+
+        getMargin: function(node, att) {
+            var val;
+            if (node[CURRENT_STYLE][att] == AUTO) {
+                val = 0 + PX;
+            } else {
+                val = Y.Dom.IE.ComputedStyle.getPixel(node, att);
+            }
+            return val;
+        },
+
+        getVisibility: function(node, att) {
+            var current;
+            while ( (current = node[CURRENT_STYLE]) && current[att] == 'inherit') { // NOTE: assignment in test
+                node = node[PARENT_NODE];
+            }
+            return (current) ? current[att] : VISIBLE;
+        },
+
+        getColor: function(node, att) {
+            return Y.Dom.Color.toRGB(node[CURRENT_STYLE][att]) || TRANSPARENT;
+        },
+
+        getBorderColor: function(node, att) {
+            var current = node[CURRENT_STYLE],
+                val = current[att] || current.color;
+            return Y.Dom.Color.toRGB(Y.Dom.Color.toHex(val));
+        }
+
+    },
+
+//fontSize: getPixelFont,
+    IEComputed = {};
+
+IEComputed.top = IEComputed.right = IEComputed.bottom = IEComputed.left = 
+        IEComputed[WIDTH] = IEComputed[HEIGHT] = ComputedStyle.getOffset;
+
+IEComputed.color = ComputedStyle.getColor;
+
+IEComputed[BORDER_TOP_WIDTH] = IEComputed[BORDER_RIGHT_WIDTH] =
+        IEComputed[BORDER_BOTTOM_WIDTH] = IEComputed[BORDER_LEFT_WIDTH] =
+        ComputedStyle.getBorderWidth;
+
+IEComputed.marginTop = IEComputed.marginRight = IEComputed.marginBottom =
+        IEComputed.marginLeft = ComputedStyle.getMargin;
+
+IEComputed.visibility = ComputedStyle.getVisibility;
+IEComputed.borderColor = IEComputed.borderTopColor =
+        IEComputed.borderRightColor = IEComputed.borderBottomColor =
+        IEComputed.borderLeftColor = ComputedStyle.getBorderColor;
+
+Y.Dom.IE_COMPUTED = IEComputed;
+Y.Dom.IE_ComputedStyle = ComputedStyle;
+})();
+(function() {
+/**
+ * Add style management functionality to DOM.
+ * @module dom
+ * @for Dom
+ */
+
+var TO_STRING = 'toString',
+    PARSE_INT = parseInt,
+    RE = RegExp,
+    Y = YAHOO.util;
+
+Y.Dom.Color = {
+    KEYWORDS: {
+        black: '000',
+        silver: 'c0c0c0',
+        gray: '808080',
+        white: 'fff',
+        maroon: '800000',
+        red: 'f00',
+        purple: '800080',
+        fuchsia: 'f0f',
+        green: '008000',
+        lime: '0f0',
+        olive: '808000',
+        yellow: 'ff0',
+        navy: '000080',
+        blue: '00f',
+        teal: '008080',
+        aqua: '0ff'
+    },
+
+    re_RGB: /^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,
+    re_hex: /^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,
+    re_hex3: /([0-9A-F])/gi,
+
+    toRGB: function(val) {
+        if (!Y.Dom.Color.re_RGB.test(val)) {
+            val = Y.Dom.Color.toHex(val);
+        }
+
+        if(Y.Dom.Color.re_hex.exec(val)) {
+            val = 'rgb(' + [
+                PARSE_INT(RE.$1, 16),
+                PARSE_INT(RE.$2, 16),
+                PARSE_INT(RE.$3, 16)
+            ].join(', ') + ')';
+        }
+        return val;
+    },
+
+    toHex: function(val) {
+        val = Y.Dom.Color.KEYWORDS[val] || val;
+        if (Y.Dom.Color.re_RGB.exec(val)) {
+            var r = (RE.$1.length === 1) ? '0' + RE.$1 : Number(RE.$1),
+                g = (RE.$2.length === 1) ? '0' + RE.$2 : Number(RE.$2),
+                b = (RE.$3.length === 1) ? '0' + RE.$3 : Number(RE.$3);
+
+            val = [
+                r[TO_STRING](16),
+                g[TO_STRING](16),
+                b[TO_STRING](16)
+            ].join('');
+        }
+
+        if (val.length < 6) {
+            val = val.replace(Y.Dom.Color.re_hex3, '$1$1');
+        }
+
+        if (val !== 'transparent' && val.indexOf('#') < 0) {
+            val = '#' + val;
+        }
+
+        return val.toLowerCase();
+    }
+};
+}());
+YAHOO.register("dom", YAHOO.util.Dom, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/dragdrop/README
===================================================================
--- trunk/root/static/yui/dragdrop/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dragdrop/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,180 +0,0 @@
-Drag and Drop Release Notes
-
-2.6.0
-    * Fixed issue with loop when mouseup occured outside of an iframe in Internet Explorer
-    * Added useShim flag to DragDropMgr to place a shim over the page during a drag operation.
-        It must be set by hand to be backward compatible. This will allow a draggable element
-        to pass over things like an IFRAME without interrupting the drag movement.
-            YAHOO.util.DDM.useShim = true;
-
-2.5.2
-    * Fixed iframe src attribute for DDProxy (SSL Error in IE6)
-    * Fixed typos in documentation
-    * Fixed potential Stack Overflow with mousedown threshold
-
-2.5.1
-    * No change
-
-2.5.0
-    * Added CustomEvents in addition to method overrides
-        (See API Docs for more information)
-    * Added an IFRAME element to the proxy div (only in IE) to keep select
-        elements and other object from bleeding through
-
-2.4.0
-  * Added configuration option called "dragOnly". If dragOnly is set to true,
-    all event in the fireEvents method will not fire. These events are:
-        onInvalidDrop
-        b4DragOut & onDragOut
-        onDragEnter
-        b4DragOver & onDragOver
-        b4DragDrop & onDragDrop
-    This config option should be used to drag elements that have no need for
-        drop interaction. They are elements that just need to move.
-
-2.3.1
-  * No change
-
-2.3.0
-  * YAHOO.util.DragDropMgr.stopDrag is now public, and can be used to cancel
-    a drag in progress.  An optional "silent" flag was added to skip the
-    onMouseUp and endDrag functions when needed (eliminating the need to
-    supply mouseup page coordinates to these functions).
-  * DDProxy: the position of the proxy is not set before the drag is confirmed,
-    preventing auto-scroll from distrupting the user experience.
-  * Modified the default proxy so that IE properly registers the proxy as
-    the event target during the drag.
-  * If a dd instance is created using a dom reference rather than an id, that
-    reference is stored and used throughout making it possible to control
-    instances outside the current window.
-  * The document mousemove listener no longer returns true.
-
-2.2.2
-  * No change
-
-2.2.1
-
-  * Added YAHOO.util.DragDropMgr.interactionInfo, which is
-    a repository of interaction information accumulated during
-    the current event loop result, and accessible from the
-    handlers for the events.
-  * The region for the dragged element is now cached while
-    processing the drag and drop events
-  * List example supports moving an item to an empty list
-  * Fixed missing html tags in the examples
-  * The debug version now works when included before the logger is included.
-
-2.2.0
-
-  * onMouseDown event is executed before element positions are calculated
-  * refreshCache refreshes everything if groups array is not provided
-  * setX/setYConstraint doesn't fail when presented ints cast as strings
-
-0.12.2
-
-  * No change
-
-0.12.1
-
-  * Added a STRICT_INTERSECT drag and drop interaction mode.  This alters the
-    behavior of DDM::getBestMatch.  INTERSECT mode first tests the cursor
-    location, and if it is over the target that target wins, otherwise it
-    tests the overlap of the elements.  STRICT_INTERSECT mode tests only 
-    the overlap, the largest overlap wins.
-
-  * getBestMatch will work for targeted elements that have no overlap.
-
-0.12.0
-
-   * The logic to determine if a drag should be initiated has been isolated
-     to the clickValidator method.  This method can be overridden to provide
-     custom valdiation logic.  For example, it is possible to specify hotspots
-     of any dimension or shape.  The provided example shows how to make only
-     a circular region in the middle of the element initiate a drag.
-
-   * Added a new drag and drop event: onInvalidDrop.  This is executed when
-     the dragged element in dropped in a location without a target.  Previously
-     this condition could only detected by implementing handlers for three 
-     other events.
-
-   * Now accepts an element reference in lieu of an id.  Ids will
-     be generated if the element does not have one.
-
-   * Fixed horizontal autoscroll when scrollTop is zero.
-
-   * Added hasOuterHandles property to bypass the isOverTarget check in the
-     mousedown validation routine.  Fixes setOuterHandleElId.
-
-0.11.4
-
-   * YAHOO.util.DragDropMgr.swapNode now handles adjacent nodes properly
-   
-   * Fixed missing variable declarations
-
-0.11.3
- 
-   * Fixed a JavaScript error that would be generated when trying to implement
-     DDProxy using the default settings and a tiny element.
-
-   * Fixed an error that resulted when constraints were applied to DragDrop 
-     instances.
-
-0.11.2
-
-   * Drag and drop will no longer interfere with selecting text on elements
-     that are not involved in drag and drop.
-
-   * The shared drag and drop proxy element now resizes correctly when autoResize
-     is enabled.
-
-0.11.1
-
-   * Fixes an issue where the setXY cache could get out of sync if the element's
-     offsetParent is changed during onDragDrop.
-
-0.11.0
-
-   * The Dom.util.setXY calculation for the initial placement of the dragged
-     element is cached during the drag, enhancing the drag performance.
-
-   * DDProxy no longer enforces having a single proxy element for all instances.
-     dragElId can be set in the config object in the constructor.  If the
-     element already exists it will use that element, otherwise a new one will
-     be created with that id.
-
-   * DDProxy->borderWidth has been removed. The value is calculated on the fly
-     instead.
-
-   * Added DragDrop->clearTicks and DragDrop->clearConstraints
-
-   * All drag and drop constructors now have an additional, optional parameter
-     call "config".  It is an object that can contain properties for a
-     number of configuration settings.
-
-   * Drag and drop will not be disabled for elements that cannot have their
-     location determined.
-
-   * isLegalTarget won't return dd objects that are not targetable.
-
-   * Added DragDrop->removeFromGroup.
-
-   * Constraints are now applied properly when determining which drag and drop
-     events should fire.
-
-
-0.10.0
-
-   * Improved the performance when in intersect mode
-
-   * It was possible for the drag and drop initialization to be skipped
-     for very slow loading pages.  This was fixed.
-
-   * New methods to exclude regions within your drag and drop element: 
-     addInvalidHandleId(), addInvalidHandleClass()
-
-   * Added an onAvailable handler that is executed after the initial state is set.
-
-   * Drag and drop is more forgiving when the implementer attempts to create the
-     instance prior to the element being in the document, but after the window
-     load event has fired.
-

Modified: trunk/root/static/yui/dragdrop/dragdrop-debug.js
===================================================================
--- trunk/root/static/yui/dragdrop/dragdrop-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dragdrop/dragdrop-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The drag and drop utility provides a framework for building drag and drop
@@ -3450,27 +3450,6 @@
             Dom.setStyle(_data, 'opacity', '0');
             div.appendChild(_data);
 
-            /**
-            * It seems that IE will fire the mouseup event if you pass a proxy element over a select box
-            * Placing the IFRAME element inside seems to stop this issue
-            */
-            if (YAHOO.env.ua.ie) {
-                //Only needed for Internet Explorer
-                var ifr = document.createElement('iframe');
-                ifr.setAttribute('src', 'javascript: false;');
-                ifr.setAttribute('scrolling', 'no');
-                ifr.setAttribute('frameborder', '0');
-                div.insertBefore(ifr, div.firstChild);
-                Dom.setStyle(ifr, 'height', '100%');
-                Dom.setStyle(ifr, 'width', '100%');
-                Dom.setStyle(ifr, 'position', 'absolute');
-                Dom.setStyle(ifr, 'top', '0');
-                Dom.setStyle(ifr, 'left', '0');
-                Dom.setStyle(ifr, 'opacity', '0');
-                Dom.setStyle(ifr, 'zIndex', '-1');
-                Dom.setStyle(ifr.nextSibling, 'zIndex', '2');
-            }
-
             // appendChild can blow up IE if invoked prior to the window load event
             // while rendering a table.  It is possible there are other scenarios 
             // that would cause this to happen as well.
@@ -3728,4 +3707,4 @@
         return ("DDTarget " + this.id);
     }
 });
-YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.6.0", build: "1321"});
+YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/dragdrop/dragdrop-min.js
===================================================================
--- trunk/root/static/yui/dragdrop/dragdrop-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dragdrop/dragdrop-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,10 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=!
 ".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locat!
 ionCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1!
 000,drag
ThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){retur!
 n(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:f!
 unction(C){if(this.dragCurrent){clearTimeout(this.clickTimeout!
 );if(thi
s.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!t!
 his.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return ;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
+if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zIndex="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=!
 ".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locat!
 ionCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1!
 000,drag
ThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){retur!
 n(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:f!
 unction(C){if(this.dragCurrent){clearTimeout(this.clickTimeout!
 );if(thi
s.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!t!
 his.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
 }if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J!
 ]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLoca!
 tion:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.!
 getEl(),
K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C!
 .el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:functi!
 on(){return this.getScroll().left;},moveToEl:function(C,E){var!
  D=YAHOO
.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes!
 :null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.ge!
 t(this.id);
-}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this!
 .config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return ;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];t!
 his.startPageY=C[1];},addToGroup:function(C){this.groups[C]=tr!
 ue;this.
DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return ;}if(this.isLocked()){return ;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||!
 (E===false)||(F===false)||(H===false)){return ;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvali!
 dHandleClass:function(C){this.invalidHandleClasses.push(C);},r!
 emoveInv
alidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTic!
 ks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
-}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setD!
 elta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScro!
 llLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(!
 B+D-J-th
is.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return ;}var G=this.getDragEl(),E=YAHOO.util.Dom;if(!G){G=document.createElemen!
 t("div");G.id=this.dragElId;var D=G.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");G.appendChild(C);if(YAHOO.env.ua.ie){var F=document.createElement("iframe");F.setAttribute("src","javascript: false;");F.setAttribute("scrolling","no");F.setAttribute("frameborder","0");G.insertBefore(F,G.firstChild);E.setStyle(F,"height","100%");E.setStyle(F,"width","100%");E.setStyle(F,"position","absolute");E.setStyle(F,"top","0");E.setStyle(F,"left","0");E.setStyle(F,"opacity","0");E.setStyle(F,"zIndex","-1");E.setStyle(F.nextSibling,"zIndex","2");}A.insertBefore(G,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==!
 false);this.centerFrame=(this.config.centerFrame);this.setDrag!
 ElId(thi
s.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A!
 ,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this!
 .config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];th!
 is.startPageY=C[1];},addToGroup:function(C){this.groups[C]=tru!
 e;this.D
DM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E=!
 ==false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHan!
 dleClass:function(C){this.invalidHandleClasses.push(C);},remov!
 eInvalid
HandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[!
 ];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setD!
 elta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScro!
 llLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(!
 B+D-J-th
is.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement!
 ("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resize!
 Frame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getD!
 ragEl();
var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YA!
 HOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/dragdrop/dragdrop.js
===================================================================
--- trunk/root/static/yui/dragdrop/dragdrop.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/dragdrop/dragdrop.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The drag and drop utility provides a framework for building drag and drop
@@ -3347,27 +3347,6 @@
             Dom.setStyle(_data, 'opacity', '0');
             div.appendChild(_data);
 
-            /**
-            * It seems that IE will fire the mouseup event if you pass a proxy element over a select box
-            * Placing the IFRAME element inside seems to stop this issue
-            */
-            if (YAHOO.env.ua.ie) {
-                //Only needed for Internet Explorer
-                var ifr = document.createElement('iframe');
-                ifr.setAttribute('src', 'javascript: false;');
-                ifr.setAttribute('scrolling', 'no');
-                ifr.setAttribute('frameborder', '0');
-                div.insertBefore(ifr, div.firstChild);
-                Dom.setStyle(ifr, 'height', '100%');
-                Dom.setStyle(ifr, 'width', '100%');
-                Dom.setStyle(ifr, 'position', 'absolute');
-                Dom.setStyle(ifr, 'top', '0');
-                Dom.setStyle(ifr, 'left', '0');
-                Dom.setStyle(ifr, 'opacity', '0');
-                Dom.setStyle(ifr, 'zIndex', '-1');
-                Dom.setStyle(ifr.nextSibling, 'zIndex', '2');
-            }
-
             // appendChild can blow up IE if invoked prior to the window load event
             // while rendering a table.  It is possible there are other scenarios 
             // that would cause this to happen as well.
@@ -3619,4 +3598,4 @@
         return ("DDTarget " + this.id);
     }
 });
-YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.6.0", build: "1321"});
+YAHOO.register("dragdrop", YAHOO.util.DragDropMgr, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/editor/README
===================================================================
--- trunk/root/static/yui/editor/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,270 +0,0 @@
-**** version 2.6.0 ***
-    
-    * Widget promoted to GA - beta flag removed from all files.
-
-    * Firefox
-	    * 1776202 - FF:rich text formatting (italize) lost when color is selected in RTE
-	    * 1886390 - [SF 1946017] Unable to delete text when editor opens (Firefox)
-	    * 2030281 - [SF 2002911] Problem with Header styling in Firefox
-        * 1765001 - [SF 1899196] Firefox button Inconsistencies
-
-    * Internet Explorer
-	    * 1842631 - [SF 1869619] Image Modification Dialog
-	    * 2006122 - [SF 1995892] set('disabled',false) cause IE6 error 
-	    * 2092598 - [SF 2021359] IE7: dbl click image doesn't show settings dialog
-	    * 2093275 - [SF 2026296] Auto Adjusting height bug in IE
-	    * 2093325 - [SF 2025092] IE7:allowNoEdit turned on period '.' doesn't work
-	    * 2099035 - [SF 2027048] keyDown event does not fire in IE after enabling editor
-	    * 2189912 - [SF 2093253] Editor used in HTTPS page will provoke Security warning
-        * 1655240 - [SF 1851177] Text Align not working correctly in IE
-	    * 1984727 - [SF 1986820] Clicking bulleted list before typing creates empty <li> IE7
-	    * 2108127 - [SF 2027073] IE7: editor list items misaligned 
-	    * 1918222 - [SF 1956586] Fontsize is not updating when nodechange in IE
-
-    * Safari
-	    * 1972354 - [SF 1978372] Safari/IE list creation quirk
-	    * 1972367 - [SF 1978350] Safari 3.1 issue with lists
-
-    * All
-        * 1508375 - [SF 1791252, 1964709] Have Undo, Redo functions in Editor  
-	    * 1839296 - [SF 1926238] Editor adds extra </li> tag at the end of a list
-	    * 1844215 - [SF 1928426] filter_invalid_lists
-	    * 1844258 - [SF 1923255] Give descriptive error when container isn't textarea
-	    * 1851344 - [SF 1931768] Relative links automatically converted to absolute links.
-	    * 1870106 - Add a strikethrough/blockquote buttons for the Rich Text Editor
-	    * 1886339 - [SF 1946874] Double clicking in the editor sets "editorDirty" false
-	    * 1892984 - [SF 1919826] Regex matches both <b> and <button>
-	    * 1901545 - Rich Text Editor - Link menu's url encoding "&" to "&amp" 	
-	    * 1908178 - [SF 1954228] Deleting 1+ button from buttonType:advanced fails
-	    * 1926462 - html encoded characters are unencoded
-	    * 1964404 - [SF 1975463] Editor.destroy() doesn't destroy editor windows
-	    * 1984734 - [SF 1986184] error on _formButtonClicked log message
-	    * 2030229 - [SF 2003080] Various widths affect toolbar layout
-	    * 2138168 - [SF 2048035] autoHeight will cause dialog panels to be misaligned
-	    * 2166952 - [SF 2065060] Tab & shift-tab should move focus from the editor
-	    * 2178829 - [SF 2077747] Simple editor losing its format when font color changes
-        * 2015947 - [SF 1998524] Alignment Code doesn't generate
-        * 2118761 - [SF 2035187] Custom Editor body CSS only applies to visited links
-        * 2118723 - [SF 2034544] Image Options Dialog Box needs fixing
-        * 2036613 - [SF 2007145] Removing underline not working in IE6/7, FF3
-        * 2065013 - [SF 2015601] Text in some controls is not vertically centered
-	    * 1918278 - [SF 1955931] font color (background color) doesn't work properly
-	    * 1972427 - [SF 1954095] Bulleting
-        * 1839224 - [SF 1925337] editor indent/outdent inconsistent behavior
-	    * 2006092 - [SF 1996074] Indent changes the font to Arial
-        * 206493 - Handle Submit Failing
-
-
-**** version 2.5.2 ***
-    * Firefox 3
-        * 1898002 - Fixed tabbing issues
-
-    * Internet Explorer
-        * 1898002 - Fixed tabbing issues
-        * 1824259 - [SF 1918308] Rich Text Editor: colouring a word colours the sentence
-
-    * All
-        * 1847813 - [SF 1930871] RTE doesn't load if handleSubmit: false explicitly defined
-        * 1841312 - In the RTE image menu the label for "link Url" and "image URL" aren't the same
-        * Color picker stays active when loses focus (Basic Buttons)
-        * Fixed CSS for toolbar seperators to allow for the groups to float better.
-
-**** version 2.5.1 ***
-
-    * Adobe AIR Support
-        * 1763867 - Adobe AIR: iFrame document open
-        * 1763869 - Adobe AIR: Blank Image insertion fails
-        * 1763872 - Adobe AIR: Setting font-family fails
-        * 1763880 - Adobe AIR: Image Editor should show copy/paste note
-
-    * Internet Explorer
-        * 1556954 - [SF 1816784 ] tabbing troubles...
-        * 1776579 - [SF 1873881 ] IE Bulleting Behavior
-
-    * Safari
-        * 1775802 - [SF 1899803] Links in safari are treated as regular links...
-        * 1777918 - [SF 1898878 ] Safari uses <span> instead of <strong> tags...
-
-    * All
-        * 1776107 - ToolbarButton doesn't have a destroy method
-        * 1776117 - Editor Accessibility Enhancements
-        * 1776539 - [SF 1874009 ] Greedy Regex in RTE Eats embed and other tags
-        * 1777925 - [SF 1878976 ] Regex matches both <i> and <iframe>
-        * 1764038 - [SF 1898886 ] Problem with handleSubmit after move to 2.5.0
-        * 1693686 - [SF 1869619] Image Modification Dialog
-
-
-**** version 2.5.0 ***
-
-    *Examples:
-        1. [1687273] - [SF 1861119 ] Flickr Example code is incorrect
-
-    *Config
-        1. [1556954] - [SF 1816784 ] tabbing troubles...
-            Added a new config option called plainText. (See API docs for more information)
-        2. Removed the requirement for a textarea. If you pass the config as the first argument to the constructor
-            the Editor will create the textarea for you.
-
-    *Internet Explorer
-        1. [1515145] - [SF 1807057 ] RTE _setDesignMode reloads page content
-        2. [1687267] - [SF 1861514 ] editorContentLoaded fires early in IE6/7
-        3. [1687244] - [SF 1866217 ] Editor in frameset causes "unspecified error" in IE6
-        4. [1687278] - [SF 1859031 ] Change Font Color on IE
-        5. [1687283] - [SF 1857798 ] IE7 RTE HTTPS problem
-        6. [1687316] - [SF 1854657 ] IE bullet/number strange behaviour
-    
-    *All
-        1. [1687258] - [SF 1862824 ] Problem with <script> tags in editor content
-        2. [1687292] - [SF 1857235 ] cleanHTML function stripping closing tags
-        3. [1687322] - [SF 1849730 ] Multiple Editors' toolbars conflict
-        4. [1688270] - [SF 1867927] Editor dynamic height adjust
-        5. [1693656] - [SF 1870215] handleSubmit hijacks the value of the submit button
-        6. [1693686] - [SF 1869619] Image Modification Dialog
-        7. [1693719] - [SF 1850814] Editor produces faulty code
-
-
-**** version 2.4.0 ***
-
-* Performance enhancements and bug fixes.
-* Created a new base class called SimpleEditor. Editor now extends SimpleEditor
-* Created 2 new Toolbar Buttons
-    YAHOO.widget.ToolbarButton - No requirement for Button or Menu
-    YAHOO.widget.ToolbarButtonAdvanced - Still Required Button and Menu
-
-    *All
-        1. [1423860] - [SF 1774823] Change text size removes selection highlight
-        2. [1487601] - [SF 1796897] Font size issue
-        3. [1508412] - [SF 1799379] setEditorHTML strips title attribute
-        4. [1528759] - [SF 1810162] [example] Link Options Window appears behind the editor
-            Added a config option "limitCommands" when set to true, the editor will not execute a command that is not bound to a button.
-
-        5. [1544149] - [SF 1808154] add non-editable snippets to YUI-RTE
-            Added a config option "allowNoEdit", when set to true the "_isNonEditalble method is called at the beginning of all event handlers to check if this element or
-                a parent element has the class yui-noedit (this.CLASS_NOEDIT) applied. If it does, then this method will stop the event and return true. The event handlers
-                will then return false and stop the nodeChange from occurring. This method will also disable and enable the Editor's toolbar based on the noedit state.
-
-        6. [1544160] - [SF 1808102] Keep the content of invalidHTML
-            If you set the value of a key in this.invalidHTML to "{ keepContents: true }", then the element will be replaced with a yui-non span to be filtered out when 
-                cleanHTML is called. The only tag that is ignored here is the span tag as it will force the Editor into a loop and freeze the browser. However, all of
-                these tags will be removed in the cleanHTML routine
-
-        7. [1560982] - [SF 1818681] RTE converts input tags to emnput
-        8. [1508390] - [SF 1787357] Split into separate modules
-            Split the Editor into Editor and SimpleEditor. Also split out the execCommand support into several methods for easier overriding and extending.
-
-        9. [1508403] - [SF 1779516] Dirty flag for editor
-            You can now check the editorDirty property on the Editor instance. It will be default false and be set to true when something important happens.
-            You will need to manually change it back to false when you check it.
-
-    *Internet Explorer
-        1. [1508413] - [SF 1804028, 1810362] Omission of DocType at top of page
-            It appears that Internet Explorer doesn't like the page containing the Editor to not have a doctype if the page inside the editor does.
-                The Editor will now check for compatMode and if it is not in standards mode, it will omit the doctype from the editable area.
-                
-        2. [1528733] - [SF 1808818] IE6 reports security violation on secure pages
-        3. [1528766] - [SF 1810362] Will Not Work Without DTD header
-        4. [1496536] - yui editor indentation problem
-        5. [1465375] - [SF 1789702] RTE Image insertion creates timer error
-
-    *Firefox
-        1. [1492573] - Can not get focus on edit box in FF 1.5 on FreeBSD
-
-**** version 2.3.1 ***
-
-* Performance enhancements and bug fixes.
-
-    *All
-        1. [1406169] - Fixed Toolbar performance issues
-        2. [1406176] - You can now set the height and width of the editor after it has been rendered       
-        3. [1413456] - Group Labels can now be turned off after the editor has been rendered
-        4. [1413750] - Editor now supports delayed render (script block above the textarea markup)
-        5. [1416349] - cleanHTML now supports markup config options better (added xhtml option)
-        6. [1422334] - Added a link field to the image property editor
-        7. [1425540] - [SF 1775187] Fixed adding a link to an LI
-        8. [1406370] - [SF 1767246 ] Using Back button causes breaking behavior. Fixed.
-        9. [1435809] - Base href config fails when on a page with a port number. Fixed.
-
-    *Safari
-        1. [1390926] - Fixed Safari handleSubmit issue
-        2. [1433563] - Editor becomes unstable when rendered inside an element set to display: none (added show() method)
-
-    *Opera
-        1. [1396921] - Fixed clicking the Toolbar while typing loses insertion point
-        2. [1406700] - [SF 1767251] Background color can not be overridden in Opera.. Fixed.
-
-    *Gecko
-        1. [1411911] - [SF 1769657] RTE looks strange on Firefox when base.css - Fixed style collisions
-        2. [1433563] - Editor becomes unstable when rendered inside an element set to display: none (added show() method)
-
-    *Internet Explorer
-        1. [1396921] - Fixed clicking the Toolbar while typing loses insertion point
-
-
-**** version 2.3.0 ***
-
-* Beta release.
-
-* Known Issues
-    * All
-        1. Removed the menu for Create Ordered Lists, it now defaults to creating a simple OL with no type.
-     
-    * Safari
-        1. Bug #1390926 - Safari may not inject the editor's HTML into the text area when the config handleSubmit is set to true.
-            You can get around this with the following code (where comment is the id of the textarea):
-                YAHOO.util.Dom.setStyle('comment', 'visibility', 'hidden');
-                YAHOO.util.Dom.setStyle('comment', 'position', 'absolute');
-                YAHOO.util.Dom.setStyle('comment', 'display', 'block');
-                oEditor.saveHTML();
-                window.setTimeout(function() {
-                        YAHOO.util.Dom.get('comment').form.submit();
-                }, 200);
-
-            This issue will be fixed in a later release..
-        2. Unable to get the cursor position inside the editable area.
-            What this means is that when an image/object is inserted into the document
-            we have no way of knowing "exactly" where to put it. So we make an educated guess.
-            If they user clicked on an "element" (HTML Element) in the editor, then we will place
-            the newly inserted element directly after it in the DOM. If there was no element clicked
-            We will append the new element to the body.
-
-        3. Ordered/Unorder Lists are not support natively. So we have built a work around for this.
-            Most browsers will allow you to select a block of text and create a list out of it "automagically"
-            by inserting an LI around blocks that are separated by line breaks, BRs or Ps. In Safari, the 
-            entire text block will be turned into the first LI of the list. The user can then place the cursor
-            at the beginning of each line, and backspace, then hit enter to create the new list item. There are some
-            use cases that this might fail.
-
-        4. Dragging and dropping of selections and images/objects is not supported.
-            Safari will do some weird things if the text in the editable area is selected and dragged and dropped.
-            We prevent this from happening to images inside of the editable area, but we can not prevent it for text.
-            Safari will also give unexpected results if text from another Safari window in selected, then dragged
-            into the editable area.
-
-    * Opera
-        1. Placing the cursor in the editor, then Shift Clicking to highlight will not work. The limitation appear to be in Opera.
-
-        2. Image resize is unavailable, due to limitations in the browser
-
-        3. Shortcut keys are not supported in this release.
-
-        4. Dragging and dropping of selections and images/objects is not supported.
-
-        5. Hitting the back button on the page will not reload the iframe.
-
-        6. Selecting the editable area, then hitting the shortcut keys for "Reload" will
-            cause the current page to be displayed inside the editable area.
-
-
-**** version 2.3.0 Peview Release Notes ***
-
-* The only server side resource required to run the editor, is the blankimage file.
-    The blankimage file is the temporary image loaded into the editor when you click the
-    "Insert Image" button in the toolbar.
-
-    This can be set using:
-
-    var myEditor = new YAHOO.widget.Editor('test', {
-        blankimage: 'MY_IMAGE_PATH'
-    });
-
-* There is a performance issue with Safari on a G4 computer. We will be working to get this resolved before the initial beta release.

Modified: trunk/root/static/yui/editor/assets/editor-core.css
===================================================================
--- trunk/root/static/yui/editor/assets/editor-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/editor-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +1,15 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Set the cursor to busy when we are doing something */
 .yui-busy {
     cursor: wait !important;
 }
-.yui-toolbar-container fieldset {
+.yui-toolbar-container fieldset,
+.yui-editor-container fieldset {
     padding: 0;
     margin: 0;
     border: 0;
@@ -215,6 +216,13 @@
 /* The disbled state of the Editor */
 .yui-editor-container .yui-editor-masked {
     background-color: #CCC;
+    height: 100%;
+    width: 100%;
+    position: absolute;
+    top: 0;
+    left: 0;
+    opacity: .5;
+    filter: alpha(opacity=50);
 }
 /* Style the editable iframe to hide it */
 .yui-editor-container iframe {

Modified: trunk/root/static/yui/editor/assets/simpleeditor-core.css
===================================================================
--- trunk/root/static/yui/editor/assets/simpleeditor-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/simpleeditor-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Set the cursor to busy when we are doing something */
 .yui-busy {

Modified: trunk/root/static/yui/editor/assets/skins/sam/editor-skin.css
===================================================================
--- trunk/root/static/yui/editor/assets/skins/sam/editor-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/skins/sam/editor-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Place the border around the editor */
 .yui-skin-sam .yui-editor-container {

Modified: trunk/root/static/yui/editor/assets/skins/sam/editor.css
===================================================================
--- trunk/root/static/yui/editor/assets/skins/sam/editor.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/skins/sam/editor.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:3!
 3px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar!
 -contain
er{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4!
 px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-chil!
 d,.yui-skin-sam .yui-toolbar-container .yui-color-button .firs!
 t-child,
.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{w!
 idth:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selec!
 ted span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container!
  .yui-bu
tton-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-co!
 ntainer .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-justifyright span.yui-toolbar-icon{background-position:0 -!
 396px;le
ft:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-tool!
 bar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.y!
 ui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton spa!
 n.yui-to
olbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-s!
 kin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;!
 }.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-!
 skin-sam
 .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190p!
 x;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-edi!
 tor-panel .ft span.tip strong{display:block;float:left;margin:!
 0 2px 8p
x 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{b!
 order:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.y!
 ui-skin-
sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;p!
 osition:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;wi!
 dth:18px;overflow:hidden;background:url(editor-sprite.gif) no-!
 repeat 3
0px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sa!
 m .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container !
 .yui-toolbar-justifycenter span.yui-toolbar-icon{background-po!
 sition:0
 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-sk!
 in-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .fi!
 rst-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li!
 {margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-tool!
 bar-cont
ainer .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .heigh!
 t-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}!
 .yui-skin-sam .yui-editor-panel .ft span.tip{background-color:!
 #EDF5FF;
border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container !
 .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}

Modified: trunk/root/static/yui/editor/assets/skins/sam/simpleeditor-skin.css
===================================================================
--- trunk/root/static/yui/editor/assets/skins/sam/simpleeditor-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/skins/sam/simpleeditor-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Place the border around the editor */
 .yui-skin-sam .yui-editor-container {

Modified: trunk/root/static/yui/editor/assets/skins/sam/simpleeditor.css
===================================================================
--- trunk/root/static/yui/editor/assets/skins/sam/simpleeditor.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/assets/skins/sam/simpleeditor.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-busy{cursor:wait !important;}.yui-toolbar-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:#000;cursor:default;}.yui-tool!
 bar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{position:relative;cursor:pointe!
 r;}.yui-toolbar-container .yui-button .first-child,.yui-toolba!
 r-contai
ner .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0px;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Console;}.yui-toolbar-fontname-!
 tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;}.yui-editor-container iframe{border:0px;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{padding:0;margin:0;}.yui-editor-container .dompath{font-size:85%;}.yui-editor-panel .hd{text-align:left;position:rela!
 tive;}.yui-editor-panel .hd h3{font-weight:bold;padding:0.25em!
  0pt 0.2
5em 0.25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:0.75em;}.yui-editor-panel .yui-toolbar-group-padding{}.yui-editor-panel .yui-toolbar-group-border{}.yui-editor-panel .yui-!
 toolbar-group-textflow{}.yui-editor-panel .height-width{float:left;}.yui-editor-panel .height-width h3{}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0%;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{!
 border-bottom:1px dashed black;}.yui-editor-panel .yui-toolbar!
 -borders
ize span a span.yui-toolbar-bordersize-0{*top:0px;text-indent:0px;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px !important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimen!
 uitemlabel:hover{margin:0px 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolba!
 r-bordertype-dotted a{border-bottom:1px dotted black;height:14!
 px;}h2.y
ui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0.75px;border:1px solid black;}.yui-toolbar-colors span strong{font-weight:normal;padd!
 ing-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000000;font-weight:bold;margin:0;padding:0.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:0.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{border:none;text-indent:3!
 3px;overflow:hidden;margin:0 .25em;}.yui-skin-sam .yui-toolbar!
 -contain
er{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em 0.35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:0.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;position:absolute;top:4!
 px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0px;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}.yui-skin-sam .yui-toolbar-container .yui-push-button .first-chil!
 d,.yui-skin-sam .yui-toolbar-container .yui-color-button .firs!
 t-child,
.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{w!
 idth:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;width:18px;overflow:hidden;background:url(editor-sprite.gif) no-repeat 30px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selec!
 ted span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container!
  .yui-bu
tton-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-co!
 ntainer .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifycenter span.yui-toolbar-icon{background-position:0 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-tool!
 bar-justifyright span.yui-toolbar-icon{background-position:0 -!
 396px;le
ft:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-tool!
 bar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child{width:35px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.y!
 ui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton spa!
 n.yui-to
olbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url( editor-sprite.gif ) no-repeat 0 -1144px;overflow:hidden;right:-2px;top:0px;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-s!
 kin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li{margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yuimenu{}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .yui-toolbar-subcont{padding:0;border:none;margin-top:0.35em;!
 }.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-!
 skin-sam
 .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .height-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190p!
 x;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}.yui-skin-sam .yui-editor-panel .ft span.tip{background-color:#EDF5FF;border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-edi!
 tor-panel .ft span.tip strong{display:block;float:left;margin:!
 0 2px 8p
x 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url( editor-sprite.gif ) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url( editor-knob.gif ) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#ffffff;}.yui-editor-blankimage{background-image:url( blankimage.png );}.yui-skin-sam .yui-editor-container .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}
+.yui-busy{cursor:wait!important;}.yui-toolbar-container fieldset,.yui-editor-container fieldset{padding:0;margin:0;border:0;}.yui-toolbar-container legend{display:none;}.yui-toolbar-container .yui-toolbar-subcont{padding:.25em 0;zoom:1;}.yui-toolbar-container-collapsed .yui-toolbar-subcont{display:none;}.yui-toolbar-container .yui-toolbar-subcont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container span.yui-toolbar-draghandle{cursor:move;border-left:1px solid #999;border-right:1px solid #999;overflow:hidden;text-indent:77777px;width:2px;height:20px;display:block;clear:none;float:left;margin:0 0 0 .2em;}.yui-toolbar-container .yui-toolbar-titlebar.draggable{cursor:move;}.yui-toolbar-container .yui-toolbar-titlebar{position:relative;}.yui-toolbar-container .yui-toolbar-titlebar h2{font-weight:bold;letter-spacing:0;border:none;color:#000;margin:0;padding:.2em;}.yui-toolbar-container .yui-toolbar-titlebar h2 a{text-decoration:none;color:!
 #000;cursor:default;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-draghandle{height:40px;}.yui-toolbar-container .yui-toolbar-group{float:left;margin-right:.5em;zoom:1;}.yui-toolbar-container .yui-toolbar-group:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-container .yui-toolbar-group h3{font-size:75%;padding:0 0 0 .25em;margin:0;}.yui-toolbar-container span.yui-toolbar-separator{width:2px;padding:0;height:18px;margin:.2em 0 .2em .1em;display:none;float:left;}.yui-toolbar-container.yui-toolbar-grouped span.yui-toolbar-separator{height:45px;*height:50px;}.yui-toolbar-container.yui-toolbar-grouped .yui-toolbar-group span.yui-toolbar-separator{height:18px;display:block;}.yui-toolbar-container ul li{margin:0;padding:0;list-style-type:none;}.yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-toolbar-container .yui-push-button,.yui-toolbar-container .yui-color-button,.yui-toolbar-container .yui-menu-button{p!
 osition:relative;cursor:pointer;}.yui-toolbar-container .yui-b!
 utton .f
irst-child,.yui-toolbar-container .yui-button .first-child a{height:100%;width:100%;overflow:hidden;font-size:0;}.yui-toolbar-container .yui-button-disabled{cursor:default;}.yui-toolbar-container .yui-button-disabled .yui-toolbar-icon{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button-disabled .up,.yui-toolbar-container .yui-button-disabled .down{opacity:.5;filter:alpha(opacity=50);}.yui-toolbar-container .yui-button a{overflow:hidden;}.yui-toolbar-container .yui-toolbar-select .first-child a{cursor:pointer;}.yui-toolbar-fontname-arial{font-family:Arial;}.yui-toolbar-fontname-arial-black{font-family:Arial Black;}.yui-toolbar-fontname-comic-sans-ms{font-family:Comic Sans MS;}.yui-toolbar-fontname-courier-new{font-family:Courier New;}.yui-toolbar-fontname-times-new-roman{font-family:Times New Roman;}.yui-toolbar-fontname-verdana{font-family:Verdana;}.yui-toolbar-fontname-impact{font-family:Impact;}.yui-toolbar-fontname-lucida-console{font-family:Lucida Con!
 sole;}.yui-toolbar-fontname-tahoma{font-family:Tahoma;}.yui-toolbar-fontname-trebuchet-ms{font-family:Trebuchet MS;}.yui-toolbar-container .yui-toolbar-spinbutton{position:relative;}.yui-toolbar-container .yui-toolbar-spinbutton .first-child a{z-index:0;opacity:1;}.yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-toolbar-container .yui-toolbar-spinbutton a.down{position:absolute;display:block right:0;cursor:pointer;z-index:1;padding:0;margin:0;}.yui-toolbar-container .yui-overlay{position:absolute;}.yui-toolbar-container .yui-overlay ul li{margin:0;list-style-type:none;}.yui-toolbar-container{z-index:1;}.yui-editor-container .yui-editor-editable-container{position:relative;z-index:0;width:100%;}.yui-editor-container .yui-editor-masked{background-color:#CCC;height:100%;width:100%;position:absolute;top:0;left:0;opacity:.5;filter:alpha(opacity=50);}.yui-editor-container iframe{border:0;padding:0;margin:0;zoom:1;display:block;}.yui-editor-container .yui-editor-editable{p!
 adding:0;margin:0;}.yui-editor-container .dompath{font-size:85!
 %;}.yui-
editor-panel .hd{text-align:left;position:relative;}.yui-editor-panel .hd h3{font-weight:bold;padding:.25em 0 .25em .25em;margin:0;}.yui-editor-panel .bd{width:100%;zoom:1;position:relative;}.yui-editor-panel .bd div.yui-editor-body-cont{padding:.25em .1em;zoom:1;}.yui-editor-panel .bd .gecko form{overflow:auto;}.yui-editor-panel .bd div.yui-editor-body-cont:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-editor-panel .ft{text-align:right;width:99%;float:left;clear:both;}.yui-editor-panel .ft span.tip{display:block;position:relative;padding:.5em .5em .5em 23px;text-align:left;zoom:1;}.yui-editor-panel label{clear:both;float:left;padding:0;width:100%;text-align:left;zoom:1;}.yui-editor-panel .gecko label{overflow:auto;}.yui-editor-panel label strong{float:left;width:6em;}.yui-editor-panel .removeLink{width:80%;text-align:right;}.yui-editor-panel label input{margin-left:.25em;float:left;}.yui-editor-panel .yui-toolbar-group{margin-bottom:.75em;}.yui!
 -editor-panel .height-width{float:left;}.yui-editor-panel .height-width span{font-style:italic;display:block;float:left;overflow:visible;}.yui-editor-panel .height-width span.info{font-size:70%;margin-top:3px;}.yui-editor-panel .yui-toolbar-bordersize,.yui-editor-panel .yui-toolbar-bordertype{font-size:75%;}.yui-editor-panel .yui-toolbar-container span.yui-toolbar-separator{border:none;}.yui-editor-panel .yui-toolbar-bordersize span a span,.yui-editor-panel .yui-toolbar-bordertype span a span{display:block;height:8px;left:4px;position:absolute;top:3px;_top:-5px;width:24px;text-indent:52px;font-size:0;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-solid{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dotted{border-bottom:1px dotted black;}.yui-editor-panel .yui-toolbar-bordertype span a span.yui-toolbar-bordertype-dashed{border-bottom:1px dashed black;}
+.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-0{*top:0;text-indent:0;font-size:75%;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-1{border-bottom:1px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-2{border-bottom:2px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-3{top:2px;*top:-5px;border-bottom:3px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-4{top:1px;*top:-5px;border-bottom:4px solid black;}.yui-editor-panel .yui-toolbar-bordersize span a span.yui-toolbar-bordersize-5{top:1px;*top:-5px;border-bottom:5px solid black;}.yui-toolbar-container .yui-toolbar-bordersize-menu,.yui-toolbar-container .yui-toolbar-bordertype-menu{width:95px!important;}.yui-toolbar-bordersize-menu .yuimenuitemlabel,.yui-toolbar-bordertype-menu .yuimenuitemlabel,.yui-toolbar-bordersize-menu .yuimenuitemlabel,.y!
 ui-toolbar-bordertype-menu .yuimenuitemlabel:hover{margin:0 3px 7px 17px;}.yui-toolbar-bordersize-menu .yuimenuitemlabel .checkedindicator,.yui-toolbar-bordertype-menu .yuimenuitemlabel .checkedindicator{position:absolute;left:-12px;*top:14px;*left:0;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-1 a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-2 a{border-bottom:2px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-3 a{border-bottom:3px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-4 a{border-bottom:4px solid black;height:14px;}.yui-toolbar-bordersize-menu li.yui-toolbar-bordersize-5 a{border-bottom:5px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-solid a{border-bottom:1px solid black;height:14px;}.yui-toolbar-bordertype-menu li.yui-toolbar-bordertype-dashed a{border-bottom:1px dashed black;height:14px;}.yui-toolbar!
 -bordertype-menu li.yui-toolbar-bordertype-dotted a{border-bot!
 tom:1px 
dotted black;height:14px;}h2.yui-editor-skipheader,h3.yui-editor-skipheader{height:0;margin:0;padding:0;border:none;width:0;overflow:hidden;position:absolute;}.yui-toolbar-colors{width:133px;zoom:1;display:none;z-index:100;overflow:hidden;}.yui-toolbar-colors:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors a{height:9px;width:9px;float:left;display:block;overflow:hidden;text-indent:999px;margin:0;cursor:pointer;border:1px solid #F6F7EE;}.yui-toolbar-colors a:hover{border:1px solid black;}.yui-color-button-menu{overflow:visible;background-color:transparent;}.yui-toolbar-colors span{position:relative;display:block;padding:3px;overflow:hidden;float:left;width:100%;zoom:1;}.yui-toolbar-colors span:after{display:block;clear:both;visibility:hidden;content:'.';height:0;}.yui-toolbar-colors span em{height:35px;width:30px;float:left;display:block;overflow:hidden;text-indent:999px;margin:.75px;border:1px solid black;}.yui-toolbar-colors span s!
 trong{font-weight:normal;padding-left:3px;display:block;font-size:85%;float:left;width:65%;}.yui-toolbar-group-undoredo h3,.yui-toolbar-group-insertitem h3,.yui-toolbar-group-indentlist h3{width:68px;}.yui-toolbar-group-indentlist2 h3{width:122px;}.yui-toolbar-group-alignment h3{width:130px;}.yui-skin-sam .yui-editor-container{border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container{zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;position:relative;}.yui-skin-sam .yui-editor-container .draggable .yui-toolbar-titlebar{cursor:move;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar h2{color:#000;font-weight:bold;margin:0;padding:.3em 1em;font-size:100%;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-group h3{color:#808080;font-size:75%;margin:1em 0 0;padding-bottom:0;padding-left:.25em;text-align:left;}.yui-toolbar-container span.yui-toolbar-separator{b!
 order:none;text-indent:33px;overflow:hidden;margin:0 .25em;}.y!
 ui-skin-
sam .yui-toolbar-container{background-color:#F2F2F2;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subcont{padding:0 1em .35em;border-bottom:1px solid #808080;}.yui-skin-sam .yui-toolbar-container-collapsed .yui-toolbar-titlebar{border-bottom:1px solid #808080;}.yui-skin-sam .yui-editor-container .visible .yui-menu-shadow,.yui-skin-sam .yui-editor-panel .visible .yui-menu-shadow{display:none;}.yui-skin-sam .yui-editor-container ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-container ul li{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-toolbar-group ul li.yui-toolbar-groupitem{float:left;}.yui-skin-sam .yui-editor-container .dompath{background-color:#F2F2F2;border-top:1px solid #808080;color:#999;text-align:left;padding:.25em;}.yui-skin-sam .yui-toolbar-container .collapse{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -400px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-titlebar span.collapse{cursor:pointer;p!
 osition:absolute;top:4px;right:2px;display:block;overflow:hidden;height:15px;width:15px;text-indent:9999px;}.yui-skin-sam .yui-toolbar-container .yui-push-button,.yui-skin-sam .yui-toolbar-container .yui-color-button,.yui-skin-sam .yui-toolbar-container .yui-menu-button{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;position:relative;display:block;height:22px;width:30px;_font-size:0;margin:0;border-color:#808080;color:#f2f2f2;border-style:solid;border-width:1px 0;zoom:1;}.yui-skin-sam .yui-toolbar-container .yui-push-button a,.yui-skin-sam .yui-toolbar-container .yui-color-button a,.yui-skin-sam .yui-toolbar-container .yui-menu-button a{padding-left:35px;height:20px;text-decoration:none;font-size:0;line-height:2;display:block;color:#000;overflow:hidden;white-space:nowrap;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a,.yui-skin-sam .yui-toolbar-container .yui-toolbar-select a{font-size:12px;}
+.yui-skin-sam .yui-toolbar-container .yui-push-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button .first-child{border-color:#808080;border-style:solid;border-width:0 1px;margin:0 -1px;display:block;position:relative;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled .first-child,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled .first-child{border-color:#ccc;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled a,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled a{color:#A6A6A6;cursor:default;}.yui-skin-sam .yui-toolbar-container .yui-push-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-color-button-disabled,.yui-skin-sam .yui-toolbar-container .yui-menu-button-disabled{border-color:#cc!
 c;}.yui-skin-sam .yui-toolbar-container .yui-button .first-child{*left:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-fontname{width:135px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-heading{width:92px;}.yui-skin-sam .yui-toolbar-container .yui-button-hover{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1300px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-button-selected{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;border-color:#808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels h3{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-nogrouplabels .yui-toolbar-group{margin-top:.75em;}.yui-skin-sam .yui-toolbar-container .yui-push-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-color-button span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-menu-button span.yui-toolbar-icon{display:block;position:absolute;top:2px;height:18px;wi!
 dth:18px;overflow:hidden;background:url(editor-sprite.gif) no-!
 repeat 3
0px 30px;}.yui-skin-sam .yui-toolbar-container .yui-button-selected span.yui-toolbar-icon,.yui-skin-sam .yui-toolbar-container .yui-button-hover span.yui-toolbar-icon{background-image:url(editor-sprite-active.gif);}.yui-skin-sam .yui-toolbar-container .visible .yuimenuitemlabel{cursor:pointer;color:#000;*position:relative;}.yui-skin-sam .yui-toolbar-container .yui-button-menu{background-color:#fff;}.yui-skin-sam .yui-toolbar-container .yui-button-menu .yui-menu-body-scrolled{position:relative;}.yui-skin-sam div.yuimenu li.selected{background-color:#B3D4FF;}.yui-skin-sam div.yuimenu li.selected a.selected{color:#000;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bold span.yui-toolbar-icon{background-position:0 0;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-strikethrough span.yui-toolbar-icon{background-position:0 -108px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-italic span.yui-toolbar-icon{background-position:0 -36px;left:5px;}.yui-skin-sa!
 m .yui-toolbar-container .yui-toolbar-undo span.yui-toolbar-icon{background-position:0 -1326px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-redo span.yui-toolbar-icon{background-position:0 -1355px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-underline span.yui-toolbar-icon{background-position:0 -72px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-subscript span.yui-toolbar-icon{background-position:0 -180px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-superscript span.yui-toolbar-icon{background-position:0 -144px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-forecolor span.yui-toolbar-icon{background-position:0 -216px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-backcolor span.yui-toolbar-icon{background-position:0 -288px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyleft span.yui-toolbar-icon{background-position:0 -324px;left:5px;}.yui-skin-sam .yui-toolbar-container !
 .yui-toolbar-justifycenter span.yui-toolbar-icon{background-po!
 sition:0
 -360px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyright span.yui-toolbar-icon{background-position:0 -396px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-justifyfull span.yui-toolbar-icon{background-position:0 -432px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-indent span.yui-toolbar-icon{background-position:0 -720px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-outdent span.yui-toolbar-icon{background-position:0 -684px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-createlink span.yui-toolbar-icon{background-position:0 -792px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertimage span.yui-toolbar-icon{background-position:1px -756px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-left span.yui-toolbar-icon{background-position:0 -972px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-right span.yui-toolbar-icon{background-position:0 -936px;left:5px;}.yui-sk!
 in-sam .yui-toolbar-container .yui-toolbar-inline span.yui-toolbar-icon{background-position:0 -900px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-block span.yui-toolbar-icon{background-position:0 -864px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-bordercolor span.yui-toolbar-icon{background-position:0 -252px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-removeformat span.yui-toolbar-icon{background-position:0 -1080px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-hiddenelements span.yui-toolbar-icon{background-position:0 -1044px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertunorderedlist span.yui-toolbar-icon{background-position:0 -468px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-insertorderedlist span.yui-toolbar-icon{background-position:0 -504px;left:5px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .fi!
 rst-child{width:35px;}
+.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton .first-child a{padding-left:2px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton span.yui-toolbar-icon{display:none;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up,.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{right:2px;background:url(editor-sprite.gif) no-repeat 0 -1222px;overflow:hidden;height:6px;width:7px;min-height:0;padding:0;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.up{top:2px;background-position:0 -1222px;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-spinbutton a.down{bottom:2px;background-position:0 -1187px;}.yui-skin-sam .yui-toolbar-container select{height:22px;border:1px solid #808080;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select .first-child a{padding-left:5px;text-align:left;}.yui-skin-sam .yui-toolbar-container .yui-toolbar-select span.yui-toolbar-icon{background:url(editor-sprite.gif) no-rep!
 eat 0 -1144px;overflow:hidden;right:-2px;top:0;height:20px;}.yui-skin-sam .yui-editor-panel .yui-color-button-menu .bd{background-color:transparent;border:none;width:135px;}.yui-skin-sam .yui-color-button-menu .yui-toolbar-colors{border:1px solid #808080;}.yui-skin-sam .yui-editor-panel{padding:0;margin:0;border:none;background-color:transparent;overflow:visible;position:absolute;}.yui-skin-sam .yui-editor-panel .hd{margin:10px 0 0;padding:0;border:none;}.yui-skin-sam .yui-editor-panel .hd h3{color:#000;border:1px solid #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -200px;width:99%;position:relative;margin:0;padding:3px 0 0 0;font-size:93%;text-indent:5px;height:20px;}.yui-skin-sam .yui-editor-panel .bd{background-color:#F2F2F2;border-left:1px solid #808080;border-right:1px solid #808080;width:99%;margin:0;padding:0;overflow:visible;}.yui-skin-sam .yui-editor-panel ul{list-style-type:none;margin:0;padding:0;}.yui-skin-sam .yui-editor-panel ul li!
 {margin:0;padding:0;}.yui-skin-sam .yui-editor-panel .yui-tool!
 bar-cont
ainer .yui-toolbar-subcont{padding:0;border:none;margin-top:.35em;}.yui-skin-sam .yui-editor-panel .yui-toolbar-bordersize,.yui-skin-sam .yui-editor-panel .yui-toolbar-bordertype{width:50px;}.yui-skin-sam .yui-editor-panel label{display:block;float:none;padding:4px 0;margin-bottom:7px;}.yui-skin-sam .yui-editor-panel label strong{font-weight:normal;font-size:93%;text-align:right;padding-top:2px;}.yui-skin-sam .yui-editor-panel label input{width:75%;}.yui-skin-sam .yui-editor-panel .createlink_target,.yui-skin-sam .yui-editor-panel .insertimage_target{width:auto;margin-right:5px;}.yui-skin-sam .yui-editor-panel .removeLink{width:98%;}.yui-skin-sam .yui-editor-panel label input.warning{background-color:#FFEE69;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group h3{color:#000;float:left;font-weight:normal;font-size:93%;margin:5px 0 0 0;padding:0 3px 0 0;text-align:right;}.yui-skin-sam .yui-editor-panel .height-width h3{margin:3px 0 0 10px;}.yui-skin-sam .yui-editor-panel .heigh!
 t-width{margin:3px 0 0 35px;*margin-left:14px;width:42%;*width:44%;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-border{width:190px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-border{width:210px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding{width:203px;_width:198px;}.yui-skin-sam .yui-editor-panel .no-button .yui-toolbar-group-padding{width:172px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-padding h3{margin-left:25px;*margin-left:12px;}.yui-skin-sam .yui-editor-panel .yui-toolbar-group-textflow{width:182px;}.yui-skin-sam .yui-editor-panel .hd{background:none;}.yui-skin-sam .yui-editor-panel .ft{background-color:#F2F2F2;border:1px solid #808080;border-top:none;padding:0;margin:0 0 2px 0;}.yui-skin-sam .yui-editor-panel .hd span.close{background:url(../../../../assets/skins/sam/sprite.png) no-repeat 0 -300px;cursor:pointer;display:block;height:16px;overflow:hidden;position:absolute;right:5px;text-indent:500px;top:2px;width:26px;}!
 .yui-skin-sam .yui-editor-panel .ft span.tip{background-color:!
 #EDF5FF;
border-top:1px solid #808080;font-size:85%;}.yui-skin-sam .yui-editor-panel .ft span.tip strong{display:block;float:left;margin:0 2px 8px 0;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon{background:url(editor-sprite.gif) no-repeat 0 -1260px;display:block;height:20px;left:2px;position:absolute;top:8px;width:20px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-info{background-position:2px -1260px;}.yui-skin-sam .yui-editor-panel .ft span.tip span.icon-warn{background-position:2px -1296px;}.yui-skin-sam .yui-editor-panel .hd span.knob{position:absolute;height:10px;width:28px;top:-10px;left:25px;text-indent:9999px;overflow:hidden;background:url(editor-knob.gif) no-repeat 0 0;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container{float:left;width:100%;background-image:none;border:none;}.yui-skin-sam .yui-editor-panel .yui-toolbar-container .bd{background-color:#fff;}.yui-editor-blankimage{background-image:url(blankimage.png);}.yui-skin-sam .yui-editor-container !
 .yui-resize-handle-br{height:11px;width:11px;background-position:-20px -60px;background-color:transparent;}

Modified: trunk/root/static/yui/editor/editor-debug.js
===================================================================
--- trunk/root/static/yui/editor/editor-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/editor-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
     /**
+     * @module editor    
      * @description <p>Creates a rich custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
      * @class ToolbarButtonAdvanced
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event, container_core, menu, button
-     * @beta
      * 
      * Provides a toolbar button based on the button and menu widgets.
      * @constructor
+     * @class ToolbarButtonAdvanced
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
     */
@@ -55,14 +53,13 @@
 
 
     /**
-     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
+     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p><p>Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.</p>
      * @class ToolbarButton
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event
-     * @Extends YAHOO.util.Element
-     * @beta
+     * @extends YAHOO.util.Element
      * 
-     * Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.
+     * 
      * @constructor
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
@@ -91,7 +88,8 @@
         oConfig.element.className = 'yui-button yui-' + oConfig.attributes.type + '-button';
         oConfig.element.innerHTML = '<span class="first-child"><a href="#">LABEL</a></span>';
         oConfig.element.firstChild.firstChild.tabIndex = '-1';
-        oConfig.attributes.id = Dom.generateId();
+        oConfig.attributes.id = (oConfig.attributes.id || Dom.generateId());
+        oConfig.element.id = oConfig.attributes.id;
 
         YAHOO.widget.ToolbarButton.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
     };
@@ -147,6 +145,10 @@
 
             this.on('mouseover', this._handleMouseOver, this, true);
             this.on('mouseout', this._handleMouseOut, this, true);
+            this.on('click', function(ev) {
+                Event.stopEvent(ev);
+                return false;
+            }, this, true);
         },
         /**
         * @method initAttributes
@@ -305,9 +307,10 @@
         * @method fireEvent
         * @description Overridden fireEvent method to prevent DOM events from firing if the button is disabled.
         */        
-        fireEvent: function (p_sType , p_aArgs) {
+        fireEvent: function(p_sType, p_aArgs) {
             //  Disabled buttons should not respond to DOM events
             if (this.DOM_EVENTS[p_sType] && this.get('disabled')) {
+                Event.stopEvent(p_aArgs);
                 return;
             }
         
@@ -325,16 +328,13 @@
     });
 })();
 /**
+ * @module editor
  * @description <p>Creates a rich Toolbar widget based on Button. Primarily used with the Rich Text Editor</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbarbutton
  * @optional container_core, dragdrop
- * @beta
  */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
@@ -992,11 +992,6 @@
                             } else {
                                 this.get('cont').appendChild(this._dragHandle);
                             }
-                            /**
-                            * @property dd
-                            * @description The DragDrop instance associated with the Toolbar
-                            * @type Object
-                            */
                             this.dd = new YAHOO.util.DD(this.get('id'));
                             this.dd.setHandleElId(this._dragHandle.id);
                             
@@ -2112,11 +2107,11 @@
 */
 })();
 /**
+ * @module editor
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbar
  * @optional animation, container_core, resize, dragdrop
- * @beta
  */
 
 (function() {
@@ -2240,6 +2235,11 @@
         * @type YAHOO.util.Resize
         */
         resize: null,
+        /**
+        * @private
+        * @method _setupDD
+        * @description Sets up the DD instance used from the 'drag' config option.
+        */
         _setupDD: function() {
             if (!YAHOO.util.DD) { return false; }
             if (this.get('drag')) {
@@ -2326,6 +2326,14 @@
             FOCUS_AFTER: {
                 key: 27
             },
+            FONT_SIZE_UP: {
+                key: 38,
+                mods: ['shift', 'ctrl']
+            },
+            FONT_SIZE_DOWN: {
+                key: 40,
+                mods: ['shift', 'ctrl']
+            },
             CREATE_LINK: {
                 key: 76,
                 mods: ['shift', 'ctrl']
@@ -2396,7 +2404,7 @@
         * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' }
         * @type String
         */
-        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }',
+        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }',
         /**
         * @property _defaultToolbar
         * @private
@@ -2750,38 +2758,21 @@
             return this.get('iframe').get('element').contentWindow;
         },
         /**
+        * @method focus
+        * @description Attempt to set the focus of the iframes window.
+        */
+        focus: function() {
+            this._getWindow().focus();
+        },
+        /**
         * @private
+        * @depreciated - This should not be used, moved to this.focus();
         * @method _focusWindow
         * @description Attempt to set the focus of the iframes window.
-        * @param {Boolean} onLoad Safari needs some special care to set the cursor in the iframe
         */
-        _focusWindow: function(onLoad) {
-            if (this.browser.webkit) {
-                if (onLoad) {
-                    /**
-                    * @knownissue Safari Cursor Position
-                    * @browser Safari 2.x
-                    * @description Can't get Safari to place the cursor at the beginning of the text..
-                    * This workaround at least set's the toolbar into the proper state.
-                    */
-                    this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild, 0, this._getDoc().body.firstChild, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                } else {
-                    this._getSelection().setBaseAndExtent(this._getDoc().body, 1, this._getDoc().body, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                }
-                this._getWindow().focus();
-            } else {
-                this._getWindow().focus();
-            }
+        _focusWindow: function() {
+            YAHOO.log('_focusWindow: depreciated in favor of this.focus()', 'warn', 'Editor');
+            this.focus();
         },
         /**
         * @private
@@ -2968,12 +2959,47 @@
         },
         /**
         * @private
+        * @property _focused
+        * @description Holder for trapping focus/blur state and prevent double events
+        * @type Boolean
+        */
+        _focused: null,
+        /**
+        * @private
+        * @method _handleFocus
+        * @description Handles the focus of the iframe. Note, this is window focus event, not an Editor focus event.
+        * @param {Event} e The DOM Event
+        */
+        _handleFocus: function(e) {
+            if (!this._focused) {
+                YAHOO.log('Editor Window Focused', 'info', 'SimpleEditor');
+                this._focused = true;
+                this.fireEvent('editorWindowFocus', { type: 'editorWindowFocus', target: this });
+            }
+        },
+        /**
+        * @private
+        * @method _handleBlur
+        * @description Handles the blur of the iframe. Note, this is window blur event, not an Editor blur event.
+        * @param {Event} e The DOM Event
+        */
+        _handleBlur: function(e) {
+            if (this._focused) {
+                YAHOO.log('Editor Window Blurred', 'info', 'SimpleEditor');
+                this._focused = false;
+                this.fireEvent('editorWindowBlur', { type: 'editorWindowBlur', target: this });
+            }
+        },
+        /**
+        * @private
         * @method _initEditorEvents
         * @description This method sets up the listeners on the Editors document.
         */
         _initEditorEvents: function() {
             //Setup Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.on(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.on(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.on(doc, 'click', this._handleClick, this, true);
@@ -2981,6 +3007,15 @@
             Event.on(doc, 'keypress', this._handleKeyPress, this, true);
             Event.on(doc, 'keyup', this._handleKeyUp, this, true);
             Event.on(doc, 'keydown', this._handleKeyDown, this, true);
+            /* TODO -- Everyone but Opera works here..
+            Event.on(doc, 'paste', function() {
+                YAHOO.log('PASTE', 'info', 'SimpleEditor');
+            }, this, true);
+            */
+ 
+            //Focus and blur..
+            Event.on(win, 'focus', this._handleFocus, this, true);
+            Event.on(win, 'blur', this._handleBlur, this, true);
         },
         /**
         * @private
@@ -2989,7 +3024,9 @@
         */
         _removeEditorEvents: function() {
             //Remove Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.removeListener(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.removeListener(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.removeListener(doc, 'click', this._handleClick, this, true);
@@ -2997,7 +3034,17 @@
             Event.removeListener(doc, 'keypress', this._handleKeyPress, this, true);
             Event.removeListener(doc, 'keyup', this._handleKeyUp, this, true);
             Event.removeListener(doc, 'keydown', this._handleKeyDown, this, true);
+
+            //Focus and blur..
+            Event.removeListener(win, 'focus', this._handleFocus, this, true);
+            Event.removeListener(win, 'blur', this._handleBlur, this, true);
         },
+        _fixWebkitDivs: function() {
+            if (this.browser.webkit) {
+                var divs = this._getDoc().body.getElementsByTagName('div');
+                Dom.addClass(divs, 'yui-wk-div');
+            }
+        },
         /**
         * @private
         * @method _initEditor
@@ -3028,6 +3075,7 @@
             }
 
             this.fireEvent('editorContentLoaded', { type: 'editorLoaded', target: this });
+            this._fixWebkitDivs();
             if (this.get('dompath')) {
                 YAHOO.log('Delayed DomPath write', 'info', 'SimpleEditor');
                 var self = this;
@@ -3102,6 +3150,11 @@
             var value = ((this._textarea) ? this.get('element').value : this.get('element').innerHTML),
                 doc = null;
 
+            if ((value === '') && this.browser.gecko) {
+                //It seems that Gecko doesn't like an empty body so we have to give it something..
+                value = '<br>';
+            }
+
             var html = Lang.substitute(this.get('html'), {
                 TITLE: this.STR_TITLE,
                 CONTENT: this._cleanIncomingHTML(value),
@@ -3229,19 +3282,23 @@
                 if (this.browser.gecko) {
                     //Added in 2.6.0
                     if (range.startContainer) {
-                        check = false;
                         if (range.startContainer.nodeType === 3) {
                             elm = range.startContainer.parentNode;
                         } else if (range.startContainer.nodeType === 1) {
                             elm = range.startContainer;
-                        } else {
-                            check = true;
                         }
-                        if (!check) {
-                            this.currentEvent = null;
+                        //Added in 2.7.0
+                        if (this.currentEvent) {
+                            var tar = Event.getTarget(this.currentEvent);
+                            if (!this._isElement(tar, 'html')) {
+                                if (elm !== tar) {
+                                    elm = tar;
+                                }
+                            }
                         }
                     }
                 }
+                
                 if (check) {
                     if (sel.anchorNode && (sel.anchorNode.nodeType == 3)) {
                         if (sel.anchorNode.parentNode) { //next check parentNode
@@ -3361,6 +3418,7 @@
                 pathArr = [],
                 classPath = '',
                 pathStr = '';
+
             for (var i = 0; i < path.length; i++) {
                 var tag = path[i].tagName.toLowerCase();
                 if ((tag == 'ol') && (path[i].type)) {
@@ -3556,7 +3614,7 @@
             //this._setCurrentEvent(ev);
             var self = this;
             if (this.browser.opera) {
-                /**
+                /*
                 * @knownissue Opera appears to stop the MouseDown, Click and DoubleClick events on an image inside of a document with designMode on..
                 * @browser Opera
                 * @description This work around traps the MouseUp event and sets a timer to check if another MouseUp event fires in so many seconds. If another event is fired, they we internally fire the DoubleClick event.
@@ -3781,6 +3839,7 @@
             }
             var doExec = false,
                 action = null,
+                value = null,
                 exec = false;
 
             //YAHOO.log('keyCode: ' + ev.keyCode, 'info', 'SimpleEditor');
@@ -3837,6 +3896,29 @@
                         doExec = true;
                     }
                     break;
+                case this._keyMap.FONT_SIZE_UP.key:
+                case this._keyMap.FONT_SIZE_DOWN.key:
+                    var uk = false, dk = false;
+                    if (this._checkKey(this._keyMap.FONT_SIZE_UP, ev)) {
+                        uk = true;
+                    }
+                    if (this._checkKey(this._keyMap.FONT_SIZE_DOWN, ev)) {
+                        dk = true;
+                    }
+                    if (uk || dk) {
+                        var fs_button = this.toolbar.getButtonByValue('fontsize'),
+                            label = parseInt(fs_button.get('label'), 10),
+                            newValue = (label + 1);
+
+                        if (dk) {
+                            newValue = (label - 1);
+                        }
+
+                        action = 'fontsize';
+                        value = newValue + 'px';
+                        doExec = true;
+                    }
+                    break;
                 //case 73: //I
                 case this._keyMap.ITALIC.key:
                     if (this._checkKey(this._keyMap.ITALIC, ev)) {
@@ -3882,24 +3964,66 @@
                     }
                     break;
                 case 13:
+                    var p = null, i = 0;
                     if (this.get('ptags') && !ev.shiftKey) {
                         if (this.browser.gecko) {
                             tar = this._getSelectedElement();
-                            if (!this._isElement(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                            if (!this._hasParent(tar, 'li')) {
+                                if (this._hasParent(tar, 'p')) {
+                                    p = this._getDoc().createElement('p');
+                                    p.innerHTML = ' ';
+                                    Dom.insertAfter(p, tar);
+                                    this._selectNode(p.firstChild);
+                                } else if (this._isElement(tar, 'body')) {
+                                    this.execCommand('insertparagraph', null);
+                                    var ps = this._getDoc().body.getElementsByTagName('p');
+                                    for (i = 0; i < ps.length; i++) {
+                                        if (ps[i].getAttribute('_moz_dirty') !== null) {
+                                            p = this._getDoc().createElement('p');
+                                            p.innerHTML = ' ';
+                                            Dom.insertAfter(p, ps[i]);
+                                            this._selectNode(p.firstChild);
+                                            ps[i].removeAttribute('_moz_dirty');
+                                        }
+                                    }
+                                } else {
+                                    YAHOO.log('Something went wrong with paragraphs, please file a bug!!', 'error', 'SimpleEditor');
+                                    doExec = true;
+                                    action = 'insertparagraph';
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                         if (this.browser.webkit) {
                             tar = this._getSelectedElement();
                             if (!this._hasParent(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                                this.execCommand('insertparagraph', null);
+                                var divs = this._getDoc().body.getElementsByTagName('div');
+                                for (i = 0; i < divs.length; i++) {
+                                    if (!Dom.hasClass(divs[i], 'yui-wk-div')) {
+                                        Dom.addClass(divs[i], 'yui-wk-p');
+                                    }
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                     } else {
+                        if (this.browser.webkit) {
+                            tar = this._getSelectedElement();
+                            if (!this._hasParent(tar, 'li')) {
+                                this.execCommand('inserthtml', '<var id="yui-br"></var>');
+                                var holder = this._getDoc().getElementById('yui-br'),
+                                    br = this._getDoc().createElement('br'),
+                                    caret = this._getDoc().createElement('span');
+
+                                holder.parentNode.replaceChild(br, holder);
+                                caret.className = 'yui-non';
+                                caret.innerHTML = ' ';
+                                Dom.insertAfter(caret, br);
+                                this._selectNode(caret);
+                                Event.stopEvent(ev);
+                            }
+                        }
                         if (this.browser.ie) {
                             YAHOO.log('Stopping P tags', 'info', 'SimpleEditor');
                             //Insert a <br> instead of a <p></p> in Internet Explorer
@@ -3921,7 +4045,7 @@
                 this._listFix(ev);
             }
             if (doExec && action) {
-                this.execCommand(action, null);
+                this.execCommand(action, value);
                 Event.stopEvent(ev);
                 this.nodeChange();
             }
@@ -4279,7 +4403,7 @@
                 if (!this.browser.webkit) {
                      var Fself = this;
                      setTimeout(function() {
-                         Fself._focusWindow.call(Fself);
+                         Fself.focus.call(Fself);
                      }, 5);
                  }
             }
@@ -4323,12 +4447,6 @@
                         this.toolbar.set('disabled', true);
                     }
                     this._mask = document.createElement('DIV');
-                    Dom.setStyle(this._mask, 'height', '100%');
-                    Dom.setStyle(this._mask, 'width', '100%');
-                    Dom.setStyle(this._mask, 'position', 'absolute');
-                    Dom.setStyle(this._mask, 'top', '0');
-                    Dom.setStyle(this._mask, 'left', '0');
-                    Dom.setStyle(this._mask, 'opacity', '.5');
                     Dom.addClass(this._mask, 'yui-editor-masked');
                     this.get('iframe').get('parentNode').appendChild(this._mask);
                 }
@@ -4341,7 +4459,7 @@
                         this.toolbar.set('disabled', false);
                     }
                     this._setDesignMode('on');
-                    this._focusWindow();
+                    this.focus();
                     var self = this;
                     window.setTimeout(function() {
                         self.nodeChange.call(self);
@@ -4380,6 +4498,12 @@
         */
         STR_IMAGE_HERE: 'Image URL Here',
         /**
+        * @property STR_IMAGE_URL
+        * @description The label string for Image URL
+        * @type String
+        */
+        STR_IMAGE_URL: 'Image URL',        
+        /**
         * @property STR_LINK_URL
         * @description The label string for the Link URL.
         * @type String
@@ -4561,7 +4685,7 @@
 
             /**
             * @config ptags
-            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
+            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
             * @default false
             * @type Boolean
             */
@@ -4634,7 +4758,7 @@
             });
             /**
             * @private
-            * @depreciated
+            * @depreciated - No longer used, should use this.get('element')
             * @config textarea
             * @description Internal config for holding the textarea element (replaced with element).
             * @default null
@@ -4645,17 +4769,6 @@
                 writeOnce: true
             });
             /**
-            * @private
-            * @config container
-            * @description Internal config for holding a reference to the container to append a dynamic editor to.
-            * @default null
-            * @type HTMLElement
-            */
-            this.setAttributeConfig('container', {
-                readOnly: true,
-                value: null
-            });
-            /**
             * @config nodeChangeThreshold
             * @description The number of seconds that need to be in between nodeChange processing
             * @default 3
@@ -5002,7 +5115,7 @@
                         this.on('editorContentLoaded', function() {
                             var self = this;
                             setTimeout(function() {
-                                self._focusWindow.call(self, true);
+                                self.focus.call(self);
                                 self.editorDirty = false;
                             }, 400);
                         }, this, true);
@@ -5082,6 +5195,17 @@
                 writeOnce: true,
                 value: attr.resize || false
             });
+
+            /**
+            * @config filterWord
+            * @description Attempt to filter out MS Word HTML from the Editor's output.
+            * @type Boolean
+            */
+            this.setAttributeConfig('filterWord', {
+                value: attr.filterWord || false,
+                validator: YAHOO.lang.isBoolean
+            });
+
         },
         /**
         * @private
@@ -5139,7 +5263,10 @@
                 newHeight = parseInt(this.get('height'), 10);
             }
             if ((height != newHeight) && (newHeight >= parseInt(this.get('height'), 10))) {   
-                Dom.setStyle(this.get('editor_wrapper'), 'height', newHeight + 'px');
+                var anim = this.get('animate');
+                this.set('animate', false);
+                this.set('height', newHeight + 'px');
+                this.set('animate', anim);
                 if (this.browser.ie) {
                     //Internet Explorer needs this
                     this.get('iframe').setStyle('height', '99%');
@@ -5220,7 +5347,7 @@
             var button = this.toolbar.getButtonById(o.button.id);
             var value = button.get('label') + 'px';
             this.execCommand('fontsize', value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5250,7 +5377,7 @@
             var value = this._getSelection();
 
             this.execCommand(cmd, value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5357,7 +5484,7 @@
             }
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     src = 'http://';
                 if (!el) {
@@ -5371,17 +5498,26 @@
                         }
                     }
                 }
-                var str = prompt(this.STR_LINK_URL + ': ', src);
+                var str = prompt(this.STR_IMAGE_URL + ': ', src);
                 if ((str !== '') && (str !== null)) {
                     el.setAttribute('src', str);
-                } else if (str === null) {
+                } else if (str === '') {
                     el.parentNode.removeChild(el);
                     this.currentElement = [];
                     this.nodeChange();
+                } else if ((str === null)) {
+                    src = el.getAttribute('src', 2);
+                    if (src.indexOf(this.get('blankimage')) != -1) {
+                        el.parentNode.removeChild(el);
+                        this.currentElement = [];
+                        this.nodeChange();
+                    }
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this, true);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this, true);
         },
         /**
         * @private
@@ -5418,7 +5554,7 @@
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
 
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     url = '';
 
@@ -5450,7 +5586,9 @@
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this);
 
         },
         /**
@@ -5507,8 +5645,9 @@
 
             this.get('element_cont').setStyle('display', 'none');
             this.get('element_cont').addClass(this.CLASS_CONTAINER);
+            
+            this.set('iframe', this._createIframe());
 
-            this.set('iframe', this._createIframe());
             window.setTimeout(function() {
                 self._setInitialContent.call(self);
             }, 10);
@@ -5648,6 +5787,49 @@
     /* {{{  Command Overrides */
 
         /**
+        * @method cmd_bold
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('bold') is used.
+        */
+        cmd_bold: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontWeight == 'bold') {
+                        el.style.fontWeight = '';
+                        var b = this._getDoc().createElement('b'),
+                        par = el.parentNode;
+                        par.replaceChild(b, el);
+                        b.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+        /**
+        * @method cmd_italic
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('italic') is used.
+        */
+
+        cmd_italic: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontStyle == 'italic') {
+                        el.style.fontStyle = '';
+                        var i = this._getDoc().createElement('i'),
+                        par = el.parentNode;
+                        par.replaceChild(i, el);
+                        i.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+
+
+        /**
         * @method cmd_underline
         * @param value Value passed from the execCommand method
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('underline') is used.
@@ -5682,18 +5864,14 @@
             }
 
             if (!this._isElement(el, 'body') && !this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
+                el.style.backgroundColor = value;
                 this._selectNode(el);
                 exec = false;
-            } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
-                this._selectNode(el);
-                exec = false;
             } else {
                 if (this.get('insert')) {
                     el = this._createInsertElement({ backgroundColor: value });
                 } else {
-                    this._createCurrentElement('span', { backgroundColor: value });
+                    this._createCurrentElement('span', { backgroundColor: value, color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily });
                     this._selectNode(this.currentElement[0]);
                 }
                 exec = false;
@@ -5710,20 +5888,15 @@
             var exec = true,
                 el = this._getSelectedElement();
                 
-
                 if (!this._isElement(el, 'body') && !this._hasSelection()) {
                     Dom.setStyle(el, 'color', value);
                     this._selectNode(el);
                     exec = false;
-                } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                    Dom.setStyle(el, 'color', value);
-                    this._selectNode(el);
-                    exec = false;
                 } else {
                     if (this.get('insert')) {
                         el = this._createInsertElement({ color: value });
                     } else {
-                        this._createCurrentElement('span', { color: value });
+                        this._createCurrentElement('span', { color: value, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily, backgroundColor: el.style.backgroundColor });
                         this._selectNode(this.currentElement[0]);
                     }
                     exec = false;
@@ -5750,6 +5923,12 @@
             var el = this._getSelectedElement(), _a = null;
             if (this._hasParent(el, 'a')) {
                 this.currentElement[0] = this._hasParent(el, 'a');
+            } else if (this._isElement(el, 'li')) {
+                _a = this._getDoc().createElement('a');
+                _a.innerHTML = el.innerHTML;
+                el.innerHTML = '';
+                el.appendChild(_a);
+                this.currentElement[0] = _a;
             } else if (!this._isElement(el, 'a')) {
                 this._createCurrentElement('a');
                 _a = this._swapEl(this.currentElement[0], 'a');
@@ -5772,8 +5951,8 @@
                 value = this.get('blankimage');
             }
 
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari Cursor Position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5820,8 +5999,8 @@
         */
         cmd_inserthtml: function(value) {
             var exec = true, action = 'inserthtml', _span = null, _range = null;
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari cursor position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5855,7 +6034,7 @@
                 if (tag == 'ul') {
                     action = 'insertunorderedlist';
                 }
-            /**
+            /*
             * @knownissue Safari 2.+ doesn't support ordered and unordered lists
             * @browser Safari 2.x
             * The issue with this workaround is that when applied to a set of text
@@ -5890,6 +6069,17 @@
                             this.currentElement[li].parentNode.removeChild(this.currentElement[li]);
                         }
                     }
+                    
+                    var items = list.firstChild.innerHTML.split('<br>');
+                    if (items.length > 0) {
+                        list.innerHTML = '';
+                        for (var i = 0; i < items.length; i++) {
+                            var item = this._getDoc().createElement('li');
+                            item.innerHTML = items[i];
+                            list.appendChild(item);
+                        }
+                    }
+
                     this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
                     this.currentElement[0] = list;
                     var _h = this.currentElement[0].firstChild;
@@ -6009,27 +6199,40 @@
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontsize') is used.
         */
         cmd_fontsize: function(value) {
-            var el = null;
-            if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
-                YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
-            } else if (!this._isElement(this._getSelectedElement(), 'body')) {
-                el = this._getSelectedElement();
-                YAHOO.util.Dom.setStyle(el, 'fontSize', value);
-                if (this.get('insert') && this.browser.ie) {
-                    var r = this._getRange();
-                    r.collapse(false);
-                    r.select();
-                } else {
-                    this._selectNode(el);
+            var el = null, go = true;
+            el = this._getSelectedElement();
+            if (this.browser.webkit) {
+                if (this.currentElement[0]) {
+                    if (el == this.currentElement[0]) {
+                        go = false;
+                        YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                        this._selectNode(el);
+                        this.currentElement[0] = el;
+                    }
                 }
-            } else {
-                if (this.get('insert') && !this._hasSelection()) {
-                    el = this._createInsertElement({ fontSize: value });
-                    this.currentElement[0] = el;
-                    this._selectNode(this.currentElement[0]);
+            }
+            if (go) {
+                if (!this._isElement(this._getSelectedElement(), 'body') && (!this._hasSelection())) {
+                    el = this._getSelectedElement();
+                    YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                    if (this.get('insert') && this.browser.ie) {
+                        var r = this._getRange();
+                        r.collapse(false);
+                        r.select();
+                    } else {
+                        this._selectNode(el);
+                    }
+                } else if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
+                    YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
                 } else {
-                    this._createCurrentElement('span', {'fontSize': value });
-                    this._selectNode(this.currentElement[0]);
+                    if (this.get('insert') && !this._hasSelection()) {
+                        el = this._createInsertElement({ fontSize: value });
+                        this.currentElement[0] = el;
+                        this._selectNode(this.currentElement[0]);
+                    } else {
+                        this._createCurrentElement('span', {'fontSize': value, fontFamily: el.style.fontFamily, color: el.style.color, backgroundColor: el.style.backgroundColor });
+                        this._selectNode(this.currentElement[0]);
+                    }
                 }
             }
             return [false];
@@ -6061,7 +6264,7 @@
         * @method _createInsertElement
         * @description Creates a new "currentElement" then adds some text (and other things) to make it selectable and stylable. Then the user can continue typing.
         * @param {Object} css (optional) Object literal containing styles to apply to the new element.
-        * @return
+        * @return {HTMLElement}
         */
         _createInsertElement: function(css) {
             this._createCurrentElement('span', css);
@@ -6074,7 +6277,7 @@
             } else if (this.browser.ie || this.browser.opera) {
                 el.innerHTML = ' ';
             }
-            this._focusWindow();
+            this.focus();
             this._selectNode(el, true);
             return el;
         },
@@ -6153,8 +6356,8 @@
                     }
                 }
                 if (tar) {
-                    /**
-                    * @knownissue
+                    /*
+                    * @knownissue Safari Cursor Position
                     * @browser Safari 2.x
                     * @description The issue here is that we have no way of knowing where the cursor position is
                     * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -6199,12 +6402,15 @@
                         _tmp[_tmp.length] = _tmp1[e];
                     }
                 }
+
                 
                 for (var i = 0; i < _tmp.length; i++) {
                     if ((YAHOO.util.Dom.getStyle(_tmp[i], 'font-family') == 'yui-tmp') || (_tmp[i].face && (_tmp[i].face == 'yui-tmp'))) {
-                        //TODO Why is this here?!?
-                        //el = _elCreate(_tmp[i].tagName, tagStyle);
-                        el = _elCreate(tagName, tagStyle);
+                        if (tagName !== 'span') {
+                            el = _elCreate(tagName, tagStyle);
+                        } else {
+                            el = _elCreate(_tmp[i].tagName, tagStyle);
+                        }
                         el.innerHTML = _tmp[i].innerHTML;
                         if (this._isElement(_tmp[i], 'ol') || (this._isElement(_tmp[i], 'ul'))) {
                             var fc = _tmp[i].getElementsByTagName('li')[0];
@@ -6311,7 +6517,7 @@
         show: function() {
             if (this.browser.gecko) {
                 this._setDesignMode('on');
-                this._focusWindow();
+                this.focus();
             }
             if (this.browser.webkit) {
                 var self = this;
@@ -6365,6 +6571,7 @@
 
             html = html.replace(/<em([^>]*)>/gi, '<i$1>');
             html = html.replace(/<\/em>/gi, '</i>');
+            html = html.replace(/_moz_dirty=""/gi, '');
             
             //Put embed tags back in..
             html = html.replace(/<YUI_EMBED([^>]*)>/gi, '<embed$1>');
@@ -6381,7 +6588,8 @@
             html = html.replace(/<script([^>]*)>/gi, '<bad>');
             html = html.replace(/<\/script([^>]*)>/gi, '</bad>');
             //Replace the line feeds
-            html = html.replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            html = html.replace(/\r\n/g, '<YUI_LF>').replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            
             //Remove Bad HTML elements (used to be script nodes)
             html = html.replace(new RegExp('<bad([^>]*)>(.*?)<\/bad>', 'gi'), '');
             //Replace the lines feeds
@@ -6404,6 +6612,9 @@
             //Make some backups...
             html = this.pre_filter_linebreaks(html, markup);
 
+            //Filter MS Word
+            html = this.filter_msword(html);
+
 		    html = html.replace(/<img([^>]*)\/>/gi, '<YUI_IMG$1>');
 		    html = html.replace(/<img([^>]*)>/gi, '<YUI_IMG$1>');
 
@@ -6425,8 +6636,25 @@
                 html = html.replace(/<b(\s+[^>]*)?>/gi, '<strong$1>');
                 html = html.replace(/<\/b>/gi, '</strong>');
             }
+
+            html = html.replace(/_moz_dirty=""/gi, '');
+
+            //normalize strikethrough
+            html = html.replace(/<strike/gi, '<span style="text-decoration: line-through;"');
+            html = html.replace(/\/strike>/gi, '/span>');
             
+            
             //Case Changing
+            if (this.browser.ie) {
+                html = html.replace(/text-decoration/gi, 'text-decoration');
+                html = html.replace(/font-weight/gi, 'font-weight');
+                html = html.replace(/_width="([^>]*)"/gi, '');
+                html = html.replace(/_height="([^>]*)"/gi, '');
+                //Cleanup Image URL's
+                var url = this._baseHREF.replace(/\//gi, '\\/'),
+                    re = new RegExp('src="' + url, 'gi');
+                html = html.replace(re, 'src="');
+            }
 		    html = html.replace(/<font/gi, '<font');
 		    html = html.replace(/<\/font>/gi, '</font>');
 		    html = html.replace(/<span/gi, '<span');
@@ -6486,9 +6714,9 @@
 		    html = html.replace(/<\/YUI_EMBED>/g, '<\/embed>');
             
             //This should fix &s in URL's
-            html = html.replace(' & ', 'YUI_AMP');
-            html = html.replace('&', '&');
-            html = html.replace('YUI_AMP', '&');
+            html = html.replace(/ & /gi, 'YUI_AMP');
+            html = html.replace(/&/gi, '&');
+            html = html.replace(/YUI_AMP/gi, ' & ');
 
             //Trim the output, removing whitespace from the beginning and end
             html = YAHOO.lang.trim(html);
@@ -6522,6 +6750,50 @@
             return html;
         },
         /**
+        * @method filter_msword
+        * @param String html The HTML string to filter
+        * @description Filters out msword html attributes and other junk. Activate with filterWord: true in config
+        */
+        filter_msword: function(html) {
+            if (!this.get('filterWord')) {
+                return html;
+            }
+            //Remove the ms o: tags
+            html = html.replace(/<o:p>\s*<\/o:p>/g, '');
+            html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, ' ');
+
+            //Remove the ms w: tags
+            html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '');
+
+            //Remove mso-? styles.
+            html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '');
+
+            //Remove more bogus MS styles.
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '');
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '');
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
+            html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
+            html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" );
+            html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '');
+            html = html.replace( /\s*tab-stops:[^"]*/gi, '');
+
+            //Remove XML declarations
+            html = html.replace(/<\\?\?xml[^>]*>/gi, '');
+
+            //Remove lang
+            html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove language tags
+            html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove onmouseover and onmouseout events (from MS Word comments effect)
+            html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3");
+            html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3");
+            
+            return html;
+        },
+        /**
         * @method filter_invalid_lists
         * @param String html The HTML string to filter
         * @description Filters invalid ol and ul list markup, converts this: <li></li><ol>..</ol> to this: <li></li><li><ol>..</ol></li>
@@ -6531,16 +6803,16 @@
 
             html = html.replace(/<\/li><ol>/gi, '</li><li><ol>');
             html = html.replace(/<\/ol>/gi, '</ol></li>');
-            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>\n");
+            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>");
 
             html = html.replace(/<\/li><ul>/gi, '</li><li><ul>');
             html = html.replace(/<\/ul>/gi, '</ul></li>');
-            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>\n");
+            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>");
 
-            html = html.replace(/<\/li>/gi, "</li>\n");
-            html = html.replace(/<\/ol>/gi, "</ol>\n");
-            html = html.replace(/<ol>/gi, "<ol>\n");
-            html = html.replace(/<ul>/gi, "<ul>\n");
+            html = html.replace(/<\/li>/gi, "</li>");
+            html = html.replace(/<\/ol>/gi, "</ol>");
+            html = html.replace(/<ol>/gi, "<ol>");
+            html = html.replace(/<ul>/gi, "<ul>");
             return html;
         },
         /**
@@ -6555,6 +6827,10 @@
                 html = html.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi, '    ');
                 html = html.replace(/Apple-style-span/gi, '');
                 html = html.replace(/style="line-height: normal;"/gi, '');
+                html = html.replace(/yui-wk-div/gi, '');
+                html = html.replace(/yui-wk-p/gi, '');
+
+
                 //Remove bogus LI's
                 html = html.replace(/<li><\/li>/gi, '');
                 html = html.replace(/<li> <\/li>/gi, '');
@@ -6564,8 +6840,8 @@
 		            html = html.replace(/<div([^>]*)>/g, '<p$1>');
 				    html = html.replace(/<\/div>/gi, '</p>');
                 } else {
-                    html = html.replace(/<div>/gi, '');
-				    html = html.replace(/<\/div>/gi, '<br>');
+                    html = html.replace(/<div>/gi, '<br>');
+				    html = html.replace(/<\/div>/gi, '');
                 }
             }
             return html;
@@ -6598,8 +6874,6 @@
             if (this.browser.ie) {
 		        html = html.replace(/ class= /gi, '');
 		        html = html.replace(/ class= >/gi, '');
-		        html = html.replace(/_height="([^>])"/gi, '');
-		        html = html.replace(/_width="([^>])"/gi, '');
             }
             
             return html;
@@ -6724,7 +6998,7 @@
         closeWindow: function() {
             //this.unsubscribeAll('afterExecCommand');
             this.toolbar.resetAllButtons();
-            this._focusWindow();        
+            this.focus();        
         },
         /**
         * @method destroy
@@ -6897,72 +7171,83 @@
 * @type YAHOO.util.CustomEvent
 */
 
+/**
+* @event editorWindowFocus
+* @description Fires when the iframe is focused. Note, this is window focus event, not an Editor focus event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event editorWindowBlur
+* @description Fires when the iframe is blurred. Note, this is window blur event, not an Editor blur event.
+* @type YAHOO.util.CustomEvent
+*/
 
+
+/**
+ * @description Singleton object used to track the open window objects and panels across the various open editors
+ * @class EditorInfo
+ * @static
+*/
+YAHOO.widget.EditorInfo = {
     /**
-     * @description Singleton object used to track the open window objects and panels across the various open editors
-     * @class EditorInfo
-     * @static
+    * @private
+    * @property _instances
+    * @description A reference to all editors on the page.
+    * @type Object
     */
-    YAHOO.widget.EditorInfo = {
-        /**
-        * @private
-        * @property _instances
-        * @description A reference to all editors on the page.
-        * @type Object
-        */
-        _instances: {},
-        /**
-        * @private
-        * @property blankImage
-        * @description A reference to the blankImage url
-        * @type String 
-        */
-        blankImage: '',
-        /**
-        * @private
-        * @property window
-        * @description A reference to the currently open window object in any editor on the page.
-        * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
-        */
-        window: {},
-        /**
-        * @private
-        * @property panel
-        * @description A reference to the currently open panel in any editor on the page.
-        * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
-        */
-        panel: null,
-        /**
-        * @method getEditorById
-        * @description Returns a reference to the Editor object associated with the given textarea
-        * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
-        * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
-        */
-        getEditorById: function(id) {
-            if (!YAHOO.lang.isString(id)) {
-                //Not a string, assume a node Reference
-                id = id.id;
+    _instances: {},
+    /**
+    * @private
+    * @property blankImage
+    * @description A reference to the blankImage url
+    * @type String 
+    */
+    blankImage: '',
+    /**
+    * @private
+    * @property window
+    * @description A reference to the currently open window object in any editor on the page.
+    * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
+    */
+    window: {},
+    /**
+    * @private
+    * @property panel
+    * @description A reference to the currently open panel in any editor on the page.
+    * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
+    */
+    panel: null,
+    /**
+    * @method getEditorById
+    * @description Returns a reference to the Editor object associated with the given textarea
+    * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
+    * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
+    */
+    getEditorById: function(id) {
+        if (!YAHOO.lang.isString(id)) {
+            //Not a string, assume a node Reference
+            id = id.id;
+        }
+        if (this._instances[id]) {
+            return this._instances[id];
+        }
+        return false;
+    },
+    /**
+    * @method toString
+    * @description Returns a string representing the EditorInfo.
+    * @return {String}
+    */
+    toString: function() {
+        var len = 0;
+        for (var i in this._instances) {
+            if (Lang.hasOwnProperty(this._instances, i)) {
+                len++;
             }
-            if (this._instances[id]) {
-                return this._instances[id];
-            }
-            return false;
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the EditorInfo.
-        * @return {String}
-        */
-        toString: function() {
-            var len = 0;
-            for (var i in this._instances) {
-                if (Lang.hasOwnProperty(this._instances, i)) {
-                    len++;
-                }
-            }
-            return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
         }
-    };
+        return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
+    }
+};
 
 
 
@@ -6973,8 +7258,7 @@
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, container_core, simpleeditor
- * @optional dragdrop, animation, menu, button
- * @beta
+ * @optional dragdrop, animation, menu, button, resize
  */
 
 (function() {
@@ -7019,7 +7303,7 @@
         * @return Boolean
         */
         _hasUndoLevel: function() {
-            return (this._undoCache.length && this._undoLevel);
+            return ((this._undoCache.length > 1) && this._undoLevel);
         },
         /**
         * @private
@@ -7037,6 +7321,7 @@
                     this.toolbar.enableButton(redo_button);
                 }
             }
+            this._lastCommand = null;
         },
         /**
         * @private
@@ -7126,12 +7411,6 @@
         */
         STR_IMAGE_PROP_TITLE: 'Image Options',
         /**
-        * @property STR_IMAGE_URL
-        * @description The label string for Image URL
-        * @type String
-        */
-        STR_IMAGE_URL: 'Image URL',
-        /**
         * @property STR_IMAGE_TITLE
         * @description The label string for Image Description
         * @type String
@@ -7216,6 +7495,12 @@
         */
         STR_LINK_TITLE: 'Description',
         /**
+        * @property STR_NONE
+        * @description The string for the word none.
+        * @type String
+        */
+        STR_NONE: 'none',
+        /**
         * @protected
         * @property CLASS_LOCAL_FILE
         * @description CSS class applied to an element when it's found to have a local url.
@@ -7412,7 +7697,9 @@
             * @attribute hiddencss
             * @description The CSS used to show/hide hidden elements on the page, these rules must be prefixed with the class provided in <code>this.CLASS_HIDDEN</code>
             * @default <code><pre>
-            .yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u, .yui-hidden div, .yui-hidden p, .yui-hidden span, .yui-hidden img, .yui-hidden ul, .yui-hidden ol, .yui-hidden li, .yui-hidden table {
+            .yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u,
+            .yui-hidden div, .yui-hidden p, .yui-hidden span, .yui-hidden img, .yui-hidden ul, .yui-hidden ol,
+            .yui-hidden li, .yui-hidden table {
                 border: 1px dotted #ccc;
             }
             .yui-hidden .yui-non {
@@ -7562,6 +7849,7 @@
                 unlink.title = this.STR_LINK_PROP_REMOVE;
                 Event.on(unlink, 'click', function(ev) {
                     Event.stopEvent(ev);
+                    this.unsubscribeAll('afterExecCommand');
                     this.execCommand('unlink');
                     this.closeWindow();
                 }, this, true);
@@ -7570,7 +7858,10 @@
                 
                 this._windows.createlink = {};
                 this._windows.createlink.body = body;
-                body.style.display = 'none';
+                //body.style.display = 'none';
+                Event.on(body, 'keyup', function(e) {
+                    Event.stopPropagation(e);
+                });
                 this.get('panel').editor_form.appendChild(body);
                 this.fireEvent('windowCreateLinkRender', { type: 'windowCreateLinkRender', panel: this.get('panel'), body: body });
                 return body;
@@ -7957,7 +8248,7 @@
 
                 this._windows.insertimage = {};
                 this._windows.insertimage.body = body;
-                body.style.display = 'none';
+                //body.style.display = 'none';
                 this.get('panel').editor_form.appendChild(body);
                 this.fireEvent('windowInsertImageRender', { type: 'windowInsertImageRender', panel: this.get('panel'), body: body, toolbar: tbar });
                 return body;
@@ -7975,6 +8266,7 @@
                 }
             }
             this.on('afterExecCommand', function() {
+                YAHOO.log('afterExecCommand :: _handleInsertImageClick', 'info', 'Editor');
                 var el = this.currentElement[0],
                     body = null,
                     link = '',
@@ -8049,21 +8341,22 @@
                 tbar.editor_el = el;
                 
 
-                var bsize = '0';
-                var btype = 'solid';
+                var bsize = '0',
+                    btype = 'solid';
+
                 if (el.style.borderLeftWidth) {
                     bsize = parseInt(el.style.borderLeftWidth, 10);
                 }
                 if (el.style.borderLeftStyle) {
                     btype = el.style.borderLeftStyle;
                 }
-                var bs_button = tbar.getButtonByValue('bordersize');
-                var bSizeStr = ((parseInt(bsize, 10) > 0) ? '' : 'none');
-                bs_button.set('label', '<span class="yui-toolbar-bordersize-' + bsize + '">'+bSizeStr+'</span>');
+                var bs_button = tbar.getButtonByValue('bordersize'),
+                    bSizeStr = ((parseInt(bsize, 10) > 0) ? '' : this.STR_NONE);
+                bs_button.set('label', '<span class="yui-toolbar-bordersize-' + bsize + '">' + bSizeStr + '</span>');
                 this._updateMenuChecked('bordersize', bsize, tbar);
 
                 var bt_button = tbar.getButtonByValue('bordertype');
-                bt_button.set('label', '<span class="yui-toolbar-bordertype-' + btype + '"></span>');
+                bt_button.set('label', '<span class="yui-toolbar-bordertype-' + btype + '">asdfa</span>');
                 this._updateMenuChecked('bordertype', btype, tbar);
                 if (parseInt(bsize, 10) > 0) {
                     tbar.enableButton(bt_button);
@@ -8079,7 +8372,7 @@
                     tbar.selectButton('inline');
                 }
                 if (parseInt(el.style.marginLeft, 10) > 0) {
-                     tbar.getButtonByValue('padding').set('label', ''+parseInt(el.style.marginLeft, 10));
+                    tbar.getButtonByValue('padding').set('label', ''+parseInt(el.style.marginLeft, 10));
                 }
                 if (el.style.borderSize) {
                     tbar.selectButton('bordersize');
@@ -8108,7 +8401,6 @@
                 if ((height != oheight) || (width != owidth)) {
                     var s = document.createElement('span');
                     s.className = 'info';
-                    //s.innerHTML = this.STR_IMAGE_ORIG_SIZE + '<br>'+ owidth +' x ' + oheight;
                     s.innerHTML = this.STR_IMAGE_ORIG_SIZE + ': ('+ owidth +' x ' + oheight + ')';
                     if (Dom.get(this.get('id') + '_insertimage_height').nextSibling) {
                         var old = Dom.get(this.get('id') + '_insertimage_height').nextSibling;
@@ -8208,6 +8500,17 @@
         * @return {<a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>}
         */
         _renderPanel: function() {
+            var panelEl = document.createElement('div');
+            Dom.addClass(panelEl, 'yui-editor-panel');
+            panelEl.id = this.get('id') + this.EDITOR_PANEL_ID;
+            panelEl.style.position = 'absolute';
+            panelEl.style.top = '-9999px';
+            panelEl.style.left = '-9999px';
+            document.body.appendChild(panelEl);
+            this.get('element_cont').insertBefore(panelEl, this.get('element_cont').get('firstChild'));
+
+                
+
             var panel = new YAHOO.widget.Overlay(this.get('id') + this.EDITOR_PANEL_ID, {
                     width: '300px',
                     iframe: true,
@@ -8218,9 +8521,9 @@
                 });
             this.set('panel', panel);
 
-            this.get('panel').setBody('---');
-            this.get('panel').setHeader(' ');
-            this.get('panel').setFooter(' ');
+            panel.setBody('---');
+            panel.setHeader(' ');
+            panel.setFooter(' ');
 
 
             var body = document.createElement('div');
@@ -8237,13 +8540,9 @@
             _note.className = 'yui-editor-skipheader';
             _note.innerHTML = this.STR_CLOSE_WINDOW_NOTE;
             body.appendChild(_note);
-            var form = document.createElement('form');
-            form.setAttribute('method', 'GET');
+            var form = document.createElement('fieldset');
             panel.editor_form = form;
 
-            Event.on(form, 'submit', function(ev) {
-                Event.stopEvent(ev);
-            }, this, true);
             body.appendChild(form);
             var _close = document.createElement('span');
             _close.innerHTML = 'X';
@@ -8274,39 +8573,53 @@
             });
 
             var fireShowEvent = function() {
-                //panel.bringToTop();
+                panel.bringToTop();
+                YAHOO.util.Dom.setStyle(this.element, 'display', 'block');
+                this._handleWindowInputs(false);
             };
             panel.showEvent.subscribe(fireShowEvent, this, true);
+            panel.hideEvent.subscribe(function() {
+                this._handleWindowInputs(true);
+            }, this, true);
             panel.renderEvent.subscribe(function() {
                 this._renderInsertImageWindow();
                 this._renderCreateLinkWindow();
                 this.fireEvent('windowRender', { type: 'windowRender', panel: panel });
+                this._handleWindowInputs(true);
             }, this, true);
 
             if (this.DOMReady) {
-                this.get('panel').render(document.body);
-                //Render to the element_cont so we can skin it better
-                //this.get('panel').render(this.get('element_cont').get('element'));
-                Dom.addClass(this.get('panel').element, 'yui-editor-panel');
+                this.get('panel').render();
             } else {
                 Event.onDOMReady(function() {
-                    this.get('panel').render(document.body);
-                    //Render to the element_cont so we can skin it better
-                    //this.get('panel').render(this.get('element_cont').get('element'));
-                    Dom.addClass(this.get('panel').element, 'yui-editor-panel');
+                    this.get('panel').render();
                 }, this, true);
             }
-            this.get('panel').showEvent.subscribe(function() {
-                YAHOO.util.Dom.setStyle(this.element, 'display', 'block');
-            });
             return this.get('panel');
         },
         /**
+        * @method _handleWindowInputs
+        * @param {Boolean} disable The state to set all inputs in all Editor windows to. Defaults to: false.
+        * @description Disables/Enables all fields inside Editor windows. Used in show/hide events to keep window fields from submitting when the parent form is submitted.
+        */
+        _handleWindowInputs: function(disable) {
+            if (!Lang.isBoolean(disable)) {
+                disable = false;
+            }
+            var inputs = this.get('panel').element.getElementsByTagName('input');
+            for (var i = 0; i < inputs.length; i++) {
+                try {
+                    inputs[i].disabled = disable;
+                } catch (e) {}
+            }
+        },
+        /**
         * @method openWindow
         * @param {<a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>} win A <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a> instance
         * @description Opens a new "window/panel"
         */
         openWindow: function(win) {
+            
             YAHOO.log('openWindow: ' + win.name, 'info', 'Editor');
             var self = this;
             window.setTimeout(function() {
@@ -8318,7 +8631,6 @@
                 this.closeWindow();
             }
             
-
             var xy = Dom.getXY(this.currentElement[0]),
             elXY = Dom.getXY(this.get('iframe').get('element')),
             panel = this.get('panel'),
@@ -8434,16 +8746,14 @@
             } catch (e) {}
 
 
-            if (this.get('autoHeight') === false) {
-                var iTop = elXY[1] + parseInt(this.get('height'), 10);
-                var iLeft = elXY[0] + parseInt(this.get('width'), 10);
-                if (newXY[1] > iTop) {
-                    newXY[1] = iTop;
-                }
-                if (newXY[0] > iLeft) {
-                    newXY[0] = (iLeft / 2);
-                }
+            var iTop = elXY[1] + parseInt(this.get('height'), 10);
+            var iLeft = elXY[0] + parseInt(this.get('width'), 10);
+            if (newXY[1] > iTop) {
+                newXY[1] = iTop;
             }
+            if (newXY[0] > iLeft) {
+                newXY[0] = (iLeft / 2);
+            }
             
             //Convert negative numbers to positive so we can get the difference in distance
             xDiff = ((xDiff < 0) ? (xDiff * -1) : xDiff);
@@ -8526,7 +8836,6 @@
         */
         closeWindow: function(keepOpen) {
             YAHOO.log('closeWindow: ' + this.currentWindow.name, 'info', 'Editor');
-            //YAHOO.widget.EditorInfo.window = {};
             this.fireEvent('window' + this.currentWindow.name + 'Close', { type: 'window' + this.currentWindow.name + 'Close', win: this.currentWindow, el: this.currentElement[0] });
             this.fireEvent('closeWindow', { type: 'closeWindow', win: this.currentWindow });
             this.currentWindow = null;
@@ -8536,7 +8845,7 @@
             this.unsubscribeAll('afterExecCommand');
             this.toolbar.set('disabled', false); //enable the toolbar now that the window is closed
             this.toolbar.resetAllButtons();
-            this._focusWindow();
+            this.focus();
             Event.removeListener(document, 'keydown', this._closeWindow);
         },
 
@@ -8603,7 +8912,7 @@
             if (this.browser.ie) {
                 action = 'formatblock';
             }
-            if (value == 'none') {
+            if (value == this.STR_NONE) {
                 if ((_sel && _sel.tagName && (_sel.tagName.toLowerCase().substring(0,1) == 'h')) || (_sel && _sel.parentNode && _sel.parentNode.tagName && (_sel.parentNode.tagName.toLowerCase().substring(0,1) == 'h'))) {
                     if (_sel.parentNode.tagName.toLowerCase().substring(0,1) == 'h') {
                         _sel = _sel.parentNode;
@@ -8659,7 +8968,7 @@
         */
         cmd_removeformat: function(value) {
             var exec = true;
-            /**
+            /*
             * @knownissue Remove Format issue
             * @browser Safari 2.x
             * @description There is an issue here with Safari, that it may not always remove the format of the item that is selected.
@@ -8674,14 +8983,6 @@
                 for (var i = 1; i < this.currentElement.length; i++) {
                     this.currentElement[i].parentNode.removeChild(this.currentElement[i]);
                 }
-                /*
-                this._createCurrentElement('span');
-                YAHOO.util.Dom.addClass(this.currentElement[0], 'yui-non');
-                var re= /<\S[^><]*>/g;
-                var str = this.currentElement[0].innerHTML.replace(re, '');
-                var _txt = this._getDoc().createTextNode(str);
-                this.currentElement[0].parentNode.parentNode.replaceChild(_txt, this.currentElement[0].parentNode);
-                */
                 
                 exec = false;
             }
@@ -8859,6 +9160,65 @@
             return str;
         }
     });
+/**
+* @event beforeOpenWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fires before an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event afterOpenWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fires after an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event closeWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @description Event fires after an Editor Window is closed. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCMDOpen
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is opened.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkOpen event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCMDClose
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is closed.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkClose event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowRender
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fired when the initial Overlay is rendered. Can be used to manipulate the content of the panel.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowInsertImageRender
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @param {HTMLElement} body The HTML element used as the body of the window..
+* @param {Toolbar} toolbar A reference to the toolbar object used inside this window.
+* @description Event fired when the pre render of the Insert Image window has finished.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCreateLinkRender
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @param {HTMLElement} body The HTML element used as the body of the window..
+* @description Event fired when the pre render of the Create Link window has finished.
+* @type YAHOO.util.CustomEvent
+*/
+
+
+
     /**
      * @description Class to hold Window information between uses. We use the same panel to show the windows, so using this will allow you to configure a window before it is shown.
      * This is what you pass to Editor.openWindow();. These parameters will not take effect until the openWindow() is called in the editor.
@@ -8933,62 +9293,5 @@
             return 'Editor Window (' + this.name + ')';
         }
     };
-/**
-* @event beforeOpenWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fires before an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event afterOpenWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fires after an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event closeWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @description Event fires after an Editor Window is closed. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCMDOpen
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is opened.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkOpen event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCMDClose
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is closed.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkClose event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowRender
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fired when the initial Overlay is rendered. Can be used to manipulate the content of the panel.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowInsertImageRender
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @param {HTMLElement} body The HTML element used as the body of the window..
-* @param {Toolbar} toolbar A reference to the toolbar object used inside this window.
-* @description Event fired when the pre render of the Insert Image window has finished.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCreateLinkRender
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @param {HTMLElement} body The HTML element used as the body of the window..
-* @description Event fired when the pre render of the Create Link window has finished.
-* @type YAHOO.util.CustomEvent
-*/
-
 })();
-YAHOO.register("editor", YAHOO.widget.Editor, {version: "2.6.0", build: "1321"});
+YAHOO.register("editor", YAHOO.widget.Editor, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/editor/editor-min.js
===================================================================
--- trunk/root/static/yui/editor/editor-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/editor-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,28 +1,29 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var B=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;if(YAHOO.widget.Button){YAHOO.widget.ToolbarButtonAdvanced=YAHOO.widget.Button;YAHOO.widget.ToolbarButtonAdvanced.prototype.buttonType="rich";YAHOO.widget.ToolbarButtonAdvanced.prototype.checkValue=function(F){var E=this.getMenu().getItems();if(E.length===0){this.getMenu()._onBeforeShow();E=this.getMenu().getItems();}for(var D=0;D<E.length;D++){E[D].cfg.setProperty("checked",false);if(E[D].value==F){E[D].cfg.setProperty("checked",true);}}};}else{YAHOO.widget.ToolbarButtonAdvanced=function(){};}YAHOO.widget.ToolbarButton=function(E,D){if(C.isObject(arguments[0])&&!B.get(E).nodeType){D=E;}var G=(D||{});var F={element:null,attributes:G};if(!F.attributes.type){F.attributes.type="push";}F.element=document.createElement("span");F.element.setAttribute("unselectable","on");F.element.className="yui-button yui-"+F.attributes.type+"-button";F.element.innerHTML='<span class="first-child"><a href="#">LABEL</a></span>';F.el!
 ement.firstChild.firstChild.tabIndex="-1";F.attributes.id=B.generateId();YAHOO.widget.ToolbarButton.superclass.constructor.call(this,F.element,F.attributes);};YAHOO.extend(YAHOO.widget.ToolbarButton,YAHOO.util.Element,{buttonType:"normal",_handleMouseOver:function(){if(!this.get("disabled")){this.addClass("yui-button-hover");this.addClass("yui-"+this.get("type")+"-button-hover");}},_handleMouseOut:function(){this.removeClass("yui-button-hover");this.removeClass("yui-"+this.get("type")+"-button-hover");},checkValue:function(F){if(this.get("type")=="menu"){var E=this._button.options;for(var D=0;D<E.length;D++){if(E[D].value==F){E.selectedIndex=D;}}}},init:function(E,D){YAHOO.widget.ToolbarButton.superclass.init.call(this,E,D);this.on("mouseover",this._handleMouseOver,this,true);this.on("mouseout",this._handleMouseOut,this,true);},initAttributes:function(D){YAHOO.widget.ToolbarButton.superclass.initAttributes.call(this,D);this.setAttributeConfig("value",{value:D.value});this.s!
 etAttributeConfig("menu",{value:D.menu||false});this.setAttrib!
 uteConfi
g("type",{value:D.type,writeOnce:true,method:function(H){var G,F;if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}switch(H){case"select":case"menu":G=document.createElement("select");var I=this.get("menu");for(var E=0;E<I.length;E++){F=document.createElement("option");F.innerHTML=I[E].text;F.value=I[E].value;if(I[E].checked){F.selected=true;}G.appendChild(F);}this._button.parentNode.replaceChild(G,this._button);A.on(G,"change",this._handleSelect,this,true);this._button=G;break;}}});this.setAttributeConfig("disabled",{value:D.disabled||false,method:function(E){if(E){this.addClass("yui-button-disabled");this.addClass("yui-"+this.get("type")+"-button-disabled");}else{this.removeClass("yui-button-disabled");this.removeClass("yui-"+this.get("type")+"-button-disabled");}if(this.get("type")=="menu"){this._button.disabled=E;}}});this.setAttributeConfig("label",{value:D.label,method:function(E){if(!this._button){this._button=this.get("element").getElem!
 entsByTagName("a")[0];}if(this.get("type")=="push"){this._button.innerHTML=E;}}});this.setAttributeConfig("title",{value:D.title});this.setAttributeConfig("container",{value:null,writeOnce:true,method:function(E){this.appendTo(E);}});},_handleSelect:function(E){var D=A.getTarget(E);var F=D.options[D.selectedIndex].value;this.fireEvent("change",{type:"change",value:F});},getMenu:function(){return this.get("menu");},destroy:function(){A.purgeElement(this.get("element"),true);this.get("element").parentNode.removeChild(this.get("element"));for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;}}},fireEvent:function(E,D){if(this.DOM_EVENTS[E]&&this.get("disabled")){return ;}YAHOO.widget.ToolbarButton.superclass.fireEvent.call(this,E,D);},toString:function(){return"ToolbarButton ("+this.get("id")+")";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F){var E=F;if(D.isString(F)){E=this.getButtonById(F);}if(D.isNumber(F)){E=this.getButt!
 onByIndex(F);}if((!(E instanceof YAHOO.widget.ToolbarButton))&!
 &(!(E in
stanceof YAHOO.widget.ToolbarButtonAdvanced))){E=this.getButtonByValue(F);}if((E instanceof YAHOO.widget.ToolbarButton)||(E instanceof YAHOO.widget.ToolbarButtonAdvanced)){return E;}return false;};YAHOO.widget.Toolbar=function(I,H){if(D.isObject(arguments[0])&&!C.get(I).nodeType){H=I;}var K={};if(H){D.augmentObject(K,H);}var J={element:null,attributes:K};if(D.isString(I)&&C.get(I)){J.element=C.get(I);}else{if(D.isObject(I)&&C.get(I)&&C.get(I).nodeType){J.element=C.get(I);}}if(!J.element){J.element=document.createElement("DIV");J.element.id=C.generateId();if(K.container&&C.get(K.container)){C.get(K.container).appendChild(J.element);}}if(!J.element.id){J.element.id=((D.isString(I))?I:C.generateId());}var F=document.createElement("fieldset");var G=document.createElement("legend");G.innerHTML="Toolbar";F.appendChild(G);var E=document.createElement("DIV");J.attributes.cont=E;C.addClass(E,"yui-toolbar-subcont");F.appendChild(E);J.element.appendChild(F);J.element.tabIndex=-1;J.attr!
 ibutes.element=J.element;J.attributes.id=J.element.id;YAHOO.widget.Toolbar.superclass.constructor.call(this,J.element,J.attributes);};YAHOO.extend(YAHOO.widget.Toolbar,YAHOO.util.Element,{_addMenuClasses:function(H,E,I){C.addClass(this.element,"yui-toolbar-"+I.get("value")+"-menu");if(C.hasClass(I._button.parentNode.parentNode,"yui-toolbar-select")){C.addClass(this.element,"yui-toolbar-select-menu");}var F=this.getItems();for(var G=0;G<F.length;G++){C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-").toLowerCase():F[G]._oText.nodeValue.replace(/ /g,"-").toLowerCase()));C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-"):F[G]._oText.nodeValue.replace(/ /g,"-")));}},buttonType:YAHOO.widget.ToolbarButton,dd:null,_colorData:{"#111111":"Obsidian","#2D2D2D":"Dark Gray","#434343":"Shale","#5B5B5B":"Flint","#737373":"Gray","#8B8B8B":"Concrete","#A2A2A2":"Gray","#B9B9B9":"Titanium","#00!
 0000":"Black","#D0D0D0":"Light Gray","#E6E6E6":"Silver","#FFFF!
 FF":"Whi
te","#BFBF00":"Pumpkin","#FFFF00":"Yellow","#FFFF40":"Banana","#FFFF80":"Pale Yellow","#FFFFBF":"Butter","#525330":"Raw Siena","#898A49":"Mildew","#AEA945":"Olive","#7F7F00":"Paprika","#C3BE71":"Earth","#E0DCAA":"Khaki","#FCFAE1":"Cream","#60BF00":"Cactus","#80FF00":"Chartreuse","#A0FF40":"Green","#C0FF80":"Pale Lime","#DFFFBF":"Light Mint","#3B5738":"Green","#668F5A":"Lime Gray","#7F9757":"Yellow","#407F00":"Clover","#8A9B55":"Pistachio","#B7C296":"Light Jade","#E6EBD5":"Breakwater","#00BF00":"Spring Frost","#00FF80":"Pastel Green","#40FFA0":"Light Emerald","#80FFC0":"Sea Foam","#BFFFDF":"Sea Mist","#033D21":"Dark Forrest","#438059":"Moss","#7FA37C":"Medium Green","#007F40":"Pine","#8DAE94":"Yellow Gray Green","#ACC6B5":"Aqua Lung","#DDEBE2":"Sea Vapor","#00BFBF":"Fog","#00FFFF":"Cyan","#40FFFF":"Turquoise Blue","#80FFFF":"Light Aqua","#BFFFFF":"Pale Cyan","#033D3D":"Dark Teal","#347D7E":"Gray Turquoise","#609A9F":"Green Blue","#007F7F":"Seaweed","#96BDC4":"Green Gray","#B5!
 D1D7":"Soapstone","#E2F1F4":"Light Turquoise","#0060BF":"Summer Sky","#0080FF":"Sky Blue","#40A0FF":"Electric Blue","#80C0FF":"Light Azure","#BFDFFF":"Ice Blue","#1B2C48":"Navy","#385376":"Biscay","#57708F":"Dusty Blue","#00407F":"Sea Blue","#7792AC":"Sky Blue Gray","#A8BED1":"Morning Sky","#DEEBF6":"Vapor","#0000BF":"Deep Blue","#0000FF":"Blue","#4040FF":"Cerulean Blue","#8080FF":"Evening Blue","#BFBFFF":"Light Blue","#212143":"Deep Indigo","#373E68":"Sea Blue","#444F75":"Night Blue","#00007F":"Indigo Blue","#585E82":"Dockside","#8687A4":"Blue Gray","#D2D1E1":"Light Blue Gray","#6000BF":"Neon Violet","#8000FF":"Blue Violet","#A040FF":"Violet Purple","#C080FF":"Violet Dusk","#DFBFFF":"Pale Lavender","#302449":"Cool Shale","#54466F":"Dark Indigo","#655A7F":"Dark Violet","#40007F":"Violet","#726284":"Smoky Violet","#9E8FA9":"Slate Gray","#DCD1DF":"Violet White","#BF00BF":"Royal Violet","#FF00FF":"Fuchsia","#FF40FF":"Magenta","#FF80FF":"Orchid","#FFBFFF":"Pale Magenta","#4A234!
 A":"Dark Purple","#794A72":"Medium Purple","#936386":"Cool Gra!
 nite","#
7F007F":"Purple","#9D7292":"Purple Moon","#C0A0B6":"Pale Purple","#ECDAE5":"Pink Cloud","#BF005F":"Hot Pink","#FF007F":"Deep Pink","#FF409F":"Grape","#FF80BF":"Electric Pink","#FFBFDF":"Pink","#451528":"Purple Red","#823857":"Purple Dino","#A94A76":"Purple Gray","#7F003F":"Rose","#BC6F95":"Antique Mauve","#D8A5BB":"Cool Marble","#F7DDE9":"Pink Granite","#C00000":"Apple","#FF0000":"Fire Truck","#FF4040":"Pale Red","#FF8080":"Salmon","#FFC0C0":"Warm Pink","#441415":"Sepia","#82393C":"Rust","#AA4D4E":"Brick","#800000":"Brick Red","#BC6E6E":"Mauve","#D8A3A4":"Shrimp Pink","#F8DDDD":"Shell Pink","#BF5F00":"Dark Orange","#FF7F00":"Orange","#FF9F40":"Grapefruit","#FFBF80":"Canteloupe","#FFDFBF":"Wax","#482C1B":"Dark Brick","#855A40":"Dirt","#B27C51":"Tan","#7F3F00":"Nutmeg","#C49B71":"Mustard","#E1C4A8":"Pale Tan","#FDEEE0":"Marble"},_colorPicker:null,STR_COLLAPSE:"Collapse Toolbar",STR_SPIN_LABEL:"Spin Button with value {VALUE}. Use Control Shift Up Arrow and Control Shift Down ar!
 row keys to increase or decrease the value.",STR_SPIN_UP:"Click to increase the value of this input",STR_SPIN_DOWN:"Click to decrease the value of this input",_titlebar:null,browser:YAHOO.env.ua,_buttonList:null,_buttonGroupList:null,_sep:null,_sepCount:null,_dragHandle:null,_toolbarConfigs:{renderer:true},CLASS_CONTAINER:"yui-toolbar-container",CLASS_DRAGHANDLE:"yui-toolbar-draghandle",CLASS_SEPARATOR:"yui-toolbar-separator",CLASS_DISABLED:"yui-toolbar-disabled",CLASS_PREFIX:"yui-toolbar",init:function(F,E){YAHOO.widget.Toolbar.superclass.init.call(this,F,E);
+(function(){var B=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;if(YAHOO.widget.Button){YAHOO.widget.ToolbarButtonAdvanced=YAHOO.widget.Button;YAHOO.widget.ToolbarButtonAdvanced.prototype.buttonType="rich";YAHOO.widget.ToolbarButtonAdvanced.prototype.checkValue=function(F){var E=this.getMenu().getItems();if(E.length===0){this.getMenu()._onBeforeShow();E=this.getMenu().getItems();}for(var D=0;D<E.length;D++){E[D].cfg.setProperty("checked",false);if(E[D].value==F){E[D].cfg.setProperty("checked",true);}}};}else{YAHOO.widget.ToolbarButtonAdvanced=function(){};}YAHOO.widget.ToolbarButton=function(E,D){if(C.isObject(arguments[0])&&!B.get(E).nodeType){D=E;}var G=(D||{});var F={element:null,attributes:G};if(!F.attributes.type){F.attributes.type="push";}F.element=document.createElement("span");F.element.setAttribute("unselectable","on");F.element.className="yui-button yui-"+F.attributes.type+"-button";F.element.innerHTML='<span class="first-child"><a href="#">LABEL</a></span>';F.el!
 ement.firstChild.firstChild.tabIndex="-1";F.attributes.id=(F.attributes.id||B.generateId());F.element.id=F.attributes.id;YAHOO.widget.ToolbarButton.superclass.constructor.call(this,F.element,F.attributes);};YAHOO.extend(YAHOO.widget.ToolbarButton,YAHOO.util.Element,{buttonType:"normal",_handleMouseOver:function(){if(!this.get("disabled")){this.addClass("yui-button-hover");this.addClass("yui-"+this.get("type")+"-button-hover");}},_handleMouseOut:function(){this.removeClass("yui-button-hover");this.removeClass("yui-"+this.get("type")+"-button-hover");},checkValue:function(F){if(this.get("type")=="menu"){var E=this._button.options;for(var D=0;D<E.length;D++){if(E[D].value==F){E.selectedIndex=D;}}}},init:function(E,D){YAHOO.widget.ToolbarButton.superclass.init.call(this,E,D);this.on("mouseover",this._handleMouseOver,this,true);this.on("mouseout",this._handleMouseOut,this,true);this.on("click",function(F){A.stopEvent(F);return false;},this,true);},initAttributes:function(D){YAHO!
 O.widget.ToolbarButton.superclass.initAttributes.call(this,D);!
 this.set
AttributeConfig("value",{value:D.value});this.setAttributeConfig("menu",{value:D.menu||false});this.setAttributeConfig("type",{value:D.type,writeOnce:true,method:function(H){var G,F;if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}switch(H){case"select":case"menu":G=document.createElement("select");var I=this.get("menu");for(var E=0;E<I.length;E++){F=document.createElement("option");F.innerHTML=I[E].text;F.value=I[E].value;if(I[E].checked){F.selected=true;}G.appendChild(F);}this._button.parentNode.replaceChild(G,this._button);A.on(G,"change",this._handleSelect,this,true);this._button=G;break;}}});this.setAttributeConfig("disabled",{value:D.disabled||false,method:function(E){if(E){this.addClass("yui-button-disabled");this.addClass("yui-"+this.get("type")+"-button-disabled");}else{this.removeClass("yui-button-disabled");this.removeClass("yui-"+this.get("type")+"-button-disabled");}if(this.get("type")=="menu"){this._button.disabled=E;}}});this.se!
 tAttributeConfig("label",{value:D.label,method:function(E){if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}if(this.get("type")=="push"){this._button.innerHTML=E;}}});this.setAttributeConfig("title",{value:D.title});this.setAttributeConfig("container",{value:null,writeOnce:true,method:function(E){this.appendTo(E);}});},_handleSelect:function(E){var D=A.getTarget(E);var F=D.options[D.selectedIndex].value;this.fireEvent("change",{type:"change",value:F});},getMenu:function(){return this.get("menu");},destroy:function(){A.purgeElement(this.get("element"),true);this.get("element").parentNode.removeChild(this.get("element"));for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;}}},fireEvent:function(E,D){if(this.DOM_EVENTS[E]&&this.get("disabled")){A.stopEvent(D);return;}YAHOO.widget.ToolbarButton.superclass.fireEvent.call(this,E,D);},toString:function(){return"ToolbarButton ("+this.get("id")+")";}});})();(function(){var C=YAHOO.util.Dom,A=!
 YAHOO.util.Event,D=YAHOO.lang;var B=function(F){var E=F;if(D.i!
 sString(
F)){E=this.getButtonById(F);}if(D.isNumber(F)){E=this.getButtonByIndex(F);}if((!(E instanceof YAHOO.widget.ToolbarButton))&&(!(E instanceof YAHOO.widget.ToolbarButtonAdvanced))){E=this.getButtonByValue(F);}if((E instanceof YAHOO.widget.ToolbarButton)||(E instanceof YAHOO.widget.ToolbarButtonAdvanced)){return E;}return false;};YAHOO.widget.Toolbar=function(I,H){if(D.isObject(arguments[0])&&!C.get(I).nodeType){H=I;}var K={};if(H){D.augmentObject(K,H);}var J={element:null,attributes:K};if(D.isString(I)&&C.get(I)){J.element=C.get(I);}else{if(D.isObject(I)&&C.get(I)&&C.get(I).nodeType){J.element=C.get(I);}}if(!J.element){J.element=document.createElement("DIV");J.element.id=C.generateId();if(K.container&&C.get(K.container)){C.get(K.container).appendChild(J.element);}}if(!J.element.id){J.element.id=((D.isString(I))?I:C.generateId());}var F=document.createElement("fieldset");var G=document.createElement("legend");G.innerHTML="Toolbar";F.appendChild(G);var E=document.createElement("D!
 IV");J.attributes.cont=E;C.addClass(E,"yui-toolbar-subcont");F.appendChild(E);J.element.appendChild(F);J.element.tabIndex=-1;J.attributes.element=J.element;J.attributes.id=J.element.id;YAHOO.widget.Toolbar.superclass.constructor.call(this,J.element,J.attributes);};YAHOO.extend(YAHOO.widget.Toolbar,YAHOO.util.Element,{_addMenuClasses:function(H,E,I){C.addClass(this.element,"yui-toolbar-"+I.get("value")+"-menu");if(C.hasClass(I._button.parentNode.parentNode,"yui-toolbar-select")){C.addClass(this.element,"yui-toolbar-select-menu");}var F=this.getItems();for(var G=0;G<F.length;G++){C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-").toLowerCase():F[G]._oText.nodeValue.replace(/ /g,"-").toLowerCase()));C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-"):F[G]._oText.nodeValue.replace(/ /g,"-")));}},buttonType:YAHOO.widget.ToolbarButton,dd:null,_colorData:{"#111111":"Obsidian","#2D2D2!
 D":"Dark Gray","#434343":"Shale","#5B5B5B":"Flint","#737373":"!
 Gray","#
8B8B8B":"Concrete","#A2A2A2":"Gray","#B9B9B9":"Titanium","#000000":"Black","#D0D0D0":"Light Gray","#E6E6E6":"Silver","#FFFFFF":"White","#BFBF00":"Pumpkin","#FFFF00":"Yellow","#FFFF40":"Banana","#FFFF80":"Pale Yellow","#FFFFBF":"Butter","#525330":"Raw Siena","#898A49":"Mildew","#AEA945":"Olive","#7F7F00":"Paprika","#C3BE71":"Earth","#E0DCAA":"Khaki","#FCFAE1":"Cream","#60BF00":"Cactus","#80FF00":"Chartreuse","#A0FF40":"Green","#C0FF80":"Pale Lime","#DFFFBF":"Light Mint","#3B5738":"Green","#668F5A":"Lime Gray","#7F9757":"Yellow","#407F00":"Clover","#8A9B55":"Pistachio","#B7C296":"Light Jade","#E6EBD5":"Breakwater","#00BF00":"Spring Frost","#00FF80":"Pastel Green","#40FFA0":"Light Emerald","#80FFC0":"Sea Foam","#BFFFDF":"Sea Mist","#033D21":"Dark Forrest","#438059":"Moss","#7FA37C":"Medium Green","#007F40":"Pine","#8DAE94":"Yellow Gray Green","#ACC6B5":"Aqua Lung","#DDEBE2":"Sea Vapor","#00BFBF":"Fog","#00FFFF":"Cyan","#40FFFF":"Turquoise Blue","#80FFFF":"Light Aqua","#BFFFFF":!
 "Pale Cyan","#033D3D":"Dark Teal","#347D7E":"Gray Turquoise","#609A9F":"Green Blue","#007F7F":"Seaweed","#96BDC4":"Green Gray","#B5D1D7":"Soapstone","#E2F1F4":"Light Turquoise","#0060BF":"Summer Sky","#0080FF":"Sky Blue","#40A0FF":"Electric Blue","#80C0FF":"Light Azure","#BFDFFF":"Ice Blue","#1B2C48":"Navy","#385376":"Biscay","#57708F":"Dusty Blue","#00407F":"Sea Blue","#7792AC":"Sky Blue Gray","#A8BED1":"Morning Sky","#DEEBF6":"Vapor","#0000BF":"Deep Blue","#0000FF":"Blue","#4040FF":"Cerulean Blue","#8080FF":"Evening Blue","#BFBFFF":"Light Blue","#212143":"Deep Indigo","#373E68":"Sea Blue","#444F75":"Night Blue","#00007F":"Indigo Blue","#585E82":"Dockside","#8687A4":"Blue Gray","#D2D1E1":"Light Blue Gray","#6000BF":"Neon Violet","#8000FF":"Blue Violet","#A040FF":"Violet Purple","#C080FF":"Violet Dusk","#DFBFFF":"Pale Lavender","#302449":"Cool Shale","#54466F":"Dark Indigo","#655A7F":"Dark Violet","#40007F":"Violet","#726284":"Smoky Violet","#9E8FA9":"Slate Gray","#DCD1DF":!
 "Violet White","#BF00BF":"Royal Violet","#FF00FF":"Fuchsia","#!
 FF40FF":
"Magenta","#FF80FF":"Orchid","#FFBFFF":"Pale Magenta","#4A234A":"Dark Purple","#794A72":"Medium Purple","#936386":"Cool Granite","#7F007F":"Purple","#9D7292":"Purple Moon","#C0A0B6":"Pale Purple","#ECDAE5":"Pink Cloud","#BF005F":"Hot Pink","#FF007F":"Deep Pink","#FF409F":"Grape","#FF80BF":"Electric Pink","#FFBFDF":"Pink","#451528":"Purple Red","#823857":"Purple Dino","#A94A76":"Purple Gray","#7F003F":"Rose","#BC6F95":"Antique Mauve","#D8A5BB":"Cool Marble","#F7DDE9":"Pink Granite","#C00000":"Apple","#FF0000":"Fire Truck","#FF4040":"Pale Red","#FF8080":"Salmon","#FFC0C0":"Warm Pink","#441415":"Sepia","#82393C":"Rust","#AA4D4E":"Brick","#800000":"Brick Red","#BC6E6E":"Mauve","#D8A3A4":"Shrimp Pink","#F8DDDD":"Shell Pink","#BF5F00":"Dark Orange","#FF7F00":"Orange","#FF9F40":"Grapefruit","#FFBF80":"Canteloupe","#FFDFBF":"Wax","#482C1B":"Dark Brick","#855A40":"Dirt","#B27C51":"Tan","#7F3F00":"Nutmeg","#C49B71":"Mustard","#E1C4A8":"Pale Tan","#FDEEE0":"Marble"},_colorPicker:null,S!
 TR_COLLAPSE:"Collapse Toolbar",STR_SPIN_LABEL:"Spin Button with value {VALUE}. Use Control Shift Up Arrow and Control Shift Down arrow keys to increase or decrease the value.",STR_SPIN_UP:"Click to increase the value of this input",STR_SPIN_DOWN:"Click to decrease the value of this input",_titlebar:null,browser:YAHOO.env.ua,_buttonList:null,_buttonGroupList:null,_sep:null,_sepCount:null,_dragHandle:null,_toolbarConfigs:{renderer:true},CLASS_CONTAINER:"yui-toolbar-container",CLASS_DRAGHANDLE:"yui-toolbar-draghandle",CLASS_SEPARATOR:"yui-toolbar-separator",CLASS_DISABLED:"yui-toolbar-disabled",CLASS_PREFIX:"yui-toolbar",init:function(F,E){YAHOO.widget.Toolbar.superclass.init.call(this,F,E);
 },initAttributes:function(E){YAHOO.widget.Toolbar.superclass.initAttributes.call(this,E);this.addClass(this.CLASS_CONTAINER);this.setAttributeConfig("buttonType",{value:E.buttonType||"basic",writeOnce:true,validator:function(F){switch(F){case"advanced":case"basic":return true;}return false;},method:function(F){if(F=="advanced"){if(YAHOO.widget.Button){this.buttonType=YAHOO.widget.ToolbarButtonAdvanced;}else{this.buttonType=YAHOO.widget.ToolbarButton;}}else{this.buttonType=YAHOO.widget.ToolbarButton;}}});this.setAttributeConfig("buttons",{value:[],writeOnce:true,method:function(G){for(var F in G){if(D.hasOwnProperty(G,F)){if(G[F].type=="separator"){this.addSeparator();}else{if(G[F].group!==undefined){this.addButtonGroup(G[F]);}else{this.addButton(G[F]);}}}}}});this.setAttributeConfig("disabled",{value:false,method:function(F){if(this.get("disabled")===F){return false;}if(F){this.addClass(this.CLASS_DISABLED);this.set("draggable",false);this.disableAllButtons();}else{this.rem!
 oveClass(this.CLASS_DISABLED);if(this._configs.draggable._initialConfig.value){this.set("draggable",true);}this.resetAllButtons();}}});this.setAttributeConfig("cont",{value:E.cont,readOnly:true});this.setAttributeConfig("grouplabels",{value:((E.grouplabels===false)?false:true),method:function(F){if(F){C.removeClass(this.get("cont"),(this.CLASS_PREFIX+"-nogrouplabels"));}else{C.addClass(this.get("cont"),(this.CLASS_PREFIX+"-nogrouplabels"));}}});this.setAttributeConfig("titlebar",{value:false,method:function(G){if(G){if(this._titlebar&&this._titlebar.parentNode){this._titlebar.parentNode.removeChild(this._titlebar);}this._titlebar=document.createElement("DIV");this._titlebar.tabIndex="-1";A.on(this._titlebar,"focus",function(){this._handleFocus();},this,true);C.addClass(this._titlebar,this.CLASS_PREFIX+"-titlebar");if(D.isString(G)){var F=document.createElement("h2");F.tabIndex="-1";F.innerHTML='<a href="#" tabIndex="0">'+G+"</a>";this._titlebar.appendChild(F);A.on(F.firstCh!
 ild,"click",function(H){A.stopEvent(H);});A.on([F,F.firstChild!
 ],"focus
",function(){this._handleFocus();},this,true);}if(this.get("firstChild")){this.insertBefore(this._titlebar,this.get("firstChild"));}else{this.appendChild(this._titlebar);}if(this.get("collapse")){this.set("collapse",true);}}else{if(this._titlebar){if(this._titlebar&&this._titlebar.parentNode){this._titlebar.parentNode.removeChild(this._titlebar);}}}}});this.setAttributeConfig("collapse",{value:false,method:function(H){if(this._titlebar){var G=null;var F=C.getElementsByClassName("collapse","span",this._titlebar);if(H){if(F.length>0){return true;}G=document.createElement("SPAN");G.innerHTML="X";G.title=this.STR_COLLAPSE;C.addClass(G,"collapse");this._titlebar.appendChild(G);A.addListener(G,"click",function(){if(C.hasClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed")){this.collapse(false);}else{this.collapse();}},this,true);}else{G=C.getElementsByClassName("collapse","span",this._titlebar);if(G[0]){if(C.hasClass(this.get("cont").parentNode,"yui-toolbar-contain!
 er-collapsed")){this.collapse(false);}G[0].parentNode.removeChild(G[0]);}}}}});this.setAttributeConfig("draggable",{value:(E.draggable||false),method:function(F){if(F&&!this.get("titlebar")){if(!this._dragHandle){this._dragHandle=document.createElement("SPAN");this._dragHandle.innerHTML="|";this._dragHandle.setAttribute("title","Click to drag the toolbar");this._dragHandle.id=this.get("id")+"_draghandle";C.addClass(this._dragHandle,this.CLASS_DRAGHANDLE);if(this.get("cont").hasChildNodes()){this.get("cont").insertBefore(this._dragHandle,this.get("cont").firstChild);}else{this.get("cont").appendChild(this._dragHandle);}this.dd=new YAHOO.util.DD(this.get("id"));this.dd.setHandleElId(this._dragHandle.id);}}else{if(this._dragHandle){this._dragHandle.parentNode.removeChild(this._dragHandle);this._dragHandle=null;this.dd=null;}}if(this._titlebar){if(F){this.dd=new YAHOO.util.DD(this.get("id"));this.dd.setHandleElId(this._titlebar);C.addClass(this._titlebar,"draggable");}else{C.re!
 moveClass(this._titlebar,"draggable");if(this.dd){this.dd.unre!
 g();this
.dd=null;}}}},validator:function(G){var F=true;if(!YAHOO.util.DD){F=false;}return F;}});},addButtonGroup:function(I){if(!this.get("element")){this._queue[this._queue.length]=["addButtonGroup",arguments];return false;}if(!this.hasClass(this.CLASS_PREFIX+"-grouped")){this.addClass(this.CLASS_PREFIX+"-grouped");}var J=document.createElement("DIV");C.addClass(J,this.CLASS_PREFIX+"-group");C.addClass(J,this.CLASS_PREFIX+"-group-"+I.group);if(I.label){var F=document.createElement("h3");F.innerHTML=I.label;J.appendChild(F);}if(!this.get("grouplabels")){C.addClass(this.get("cont"),this.CLASS_PREFIX,"-nogrouplabels");}this.get("cont").appendChild(J);var H=document.createElement("ul");J.appendChild(H);if(!this._buttonGroupList){this._buttonGroupList={};}this._buttonGroupList[I.group]=H;for(var G=0;G<I.buttons.length;G++){var E=document.createElement("li");E.className=this.CLASS_PREFIX+"-groupitem";H.appendChild(E);if((I.buttons[G].type!==undefined)&&I.buttons[G].type=="separator"){thi!
 s.addSeparator(E);}else{I.buttons[G].container=E;this.addButton(I.buttons[G]);}}},addButtonToGroup:function(G,H,I){var F=this._buttonGroupList[H];var E=document.createElement("li");E.className=this.CLASS_PREFIX+"-groupitem";G.container=E;this.addButton(G,I);F.appendChild(E);},addButton:function(J,I){if(!this.get("element")){this._queue[this._queue.length]=["addButton",arguments];return false;}if(!this._buttonList){this._buttonList=[];}if(!J.container){J.container=this.get("cont");}if((J.type=="menu")||(J.type=="split")||(J.type=="select")){if(D.isArray(J.menu)){for(var P in J.menu){if(D.hasOwnProperty(J.menu,P)){var V={fn:function(Y,W,X){if(!J.menucmd){J.menucmd=J.value;}J.value=((X.value)?X.value:X._oText.nodeValue);},scope:this};J.menu[P].onclick=V;}}}}var Q={},N=false;for(var L in J){if(D.hasOwnProperty(J,L)){if(!this._toolbarConfigs[L]){Q[L]=J[L];}}}if(J.type=="select"){Q.type="menu";}if(J.type=="spin"){Q.type="push";
 }if(Q.type=="color"){if(YAHOO.widget.Overlay){Q=this._makeColorButton(Q);}else{N=true;}}if(Q.menu){if((YAHOO.widget.Overlay)&&(J.menu instanceof YAHOO.widget.Overlay)){J.menu.showEvent.subscribe(function(){this._button=Q;});}else{for(var O=0;O<Q.menu.length;O++){if(!Q.menu[O].value){Q.menu[O].value=Q.menu[O].text;}}if(this.browser.webkit){Q.focusmenu=false;}}}if(N){J=false;}else{this._configs.buttons.value[this._configs.buttons.value.length]=J;var T=new this.buttonType(Q);T.get("element").tabIndex="-1";T.get("element").setAttribute("role","button");T._selected=true;if(this.get("disabled")){T.set("disabled",true);}if(!J.id){J.id=T.get("id");}if(I){var F=T.get("element");var M=null;if(I.get){M=I.get("element").nextSibling;}else{if(I.nextSibling){M=I.nextSibling;}}if(M){M.parentNode.insertBefore(F,M);}}T.addClass(this.CLASS_PREFIX+"-"+T.get("value"));var S=document.createElement("span");S.className=this.CLASS_PREFIX+"-icon";T.get("element").insertBefore(S,T.get("firstChild"));!
 if(T._button.tagName.toLowerCase()=="button"){T.get("element").setAttribute("unselectable","on");var U=document.createElement("a");U.innerHTML=T._button.innerHTML;U.href="#";U.tabIndex="-1";A.on(U,"click",function(W){A.stopEvent(W);});T._button.parentNode.replaceChild(U,T._button);T._button=U;}if(J.type=="select"){if(T._button.tagName.toLowerCase()=="select"){S.parentNode.removeChild(S);var G=T._button;var R=T.get("element");R.parentNode.replaceChild(G,R);}else{T.addClass(this.CLASS_PREFIX+"-select");}}if(J.type=="spin"){if(!D.isArray(J.range)){J.range=[10,100];}this._makeSpinButton(T,J);}T.get("element").setAttribute("title",T.get("label"));if(J.type!="spin"){if((YAHOO.widget.Overlay)&&(Q.menu instanceof YAHOO.widget.Overlay)){var H=function(Y){var W=true;if(Y.keyCode&&(Y.keyCode==9)){W=false;}if(W){if(this._colorPicker){this._colorPicker._button=J.value;}var X=T.getMenu().element;if(C.getStyle(X,"visibility")=="hidden"){T.getMenu().show();}else{T.getMenu().hide();}}YAHOO.!
 util.Event.stopEvent(Y);};T.on("mousedown",H,J,this);T.on("key!
 down",H,
J,this);}else{if((J.type!="menu")&&(J.type!="select")){T.on("keypress",this._buttonClick,J,this);T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);this._buttonClick(W,J);},J,this);T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});}else{T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);});T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});T.on("change",function(W){if(!J.menucmd){J.menucmd=J.value;}J.value=W.value;this._buttonClick(W,J);},this,true);var K=this;T.on("appendTo",function(){var W=this;if(W.getMenu()&&W.getMenu().mouseDownEvent){W.getMenu().mouseDownEvent.subscribe(function(Z,Y){var X=Y[1];YAHOO.util.Event.stopEvent(Y[0]);W._onMenuClick(Y[0],W);if(!J.menucmd){J.menucmd=J.value;}J.value=((X.value)?X.value:X._oText.nodeValue);K._buttonClick.call(K,Y[1],J);W._hideMenu();return false;});W.getMenu().clickEvent.subscribe(function(Y,X){YAHOO.util.Event.stopEvent(X[0]);});W.getMenu().mouseUpEvent.subscribe(function(Y,X){YAHOO.util.Event.sto!
 pEvent(X[0]);});}});}}}else{T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);});T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});}if(this.browser.ie){}if(this.browser.webkit){T.hasFocus=function(){return true;};}this._buttonList[this._buttonList.length]=T;if((J.type=="menu")||(J.type=="split")||(J.type=="select")){if(D.isArray(J.menu)){var E=T.getMenu();if(E&&E.renderEvent){E.renderEvent.subscribe(this._addMenuClasses,T);if(J.renderer){E.renderEvent.subscribe(J.renderer,T);}}}}}return J;},addSeparator:function(E,H){if(!this.get("element")){this._queue[this._queue.length]=["addSeparator",arguments];return false;}var F=((E)?E:this.get("cont"));if(!this.get("element")){this._queue[this._queue.length]=["addSeparator",arguments];return false;}if(this._sepCount===null){this._sepCount=0;}if(!this._sep){this._sep=document.createElement("SPAN");C.addClass(this._sep,this.CLASS_SEPARATOR);this._sep.innerHTML="|";}var G=this._sep.cloneNode(true);this._sepCount++;C.ad!
 dClass(G,this.CLASS_SEPARATOR+"-"+this._sepCount);if(H){var I=!
 null;if(
H.get){I=H.get("element").nextSibling;}else{if(H.nextSibling){I=H.nextSibling;}else{I=H;}}if(I){if(I==H){I.parentNode.appendChild(G);}else{I.parentNode.insertBefore(G,I);}}}else{F.appendChild(G);}return G;},_createColorPicker:function(H){if(C.get(H+"_colors")){C.get(H+"_colors").parentNode.removeChild(C.get(H+"_colors"));}var E=document.createElement("div");E.className="yui-toolbar-colors";E.id=H+"_colors";E.style.display="none";A.on(window,"load",function(){document.body.appendChild(E);},this,true);this._colorPicker=E;var G="";for(var F in this._colorData){if(D.hasOwnProperty(this._colorData,F)){G+='<a style="background-color: '+F+'" href="#">'+F.replace("#","")+"</a>";}}G+="<span><em>X</em><strong></strong></span>";window.setTimeout(function(){E.innerHTML=G;},0);A.on(E,"mouseover",function(M){var K=this._colorPicker;var L=K.getElementsByTagName("em")[0];var J=K.getElementsByTagName("strong")[0];var I=A.getTarget(M);if(I.tagName.toLowerCase()=="a"){L.style.backgroundColor=I!
 .style.backgroundColor;J.innerHTML=this._colorData["#"+I.innerHTML]+"<br>"+I.innerHTML;}},this,true);A.on(E,"focus",function(I){A.stopEvent(I);});A.on(E,"click",function(I){A.stopEvent(I);});A.on(E,"mousedown",function(J){A.stopEvent(J);var I=A.getTarget(J);if(I.tagName.toLowerCase()=="a"){var L=this.fireEvent("colorPickerClicked",{type:"colorPickerClicked",target:this,button:this._colorPicker._button,color:I.innerHTML,colorName:this._colorData["#"+I.innerHTML]});if(L!==false){var K={color:I.innerHTML,colorName:this._colorData["#"+I.innerHTML],value:this._colorPicker._button};this.fireEvent("buttonClick",{type:"buttonClick",target:this.get("element"),button:K});}this.getButtonByValue(this._colorPicker._button).getMenu().hide();}},this,true);},_resetColorPicker:function(){var F=this._colorPicker.getElementsByTagName("em")[0];var E=this._colorPicker.getElementsByTagName("strong")[0];F.style.backgroundColor="transparent";
 E.innerHTML="";},_makeColorButton:function(E){if(!this._colorPicker){this._createColorPicker(this.get("id"));}E.type="color";E.menu=new YAHOO.widget.Overlay(this.get("id")+"_"+E.value+"_menu",{visible:false,position:"absolute",iframe:true});E.menu.setBody("");E.menu.render(this.get("cont"));C.addClass(E.menu.element,"yui-button-menu");C.addClass(E.menu.element,"yui-color-button-menu");E.menu.beforeShowEvent.subscribe(function(){E.menu.cfg.setProperty("zindex",5);E.menu.cfg.setProperty("context",[this.getButtonById(E.id).get("element"),"tl","bl"]);this._resetColorPicker();var F=this._colorPicker;if(F.parentNode){F.parentNode.removeChild(F);}E.menu.setBody("");E.menu.appendToBody(F);this._colorPicker.style.display="block";},this,true);return E;},_makeSpinButton:function(R,L){R.addClass(this.CLASS_PREFIX+"-spinbutton");var S=this,N=R._button.parentNode.parentNode,I=L.range,H=document.createElement("a"),G=document.createElement("a");H.href="#";G.href="#";H.tabIndex="-1";G.tabIn!
 dex="-1";H.className="up";H.title=this.STR_SPIN_UP;H.innerHTML=this.STR_SPIN_UP;G.className="down";G.title=this.STR_SPIN_DOWN;G.innerHTML=this.STR_SPIN_DOWN;N.appendChild(H);N.appendChild(G);var M=YAHOO.lang.substitute(this.STR_SPIN_LABEL,{VALUE:R.get("label")});R.set("title",M);var Q=function(T){T=((T<I[0])?I[0]:T);T=((T>I[1])?I[1]:T);return T;};var P=this.browser;var F=false;var K=this.STR_SPIN_LABEL;if(this._titlebar&&this._titlebar.firstChild){F=this._titlebar.firstChild;}var E=function(U){YAHOO.util.Event.stopEvent(U);if(!R.get("disabled")&&(U.keyCode!=9)){var V=parseInt(R.get("label"),10);V++;V=Q(V);R.set("label",""+V);var T=YAHOO.lang.substitute(K,{VALUE:R.get("label")});R.set("title",T);if(!P.webkit&&F){}S._buttonClick(U,L);}};var O=function(U){YAHOO.util.Event.stopEvent(U);if(!R.get("disabled")&&(U.keyCode!=9)){var V=parseInt(R.get("label"),10);V--;V=Q(V);R.set("label",""+V);var T=YAHOO.lang.substitute(K,{VALUE:R.get("label")});R.set("title",T);if(!P.webkit&&F){}S.!
 _buttonClick(U,L);}};var J=function(T){if(T.keyCode==38){E(T);!
 }else{if
(T.keyCode==40){O(T);}else{if(T.keyCode==107&&T.shiftKey){E(T);}else{if(T.keyCode==109&&T.shiftKey){O(T);}}}}};R.on("keydown",J,this,true);A.on(H,"mousedown",function(T){A.stopEvent(T);},this,true);A.on(G,"mousedown",function(T){A.stopEvent(T);},this,true);A.on(H,"click",E,this,true);A.on(G,"click",O,this,true);},_buttonClick:function(L,F){var E=true;if(L&&L.type=="keypress"){if(L.keyCode==9){E=false;}else{if((L.keyCode===13)||(L.keyCode===0)||(L.keyCode===32)){}else{E=false;}}}if(E){var N=true,H=false;F.isSelected=this.isSelected(F.id);if(F.value){H=this.fireEvent(F.value+"Click",{type:F.value+"Click",target:this.get("element"),button:F});if(H===false){N=false;}}if(F.menucmd&&N){H=this.fireEvent(F.menucmd+"Click",{type:F.menucmd+"Click",target:this.get("element"),button:F});if(H===false){N=false;}}if(N){this.fireEvent("buttonClick",{type:"buttonClick",target:this.get("element"),button:F});}if(F.type=="select"){var K=this.getButtonById(F.id);if(K.buttonType=="rich"){var J=F.!
 value;for(var I=0;I<F.menu.length;I++){if(F.menu[I].value==F.value){J=F.menu[I].text;break;}}K.set("label",'<span class="yui-toolbar-'+F.menucmd+"-"+(F.value).replace(/ /g,"-").toLowerCase()+'">'+J+"</span>");var M=K.getMenu().getItems();for(var G=0;G<M.length;G++){if(M[G].value.toLowerCase()==F.value.toLowerCase()){M[G].cfg.setProperty("checked",true);}else{M[G].cfg.setProperty("checked",false);}}}}if(L){A.stopEvent(L);}}},_keyNav:null,_navCounter:null,_navigateButtons:function(F){switch(F.keyCode){case 37:case 39:if(F.keyCode==37){this._navCounter--;}else{this._navCounter++;}if(this._navCounter>(this._buttonList.length-1)){this._navCounter=0;}if(this._navCounter<0){this._navCounter=(this._buttonList.length-1);}if(this._buttonList[this._navCounter]){var E=this._buttonList[this._navCounter].get("element");if(this.browser.ie){E=this._buttonList[this._navCounter].get("element").getElementsByTagName("a")[0];}if(this._buttonList[this._navCounter].get("disabled")){this._navigate!
 Buttons(F);}else{E.focus();}}break;}},_handleFocus:function(){!
 if(!this
._keyNav){var E="keypress";if(this.browser.ie){E="keydown";}A.on(this.get("element"),E,this._navigateButtons,this,true);this._keyNav=true;this._navCounter=-1;}},getButtonById:function(G){var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==G){return this._buttonList[F];}}return false;},getButtonByValue:function(K){var H=this.get("buttons");var F=H.length;for(var I=0;I<F;I++){if(H[I].group!==undefined){for(var E=0;E<H[I].buttons.length;E++){if((H[I].buttons[E].value==K)||(H[I].buttons[E].menucmd==K)){return this.getButtonById(H[I].buttons[E].id);}if(H[I].buttons[E].menu){for(var J=0;J<H[I].buttons[E].menu.length;J++){if(H[I].buttons[E].menu[J].value==K){return this.getButtonById(H[I].buttons[E].id);}}}}}else{if((H[I].value==K)||(H[I].menucmd==K)){return this.getButtonById(H[I].id);}if(H[I].menu){for(var G=0;G<H[I].menu.length;G++){if(H[I].menu[G].value==K){return this.getButtonById(H[I].id);}}}}}return false;},getButtonByIn!
 dex:function(E){if(this._buttonList[E]){return this._buttonList[E];}else{return false;}},getButtons:function(){return this._buttonList;},disableButton:function(F){var E=B.call(this,F);if(E){E.set("disabled",true);}else{return false;}},enableButton:function(F){if(this.get("disabled")){return false;}var E=B.call(this,F);if(E){if(E.get("disabled")){E.set("disabled",false);}}else{return false;}},isSelected:function(F){var E=B.call(this,F);if(E){return E._selected;}return false;},selectButton:function(I,G){var F=B.call(this,I);if(F){F.addClass("yui-button-selected");F.addClass("yui-button-"+F.get("value")+"-selected");F._selected=true;if(G){if(F.buttonType=="rich"){var H=F.getMenu().getItems();for(var E=0;E<H.length;E++){if(H[E].value==G){H[E].cfg.setProperty("checked",true);F.set("label",'<span class="yui-toolbar-'+F.get("value")+"-"+(G).replace(/ /g,"-").toLowerCase()+'">'+H[E]._oText.nodeValue+"</span>");}else{H[E].cfg.setProperty("checked",false);
-}}}}}else{return false;}},deselectButton:function(F){var E=B.call(this,F);if(E){E.removeClass("yui-button-selected");E.removeClass("yui-button-"+E.get("value")+"-selected");E.removeClass("yui-button-hover");E._selected=false;}else{return false;}},deselectAllButtons:function(){var E=this._buttonList.length;for(var F=0;F<E;F++){this.deselectButton(this._buttonList[F]);}},disableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.disableButton(this._buttonList[F]);}},enableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.enableButton(this._buttonList[F]);}},resetAllButtons:function(I){if(!D.isObject(I)){I={};}if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){var H=this._buttonList[F];if(H){var G=H._configs.disabled._initialConfig.value;if(I[H.get("id")]){this.enableButton(H);this.selectButton(H);}else{if(G)!
 {this.disableButton(H);}else{this.enableButton(H);}this.deselectButton(H);}}}},destroyButton:function(I){var G=B.call(this,I);if(G){var H=G.get("id");G.destroy();var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==H){this._buttonList[F]=null;}}}else{return false;}},destroy:function(){this.get("element").innerHTML="";this.get("element").className="";for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}return true;},collapse:function(F){var E=C.getElementsByClassName("collapse","span",this._titlebar);if(F===false){C.removeClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");if(E[0]){C.removeClass(E[0],"collapsed");}this.fireEvent("toolbarExpanded",{type:"toolbarExpanded",target:this});}else{if(E[0]){C.addClass(E[0],"collapsed");}C.addClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");this.fireEvent("toolbarCollapsed",{type:"toolbarCollapsed",target:this});}},toString:function(){r!
 eturn"Toolbar (#"+this.get("element").id+") with "+this._butto!
 nList.le
ngth+" buttons.";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.SimpleEditor=function(H,M){var G={};if(D.isObject(H)&&(!H.tagName)&&!M){D.augmentObject(G,H);H=document.createElement("textarea");this.DOMReady=true;if(G.container){var K=C.get(G.container);K.appendChild(H);}else{document.body.appendChild(H);}}else{if(M){D.augmentObject(G,M);}}var I={element:null,attributes:G},F=null;if(D.isString(H)){F=H;}else{if(I.attributes.id){F=I.attributes.id;}else{this.DOMReady=true;F=C.generateId(H);}}I.element=H;var J=document.createElement("DIV");I.attributes.element_cont=new YAHOO.util.Element(J,{id:F+"_container"});var E=document.createElement("div");C.addClass(E,"first-child");I.attributes.element_cont.appendChild(E);if(!I.attributes.toolbar_cont){I.attributes.toolbar_cont=document.createElement("DIV");I.attributes.toolbar_cont.id=F+"_toolbar";E.appendChild(I.attributes.toolbar_cont);}var L=document.createElement("DIV");!
 E.appendChild(L);I.attributes.editor_wrapper=L;YAHOO.widget.SimpleEditor.superclass.constructor.call(this,I.element,I.attributes);};YAHOO.extend(YAHOO.widget.SimpleEditor,YAHOO.util.Element,{_resizeConfig:{handles:["br"],autoRatio:true,status:true,proxy:true,useShim:true,setSize:false},_setupResize:function(){if(!YAHOO.util.DD||!YAHOO.util.Resize){return false;}if(this.get("resize")){var E={};D.augmentObject(E,this._resizeConfig);this.resize=new YAHOO.util.Resize(this.get("element_cont").get("element"),E);this.resize.on("resize",function(G){var K=this.get("animate");this.set("animate",false);this.set("width",G.width+"px");var H=G.height,I=(this.toolbar.get("element").clientHeight+2),J=0;if(this.dompath){J=(this.dompath.clientHeight+1);}var F=(H-I-J);this.set("height",F+"px");this.get("element_cont").setStyle("height","");this.set("animate",K);},this,true);}},resize:null,_setupDD:function(){if(!YAHOO.util.DD){return false;}if(this.get("drag")){var F=this.get("drag"),E=YAHOO.!
 util.DD;if(F==="proxy"){E=YAHOO.util.DDProxy;}this.dd=new E(th!
 is.get("
element_cont").get("element"));this.toolbar.addClass("draggable");this.dd.setHandleElId(this.toolbar._titlebar);}},dd:null,_lastCommand:null,_undoNodeChange:function(){},_storeUndo:function(){},_checkKey:function(E,H){var F=false;if((H.keyCode===E.key)){if(E.mods&&(E.mods.length>0)){var I=0;for(var G=0;G<E.mods.length;G++){if(this.browser.mac){if(E.mods[G]=="ctrl"){E.mods[G]="meta";}}if(H[E.mods[G]+"Key"]===true){I++;}}if(I===E.mods.length){F=true;}}else{F=true;}}return F;},_keyMap:{SELECT_ALL:{key:65,mods:["ctrl"]},CLOSE_WINDOW:{key:87,mods:["shift","ctrl"]},FOCUS_TOOLBAR:{key:27,mods:["shift"]},FOCUS_AFTER:{key:27},CREATE_LINK:{key:76,mods:["shift","ctrl"]},BOLD:{key:66,mods:["shift","ctrl"]},ITALIC:{key:73,mods:["shift","ctrl"]},UNDERLINE:{key:85,mods:["shift","ctrl"]},UNDO:{key:90,mods:["ctrl"]},REDO:{key:90,mods:["shift","ctrl"]},JUSTIFY_LEFT:{key:219,mods:["shift","ctrl"]},JUSTIFY_CENTER:{key:220,mods:["shift","ctrl"]},JUSTIFY_RIGHT:{key:221,mods:["shift","ctrl"]}},_cl!
 eanClassName:function(E){return E.replace(/ /g,"-").toLowerCase();},_textarea:null,_docType:'<!DOCTYPE HTML PUBLIC "-/'+"/W3C/"+"/DTD HTML 4.01/"+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',editorDirty:null,_defaultCSS:"html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }",_defaultToolbar:null,_lastButton:null,_baseHREF:function(){var E=document.location.href;if(E.indexOf("?")!==-1){E=E.substring(0,E.indexOf("?"));}E=E.substring(0,E.lastIndexOf("/"))+"/";return E;
-}(),_lastImage:null,_blankImageLoaded:null,_fixNodesTimer:null,_nodeChangeTimer:null,_lastNodeChangeEvent:null,_lastNodeChange:0,_rendered:null,DOMReady:null,_selection:null,_mask:null,_showingHiddenElements:null,currentWindow:null,currentEvent:null,operaEvent:null,currentFont:null,currentElement:null,dompath:null,beforeElement:null,afterElement:null,invalidHTML:{form:true,input:true,button:true,select:true,link:true,html:true,body:true,iframe:true,script:true,style:true,textarea:true},toolbar:null,_contentTimer:null,_contentTimerCounter:0,_disabled:["createlink","fontname","fontsize","forecolor","backcolor"],_alwaysDisabled:{undo:true,redo:true},_alwaysEnabled:{},_semantic:{"bold":true,"italic":true,"underline":true},_tag2cmd:{"b":"bold","strong":"bold","i":"italic","em":"italic","u":"underline","sup":"superscript","sub":"subscript","img":"insertimage","a":"createlink","ul":"insertunorderedlist","ol":"insertorderedlist"},_createIframe:function(){var I=document.createElemen!
 t("iframe");I.id=this.get("id")+"_editor";var G={border:"0",frameBorder:"0",marginWidth:"0",marginHeight:"0",leftMargin:"0",topMargin:"0",allowTransparency:"true",width:"100%"};if(this.get("autoHeight")){G.scrolling="no";}for(var H in G){if(D.hasOwnProperty(G,H)){I.setAttribute(H,G[H]);}}var F="javascript:;";if(this.browser.ie){F="javascript:false;";}I.setAttribute("src",F);var E=new YAHOO.util.Element(I);E.setStyle("visibility","hidden");return E;},_isElement:function(F,E){if(F&&F.tagName&&(F.tagName.toLowerCase()==E)){return true;}if(F&&F.getAttribute&&(F.getAttribute("tag")==E)){return true;}return false;},_hasParent:function(F,E){if(!F||!F.parentNode){return false;}while(F.parentNode){if(this._isElement(F,E)){return F;}if(F.parentNode){F=F.parentNode;}else{return false;}}return false;},_getDoc:function(){var E=false;if(this.get){if(this.get("iframe")){if(this.get("iframe").get){if(this.get("iframe").get("element")){try{if(this.get("iframe").get("element").contentWindow)!
 {if(this.get("iframe").get("element").contentWindow.document){!
 E=this.g
et("iframe").get("element").contentWindow.document;return E;}}}catch(F){}}}}}return false;},_getWindow:function(){return this.get("iframe").get("element").contentWindow;},_focusWindow:function(E){if(this.browser.webkit){if(E){this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild,0,this._getDoc().body.firstChild,1);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(false);}}else{this._getSelection().setBaseAndExtent(this._getDoc().body,1,this._getDoc().body,1);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(false);}}this._getWindow().focus();}else{this._getWindow().focus();}},_hasSelection:function(){var G=this._getSelection();var E=this._getRange();var F=false;if(!G||!E){return F;}if(this.browser.ie||this.browser.opera){if(E.text){F=true;}if(E.html){F=true;}}else{if(this.browser.webkit){if(G+""!==""){F=true;}}else{if(G&&(G.toString()!=="")&&(G!==undefined)){F=t!
 rue;}}}return F;},_getSelection:function(){var E=null;if(this._getDoc()&&this._getWindow()){if(this._getDoc().selection){E=this._getDoc().selection;}else{E=this._getWindow().getSelection();}if(this.browser.webkit){if(E.baseNode){this._selection={};this._selection.baseNode=E.baseNode;this._selection.baseOffset=E.baseOffset;this._selection.extentNode=E.extentNode;this._selection.extentOffset=E.extentOffset;}else{if(this._selection!==null){E=this._getWindow().getSelection();E.setBaseAndExtent(this._selection.baseNode,this._selection.baseOffset,this._selection.extentNode,this._selection.extentOffset);this._selection=null;}}}}return E;},_selectNode:function(F,I){if(!F){return false;}var G=this._getSelection(),E=null;if(this.browser.ie){try{E=this._getDoc().body.createTextRange();E.moveToElementText(F);E.select();}catch(H){}}else{if(this.browser.webkit){if(I){G.setBaseAndExtent(F,1,F,F.innerText.length);}else{G.setBaseAndExtent(F,0,F,F.innerText.length);}}else{if(this.browser.ope!
 ra){G=this._getWindow().getSelection();E=this._getDoc().create!
 Range();
E.selectNode(F);G.removeAllRanges();G.addRange(E);}else{E=this._getDoc().createRange();E.selectNodeContents(F);G.removeAllRanges();G.addRange(E);}}}this.nodeChange();},_getRange:function(){var E=this._getSelection();if(E===null){return null;}if(this.browser.webkit&&!E.getRangeAt){var H=this._getDoc().createRange();try{H.setStart(E.anchorNode,E.anchorOffset);H.setEnd(E.focusNode,E.focusOffset);}catch(G){H=this._getWindow().getSelection()+"";}return H;}if(this.browser.ie||this.browser.opera){try{return E.createRange();}catch(F){return null;}}if(E.rangeCount>0){return E.getRangeAt(0);}return null;},_setDesignMode:function(E){try{var G=true;if(this.browser.ie&&(E.toLowerCase()=="off")){G=false;}if(G){this._getDoc().designMode=E;}}catch(F){}},_toggleDesignMode:function(){var F=this._getDoc().designMode.toLowerCase(),E="on";if(F=="on"){E="off";}this._setDesignMode(E);return E;},_initEditorEvents:function(){var E=this._getDoc();A.on(E,"mouseup",this._handleMouseUp,this,true);A.on(E!
 ,"mousedown",this._handleMouseDown,this,true);A.on(E,"click",this._handleClick,this,true);A.on(E,"dblclick",this._handleDoubleClick,this,true);A.on(E,"keypress",this._handleKeyPress,this,true);A.on(E,"keyup",this._handleKeyUp,this,true);A.on(E,"keydown",this._handleKeyDown,this,true);},_removeEditorEvents:function(){var E=this._getDoc();A.removeListener(E,"mouseup",this._handleMouseUp,this,true);A.removeListener(E,"mousedown",this._handleMouseDown,this,true);A.removeListener(E,"click",this._handleClick,this,true);A.removeListener(E,"dblclick",this._handleDoubleClick,this,true);A.removeListener(E,"keypress",this._handleKeyPress,this,true);A.removeListener(E,"keyup",this._handleKeyUp,this,true);A.removeListener(E,"keydown",this._handleKeyDown,this,true);},_initEditor:function(){if(this.browser.ie){this._getDoc().body.style.margin="0";}if(!this.get("disabled")){if(this._getDoc().designMode.toLowerCase()!="on"){this._setDesignMode("on");
-this._contentTimerCounter=0;}}if(!this._getDoc().body){this._contentTimerCounter=0;this._checkLoaded();return false;}this.toolbar.on("buttonClick",this._handleToolbarClick,this,true);if(!this.get("disabled")){this._initEditorEvents();this.toolbar.set("disabled",false);}this.fireEvent("editorContentLoaded",{type:"editorLoaded",target:this});if(this.get("dompath")){var E=this;setTimeout(function(){E._writeDomPath.call(E);E._setupResize.call(E);},150);}var G=[];for(var F in this.browser){if(this.browser[F]){G.push(F);}}if(this.get("ptags")){G.push("ptags");}C.addClass(this._getDoc().body,G.join(" "));this.nodeChange(true);},_checkLoaded:function(){this._contentTimerCounter++;if(this._contentTimer){clearTimeout(this._contentTimer);}if(this._contentTimerCounter>500){return false;}var G=false;try{if(this._getDoc()&&this._getDoc().body){if(this.browser.ie){if(this._getDoc().body.readyState=="complete"){G=true;}}else{if(this._getDoc().body._rteLoaded===true){G=true;}}}}catch(F){G=f!
 alse;}if(G===true){this._initEditor();}else{var E=this;this._contentTimer=setTimeout(function(){E._checkLoaded.call(E);},20);}},_setInitialContent:function(){var H=((this._textarea)?this.get("element").value:this.get("element").innerHTML),J=null;var F=D.substitute(this.get("html"),{TITLE:this.STR_TITLE,CONTENT:this._cleanIncomingHTML(H),CSS:this.get("css"),HIDDEN_CSS:((this.get("hiddencss"))?this.get("hiddencss"):"/* No Hidden CSS */"),EXTRA_CSS:((this.get("extracss"))?this.get("extracss"):"/* No Extra CSS */")}),E=true;if(document.compatMode!="BackCompat"){F=this._docType+"\n"+F;}else{}if(this.browser.ie||this.browser.webkit||this.browser.opera||(navigator.userAgent.indexOf("Firefox/1.5")!=-1)){try{if(this.browser.air){J=this._getDoc().implementation.createHTMLDocument();var K=this._getDoc();K.open();K.close();J.open();J.write(F);J.close();var G=K.importNode(J.getElementsByTagName("html")[0],true);K.replaceChild(G,K.getElementsByTagName("html")[0]);K.body._rteLoaded=true;}!
 else{J=this._getDoc();J.open();J.write(F);J.close();}}catch(I)!
 {E=false
;}}else{this.get("iframe").get("element").src="data:text/html;charset=utf-8,"+encodeURIComponent(F);}this.get("iframe").setStyle("visibility","");if(E){this._checkLoaded();}},_setMarkupType:function(E){switch(this.get("markup")){case"css":this._setEditorStyle(true);break;case"default":this._setEditorStyle(false);break;case"semantic":case"xhtml":if(this._semantic[E]){this._setEditorStyle(false);}else{this._setEditorStyle(true);}break;}},_setEditorStyle:function(F){try{this._getDoc().execCommand("useCSS",false,!F);}catch(E){}},_getSelectedElement:function(){var I=this._getDoc(),F=null,G=null,J=null,E=true;if(this.browser.ie){this.currentEvent=this._getWindow().event;F=this._getRange();if(F){J=F.item?F.item(0):F.parentElement();if(this._hasSelection()){}if(J===I.body){J=null;}}if((this.currentEvent!==null)&&(this.currentEvent.keyCode===0)){J=A.getTarget(this.currentEvent);}}else{G=this._getSelection();F=this._getRange();if(!G||!F){return null;}if(!this._hasSelection()&&this.bro!
 wser.webkit3){}if(this.browser.gecko){if(F.startContainer){E=false;if(F.startContainer.nodeType===3){J=F.startContainer.parentNode;}else{if(F.startContainer.nodeType===1){J=F.startContainer;}else{E=true;}}if(!E){this.currentEvent=null;}}}if(E){if(G.anchorNode&&(G.anchorNode.nodeType==3)){if(G.anchorNode.parentNode){J=G.anchorNode.parentNode;}if(G.anchorNode.nextSibling!=G.focusNode.nextSibling){J=G.anchorNode.nextSibling;}}if(this._isElement(J,"br")){J=null;}if(!J){J=F.commonAncestorContainer;if(!F.collapsed){if(F.startContainer==F.endContainer){if(F.startOffset-F.endOffset<2){if(F.startContainer.hasChildNodes()){J=F.startContainer.childNodes[F.startOffset];}}}}}}}if(this.currentEvent!==null){try{switch(this.currentEvent.type){case"click":case"mousedown":case"mouseup":if(this.browser.webkit){J=A.getTarget(this.currentEvent);}break;default:break;}}catch(H){}}else{if((this.currentElement&&this.currentElement[0])&&(!this.browser.ie)){}}if(this.browser.opera||this.browser.webki!
 t){if(this.currentEvent&&!J){J=YAHOO.util.Event.getTarget(this!
 .current
Event);}}if(!J||!J.tagName){J=I.body;}if(this._isElement(J,"html")){J=I.body;}if(this._isElement(J,"body")){J=I.body;}if(J&&!J.parentNode){J=I.body;}if(J===undefined){J=null;}return J;},_getDomPath:function(E){if(!E){E=this._getSelectedElement();}var F=[];while(E!==null){if(E.ownerDocument!=this._getDoc()){E=null;break;}if(E.nodeName&&E.nodeType&&(E.nodeType==1)){F[F.length]=E;}if(this._isElement(E,"body")){break;}E=E.parentNode;}if(F.length===0){if(this._getDoc()&&this._getDoc().body){F[0]=this._getDoc().body;}}return F.reverse();},_writeDomPath:function(){var K=this._getDomPath(),I=[],G="",L="";for(var E=0;E<K.length;E++){var M=K[E].tagName.toLowerCase();if((M=="ol")&&(K[E].type)){M+=":"+K[E].type;}if(C.hasClass(K[E],"yui-tag")){M=K[E].getAttribute("tag");}if((this.get("markup")=="semantic")||(this.get("markup")=="xhtml")){switch(M){case"b":M="strong";break;case"i":M="em";break;}}if(!C.hasClass(K[E],"yui-non")){if(C.hasClass(K[E],"yui-tag")){L=M;}else{G=((K[E].className!==!
 "")?"."+K[E].className.replace(/ /g,"."):"");if((G.indexOf("yui")!=-1)||(G.toLowerCase().indexOf("apple-style-span")!=-1)){G="";}L=M+((K[E].id)?"#"+K[E].id:"")+G;}switch(M){case"body":L="body";break;case"a":if(K[E].getAttribute("href",2)){L+=":"+K[E].getAttribute("href",2).replace("mailto:","").replace("http:/"+"/","").replace("https:/"+"/","");}break;case"img":var F=K[E].height;var J=K[E].width;if(K[E].style.height){F=parseInt(K[E].style.height,10);}if(K[E].style.width){J=parseInt(K[E].style.width,10);}L+="("+J+"x"+F+")";break;}if(L.length>10){L='<span title="'+L+'">'+L.substring(0,10)+"..."+"</span>";}else{L='<span title="'+L+'">'+L+"</span>";}I[I.length]=L;}}var H=I.join(" "+this.SEP_DOMPATH+" ");if(this.dompath.innerHTML!=H){this.dompath.innerHTML=H;}},_fixNodes:function(){var J=this._getDoc(),H=[];for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(E.toLowerCase()!="span"){var F=J.body.getElementsByTagName(E);
-if(F.length){for(var G=0;G<F.length;G++){H.push(F[G]);}}}}}for(var I=0;I<H.length;I++){if(H[I].parentNode){if(D.isObject(this.invalidHTML[H[I].tagName.toLowerCase()])&&this.invalidHTML[H[I].tagName.toLowerCase()].keepContents){this._swapEl(H[I],"span",function(L){L.className="yui-non";});}else{H[I].parentNode.removeChild(H[I]);}}}var K=this._getDoc().getElementsByTagName("img");C.addClass(K,"yui-img");},_isNonEditable:function(G){if(this.get("allowNoEdit")){var F=A.getTarget(G);if(this._isElement(F,"html")){F=null;}var J=this._getDomPath(F);for(var E=(J.length-1);E>-1;E--){if(C.hasClass(J[E],this.CLASS_NOEDIT)){try{this._getDoc().execCommand("enableObjectResizing",false,"false");}catch(I){}this.nodeChange();A.stopEvent(G);return true;}}try{this._getDoc().execCommand("enableObjectResizing",false,"true");}catch(H){}}return false;},_setCurrentEvent:function(E){this.currentEvent=E;},_handleClick:function(G){var F=this.fireEvent("beforeEditorClick",{type:"beforeEditorClick",targ!
 et:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}if(this.browser.webkit){var E=A.getTarget(G);if(this._isElement(E,"a")||this._isElement(E.parentNode,"a")){A.stopEvent(G);this.nodeChange();}}else{this.nodeChange();}this.fireEvent("editorClick",{type:"editorClick",target:this,ev:G});},_handleMouseUp:function(G){var F=this.fireEvent("beforeEditorMouseUp",{type:"beforeEditorMouseUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}var E=this;if(this.browser.opera){var H=A.getTarget(G);if(this._isElement(H,"img")){this.nodeChange();if(this.operaEvent){clearTimeout(this.operaEvent);this.operaEvent=null;this._handleDoubleClick(G);}else{this.operaEvent=window.setTimeout(function(){E.operaEvent=false;},700);}}}if(this.browser.webkit||this.browser.opera){if(this.browser.webkit){A.stopEvent(G);}}this.n!
 odeChange();this.fireEvent("editorMouseUp",{type:"editorMouseU!
 p",targe
t:this,ev:G});},_handleMouseDown:function(F){var E=this.fireEvent("beforeEditorMouseDown",{type:"beforeEditorMouseDown",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this.browser.webkit&&this._hasSelection()){var H=this._getSelection();if(!this.browser.webkit3){H.collapse(true);}else{H.collapseToStart();}}if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}if(this._isElement(G,"img")||this._isElement(G,"a")){if(this.browser.webkit){A.stopEvent(F);if(this._isElement(G,"img")){C.addClass(G,"selected");this._lastImage=G;}}if(this.currentWindow){this.closeWindow();}this.nodeChange();}this.fireEvent("editorMouseDown",{type:"editorMouseDown",target:this,ev:F});},_handleDoubleClick:function(F){var E=this.fireEvent("beforeEditorDoubleClick",{type:"beforeEditorDoubleClick",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(!
 F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this._isElement(G,"img")){this.currentElement[0]=G;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}else{if(this._hasParent(G,"a")){this.currentElement[0]=this._hasParent(G,"a");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}}this.nodeChange();this.fireEvent("editorDoubleClick",{type:"editorDoubleClick",target:this,ev:F});},_handleKeyUp:function(G){var F=this.fireEvent("beforeEditorKeyUp",{type:"beforeEditorKeyUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);switch(G.keyCode){case this._keyMap.SELECT_ALL.key:if(this._checkKey(this._keyMap.SELECT_ALL,G)){this.nodeChange();}break;case 32:case 35:case 36:case 37:case 38:!
 case 39:case 40:case 46:case 8:case this._keyMap.CLOSE_WINDOW.!
 key:if((
G.keyCode==this._keyMap.CLOSE_WINDOW.key)&&this.currentWindow){if(this._checkKey(this._keyMap.CLOSE_WINDOW,G)){this.closeWindow();}}else{if(!this.browser.ie){if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);}var E=this;this._nodeChangeTimer=setTimeout(function(){E._nodeChangeTimer=null;E.nodeChange.call(E);},100);}else{this.nodeChange();}this.editorDirty=true;}break;}this.fireEvent("editorKeyUp",{type:"editorKeyUp",target:this,ev:G});this._storeUndo();},_handleKeyPress:function(G){var F=this.fireEvent("beforeEditorKeyPress",{type:"beforeEditorKeyPress",target:this,ev:G});if(F===false){return false;}if(this.get("allowNoEdit")){if(G&&G.keyCode&&(G.keyCode==63272)){A.stopEvent(G);}}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.browser.opera){if(G.keyCode===13){var E=this._getSelectedElement();if(!this._isElement(E,"li")){this.execCommand("inserthtml","<br>");A.stopEvent(G);}}}if(this.browser.webkit){if(!this.browser.webkit3){if(G.keyCode!
 &&(G.keyCode==122)&&(G.metaKey)){if(this._hasParent(this._getSelectedElement(),"li")){A.stopEvent(G);}}}this._listFix(G);}this.fireEvent("editorKeyPress",{type:"editorKeyPress",target:this,ev:G});},_handleKeyDown:function(M){var J=this.fireEvent("beforeEditorKeyDown",{type:"beforeEditorKeyDown",target:this,ev:M});if(J===false){return false;}var I=null,K=null;if(this._isNonEditable(M)){return false;}this._setCurrentEvent(M);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}var L=false,G=null,F=false;switch(M.keyCode){case this._keyMap.FOCUS_TOOLBAR.key:if(this._checkKey(this._keyMap.FOCUS_TOOLBAR,M)){var H=this.toolbar.getElementsByTagName("h2")[0];if(H&&H.firstChild){H.firstChild.focus();}}else{if(this._checkKey(this._keyMap.FOCUS_AFTER,M)){this.afterElement.focus();}}A.stopEvent(M);L=false;break;case this._keyMap.CREATE_LINK.key:if(this._hasSelection()){if(this._checkKey(this._keyMap.CREATE_LINK,M)){var E=true;
-if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){E=false;}}if(E){this.execCommand("createlink","");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});L=false;}}}break;case this._keyMap.UNDO.key:case this._keyMap.REDO.key:if(this._checkKey(this._keyMap.REDO,M)){G="redo";L=true;}else{if(this._checkKey(this._keyMap.UNDO,M)){G="undo";L=true;}}break;case this._keyMap.BOLD.key:if(this._checkKey(this._keyMap.BOLD,M)){G="bold";L=true;}break;case this._keyMap.ITALIC.key:if(this._checkKey(this._keyMap.ITALIC,M)){G="italic";L=true;}break;case this._keyMap.UNDERLINE.key:if(this._checkKey(this._keyMap.UNDERLINE,M)){G="underline";L=true;}break;case 9:if(this.browser.ie){K=this._getRange();I=this._getSelectedElement();if(!this._isElement(I,"li")){if(K){K.pasteHTML("    ");K.collapse(false);K.select();}A.stopEvent(M);}}if(this.browse!
 r.gecko>1.8){I=this._getSelectedElement();if(this._isElement(I,"li")){if(M.shiftKey){this._getDoc().execCommand("outdent",null,"");}else{this._getDoc().execCommand("indent",null,"");}}else{if(!this._hasSelection()){this.execCommand("inserthtml","    ");}}A.stopEvent(M);}break;case 13:if(this.get("ptags")&&!M.shiftKey){if(this.browser.gecko){I=this._getSelectedElement();if(!this._isElement(I,"li")){L=true;G="insertparagraph";A.stopEvent(M);}}if(this.browser.webkit){I=this._getSelectedElement();if(!this._hasParent(I,"li")){L=true;G="insertparagraph";A.stopEvent(M);}}}else{if(this.browser.ie){K=this._getRange();I=this._getSelectedElement();if(!this._isElement(I,"li")){if(K){K.pasteHTML("<br>");K.collapse(false);K.select();}A.stopEvent(M);}}}break;}if(this.browser.ie){this._listFix(M);}if(L&&G){this.execCommand(G,null);A.stopEvent(M);this.nodeChange();}this.fireEvent("editorKeyDown",{type:"editorKeyDown",target:this,ev:M});},_listFix:function(K){var M=null,I!
 =null,E=false,G=null;if(this.browser.webkit){if(K.keyCode&&(K.!
 keyCode=
=13)){if(this._hasParent(this._getSelectedElement(),"li")){var H=this._hasParent(this._getSelectedElement(),"li");if(H.previousSibling){if(H.firstChild&&(H.firstChild.length==1)){this._selectNode(H);}}}}}if(K.keyCode&&((!this.browser.webkit3&&(K.keyCode==25))||((this.browser.webkit3||!this.browser.webkit)&&((K.keyCode==9)&&K.shiftKey)))){M=this._getSelectedElement();if(this._hasParent(M,"li")){M=this._hasParent(M,"li");if(this._hasParent(M,"ul")||this._hasParent(M,"ol")){I=this._hasParent(M,"ul");if(!I){I=this._hasParent(M,"ol");}if(this._isElement(I.previousSibling,"li")){I.removeChild(M);I.parentNode.insertBefore(M,I.nextSibling);if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(M);G.collapse(false);G.select();}if(this.browser.webkit){this._selectNode(M.firstChild);}A.stopEvent(K);}}}}if(K.keyCode&&((K.keyCode==9)&&(!K.shiftKey))){var F=this._getSelectedElement();if(this._hasParent(F,"li")){E=this._hasParent(F,"li").innerHTML;}if(this.browser.!
 webkit){this._getDoc().execCommand("inserttext",false,"\t");}M=this._getSelectedElement();if(this._hasParent(M,"li")){I=this._hasParent(M,"li");var J=this._getDoc().createElement(I.parentNode.tagName.toLowerCase());if(this.browser.webkit){var L=C.getElementsByClassName("Apple-tab-span","span",I);if(L[0]){I.removeChild(L[0]);I.innerHTML=D.trim(I.innerHTML);if(E){I.innerHTML='<span class="yui-non">'+E+"</span> ";}else{I.innerHTML='<span class="yui-non"> </span> ';}}}else{if(E){I.innerHTML=E+" ";}else{I.innerHTML=" ";}}I.parentNode.replaceChild(J,I);J.appendChild(I);if(this.browser.webkit){this._getSelection().setBaseAndExtent(I.firstChild,1,I.firstChild,I.firstChild.innerText.length);if(!this.browser.webkit3){I.parentNode.parentNode.style.display="list-item";setTimeout(function(){I.parentNode.parentNode.style.display="block";},1);}}else{if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(I);G.collapse(false);G.select();}els!
 e{this._selectNode(I);}}A.stopEvent(K);}if(this.browser.webkit!
 ){A.stop
Event(K);}this.nodeChange();}},nodeChange:function(E){var F=this;this._storeUndo();if(this.get("nodeChangeDelay")){window.setTimeout(function(){F._nodeChange.apply(F,arguments);},0);}else{this._nodeChange();}},_nodeChange:function(F){var H=parseInt(this.get("nodeChangeThreshold"),10),O=Math.round(new Date().getTime()/1000),R=this;if(F===true){this._lastNodeChange=0;}if((this._lastNodeChange+H)<O){if(this._fixNodesTimer===null){this._fixNodesTimer=window.setTimeout(function(){R._fixNodes.call(R);R._fixNodesTimer=null;},0);}}this._lastNodeChange=O;if(this.currentEvent){try{this._lastNodeChangeEvent=this.currentEvent.type;}catch(a){}}var Z=this.fireEvent("beforeNodeChange",{type:"beforeNodeChange",target:this});if(Z===false){return false;}if(this.get("dompath")){window.setTimeout(function(){R._writeDomPath.call(R);},0);}if(!this.get("disabled")){if(this.STOP_NODE_CHANGE){this.STOP_NODE_CHANGE=false;return false;}else{var T=this._getSelection(),Q=this._getRange(),E=this._getSele!
 ctedElement(),M=this.toolbar.getButtonByValue("fontname"),L=this.toolbar.getButtonByValue("fontsize"),J=this.toolbar.getButtonByValue("undo"),G=this.toolbar.getButtonByValue("redo");var N={};if(this._lastButton){N[this._lastButton.id]=true;}if(!this._isElement(E,"body")){if(M){N[M.get("id")]=true;}if(L){N[L.get("id")]=true;}}if(G){delete N[G.get("id")];}this.toolbar.resetAllButtons(N);for(var b=0;b<this._disabled.length;b++){var P=this.toolbar.getButtonByValue(this._disabled[b]);if(P&&P.get){if(this._lastButton&&(P.get("id")===this._lastButton.id)){}else{if(!this._hasSelection()&&!this.get("insert")){switch(this._disabled[b]){case"fontname":case"fontsize":break;default:this.toolbar.disableButton(P);}}else{if(!this._alwaysDisabled[this._disabled[b]]){this.toolbar.enableButton(P);}}if(!this._alwaysEnabled[this._disabled[b]]){this.toolbar.deselectButton(P);}}}}var S=this._getDomPath();var c=null,W=null;for(var X=0;
-X<S.length;X++){c=S[X].tagName.toLowerCase();if(S[X].getAttribute("tag")){c=S[X].getAttribute("tag").toLowerCase();}W=this._tag2cmd[c];if(W===undefined){W=[];}if(!D.isArray(W)){W=[W];}if(S[X].style.fontWeight.toLowerCase()=="bold"){W[W.length]="bold";}if(S[X].style.fontStyle.toLowerCase()=="italic"){W[W.length]="italic";}if(S[X].style.textDecoration.toLowerCase()=="underline"){W[W.length]="underline";}if(S[X].style.textDecoration.toLowerCase()=="line-through"){W[W.length]="strikethrough";}if(W.length>0){for(var V=0;V<W.length;V++){this.toolbar.selectButton(W[V]);this.toolbar.enableButton(W[V]);}}switch(S[X].style.textAlign.toLowerCase()){case"left":case"right":case"center":case"justify":var U=S[X].style.textAlign.toLowerCase();if(S[X].style.textAlign.toLowerCase()=="justify"){U="full";}this.toolbar.selectButton("justify"+U);this.toolbar.enableButton("justify"+U);break;}}if(M){var Y=M._configs.label._initialConfig.value;M.set("label",'<span class="yui-toolbar-fontname-'+this!
 ._cleanClassName(Y)+'">'+Y+"</span>");this._updateMenuChecked("fontname",Y);}if(L){L.set("label",L._configs.label._initialConfig.value);}var K=this.toolbar.getButtonByValue("heading");if(K){K.set("label",K._configs.label._initialConfig.value);this._updateMenuChecked("heading","none");}var I=this.toolbar.getButtonByValue("insertimage");if(I&&this.currentWindow&&(this.currentWindow.name=="insertimage")){this.toolbar.disableButton(I);}if(this._lastButton&&this._lastButton.isSelected){this.toolbar.deselectButton(this._lastButton.id);}this._undoNodeChange();}}this.fireEvent("afterNodeChange",{type:"afterNodeChange",target:this});},_updateMenuChecked:function(E,F,H){if(!H){H=this.toolbar;}var G=H.getButtonByValue(E);G.checkValue(F);},_handleToolbarClick:function(F){var H="";var I="";var G=F.button.value;if(F.button.menucmd){H=G;G=F.button.menucmd;}this._lastButton=F.button;if(this.STOP_EXEC_COMMAND){this.STOP_EXEC_COMMAND=false;return false;}else{this.execCommand(G,H);if(!this.br!
 owser.webkit){var E=this;setTimeout(function(){E._focusWindow.!
 call(E);
},5);}}A.stopEvent(F);},_setupAfterElement:function(){if(!this.beforeElement){this.beforeElement=document.createElement("h2");this.beforeElement.className="yui-editor-skipheader";this.beforeElement.tabIndex="-1";this.beforeElement.innerHTML=this.STR_BEFORE_EDITOR;this.get("element_cont").get("firstChild").insertBefore(this.beforeElement,this.toolbar.get("nextSibling"));}if(!this.afterElement){this.afterElement=document.createElement("h2");this.afterElement.className="yui-editor-skipheader";this.afterElement.tabIndex="-1";this.afterElement.innerHTML=this.STR_LEAVE_EDITOR;this.get("element_cont").get("firstChild").appendChild(this.afterElement);}},_disableEditor:function(F){if(F){this._removeEditorEvents();if(!this._mask){if(!!this.browser.ie){this._setDesignMode("off");}if(this.toolbar){this.toolbar.set("disabled",true);}this._mask=document.createElement("DIV");C.setStyle(this._mask,"height","100%");C.setStyle(this._mask,"width","100%");C.setStyle(this._mask,"position","absol!
 ute");C.setStyle(this._mask,"top","0");C.setStyle(this._mask,"left","0");C.setStyle(this._mask,"opacity",".5");C.addClass(this._mask,"yui-editor-masked");this.get("iframe").get("parentNode").appendChild(this._mask);}}else{this._initEditorEvents();if(this._mask){this._mask.parentNode.removeChild(this._mask);this._mask=null;if(this.toolbar){this.toolbar.set("disabled",false);}this._setDesignMode("on");this._focusWindow();var E=this;window.setTimeout(function(){E.nodeChange.call(E);},100);}}},SEP_DOMPATH:"<",STR_LEAVE_EDITOR:"You have left the Rich Text Editor.",STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Shift + Escape to place focus on the toolbar and navigate between options with your arrow keys. To exit this text editor use the Escape key and continue tabbing. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets !
 text to italic</li> <li>Control Shift U underlines text</li> <!
 li>Contr
ol Shift L adds an HTML link</li></ul>",STR_TITLE:"Rich Text Area.",STR_IMAGE_HERE:"Image URL Here",STR_LINK_URL:"Link URL",STOP_EXEC_COMMAND:false,STOP_NODE_CHANGE:false,CLASS_NOEDIT:"yui-noedit",CLASS_CONTAINER:"yui-editor-container",CLASS_EDITABLE:"yui-editor-editable",CLASS_EDITABLE_CONT:"yui-editor-editable-container",CLASS_PREFIX:"yui-editor",browser:function(){var E=YAHOO.env.ua;if(E.webkit>=420){E.webkit3=E.webkit;}else{E.webkit3=0;}E.mac=false;if(navigator.userAgent.indexOf("Macintosh")!==-1){E.mac=true;}return E;}(),init:function(F,E){if(!this._defaultToolbar){this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:false,buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{!
 type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"push",label:"Strike Through",value:"strikethrough"},{type:"separator"},{type:"color",label:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Background Color",value:"backcolor",disabled:true}]},{type:"separator"},{group:"indentlist",label:"Lists",buttons:[{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};
-}YAHOO.widget.SimpleEditor.superclass.init.call(this,F,E);YAHOO.widget.EditorInfo._instances[this.get("id")]=this;this.currentElement=[];this.on("contentReady",function(){this.DOMReady=true;this.fireQueue();},this,true);},initAttributes:function(E){YAHOO.widget.SimpleEditor.superclass.initAttributes.call(this,E);var F=this;this.setAttributeConfig("nodeChangeDelay",{value:((E.nodeChangeDelay===false)?false:true)});this.setAttributeConfig("maxUndo",{writeOnce:true,value:E.maxUndo||30});this.setAttributeConfig("ptags",{writeOnce:true,value:E.ptags||false});this.setAttributeConfig("insert",{writeOnce:true,value:E.insert||false,method:function(K){if(K){var J={fontname:true,fontsize:true,forecolor:true,backcolor:true};var I=this._defaultToolbar.buttons;for(var H=0;H<I.length;H++){if(I[H].buttons){for(var G=0;G<I[H].buttons.length;G++){if(I[H].buttons[G].value){if(J[I[H].buttons[G].value]){delete I[H].buttons[G].disabled;}}}}}}}});this.setAttributeConfig("container",{writeOnce:tru!
 e,value:E.container||false});this.setAttributeConfig("plainText",{writeOnce:true,value:E.plainText||false});this.setAttributeConfig("iframe",{value:null});this.setAttributeConfig("textarea",{value:null,writeOnce:true});this.setAttributeConfig("container",{readOnly:true,value:null});this.setAttributeConfig("nodeChangeThreshold",{value:E.nodeChangeThreshold||3,validator:YAHOO.lang.isNumber});this.setAttributeConfig("allowNoEdit",{value:E.allowNoEdit||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("limitCommands",{value:E.limitCommands||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("element_cont",{value:E.element_cont});this.setAttributeConfig("editor_wrapper",{value:E.editor_wrapper||null,writeOnce:true});this.setAttributeConfig("height",{value:E.height||C.getStyle(F.get("element"),"height"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("iframe").get("parentNode"),{height:{to:parseInt(G,10)}},!
 0.5);H.animate();}else{C.setStyle(this.get("iframe").get("pare!
 ntNode")
,"height",G);}}}});this.setAttributeConfig("autoHeight",{value:E.autoHeight||false,method:function(G){if(G){if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","no");}this.on("afterNodeChange",this._handleAutoHeight,this,true);this.on("editorKeyDown",this._handleAutoHeight,this,true);this.on("editorKeyPress",this._handleAutoHeight,this,true);}else{if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","auto");}this.unsubscribe("afterNodeChange",this._handleAutoHeight);this.unsubscribe("editorKeyDown",this._handleAutoHeight);this.unsubscribe("editorKeyPress",this._handleAutoHeight);}}});this.setAttributeConfig("width",{value:E.width||C.getStyle(this.get("element"),"width"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("element_cont").get("element"),{width:{to:parseInt(G,10)}},0.5);H.animate();}else{this.get("element_cont").setStyle("width",G);}}}});this.setAttributeConf!
 ig("blankimage",{value:E.blankimage||this._getBlankImage()});this.setAttributeConfig("css",{value:E.css||this._defaultCSS,writeOnce:true});this.setAttributeConfig("html",{value:E.html||'<html><head><title>{TITLE}</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><base href="'+this._baseHREF+'"><style>{CSS}</style><style>{HIDDEN_CSS}</style><style>{EXTRA_CSS}</style></head><body onload="document.body._rteLoaded = true;">{CONTENT}</body></html>',writeOnce:true});this.setAttributeConfig("extracss",{value:E.extracss||"",writeOnce:true});this.setAttributeConfig("handleSubmit",{value:E.handleSubmit||false,method:function(G){if(this.get("element").form){if(!this._formButtons){this._formButtons=[];}if(G){A.on(this.get("element").form,"submit",this._handleFormSubmit,this,true);var H=this.get("element").form.getElementsByTagName("input");for(var J=0;J<H.length;J++){var I=H[J].getAttribute("type");if(I&&(I.toLowerCase()=="submit")){A.on(H[J],"click",this._han!
 dleFormButtonClick,this,true);this._formButtons[this._formButt!
 ons.leng
th]=H[J];}}}else{A.removeListener(this.get("element").form,"submit",this._handleFormSubmit);if(this._formButtons){A.removeListener(this._formButtons,"click",this._handleFormButtonClick);}}}}});this.setAttributeConfig("disabled",{value:false,method:function(G){if(this._rendered){this._disableEditor(G);}}});this.setAttributeConfig("saveEl",{value:this.get("element")});this.setAttributeConfig("toolbar_cont",{value:null,writeOnce:true});this.setAttributeConfig("toolbar",{value:E.toolbar||this._defaultToolbar,writeOnce:true,method:function(G){if(!G.buttonType){G.buttonType=this._defaultToolbar.buttonType;}this._defaultToolbar=G;}});this.setAttributeConfig("animate",{value:((E.animate)?((YAHOO.util.Anim)?true:false):false),validator:function(H){var G=true;if(!YAHOO.util.Anim){G=false;}return G;}});this.setAttributeConfig("panel",{value:null,writeOnce:true,validator:function(H){var G=true;if(!YAHOO.widget.Overlay){G=false;}return G;}});this.setAttributeConfig("focusAtStart",{value:!
 E.focusAtStart||false,writeOnce:true,method:function(G){if(G){this.on("editorContentLoaded",function(){var H=this;setTimeout(function(){H._focusWindow.call(H,true);H.editorDirty=false;},400);},this,true);}}});this.setAttributeConfig("dompath",{value:E.dompath||false,method:function(G){if(G&&!this.dompath){this.dompath=document.createElement("DIV");this.dompath.id=this.get("id")+"_dompath";C.addClass(this.dompath,"dompath");this.get("element_cont").get("firstChild").appendChild(this.dompath);if(this.get("iframe")){this._writeDomPath();}}else{if(!G&&this.dompath){this.dompath.parentNode.removeChild(this.dompath);this.dompath=null;}}}});this.setAttributeConfig("markup",{value:E.markup||"semantic",validator:function(G){switch(G.toLowerCase()){case"semantic":case"css":case"default":case"xhtml":return true;}return false;}});this.setAttributeConfig("removeLineBreaks",{value:E.removeLineBreaks||false,validator:YAHOO.lang.isBoolean});
-this.setAttributeConfig("drag",{writeOnce:true,value:E.drag||false});this.setAttributeConfig("resize",{writeOnce:true,value:E.resize||false});},_getBlankImage:function(){if(!this.DOMReady){this._queue[this._queue.length]=["_getBlankImage",arguments];return"";}var E="";if(!this._blankImageLoaded){if(YAHOO.widget.EditorInfo.blankImage){this.set("blankimage",YAHOO.widget.EditorInfo.blankImage);this._blankImageLoaded=true;}else{var F=document.createElement("div");F.style.position="absolute";F.style.top="-9999px";F.style.left="-9999px";F.className=this.CLASS_PREFIX+"-blankimage";document.body.appendChild(F);E=YAHOO.util.Dom.getStyle(F,"background-image");E=E.replace("url(","").replace(")","").replace(/"/g,"");E=E.replace("app:/","");this.set("blankimage",E);this._blankImageLoaded=true;F.parentNode.removeChild(F);YAHOO.widget.EditorInfo.blankImage=E;}}else{E=this.get("blankimage");}return E;},_handleAutoHeight:function(){var I=this._getDoc(),F=I.body,J=I.documentElement;var E=par!
 seInt(C.getStyle(this.get("editor_wrapper"),"height"),10);var G=F.scrollHeight;if(this.browser.webkit){G=J.scrollHeight;}if(G<parseInt(this.get("height"),10)){G=parseInt(this.get("height"),10);}if((E!=G)&&(G>=parseInt(this.get("height"),10))){C.setStyle(this.get("editor_wrapper"),"height",G+"px");if(this.browser.ie){this.get("iframe").setStyle("height","99%");this.get("iframe").setStyle("zoom","1");var H=this;window.setTimeout(function(){H.get("iframe").setStyle("height","100%");},1);}}},_formButtons:null,_formButtonClicked:null,_handleFormButtonClick:function(F){var E=A.getTarget(F);this._formButtonClicked=E;},_handleFormSubmit:function(H){this.saveHTML();var G=this.get("element").form,E=this._formButtonClicked||false;A.removeListener(G,"submit",this._handleFormSubmit);if(YAHOO.env.ua.ie){if(E&&!E.disabled){E.click();}}else{if(E&&!E.disabled){E.click();}var F=document.createEvent("HTMLEvents");F.initEvent("submit",true,true);G.dispatchEvent(F);if(YAHOO.env.ua.webkit){if(YA!
 HOO.lang.isFunction(G.submit)){G.submit();}}}},_handleFontSize!
 :functio
n(G){var E=this.toolbar.getButtonById(G.button.id);var F=E.get("label")+"px";this.execCommand("fontsize",F);this.STOP_EXEC_COMMAND=true;},_handleColorPicker:function(G){var F=G.button;var E="#"+G.color;if((F=="forecolor")||(F=="backcolor")){this.execCommand(F,E);}},_handleAlign:function(H){var G=null;for(var E=0;E<H.button.menu.length;E++){if(H.button.menu[E].value==H.button.value){G=H.button.menu[E].value;}}var F=this._getSelection();this.execCommand(G,F);this.STOP_EXEC_COMMAND=true;},_handleAfterNodeChange:function(){var Q=this._getDomPath(),L=null,H=null,M=null,F=false,J=this.toolbar.getButtonByValue("fontname"),K=this.toolbar.getButtonByValue("fontsize"),E=this.toolbar.getButtonByValue("heading");for(var G=0;G<Q.length;G++){L=Q[G];var P=L.tagName.toLowerCase();if(L.getAttribute("tag")){P=L.getAttribute("tag");}H=L.getAttribute("face");if(C.getStyle(L,"font-family")){H=C.getStyle(L,"font-family");H=H.replace(/'/g,"");}if(P.substring(0,1)=="h"){if(E){for(var I=0;I<E._confi!
 gs.menu.value.length;I++){if(E._configs.menu.value[I].value.toLowerCase()==P){E.set("label",E._configs.menu.value[I].text);}}this._updateMenuChecked("heading",P);}}}if(J){for(var O=0;O<J._configs.menu.value.length;O++){if(H&&J._configs.menu.value[O].text.toLowerCase()==H.toLowerCase()){F=true;H=J._configs.menu.value[O].text;}}if(!F){H=J._configs.label._initialConfig.value;}var N='<span class="yui-toolbar-fontname-'+this._cleanClassName(H)+'">'+H+"</span>";if(J.get("label")!=N){J.set("label",N);this._updateMenuChecked("fontname",H);}}if(K){M=parseInt(C.getStyle(L,"fontSize"),10);if((M===null)||isNaN(M)){M=K._configs.label._initialConfig.value;}K.set("label",""+M);}if(!this._isElement(L,"body")&&!this._isElement(L,"img")){this.toolbar.enableButton(J);this.toolbar.enableButton(K);this.toolbar.enableButton("forecolor");this.toolbar.enableButton("backcolor");}if(this._isElement(L,"img")){if(YAHOO.widget.Overlay){this.toolbar.enableButton("createlink");}}if(this._hasParent(L,"blo!
 ckquote")){this.toolbar.selectButton("indent");this.toolbar.di!
 sableBut
ton("indent");this.toolbar.enableButton("outdent");}if(this._hasParent(L,"ol")||this._hasParent(L,"ul")){this.toolbar.disableButton("indent");}this._lastButton=null;},_handleInsertImageClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.toolbar.set("disabled",true);this.on("afterExecCommand",function(){var E=this.currentElement[0],G="http://";if(!E){E=this._getSelectedElement();}if(E){if(E.getAttribute("src")){G=E.getAttribute("src",2);if(G.indexOf(this.get("blankimage"))!=-1){G=this.STR_IMAGE_HERE;}}}var F=prompt(this.STR_LINK_URL+": ",G);if((F!=="")&&(F!==null)){E.setAttribute("src",F);}else{if(F===null){E.parentNode.removeChild(E);this.currentElement=[];this.nodeChange();}}this.closeWindow();this.toolbar.set("disabled",false);},this,true);},_handleInsertImageWindowClose:function(){this.nodeChange();},_isLocalFile:function(E){if((E)&&(E!=="")&&((E.indexOf("file:/")!=-1)||(E.indexOf(":\\")!=-1))){return true;}!
 return false;},_handleCreateLinkClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){return false;}}this.toolbar.set("disabled",true);this.on("afterExecCommand",function(){var G=this.currentElement[0],F="";if(G){if(G.getAttribute("href",2)!==null){F=G.getAttribute("href",2);}}var I=prompt(this.STR_LINK_URL+": ",F);if((I!=="")&&(I!==null)){var H=I;if((H.indexOf(":/"+"/")==-1)&&(H.substring(0,1)!="/")&&(H.substring(0,6).toLowerCase()!="mailto")){if((H.indexOf("@")!=-1)&&(H.substring(0,6).toLowerCase()!="mailto")){H="mailto:"+H;}else{if(H.substring(0,1)!="#"){}}}G.setAttribute("href",H);}else{if(I!==null){var E=this._getDoc().createElement("span");E.innerHTML=G.innerHTML;C.addClass(E,"yui-non");G.parentNode.replaceChild(E,G);}}this.closeWindow();this.toolbar.set("disabled",false);},this);},_handleCreateLinkWindowClose:function(){this.nodeChange();this.currentElement=[];
-},render:function(){if(this._rendered){return false;}if(!this.DOMReady){this._queue[this._queue.length]=["render",arguments];return false;}if(this.get("element")){if(this.get("element").tagName){this._textarea=true;if(this.get("element").tagName.toLowerCase()!=="textarea"){this._textarea=false;}}else{return false;}}else{return false;}this._rendered=true;var E=this;window.setTimeout(function(){E._render.call(E);},4);},_render:function(){var E=this;this.set("textarea",this.get("element"));this.get("element_cont").setStyle("display","none");this.get("element_cont").addClass(this.CLASS_CONTAINER);this.set("iframe",this._createIframe());window.setTimeout(function(){E._setInitialContent.call(E);},10);this.get("editor_wrapper").appendChild(this.get("iframe").get("element"));if(this.get("disabled")){this._disableEditor(true);}var F=this.get("toolbar");if(F instanceof B){this.toolbar=F;this.toolbar.set("disabled",true);}else{F.disabled=true;this.toolbar=new B(this.get("toolbar_cont"!
 ),F);}this.fireEvent("toolbarLoaded",{type:"toolbarLoaded",target:this.toolbar});this.toolbar.on("toolbarCollapsed",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("toolbarExpanded",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("fontsizeClick",this._handleFontSize,this,true);this.toolbar.on("colorPickerClicked",function(G){this._handleColorPicker(G);return false;},this,true);this.toolbar.on("alignClick",this._handleAlign,this,true);this.on("afterNodeChange",this._handleAfterNodeChange,this,true);this.toolbar.on("insertimageClick",this._handleInsertImageClick,this,true);this.on("windowinsertimageClose",this._handleInsertImageWindowClose,this,true);this.toolbar.on("createlinkClick",this._handleCreateLinkClick,this,true);this.on("windowcreatelinkClose",this._handleCreateLinkWindowClose,this,true);this.get("parentNode").replaceChild(this.get("element_cont").get("element"),this.get("element"));this.setStyle("v!
 isibility","hidden");this.setStyle("position","absolute");this!
 .setStyl
e("top","-9999px");this.setStyle("left","-9999px");this.get("element_cont").appendChild(this.get("element"));this.get("element_cont").setStyle("display","block");C.addClass(this.get("iframe").get("parentNode"),this.CLASS_EDITABLE_CONT);this.get("iframe").addClass(this.CLASS_EDITABLE);this.get("element_cont").setStyle("width",this.get("width"));C.setStyle(this.get("iframe").get("parentNode"),"height",this.get("height"));this.get("iframe").setStyle("width","100%");this.get("iframe").setStyle("height","100%");this._setupDD();window.setTimeout(function(){E._setupAfterElement.call(E);},0);this.fireEvent("afterRender",{type:"afterRender",target:this});},execCommand:function(G,F){var J=this.fireEvent("beforeExecCommand",{type:"beforeExecCommand",target:this,args:arguments});if((J===false)||(this.STOP_EXEC_COMMAND)){this.STOP_EXEC_COMMAND=false;return false;}this._lastCommand=G;this._setMarkupType(G);if(this.browser.ie){this._getWindow().focus();}var E=true;if(this.get("limitCommand!
 s")){if(!this.toolbar.getButtonByValue(G)){E=false;}}this.editorDirty=true;if((typeof this["cmd_"+G.toLowerCase()]=="function")&&E){var I=this["cmd_"+G.toLowerCase()](F);E=I[0];if(I[1]){G=I[1];}if(I[2]){F=I[2];}}if(E){try{this._getDoc().execCommand(G,false,F);}catch(H){}}else{}this.on("afterExecCommand",function(){this.unsubscribeAll("afterExecCommand");this.nodeChange();},this,true);this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});},cmd_underline:function(F){if(!this.browser.webkit){var E=this._getSelectedElement();if(E&&this._isElement(E,"span")){if(E.style.textDecoration=="underline"){E.style.textDecoration="none";}else{E.style.textDecoration="underline";}return[false];}}return[true];},cmd_backcolor:function(H){var E=true,F=this._getSelectedElement(),G="backcolor";if(this.browser.gecko||this.browser.opera){this._setEditorStyle(true);G="hilitecolor";}if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"background-color",H);this._sele!
 ctNode(F);E=false;}else{if(!this._isElement(F,"body")&&this._h!
 asSelect
ion()){C.setStyle(F,"background-color",H);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({backgroundColor:H});}else{this._createCurrentElement("span",{backgroundColor:H});this._selectNode(this.currentElement[0]);}E=false;}}return[E,G];},cmd_forecolor:function(G){var E=true,F=this._getSelectedElement();if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(!this._isElement(F,"body")&&this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({color:G});}else{this._createCurrentElement("span",{color:G});this._selectNode(this.currentElement[0]);}E=false;}}return[E];},cmd_unlink:function(E){this._swapEl(this.currentElement[0],"span",function(F){F.className="yui-non";});return[false];},cmd_createlink:function(G){var F=this._getSelectedElement(),E=null;if(this._hasParent(F,"a")){this.currentElement[0]=this._hasPar!
 ent(F,"a");}else{if(!this._isElement(F,"a")){this._createCurrentElement("a");E=this._swapEl(this.currentElement[0],"a");this.currentElement[0]=E;}else{this.currentElement[0]=F;}}return[false];},cmd_insertimage:function(J){var E=true,F=null,I="insertimage",H=this._getSelectedElement();if(J===""){J=this.get("blankimage");}if(this._isElement(H,"img")){this.currentElement[0]=H;E=false;}else{if(this._getDoc().queryCommandEnabled(I)){this._getDoc().execCommand("insertimage",false,J);var K=this._getDoc().getElementsByTagName("img");for(var G=0;G<K.length;G++){if(!YAHOO.util.Dom.hasClass(K[G],"yui-img")){YAHOO.util.Dom.addClass(K[G],"yui-img");this.currentElement[0]=K[G];}}E=false;}else{if(H==this._getDoc().body){F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this._getDoc().body.appendChild(F);}else{this._createCurrentElement("img");F=this._getDoc().createElement("img");
-F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);}this.currentElement[0]=F;E=false;}}return[E];},cmd_inserthtml:function(H){var E=true,G="inserthtml",F=null,I=null;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled(G)){this._createCurrentElement("img");F=this._getDoc().createElement("span");F.innerHTML=H;this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);E=false;}else{if(this.browser.ie){I=this._getRange();if(I.item){I.item(0).outerHTML=H;}else{I.pasteHTML(H);}E=false;}}return[E];},cmd_list:function(Y){var S=true,V=null,M=0,G=null,R="",W=this._getSelectedElement(),T="insertorderedlist";if(Y=="ul"){T="insertunorderedlist";}if(this.browser.webkit){if(this._isElement(W,"li")&&this._isElement(W.parentNode,Y)){G=W.parentNode;V=this._getDoc().createElement("span");YAHOO.util.Dom.addClass(V,"yui-non");R="";var F=G.getElementsByTagName("li");for(M=0;M<F.length;M++){R+!
 ="<div>"+F[M].innerHTML+"</div>";}V.innerHTML=R;this.currentElement[0]=G;this.currentElement[0].parentNode.replaceChild(V,this.currentElement[0]);}else{this._createCurrentElement(Y.toLowerCase());V=this._getDoc().createElement(Y);for(M=0;M<this.currentElement.length;M++){var J=this._getDoc().createElement("li");J.innerHTML=this.currentElement[M].innerHTML+'<span class="yui-non"> </span> ';V.appendChild(J);if(M>0){this.currentElement[M].parentNode.removeChild(this.currentElement[M]);}}this.currentElement[0].parentNode.replaceChild(V,this.currentElement[0]);this.currentElement[0]=V;var H=this.currentElement[0].firstChild;H=C.getElementsByClassName("yui-non","span",H)[0];this._getSelection().setBaseAndExtent(H,1,H,H.innerText.length);}S=false;}else{G=this._getSelectedElement();if(this._isElement(G,"li")&&this._isElement(G.parentNode,Y)||(this.browser.ie&&this._isElement(this._getRange().parentElement,"li"))||(this.browser.ie&&this._isElement(G,"ul"))||(this.browser.i!
 e&&this._isElement(G,"ol"))){if(this.browser.ie){if((this.brow!
 ser.ie&&
this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){G=G.getElementsByTagName("li")[0];}R="";var I=G.parentNode.getElementsByTagName("li");for(var U=0;U<I.length;U++){R+=I[U].innerHTML+"<br>";}var X=this._getDoc().createElement("span");X.innerHTML=R;G.parentNode.parentNode.replaceChild(X,G.parentNode);}else{this.nodeChange();this._getDoc().execCommand(T,"",G.parentNode);this.nodeChange();}S=false;}if(this.browser.opera){var Q=this;window.setTimeout(function(){var Z=Q._getDoc().getElementsByTagName("li");for(var a=0;a<Z.length;a++){if(Z[a].innerHTML.toLowerCase()=="<br>"){Z[a].parentNode.parentNode.removeChild(Z[a].parentNode);}}},30);}if(this.browser.ie&&S){var K="";if(this._getRange().html){K="<li>"+this._getRange().html+"</li>";}else{var L=this._getRange().text.split("\n");if(L.length>1){K="";for(var P=0;P<L.length;P++){K+="<li>"+L[P]+"</li>";}}else{var O=this._getRange().text;if(O===""){K='<li id="new_list_item">'+O+"</li>";}else{K="<li>"+O+"</li>";}}}thi!
 s._getRange().pasteHTML("<"+Y+">"+K+"</"+Y+">");var E=this._getDoc().getElementById("new_list_item");if(E){var N=this._getDoc().body.createTextRange();N.moveToElementText(E);N.collapse(false);N.select();E.id="";}S=false;}}return S;},cmd_insertorderedlist:function(E){return[this.cmd_list("ol")];},cmd_insertunorderedlist:function(E){return[this.cmd_list("ul")];},cmd_fontname:function(H){var E=true,G=this._getSelectedElement();this.currentFont=H;if(G&&G.tagName&&!this._hasSelection()&&!this._isElement(G,"body")&&!this.get("insert")){YAHOO.util.Dom.setStyle(G,"font-family",H);E=false;}else{if(this.get("insert")&&!this._hasSelection()){var F=this._createInsertElement({fontFamily:H});E=false;}}return[E];},cmd_fontsize:function(G){var E=null;if(this.currentElement&&(this.currentElement.length>0)&&(!this._hasSelection())&&(!this.get("insert"))){YAHOO.util.Dom.setStyle(this.currentElement,"fontSize",G);}else{if(!this._isElement(this._getSelectedElement(),"body")){E=this._getSelected!
 Element();YAHOO.util.Dom.setStyle(E,"fontSize",G);if(this.get(!
 "insert"
)&&this.browser.ie){var F=this._getRange();F.collapse(false);F.select();}else{this._selectNode(E);}}else{if(this.get("insert")&&!this._hasSelection()){E=this._createInsertElement({fontSize:G});this.currentElement[0]=E;this._selectNode(this.currentElement[0]);}else{this._createCurrentElement("span",{"fontSize":G});this._selectNode(this.currentElement[0]);}}}return[false];},_swapEl:function(F,E,H){var G=this._getDoc().createElement(E);if(F){G.innerHTML=F.innerHTML;}if(typeof H=="function"){H.call(this,G);}if(F){F.parentNode.replaceChild(G,F);}return G;},_createInsertElement:function(E){this._createCurrentElement("span",E);var F=this.currentElement[0];if(this.browser.webkit){F.innerHTML='<span class="yui-non"> </span>';F=F.firstChild;this._getSelection().setBaseAndExtent(F,1,F,F.innerText.length);}else{if(this.browser.ie||this.browser.opera){F.innerHTML=" ";}}this._focusWindow();this._selectNode(F,true);return F;},_createCurrentElement:function(G,J){G=((G)?G:"a");var !
 R=null,F=[],H=this._getDoc();if(this.currentFont){if(!J){J={};}J.fontFamily=this.currentFont;this.currentFont=null;}this.currentElement=[];var M=function(X,Z){var Y=null;X=((X)?X:"span");X=X.toLowerCase();switch(X){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":Y=H.createElement(X);break;default:Y=H.createElement(X);if(X==="span"){YAHOO.util.Dom.addClass(Y,"yui-tag-"+X);YAHOO.util.Dom.addClass(Y,"yui-tag");Y.setAttribute("tag",X);}for(var W in Z){if(YAHOO.lang.hasOwnProperty(Z,W)){Y.style[W]=Z[W];}}break;}return Y;};if(!this._hasSelection()){if(this._getDoc().queryCommandEnabled("insertimage")){this._getDoc().execCommand("insertimage",false,"yui-tmp-img");var L=this._getDoc().getElementsByTagName("img");for(var Q=0;Q<L.length;Q++){if(L[Q].getAttribute("src",2)=="yui-tmp-img"){F=M(G,J);L[Q].parentNode.replaceChild(F,L[Q]);this.currentElement[this.currentElement.length]=F;}}}else{if(this.currentEvent){R=YAHOO.util.Event.getTarget(this.currentEvent);
-}else{R=this._getDoc().body;}}if(R){F=M(G,J);if(this._isElement(R,"body")||this._isElement(R,"html")){if(this._isElement(R,"html")){R=this._getDoc().body;}R.appendChild(F);}else{if(R.nextSibling){R.parentNode.insertBefore(F,R.nextSibling);}else{R.parentNode.appendChild(F);}}this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}}}else{this._setEditorStyle(true);this._getDoc().execCommand("fontname",false,"yui-tmp");var E=[],P,V=["font","span","i","b","u"];if(!this._isElement(this._getSelectedElement(),"body")){V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().tagName);V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().parentNode.tagName);}for(var K=0;K<V.length;K++){var I=this._getDoc().getElementsByTagName(V[K]);for(var U=0;U<I.len!
 gth;U++){E[E.length]=I[U];}}for(var S=0;S<E.length;S++){if((YAHOO.util.Dom.getStyle(E[S],"font-family")=="yui-tmp")||(E[S].face&&(E[S].face=="yui-tmp"))){F=M(G,J);F.innerHTML=E[S].innerHTML;if(this._isElement(E[S],"ol")||(this._isElement(E[S],"ul"))){var N=E[S].getElementsByTagName("li")[0];E[S].style.fontFamily="inherit";N.style.fontFamily="inherit";F.innerHTML=N.innerHTML;N.innerHTML="";N.appendChild(F);this.currentElement[this.currentElement.length]=F;}else{if(this._isElement(E[S],"li")){E[S].innerHTML="";E[S].appendChild(F);E[S].style.fontFamily="inherit";this.currentElement[this.currentElement.length]=F;}else{if(E[S].parentNode){E[S].parentNode.replaceChild(F,E[S]);this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}if(this.browser.ie&&J&&J.fontSize){this._getSelection().e!
 mpty();}if(this.browser.gecko){this._getSelection().collapseTo!
 Start();
}}}}}}var T=this.currentElement.length;for(var O=0;O<T;O++){if((O+1)!=T){if(this.currentElement[O]&&this.currentElement[O].nextSibling){if(this._isElement(this.currentElement[O],"br")){this.currentElement[this.currentElement.length]=this.currentElement[O].nextSibling;}}}}}},saveHTML:function(){var F=this.cleanHTML();if(this._textarea){this.get("element").value=F;}else{this.get("element").innerHTML=F;}if(this.get("saveEl")!==this.get("element")){var E=this.get("saveEl");if(D.isString(E)){E=C.get(E);}if(E){if(E.tagName.toLowerCase()==="textarea"){E.value=F;}else{E.innerHTML=F;}}}return F;},setEditorHTML:function(F){var E=this._cleanIncomingHTML(F);this._getDoc().body.innerHTML=E;this.nodeChange();},getEditorHTML:function(){var E=this._getDoc().body;if(E===null){return null;}return this._getDoc().body.innerHTML;},show:function(){if(this.browser.gecko){this._setDesignMode("on");this._focusWindow();}if(this.browser.webkit){var E=this;window.setTimeout(function(){E._setInitialCont!
 ent.call(E);},10);}if(this.currentWindow){this.closeWindow();}this.get("iframe").setStyle("position","static");this.get("iframe").setStyle("left","");},hide:function(){if(this.currentWindow){this.closeWindow();}if(this._fixNodesTimer){clearTimeout(this._fixNodesTimer);this._fixNodesTimer=null;}if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);this._nodeChangeTimer=null;}this._lastNodeChange=0;this.get("iframe").setStyle("position","absolute");this.get("iframe").setStyle("left","-9999px");},_cleanIncomingHTML:function(E){E=E.replace(/<strong([^>]*)>/gi,"<b$1>");E=E.replace(/<\/strong>/gi,"</b>");E=E.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");E=E.replace(/<\/embed>/gi,"</YUI_EMBED>");E=E.replace(/<em([^>]*)>/gi,"<i$1>");E=E.replace(/<\/em>/gi,"</i>");E=E.replace(/<YUI_EMBED([^>]*)>/gi,"<embed$1>");E=E.replace(/<\/YUI_EMBED>/gi,"</embed>");if(this.get("plainText")){E=E.replace(/\n/g,"<br>").replace(/\r/g,"<br>");E=E.replace(/  /gi,"  ");E=E.replace(/\t/g!
 i,"    ");}E=E.replace(/<script([^>]*)>/gi!
 ,"<bad>"
);E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/\n/g,"<YUI_LF>").replace(/\r/g,"<YUI_LF>");E=E.replace(new RegExp("<bad([^>]*)>(.*?)</bad>","gi"),"");E=E.replace(/<YUI_LF>/g,"\n");return E;},cleanHTML:function(G){if(!G){G=this.getEditorHTML();}var F=this.get("markup");G=this.pre_filter_linebreaks(G,F);G=G.replace(/<img([^>]*)\/>/gi,"<YUI_IMG$1>");G=G.replace(/<img([^>]*)>/gi,"<YUI_IMG$1>");G=G.replace(/<input([^>]*)\/>/gi,"<YUI_INPUT$1>");G=G.replace(/<input([^>]*)>/gi,"<YUI_INPUT$1>");G=G.replace(/<ul([^>]*)>/gi,"<YUI_UL$1>");G=G.replace(/<\/ul>/gi,"</YUI_UL>");G=G.replace(/<blockquote([^>]*)>/gi,"<YUI_BQ$1>");G=G.replace(/<\/blockquote>/gi,"</YUI_BQ>");G=G.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");G=G.replace(/<\/embed>/gi,"</YUI_EMBED>");if((F=="semantic")||(F=="xhtml")){G=G.replace(/<i(\s+[^>]*)?>/gi,"<em$1>");G=G.replace(/<\/i>/gi,"</em>");G=G.replace(/<b(\s+[^>!
 ]*)?>/gi,"<strong$1>");G=G.replace(/<\/b>/gi,"</strong>");}G=G.replace(/<font/gi,"<font");G=G.replace(/<\/font>/gi,"</font>");G=G.replace(/<span/gi,"<span");G=G.replace(/<\/span>/gi,"</span>");if((F=="semantic")||(F=="xhtml")||(F=="css")){G=G.replace(new RegExp('<font([^>]*)face="([^>]*)">(.*?)</font>',"gi"),'<span $1 style="font-family: $2;">$3</span>');G=G.replace(/<u/gi,'<span style="text-decoration: underline;"');if(this.browser.webkit){G=G.replace(new RegExp('<span class="Apple-style-span" style="font-weight: bold;">([^>]*)</span>',"gi"),"<strong>$1</strong>");G=G.replace(new RegExp('<span class="Apple-style-span" style="font-style: italic;">([^>]*)</span>',"gi"),"<em>$1</em>");}G=G.replace(/\/u>/gi,"/span>");if(F=="css"){G=G.replace(/<em([^>]*)>/gi,"<i$1>");G=G.replace(/<\/em>/gi,"</i>");G=G.replace(/<strong([^>]*)>/gi,"<b$1>");G=G.replace(/<\/strong>/gi,"</b>");G=G.replace(/<b/gi,'<span style="font-weight: bold;"');
-G=G.replace(/\/b>/gi,"/span>");G=G.replace(/<i/gi,'<span style="font-style: italic;"');G=G.replace(/\/i>/gi,"/span>");}G=G.replace(/  /gi," ");}else{G=G.replace(/<u/gi,"<u");G=G.replace(/\/u>/gi,"/u>");}G=G.replace(/<ol([^>]*)>/gi,"<ol$1>");G=G.replace(/\/ol>/gi,"/ol>");G=G.replace(/<li/gi,"<li");G=G.replace(/\/li>/gi,"/li>");G=this.filter_safari(G);G=this.filter_internals(G);G=this.filter_all_rgb(G);G=this.post_filter_linebreaks(G,F);if(F=="xhtml"){G=G.replace(/<YUI_IMG([^>]*)>/g,"<img $1 />");G=G.replace(/<YUI_INPUT([^>]*)>/g,"<input $1 />");}else{G=G.replace(/<YUI_IMG([^>]*)>/g,"<img $1>");G=G.replace(/<YUI_INPUT([^>]*)>/g,"<input $1>");}G=G.replace(/<YUI_UL([^>]*)>/g,"<ul$1>");G=G.replace(/<\/YUI_UL>/g,"</ul>");G=this.filter_invalid_lists(G);G=G.replace(/<YUI_BQ([^>]*)>/g,"<blockquote$1>");G=G.replace(/<\/YUI_BQ>/g,"</blockquote>");G=G.replace(/<YUI_EMBED([^>]*)>/g,"<embed$1>");G=G.replace(/<\/YUI_EMBED>/g,"</embed>");G=G.replace(" & ","YUI_AMP");G=G.replace("&"!
 ,"&");G=G.replace("YUI_AMP","&");G=YAHOO.lang.trim(G);if(this.get("removeLineBreaks")){G=G.replace(/\n/g,"").replace(/\r/g,"");G=G.replace(/  /gi," ");}if(G.substring(0,6).toLowerCase()=="<span>"){G=G.substring(6);if(G.substring(G.length-7,G.length).toLowerCase()=="</span>"){G=G.substring(0,G.length-7);}}for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(D.isObject(E)&&E.keepContents){G=G.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"$1");}else{G=G.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"");}}}this.fireEvent("cleanHTML",{type:"cleanHTML",target:this,html:G});return G;},filter_invalid_lists:function(E){E=E.replace(/<\/li>\n/gi,"</li>");E=E.replace(/<\/li><ol>/gi,"</li><li><ol>");E=E.replace(/<\/ol>/gi,"</ol></li>");E=E.replace(/<\/ol><\/li>\n/gi,"</ol>\n");E=E.replace(/<\/li><ul>/gi,"</li><li><ul>");E=E.replace(/<\/ul>/gi,"</ul></li>");E=E.replace(/<\/ul><\/li>\n?/gi,"</ul>\n");E=E.replace(/<\/li>/gi,"</li>\n");E!
 =E.replace(/<\/ol>/gi,"</ol>\n");E=E.replace(/<ol>/gi,"<ol>\n"!
 );E=E.re
place(/<ul>/gi,"<ul>\n");return E;},filter_safari:function(E){if(this.browser.webkit){E=E.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi,"    ");E=E.replace(/Apple-style-span/gi,"");E=E.replace(/style="line-height: normal;"/gi,"");E=E.replace(/<li><\/li>/gi,"");E=E.replace(/<li> <\/li>/gi,"");E=E.replace(/<li>  <\/li>/gi,"");if(this.get("ptags")){E=E.replace(/<div([^>]*)>/g,"<p$1>");E=E.replace(/<\/div>/gi,"</p>");}else{E=E.replace(/<div>/gi,"");E=E.replace(/<\/div>/gi,"<br>");}}return E;},filter_internals:function(E){E=E.replace(/\r/g,"");E=E.replace(/<\/?(body|head|html)[^>]*>/gi,"");E=E.replace(/<YUI_BR><\/li>/gi,"</li>");E=E.replace(/yui-tag-span/gi,"");E=E.replace(/yui-tag/gi,"");E=E.replace(/yui-non/gi,"");E=E.replace(/yui-img/gi,"");E=E.replace(/ tag="span"/gi,"");E=E.replace(/ class=""/gi,"");E=E.replace(/ style=""/gi,"");E=E.replace(/ class=" "/gi,"");E=E.replace(/ class="  "/gi,"");E=E.replace(/ target=""/gi,"");!
 E=E.replace(/ title=""/gi,"");if(this.browser.ie){E=E.replace(/ class= /gi,"");E=E.replace(/ class= >/gi,"");E=E.replace(/_height="([^>])"/gi,"");E=E.replace(/_width="([^>])"/gi,"");}return E;},filter_all_rgb:function(I){var H=new RegExp("rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)","gi");var E=I.match(H);if(D.isArray(E)){for(var G=0;G<E.length;G++){var F=this.filter_rgb(E[G]);I=I.replace(E[G].toString(),F);}}return I;},filter_rgb:function(G){if(G.toLowerCase().indexOf("rgb")!=-1){var J=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");var F=G.replace(J,"$1,$2,$3,$4,$5").split(",");if(F.length==5){var I=parseInt(F[1],10).toString(16);var H=parseInt(F[2],10).toString(16);var E=parseInt(F[3],10).toString(16);I=I.length==1?"0"+I:I;H=H.length==1?"0"+H:H;E=E.length==1?"0"+E:E;G="#"+I+H+E;}}return G;},pre_filter_linebreaks:function(F,E){if(this.browser.webkit){F=F.replace(/<br class="khtml-block-placeholder">/gi,"<Y!
 UI_BR>");F=F.replace(/<br class="webkit-block-placeholder">/gi!
 ,"<YUI_B
R>");}F=F.replace(/<br>/gi,"<YUI_BR>");F=F.replace(/<br (.*?)>/gi,"<YUI_BR>");F=F.replace(/<br\/>/gi,"<YUI_BR>");F=F.replace(/<br \/>/gi,"<YUI_BR>");F=F.replace(/<div><YUI_BR><\/div>/gi,"<YUI_BR>");F=F.replace(/<p>( | )<\/p>/g,"<YUI_BR>");F=F.replace(/<p><br> <\/p>/gi,"<YUI_BR>");F=F.replace(/<p> <\/p>/gi,"<YUI_BR>");F=F.replace(/<YUI_BR>$/,"");F=F.replace(/<YUI_BR><\/p>/g,"</p>");if(this.browser.ie){F=F.replace(/    /g,"\t");}return F;},post_filter_linebreaks:function(F,E){if(E=="xhtml"){F=F.replace(/<YUI_BR>/g,"<br />");}else{F=F.replace(/<YUI_BR>/g,"<br>");}return F;},clearEditorDoc:function(){this._getDoc().body.innerHTML=" ";},openWindow:function(E){},moveWindow:function(){},_closeWindow:function(){},closeWindow:function(){this.toolbar.resetAllButtons();this._focusWindow();},destroy:function(){if(this.resize){this.resize.destroy();}if(this.dd){this.dd.unreg();}if(this.get("panel")){this.get("panel").destroy();}this.saveHTML()!
 ;this.toolbar.destroy();this.setStyle("visibility","visible");this.setStyle("position","static");this.setStyle("top","");this.setStyle("left","");var E=this.get("element");this.get("element_cont").get("parentNode").replaceChild(E,this.get("element_cont").get("element"));this.get("element_cont").get("element").innerHTML="";this.set("handleSubmit",false);return true;},toString:function(){var E="SimpleEditor";if(this.get&&this.get("element_cont")){E="SimpleEditor (#"+this.get("element_cont").get("id")+")"+((this.get("disabled")?" Disabled":""));}return E;}});YAHOO.widget.EditorInfo={_instances:{},blankImage:"",window:{},panel:null,getEditorById:function(E){if(!YAHOO.lang.isString(E)){E=E.id;}if(this._instances[E]){return this._instances[E];}return false;},toString:function(){var E=0;for(var F in this._instances){if(D.hasOwnProperty(this._instances,F)){E++;}}return"Editor Info ("+E+" registered intance"+((E>1)?"s":"")+")";
-}};})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.Editor=function(F,E){YAHOO.widget.Editor.superclass.constructor.call(this,F,E);};YAHOO.extend(YAHOO.widget.Editor,YAHOO.widget.SimpleEditor,{_undoCache:null,_undoLevel:null,_hasUndoLevel:function(){return(this._undoCache.length&&this._undoLevel);},_undoNodeChange:function(){var E=this.toolbar.getButtonByValue("undo"),F=this.toolbar.getButtonByValue("redo");if(E&&F){if(this._hasUndoLevel()){this.toolbar.enableButton(E);}if(this._undoLevel<this._undoCache.length){this.toolbar.enableButton(F);}}},_checkUndo:function(){var E=this._undoCache.length,G=[];if(E>=this.get("maxUndo")){for(var F=(E-this.get("maxUndo"));F<E;F++){G.push(this._undoCache[F]);}this._undoCache=G;}},_putUndo:function(E){this._undoCache.push(E);},_getUndo:function(E){return this._undoCache[E];},_storeUndo:function(){if(this._lastCommand==="undo"||this._lastCommand==="redo"){return false;}if(!this._undo!
 Cache){this._undoCache=[];}this._checkUndo();var F=this.getEditorHTML();var E=this._undoCache[this._undoCache.length-1];if(E){if(F!==E){this._putUndo(F);}}else{this._putUndo(F);}this._undoLevel=this._undoCache.length;this._undoNodeChange();},STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Control + Shift + T to place focus on the toolbar and navigate between option heading names. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets text to italic</li> <li>Control Shift U underlines text</li> <li>Control Shift [ aligns text left</li> <li>Control Shift | centers text</li> <li>Control Shift ] aligns text right</li> <li>Control Shift L adds an HTML link</li> <li>To exit this text editor use the keyboard shortcut Control + Shift + ESC.</li></ul>",STR_CLOSE_WINDOW:"Close Window",STR_CLOSE_WINDOW_NOTE:"To close this window u!
 se the Control + Shift + W key",STR_IMAGE_PROP_TITLE:"Image Op!
 tions",S
TR_IMAGE_URL:"Image URL",STR_IMAGE_TITLE:"Description",STR_IMAGE_SIZE:"Size",STR_IMAGE_ORIG_SIZE:"Original Size",STR_IMAGE_COPY:'<span class="tip"><span class="icon icon-info"></span><strong>Note:</strong>To move this image just highlight it, cut, and paste where ever you\'d like.</span>',STR_IMAGE_PADDING:"Padding",STR_IMAGE_BORDER:"Border",STR_IMAGE_BORDER_SIZE:"Border Size",STR_IMAGE_BORDER_TYPE:"Border Type",STR_IMAGE_TEXTFLOW:"Text Flow",STR_LOCAL_FILE_WARNING:'<span class="tip"><span class="icon icon-warn"></span><strong>Note:</strong>This image/link points to a file on your computer and will not be accessible to others on the internet.</span>',STR_LINK_PROP_TITLE:"Link Options",STR_LINK_PROP_REMOVE:"Remove link from text",STR_LINK_NEW_WINDOW:"Open in a new window.",STR_LINK_TITLE:"Description",CLASS_LOCAL_FILE:"warning-localfile",CLASS_HIDDEN:"yui-hidden",init:function(F,E){this._windows={};this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:fa!
 lse,buttonType:"advanced",buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"separator"},{type:"push",label:"Subscript",value:"subscript",disabled:true},{type:"push",label:"Superscript",value:"superscript",disabled:true}]},{type:"separator"},{group:"textstyle2",label:" ",buttons:[{type:"color",label:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Backgrou!
 nd Color",value:"backcolor",disabled:true},{type:"separator"},!
 {type:"p
ush",label:"Remove Formatting",value:"removeformat",disabled:true},{type:"push",label:"Show/Hide Hidden Elements",value:"hiddenelements"}]},{type:"separator"},{group:"undoredo",label:"Undo/Redo",buttons:[{type:"push",label:"Undo",value:"undo",disabled:true},{type:"push",label:"Redo",value:"redo",disabled:true}]},{type:"separator"},{group:"alignment",label:"Alignment",buttons:[{type:"push",label:"Align Left CTRL + SHIFT + [",value:"justifyleft"},{type:"push",label:"Align Center CTRL + SHIFT + |",value:"justifycenter"},{type:"push",label:"Align Right CTRL + SHIFT + ]",value:"justifyright"},{type:"push",label:"Justify",value:"justifyfull"}]},{type:"separator"},{group:"parastyle",label:"Paragraph Style",buttons:[{type:"select",label:"Normal",value:"heading",disabled:true,menu:[{text:"Normal",value:"none",checked:true},{text:"Header 1",value:"h1"},{text:"Header 2",value:"h2"},{text:"Header 3",value:"h3"},{text:"Header 4",value:"h4"},{text:"Header 5",value:"h5"},{text:"Header 6",v!
 alue:"h6"}]}]},{type:"separator"},{group:"indentlist2",label:"Indenting and Lists",buttons:[{type:"push",label:"Indent",value:"indent",disabled:true},{type:"push",label:"Outdent",value:"outdent",disabled:true},{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};this._defaultImageToolbarConfig={buttonType:this._defaultToolbar.buttonType,buttons:[{group:"textflow",label:this.STR_IMAGE_TEXTFLOW+":",buttons:[{type:"push",label:"Left",value:"left"},{type:"push",label:"Inline",value:"inline"},{type:"push",label:"Block",value:"block"},{type:"push",label:"Right",value:"right"}]},{type:"separator"},{group:"padding",label:this.STR_IMAGE_PADDING+":",buttons:[{type:"spin",label:"0",valu!
 e:"padding",range:[0,50]}]},{type:"separator"},{group:"border"!
 ,label:t
his.STR_IMAGE_BORDER+":",buttons:[{type:"select",label:this.STR_IMAGE_BORDER_SIZE,value:"bordersize",menu:[{text:"none",value:"0",checked:true},{text:"1px",value:"1"},{text:"2px",value:"2"},{text:"3px",value:"3"},{text:"4px",value:"4"},{text:"5px",value:"5"}]},{type:"select",label:this.STR_IMAGE_BORDER_TYPE,value:"bordertype",disabled:true,menu:[{text:"Solid",value:"solid",checked:true},{text:"Dashed",value:"dashed"},{text:"Dotted",value:"dotted"}]},{type:"color",label:"Border Color",value:"bordercolor",disabled:true}]}]};
-YAHOO.widget.Editor.superclass.init.call(this,F,E);},_render:function(){YAHOO.widget.Editor.superclass._render.apply(this,arguments);var E=this;window.setTimeout(function(){E._renderPanel.call(E);},800);},initAttributes:function(E){YAHOO.widget.Editor.superclass.initAttributes.call(this,E);this.setAttributeConfig("localFileWarning",{value:E.locaFileWarning||true});this.setAttributeConfig("hiddencss",{value:E.hiddencss||".yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u, .yui-hidden div,.yui-hidden p,.yui-hidden span,.yui-hidden img, .yui-hidden ul, .yui-hidden ol, .yui-hidden li, .yui-hidden table { border: 1px dotted #ccc; } .yui-hidden .yui-non { border: none; } .yui-hidden img { padding: 2px; }",writeOnce:true});},_windows:null,_defaultImageToolbar:null,_defaultImageToolbarConfig:null,_fixNodes:function(){YAHOO.widget.Editor.superclass._fixNodes.call(this);var H="";var I=this._getDoc().getElementsByTagName("img");for(var F=!
 0;F<I.length;F++){if(I[F].getAttribute("href",2)){H=I[F].getAttribute("src",2);if(this._isLocalFile(H)){C.addClass(I[F],this.CLASS_LOCAL_FILE);}else{C.removeClass(I[F],this.CLASS_LOCAL_FILE);}}}var G=this._getDoc().body.getElementsByTagName("a");for(var E=0;E<G.length;E++){if(G[E].getAttribute("href",2)){H=G[E].getAttribute("href",2);if(this._isLocalFile(H)){C.addClass(G[E],this.CLASS_LOCAL_FILE);}else{C.removeClass(G[E],this.CLASS_LOCAL_FILE);}}}},_disabled:["createlink","forecolor","backcolor","fontname","fontsize","superscript","subscript","removeformat","heading","indent"],_alwaysDisabled:{"outdent":true},_alwaysEnabled:{hiddenelements:true},_handleKeyDown:function(G){YAHOO.widget.Editor.superclass._handleKeyDown.call(this,G);var F=false,H=null,E=false;switch(G.keyCode){case this._keyMap.JUSTIFY_LEFT.key:if(this._checkKey(this._keyMap.JUSTIFY_LEFT,G)){H="justifyleft";F=true;}break;case this._keyMap.JUSTIFY_CENTER.key:if(this._checkKey(this._keyMap.JUSTIFY_CENTER,G)){H="!
 justifycenter";F=true;}break;case 221:case this._keyMap.JUSTIF!
 Y_RIGHT.
key:if(this._checkKey(this._keyMap.JUSTIFY_RIGHT,G)){H="justifyright";F=true;}break;}if(F&&H){this.execCommand(H,null);A.stopEvent(G);this.nodeChange();}},_renderCreateLinkWindow:function(){var H='<label for="'+this.get("id")+'_createlink_url"><strong>'+this.STR_LINK_URL+':</strong> <input type="text" name="'+this.get("id")+'_createlink_url" id="'+this.get("id")+'_createlink_url" value=""></label>';H+='<label for="'+this.get("id")+'_createlink_target"><strong> </strong><input type="checkbox" name="'+this.get("id")+'_createlink_target" id="'+this.get("id")+'_createlink_target" value="_blank" class="createlink_target"> '+this.STR_LINK_NEW_WINDOW+"</label>";H+='<label for="'+this.get("id")+'_createlink_title"><strong>'+this.STR_LINK_TITLE+':</strong> <input type="text" name="'+this.get("id")+'_createlink_title" id="'+this.get("id")+'_createlink_title" value=""></label>';var E=document.createElement("div");E.innerHTML=H;var G=document.createElement("div");G.className="remov!
 eLink";var F=document.createElement("a");F.href="#";F.innerHTML=this.STR_LINK_PROP_REMOVE;F.title=this.STR_LINK_PROP_REMOVE;A.on(F,"click",function(I){A.stopEvent(I);this.execCommand("unlink");this.closeWindow();},this,true);G.appendChild(F);E.appendChild(G);this._windows.createlink={};this._windows.createlink.body=E;E.style.display="none";this.get("panel").editor_form.appendChild(E);this.fireEvent("windowCreateLinkRender",{type:"windowCreateLinkRender",panel:this.get("panel"),body:E});return E;},_handleCreateLinkClick:function(){var E=this._getSelectedElement();if(this._isElement(E,"img")){this.STOP_EXEC_COMMAND=true;this.currentElement[0]=E;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});return false;}if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){return false;}}this.on("afterExecCommand",function(){var K=new YAHOO.widget.Editor!
 Window("createlink",{width:"350px"});var I=this.currentElement!
 [0],H=""
,L="",J="",G=false;if(I){K.el=I;if(I.getAttribute("href",2)!==null){H=I.getAttribute("href",2);if(this._isLocalFile(H)){K.setFooter(this.STR_LOCAL_FILE_WARNING);G=true;}else{K.setFooter(" ");}}if(I.getAttribute("title")!==null){L=I.getAttribute("title");}if(I.getAttribute("target")!==null){J=I.getAttribute("target");}}var F=null;if(this._windows.createlink&&this._windows.createlink.body){F=this._windows.createlink.body;}else{F=this._renderCreateLinkWindow();}K.setHeader(this.STR_LINK_PROP_TITLE);K.setBody(F);A.purgeElement(this.get("id")+"_createlink_url");C.get(this.get("id")+"_createlink_url").value=H;C.get(this.get("id")+"_createlink_title").value=L;C.get(this.get("id")+"_createlink_target").checked=((J)?true:false);A.onAvailable(this.get("id")+"_createlink_url",function(){var M=this.get("id");window.setTimeout(function(){try{YAHOO.util.Dom.get(M+"_createlink_url").focus();}catch(N){}},50);if(this._isLocalFile(H)){C.addClass(this.get("id")+"_createlink_url","warning");thi!
 s.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(this.get("id")+"_createlink_url","warning");this.get("panel").setFooter(" ");}A.on(this.get("id")+"_createlink_url","blur",function(){var N=C.get(this.get("id")+"_createlink_url");if(this._isLocalFile(N.value)){C.addClass(N,"warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(N,"warning");this.get("panel").setFooter(" ");}},this,true);},this,true);this.openWindow(K);});},_handleCreateLinkWindowClose:function(){var G=C.get(this.get("id")+"_createlink_url"),I=C.get(this.get("id")+"_createlink_target"),K=C.get(this.get("id")+"_createlink_title"),H=arguments[0].win.el,E=H;if(G&&G.value){var J=G.value;if((J.indexOf(":/"+"/")==-1)&&(J.substring(0,1)!="/")&&(J.substring(0,6).toLowerCase()!="mailto")){if((J.indexOf("@")!=-1)&&(J.substring(0,6).toLowerCase()!="mailto")){J="mailto:"+J;}else{if(J.substring(0,1)!="#"){J="http:/"+"/"+J;
-}}}H.setAttribute("href",J);if(I.checked){H.setAttribute("target",I.value);}else{H.setAttribute("target","");}H.setAttribute("title",((K.value)?K.value:""));}else{var F=this._getDoc().createElement("span");F.innerHTML=H.innerHTML;C.addClass(F,"yui-non");H.parentNode.replaceChild(F,H);}C.removeClass(G,"warning");C.get(this.get("id")+"_createlink_url").value="";C.get(this.get("id")+"_createlink_title").value="";C.get(this.get("id")+"_createlink_target").checked=false;this.nodeChange();this.currentElement=[];},_renderInsertImageWindow:function(){var G=this.currentElement[0];var M='<label for="'+this.get("id")+'_insertimage_url"><strong>'+this.STR_IMAGE_URL+':</strong> <input type="text" id="'+this.get("id")+'_insertimage_url" value="" size="40"></label>';var K=document.createElement("div");K.innerHTML=M;var J=document.createElement("div");J.id=this.get("id")+"_img_toolbar";K.appendChild(J);var I='<label for="'+this.get("id")+'_insertimage_title"><strong>'+this.STR_IMAGE_TITLE+!
 ':</strong> <input type="text" id="'+this.get("id")+'_insertimage_title" value="" size="40"></label>';I+='<label for="'+this.get("id")+'_insertimage_link"><strong>'+this.STR_LINK_URL+':</strong> <input type="text" name="'+this.get("id")+'_insertimage_link" id="'+this.get("id")+'_insertimage_link" value=""></label>';I+='<label for="'+this.get("id")+'_insertimage_target"><strong> </strong><input type="checkbox" name="'+this.get("id")+'_insertimage_target_" id="'+this.get("id")+'_insertimage_target" value="_blank" class="insertimage_target"> '+this.STR_LINK_NEW_WINDOW+"</label>";var E=document.createElement("div");E.innerHTML=I;K.appendChild(E);var F={};D.augmentObject(F,this._defaultImageToolbarConfig);var H=new YAHOO.widget.Toolbar(J,F);H.editor_el=G;this._defaultImageToolbar=H;var N=H.get("cont");var L=document.createElement("div");L.className="yui-toolbar-group yui-toolbar-group-height-width height-width";L.innerHTML="<h3>"+this.STR_IMAGE_SIZE+":</h3>";L.innerHTML+='<!
 span tabIndex="-1"><input type="text" size="3" value="" id="'+!
 this.get
("id")+'_insertimage_width"> x <input type="text" size="3" value="" id="'+this.get("id")+'_insertimage_height"></span>';N.insertBefore(L,N.firstChild);A.onAvailable(this.get("id")+"_insertimage_width",function(){A.on(this.get("id")+"_insertimage_width","blur",function(){var O=parseInt(C.get(this.get("id")+"_insertimage_width").value,10);if(O>5){this._defaultImageToolbar.editor_el.style.width=O+"px";}},this,true);},this,true);A.onAvailable(this.get("id")+"_insertimage_height",function(){A.on(this.get("id")+"_insertimage_height","blur",function(){var O=parseInt(C.get(this.get("id")+"_insertimage_height").value,10);if(O>5){this._defaultImageToolbar.editor_el.style.height=O+"px";}},this,true);},this,true);H.on("colorPickerClicked",function(T){var P="1",S="solid",O="black",R=this._defaultImageToolbar.editor_el;if(R.style.borderLeftWidth){P=parseInt(R.style.borderLeftWidth,10);}if(R.style.borderLeftStyle){S=R.style.borderLeftStyle;}if(R.style.borderLeftColor){O=R.style.borderLeftC!
 olor;}var Q=P+"px "+S+" #"+T.color;R.style.border=Q;},this,true);H.on("buttonClick",function(V){var T=V.button.value,S=this._defaultImageToolbar.editor_el,R="";if(V.button.menucmd){T=V.button.menucmd;}var P="1",Q="solid",O="black";if(S.style.borderLeftWidth){P=parseInt(S.style.borderLeftWidth,10);}if(S.style.borderLeftStyle){Q=S.style.borderLeftStyle;}if(S.style.borderLeftColor){O=S.style.borderLeftColor;}switch(T){case"bordersize":if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}R=parseInt(V.button.value,10)+"px "+Q+" "+O;S.style.border=R;if(parseInt(V.button.value,10)>0){H.enableButton("bordertype");H.enableButton("bordercolor");}else{H.disableButton("bordertype");H.disableButton("bordercolor");}break;case"bordertype":if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}R=P+"px "+V.button.value+" "+O;S.style.border=R;break;case"right":case"left":H.deselectAllButtons!
 ();S.style.display="";S.align=V.button.value;break;case"inline!
 ":H.dese
lectAllButtons();S.style.display="";S.align="";break;case"block":H.deselectAllButtons();S.style.display="block";S.align="center";break;case"padding":var U=H.getButtonById(V.button.id);S.style.margin=U.get("label")+"px";break;}H.selectButton(V.button.value);if(T!=="padding"){this.moveWindow();}},this,true);if(this.get("localFileWarning")){A.on(this.get("id")+"_insertimage_link","blur",function(){var O=C.get(this.get("id")+"_insertimage_link");if(this._isLocalFile(O.value)){C.addClass(O,"warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(O,"warning");this.get("panel").setFooter(" ");if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){this.get("panel").setFooter(this.STR_IMAGE_COPY);}}},this,true);}A.on(this.get("id")+"_insertimage_url","blur",function(){var Q=C.get(this.get("id")+"_insertimage_url");if(Q.value&&G){if(Q.value==G.getAttribute("src",2)){return false;}}if(this._isLocalFile(Q.value)){C.addClass(!
 Q,"warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{if(this.currentElement[0]){C.removeClass(Q,"warning");this.get("panel").setFooter(" ");if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){this.get("panel").setFooter(this.STR_IMAGE_COPY);}if(Q&&Q.value&&(Q.value!=this.STR_IMAGE_HERE)){this.currentElement[0].setAttribute("src",Q.value);var P=this,O=new Image();O.onerror=function(){Q.value=P.STR_IMAGE_HERE;O.setAttribute("src",P.get("blankimage"));P.currentElement[0].setAttribute("src",P.get("blankimage"));YAHOO.util.Dom.get(P.get("id")+"_insertimage_height").value=O.height;YAHOO.util.Dom.get(P.get("id")+"_insertimage_width").value=O.width;};var R=this.get("id");window.setTimeout(function(){YAHOO.util.Dom.get(R+"_insertimage_height").value=O.height;YAHOO.util.Dom.get(R+"_insertimage_width").value=O.width;if(P.currentElement&&P.currentElement[0]){if(!P.currentElement[0]._height){P.currentElement[0]._height=O.height;
-}if(!P.currentElement[0]._width){P.currentElement[0]._width=O.width;}}},800);if(Q.value!=this.STR_IMAGE_HERE){O.src=Q.value;}}}}},this,true);this._windows.insertimage={};this._windows.insertimage.body=K;K.style.display="none";this.get("panel").editor_form.appendChild(K);this.fireEvent("windowInsertImageRender",{type:"windowInsertImageRender",panel:this.get("panel"),body:K,toolbar:H});return K;},_handleInsertImageClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.on("afterExecCommand",function(){var H=this.currentElement[0],P=null,M="",a="",G=null,b="",L="",Y="",S=75,W=75,R=0,N=0,K=0,T=false,J=new YAHOO.widget.EditorWindow("insertimage",{width:"415px"});if(!H){H=this._getSelectedElement();}if(H){J.el=H;if(H.getAttribute("src")){L=H.getAttribute("src",2);if(L.indexOf(this.get("blankimage"))!=-1){L=this.STR_IMAGE_HERE;T=true;}}if(H.getAttribute("alt",2)){b=H.getAttribute("alt",2);}if(H.getAttribute("title",2)){b!
 =H.getAttribute("title",2);}if(H.parentNode&&this._isElement(H.parentNode,"a")){M=H.parentNode.getAttribute("href",2);if(H.parentNode.getAttribute("target")!==null){a=H.parentNode.getAttribute("target");}}S=parseInt(H.height,10);W=parseInt(H.width,10);if(H.style.height){S=parseInt(H.style.height,10);}if(H.style.width){W=parseInt(H.style.width,10);}if(H.style.margin){R=parseInt(H.style.margin,10);}if(!H._height){H._height=S;}if(!H._width){H._width=W;}N=H._height;K=H._width;}if(this._windows.insertimage&&this._windows.insertimage.body){P=this._windows.insertimage.body;this._defaultImageToolbar.resetAllButtons();}else{P=this._renderInsertImageWindow();}G=this._defaultImageToolbar;G.editor_el=H;var F="0";var V="solid";if(H.style.borderLeftWidth){F=parseInt(H.style.borderLeftWidth,10);}if(H.style.borderLeftStyle){V=H.style.borderLeftStyle;}var Z=G.getButtonByValue("bordersize");var X=((parseInt(F,10)>0)?"":"none");Z.set("label",'<span class="yui-toolbar-bordersize-'+F+'">'+X+"</!
 span>");this._updateMenuChecked("bordersize",F,G);var O=G.getB!
 uttonByV
alue("bordertype");O.set("label",'<span class="yui-toolbar-bordertype-'+V+'"></span>');this._updateMenuChecked("bordertype",V,G);if(parseInt(F,10)>0){G.enableButton(O);G.enableButton(Z);G.enableButton("bordercolor");}if((H.align=="right")||(H.align=="left")){G.selectButton(H.align);}else{if(H.style.display=="block"){G.selectButton("block");}else{G.selectButton("inline");}}if(parseInt(H.style.marginLeft,10)>0){G.getButtonByValue("padding").set("label",""+parseInt(H.style.marginLeft,10));}if(H.style.borderSize){G.selectButton("bordersize");G.selectButton(parseInt(H.style.borderSize,10));}G.getButtonByValue("padding").set("label",""+R);J.setHeader(this.STR_IMAGE_PROP_TITLE);J.setBody(P);if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){J.setFooter(this.STR_IMAGE_COPY);}this.openWindow(J);C.get(this.get("id")+"_insertimage_url").value=L;C.get(this.get("id")+"_insertimage_title").value=b;C.get(this.get("id")+"_insertimage_link").value=M;C.get(!
 this.get("id")+"_insertimage_target").checked=((a)?true:false);C.get(this.get("id")+"_insertimage_width").value=W;C.get(this.get("id")+"_insertimage_height").value=S;var I="";if((S!=N)||(W!=K)){var Q=document.createElement("span");Q.className="info";Q.innerHTML=this.STR_IMAGE_ORIG_SIZE+": ("+K+" x "+N+")";if(C.get(this.get("id")+"_insertimage_height").nextSibling){var E=C.get(this.get("id")+"_insertimage_height").nextSibling;E.parentNode.removeChild(E);}C.get(this.get("id")+"_insertimage_height").parentNode.appendChild(Q);}this.toolbar.selectButton("insertimage");var U=this.get("id");window.setTimeout(function(){try{YAHOO.util.Dom.get(U+"_insertimage_url").focus();if(T){YAHOO.util.Dom.get(U+"_insertimage_url").select();}}catch(c){}},50);});},_handleInsertImageWindowClose:function(){var E=C.get(this.get("id")+"_insertimage_url"),L=C.get(this.get("id")+"_insertimage_title"),I=C.get(this.get("id")+"_insertimage_link"),J=C.get(this.get("id")+"_insertimage_target"),H=arguments[0!
 ].win.el;if(E&&E.value&&(E.value!=this.STR_IMAGE_HERE)){H.setA!
 ttribute
("src",E.value);H.setAttribute("title",L.value);H.setAttribute("alt",L.value);var G=H.parentNode;if(I.value){var K=I.value;if((K.indexOf(":/"+"/")==-1)&&(K.substring(0,1)!="/")&&(K.substring(0,6).toLowerCase()!="mailto")){if((K.indexOf("@")!=-1)&&(K.substring(0,6).toLowerCase()!="mailto")){K="mailto:"+K;}else{K="http:/"+"/"+K;}}if(G&&this._isElement(G,"a")){G.setAttribute("href",K);if(J.checked){G.setAttribute("target",J.value);}else{G.setAttribute("target","");}}else{var F=this._getDoc().createElement("a");F.setAttribute("href",K);if(J.checked){F.setAttribute("target",J.value);}else{F.setAttribute("target","");}H.parentNode.replaceChild(F,H);F.appendChild(H);}}else{if(G&&this._isElement(G,"a")){G.parentNode.replaceChild(H,G);}}}else{H.parentNode.removeChild(H);}C.get(this.get("id")+"_insertimage_url").value="";C.get(this.get("id")+"_insertimage_title").value="";C.get(this.get("id")+"_insertimage_link").value="";C.get(this.get("id")+"_insertimage_target").checked=false;C.get!
 (this.get("id")+"_insertimage_width").value=0;C.get(this.get("id")+"_insertimage_height").value=0;this._defaultImageToolbar.resetAllButtons();this.currentElement=[];this.nodeChange();},EDITOR_PANEL_ID:"-panel",_renderPanel:function(){var E=new YAHOO.widget.Overlay(this.get("id")+this.EDITOR_PANEL_ID,{width:"300px",iframe:true,visible:false,underlay:"none",draggable:false,close:false});this.set("panel",E);this.get("panel").setBody("---");this.get("panel").setHeader(" ");this.get("panel").setFooter(" ");var J=document.createElement("div");J.className=this.CLASS_PREFIX+"-body-cont";for(var K in this.browser){if(this.browser[K]){C.addClass(J,K);break;}}C.addClass(J,((YAHOO.widget.Button&&(this._defaultToolbar.buttonType=="advanced"))?"good-button":"no-button"));var H=document.createElement("h3");H.className="yui-editor-skipheader";H.innerHTML=this.STR_CLOSE_WINDOW_NOTE;J.appendChild(H);var F=document.createElement("form");
-F.setAttribute("method","GET");E.editor_form=F;A.on(F,"submit",function(N){A.stopEvent(N);},this,true);J.appendChild(F);var G=document.createElement("span");G.innerHTML="X";G.title=this.STR_CLOSE_WINDOW;G.className="close";A.on(G,"click",this.closeWindow,this,true);var L=document.createElement("span");L.innerHTML="^";L.className="knob";E.editor_knob=L;var M=document.createElement("h3");E.editor_header=M;M.innerHTML="<span></span>";E.setHeader(" ");E.appendToHeader(M);M.appendChild(G);M.appendChild(L);E.setBody(" ");E.setFooter(" ");E.appendToBody(J);A.on(E.element,"click",function(N){A.stopPropagation(N);});var I=function(){};E.showEvent.subscribe(I,this,true);E.renderEvent.subscribe(function(){this._renderInsertImageWindow();this._renderCreateLinkWindow();this.fireEvent("windowRender",{type:"windowRender",panel:E});},this,true);if(this.DOMReady){this.get("panel").render(document.body);C.addClass(this.get("panel").element,"yui-editor-panel");}else{A.onDOMReady(function(){th!
 is.get("panel").render(document.body);C.addClass(this.get("panel").element,"yui-editor-panel");},this,true);}this.get("panel").showEvent.subscribe(function(){YAHOO.util.Dom.setStyle(this.element,"display","block");});return this.get("panel");},openWindow:function(K){var P=this;window.setTimeout(function(){P.toolbar.set("disabled",true);},10);A.on(document,"keydown",this._closeWindow,this,true);if(this.currentWindow){this.closeWindow();}var Q=C.getXY(this.currentElement[0]),N=C.getXY(this.get("iframe").get("element")),E=this.get("panel"),H=[(Q[0]+N[0]-20),(Q[1]+N[1]+10)],G=(parseInt(K.attrs.width,10)/2),L="center",J=null;this.fireEvent("beforeOpenWindow",{type:"beforeOpenWindow",win:K,panel:E});var F=E.editor_form;var I=this._windows;for(var O in I){if(D.hasOwnProperty(I,O)){if(I[O]&&I[O].body){if(O==K.name){C.setStyle(I[O].body,"display","block");}else{C.setStyle(I[O].body,"display","none");}}}}if(this._windows[K.name].body){C.setStyle(this._windows[K.name].body,"display","!
 block");F.appendChild(this._windows[K.name].body);}else{if(D.i!
 sObject(
K.body)){F.appendChild(K.body);}else{var M=document.createElement("div");M.innerHTML=K.body;F.appendChild(M);}}E.editor_header.firstChild.innerHTML=K.header;if(K.footer!==null){E.setFooter(K.footer);C.addClass(E.footer,"open");}else{C.removeClass(E.footer,"open");}E.cfg.setProperty("width",K.attrs.width);this.currentWindow=K;this.moveWindow(true);E.show();this.fireEvent("afterOpenWindow",{type:"afterOpenWindow",win:K,panel:E});},moveWindow:function(F){if(!this.currentWindow){return false;}var I=this.currentWindow,J=C.getXY(this.currentElement[0]),a=C.getXY(this.get("iframe").get("element")),O=this.get("panel"),Y=[(J[0]+a[0]),(J[1]+a[1])],R=(parseInt(I.attrs.width,10)/2),U="center",Q=O.cfg.getProperty("xy")||[0,0],G=O.editor_knob,X=0,L=0,T=false;Y[0]=((Y[0]-R)+20);Y[0]=Y[0]-C.getDocumentScrollLeft(this._getDoc());Y[1]=Y[1]-C.getDocumentScrollTop(this._getDoc());if(this._isElement(this.currentElement[0],"img")){if(this.currentElement[0].src.indexOf(this.get("blankimage"))!=-1)!
 {Y[0]=(Y[0]+(75/2));Y[1]=(Y[1]+75);}else{var N=parseInt(this.currentElement[0].width,10);var W=parseInt(this.currentElement[0].height,10);Y[0]=(Y[0]+(N/2));Y[1]=(Y[1]+W);}Y[1]=Y[1]+15;}else{var K=C.getStyle(this.currentElement[0],"fontSize");if(K&&K.indexOf&&K.indexOf("px")!=-1){Y[1]=Y[1]+parseInt(C.getStyle(this.currentElement[0],"fontSize"),10)+5;}else{Y[1]=Y[1]+20;}}if(Y[0]<a[0]){Y[0]=a[0]+5;U="left";}if((Y[0]+(R*2))>(a[0]+parseInt(this.get("iframe").get("element").clientWidth,10))){Y[0]=((a[0]+parseInt(this.get("iframe").get("element").clientWidth,10))-(R*2)-5);U="right";}try{X=(Y[0]-Q[0]);L=(Y[1]-Q[1]);}catch(b){}if(this.get("autoHeight")===false){var P=a[1]+parseInt(this.get("height"),10);var H=a[0]+parseInt(this.get("width"),10);if(Y[1]>P){Y[1]=P;}if(Y[0]>H){Y[0]=(H/2);}}X=((X<0)?(X*-1):X);L=((L<0)?(L*-1):L);if(((X>10)||(L>10))||F){var S=0,V=0;if(this.currentElement[0].width){V=(parseInt(this.currentElement[0].width,10)/2);}var M=J[0]+a[0]+V;S=M-Y[0];if(S>(parseInt(I!
 .attrs.width,10)-1)){S=((parseInt(I.attrs.width,10)-30)-1);}el!
 se{if(S<
40){S=1;}}if(isNaN(S)){S=1;}if(F){if(G){G.style.left=S+"px";}O.cfg.setProperty("xy",Y);}else{if(this.get("animate")){T=new YAHOO.util.Anim(O.element,{},0.5,YAHOO.util.Easing.easeOut);T.attributes={top:{to:Y[1]},left:{to:Y[0]}};T.onComplete.subscribe(function(){O.cfg.setProperty("xy",Y);});var Z=new YAHOO.util.Anim(O.iframe,T.attributes,0.5,YAHOO.util.Easing.easeOut);var E=new YAHOO.util.Anim(G,{left:{to:S}},0.6,YAHOO.util.Easing.easeOut);T.animate();Z.animate();E.animate();}else{G.style.left=S+"px";O.cfg.setProperty("xy",Y);}}}},_closeWindow:function(E){if(this._checkKey(this._keyMap.CLOSE_WINDOW,E)){if(this.currentWindow){this.closeWindow();}}},closeWindow:function(E){this.fireEvent("window"+this.currentWindow.name+"Close",{type:"window"+this.currentWindow.name+"Close",win:this.currentWindow,el:this.currentElement[0]});this.fireEvent("closeWindow",{type:"closeWindow",win:this.currentWindow});this.currentWindow=null;this.get("panel").hide();this.get("panel").cfg.setProperty(!
 "xy",[-900,-900]);this.get("panel").syncIframe();this.unsubscribeAll("afterExecCommand");this.toolbar.set("disabled",false);this.toolbar.resetAllButtons();this._focusWindow();A.removeListener(document,"keydown",this._closeWindow);},cmd_undo:function(F){if(this._hasUndoLevel()){if(!this._undoLevel){this._undoLevel=this._undoCache.length;}this._undoLevel=(this._undoLevel-1);if(this._undoCache[this._undoLevel]){var E=this._getUndo(this._undoLevel);this.setEditorHTML(E);}else{this._undoLevel=null;this.toolbar.disableButton("undo");}}return[false];},cmd_redo:function(F){this._undoLevel=this._undoLevel+1;if(this._undoLevel>=this._undoCache.length){this._undoLevel=this._undoCache.length;}if(this._undoCache[this._undoLevel]){var E=this._getUndo(this._undoLevel);this.setEditorHTML(E);}else{this.toolbar.disableButton("redo");}return[false];},cmd_heading:function(I){var F=true,G=null,H="heading",J=this._getSelection(),E=this._getSelectedElement();
-if(E){J=E;}if(this.browser.ie){H="formatblock";}if(I=="none"){if((J&&J.tagName&&(J.tagName.toLowerCase().substring(0,1)=="h"))||(J&&J.parentNode&&J.parentNode.tagName&&(J.parentNode.tagName.toLowerCase().substring(0,1)=="h"))){if(J.parentNode.tagName.toLowerCase().substring(0,1)=="h"){J=J.parentNode;}if(this._isElement(J,"html")){return[false];}G=this._swapEl(E,"span",function(K){K.className="yui-non";});this._selectNode(G);this.currentElement[0]=G;}F=false;}else{if(this._isElement(E,"h1")||this._isElement(E,"h2")||this._isElement(E,"h3")||this._isElement(E,"h4")||this._isElement(E,"h5")||this._isElement(E,"h6")){G=this._swapEl(E,I);this._selectNode(G);this.currentElement[0]=G;}else{this._createCurrentElement(I);this._selectNode(this.currentElement[0]);}F=false;}return[F,H];},cmd_hiddenelements:function(E){if(this._showingHiddenElements){this._lastButton=null;this._showingHiddenElements=false;this.toolbar.deselectButton("hiddenelements");C.removeClass(this._getDoc().body,th!
 is.CLASS_HIDDEN);}else{this._showingHiddenElements=true;C.addClass(this._getDoc().body,this.CLASS_HIDDEN);this.toolbar.selectButton("hiddenelements");}return[false];},cmd_removeformat:function(H){var F=true;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled("removeformat")){var E=this._getSelection()+"";this._createCurrentElement("span");this.currentElement[0].className="yui-non";this.currentElement[0].innerHTML=E;for(var G=1;G<this.currentElement.length;G++){this.currentElement[G].parentNode.removeChild(this.currentElement[G]);}F=false;}return[F];},cmd_script:function(K,J){var G=true,E=K.toLowerCase().substring(0,3),H=null,F=this._getSelectedElement();if(this.browser.webkit){if(this._isElement(F,E)){H=this._swapEl(this.currentElement[0],"span",function(L){L.className="yui-non";});this._selectNode(H);}else{this._createCurrentElement(E);var I=this._swapEl(this.currentElement[0],E);this._selectNode(I);this.currentElement[0]=I;}G=false;}return G;},cmd_superscript:func!
 tion(E){return[this.cmd_script("superscript",E)];},cmd_subscri!
 pt:funct
ion(E){return[this.cmd_script("subscript",E)];},cmd_indent:function(H){var E=true,G=this._getSelectedElement(),I=null;if(this.browser.ie){if(this._isElement(G,"blockquote")){I=this._getDoc().createElement("blockquote");I.innerHTML=G.innerHTML;G.innerHTML="";G.appendChild(I);this._selectNode(I);}else{I=this._getDoc().createElement("blockquote");var F=this._getRange().htmlText;I.innerHTML=F;this._createCurrentElement("blockquote");this.currentElement[0].parentNode.replaceChild(I,this.currentElement[0]);this.currentElement[0]=I;this._selectNode(this.currentElement[0]);}E=false;}else{H="blockquote";}return[E,"formatblock",H];},cmd_outdent:function(I){var E=true,H=this._getSelectedElement(),J=null,F=null;if(this.browser.webkit||this.browser.ie){H=this._getSelectedElement();if(this._isElement(H,"blockquote")){var G=H.parentNode;if(this._isElement(H.parentNode,"blockquote")){G.innerHTML=H.innerHTML;this._selectNode(G);}else{F=this._getDoc().createElement("span");F.innerHTML=H.inner!
 HTML;YAHOO.util.Dom.addClass(F,"yui-non");G.replaceChild(F,H);this._selectNode(F);}}else{}E=false;}else{I=false;}return[E,"outdent",I];},cmd_justify:function(E){if(this.browser.ie){if(this._hasSelection()){this._createCurrentElement("span");this._swapEl(this.currentElement[0],"div",function(F){F.style.textAlign=E;});return[false];}}return[true,"justify"+E,""];},cmd_justifycenter:function(){return[this.cmd_justify("center")];},cmd_justifyleft:function(){return[this.cmd_justify("left")];},cmd_justifyright:function(){return[this.cmd_justify("right")];},toString:function(){var E="Editor";if(this.get&&this.get("element_cont")){E="Editor (#"+this.get("element_cont").get("id")+")"+((this.get("disabled")?" Disabled":""));}return E;}});YAHOO.widget.EditorWindow=function(F,E){this.name=F.replace(" ","_");this.attrs=E;};YAHOO.widget.EditorWindow.prototype={header:null,body:null,footer:null,setHeader:function(E){this.header=E;},setBody:function(E){this.body=E;},setFooter:function(E){th!
 is.footer=E;},toString:function(){return"Editor Window ("+this!
 .name+")
";}};})();YAHOO.register("editor",YAHOO.widget.Editor,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+}}}}}else{return false;}},deselectButton:function(F){var E=B.call(this,F);if(E){E.removeClass("yui-button-selected");E.removeClass("yui-button-"+E.get("value")+"-selected");E.removeClass("yui-button-hover");E._selected=false;}else{return false;}},deselectAllButtons:function(){var E=this._buttonList.length;for(var F=0;F<E;F++){this.deselectButton(this._buttonList[F]);}},disableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.disableButton(this._buttonList[F]);}},enableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.enableButton(this._buttonList[F]);}},resetAllButtons:function(I){if(!D.isObject(I)){I={};}if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){var H=this._buttonList[F];if(H){var G=H._configs.disabled._initialConfig.value;if(I[H.get("id")]){this.enableButton(H);this.selectButton(H);}else{if(G)!
 {this.disableButton(H);}else{this.enableButton(H);}this.deselectButton(H);}}}},destroyButton:function(I){var G=B.call(this,I);if(G){var H=G.get("id");G.destroy();var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==H){this._buttonList[F]=null;}}}else{return false;}},destroy:function(){this.get("element").innerHTML="";this.get("element").className="";for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}return true;},collapse:function(F){var E=C.getElementsByClassName("collapse","span",this._titlebar);if(F===false){C.removeClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");if(E[0]){C.removeClass(E[0],"collapsed");}this.fireEvent("toolbarExpanded",{type:"toolbarExpanded",target:this});}else{if(E[0]){C.addClass(E[0],"collapsed");}C.addClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");this.fireEvent("toolbarCollapsed",{type:"toolbarCollapsed",target:this});}},toString:function(){r!
 eturn"Toolbar (#"+this.get("element").id+") with "+this._butto!
 nList.le
ngth+" buttons.";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.SimpleEditor=function(H,M){var G={};if(D.isObject(H)&&(!H.tagName)&&!M){D.augmentObject(G,H);H=document.createElement("textarea");this.DOMReady=true;if(G.container){var K=C.get(G.container);K.appendChild(H);}else{document.body.appendChild(H);}}else{if(M){D.augmentObject(G,M);}}var I={element:null,attributes:G},F=null;if(D.isString(H)){F=H;}else{if(I.attributes.id){F=I.attributes.id;}else{this.DOMReady=true;F=C.generateId(H);}}I.element=H;var J=document.createElement("DIV");I.attributes.element_cont=new YAHOO.util.Element(J,{id:F+"_container"});var E=document.createElement("div");C.addClass(E,"first-child");I.attributes.element_cont.appendChild(E);if(!I.attributes.toolbar_cont){I.attributes.toolbar_cont=document.createElement("DIV");I.attributes.toolbar_cont.id=F+"_toolbar";E.appendChild(I.attributes.toolbar_cont);}var L=document.createElement("DIV");!
 E.appendChild(L);I.attributes.editor_wrapper=L;YAHOO.widget.SimpleEditor.superclass.constructor.call(this,I.element,I.attributes);};YAHOO.extend(YAHOO.widget.SimpleEditor,YAHOO.util.Element,{_resizeConfig:{handles:["br"],autoRatio:true,status:true,proxy:true,useShim:true,setSize:false},_setupResize:function(){if(!YAHOO.util.DD||!YAHOO.util.Resize){return false;}if(this.get("resize")){var E={};D.augmentObject(E,this._resizeConfig);this.resize=new YAHOO.util.Resize(this.get("element_cont").get("element"),E);this.resize.on("resize",function(G){var K=this.get("animate");this.set("animate",false);this.set("width",G.width+"px");var H=G.height,I=(this.toolbar.get("element").clientHeight+2),J=0;if(this.dompath){J=(this.dompath.clientHeight+1);}var F=(H-I-J);this.set("height",F+"px");this.get("element_cont").setStyle("height","");this.set("animate",K);},this,true);}},resize:null,_setupDD:function(){if(!YAHOO.util.DD){return false;}if(this.get("drag")){var F=this.get("drag"),E=YAHOO.!
 util.DD;if(F==="proxy"){E=YAHOO.util.DDProxy;}this.dd=new E(th!
 is.get("
element_cont").get("element"));this.toolbar.addClass("draggable");this.dd.setHandleElId(this.toolbar._titlebar);}},dd:null,_lastCommand:null,_undoNodeChange:function(){},_storeUndo:function(){},_checkKey:function(E,H){var F=false;if((H.keyCode===E.key)){if(E.mods&&(E.mods.length>0)){var I=0;for(var G=0;G<E.mods.length;G++){if(this.browser.mac){if(E.mods[G]=="ctrl"){E.mods[G]="meta";}}if(H[E.mods[G]+"Key"]===true){I++;}}if(I===E.mods.length){F=true;}}else{F=true;}}return F;},_keyMap:{SELECT_ALL:{key:65,mods:["ctrl"]},CLOSE_WINDOW:{key:87,mods:["shift","ctrl"]},FOCUS_TOOLBAR:{key:27,mods:["shift"]},FOCUS_AFTER:{key:27},FONT_SIZE_UP:{key:38,mods:["shift","ctrl"]},FONT_SIZE_DOWN:{key:40,mods:["shift","ctrl"]},CREATE_LINK:{key:76,mods:["shift","ctrl"]},BOLD:{key:66,mods:["shift","ctrl"]},ITALIC:{key:73,mods:["shift","ctrl"]},UNDERLINE:{key:85,mods:["shift","ctrl"]},UNDO:{key:90,mods:["ctrl"]},REDO:{key:90,mods:["shift","ctrl"]},JUSTIFY_LEFT:{key:219,mods:["shift","ctrl"]},JUSTIFY!
 _CENTER:{key:220,mods:["shift","ctrl"]},JUSTIFY_RIGHT:{key:221,mods:["shift","ctrl"]}},_cleanClassName:function(E){return E.replace(/ /g,"-").toLowerCase();},_textarea:null,_docType:'<!DOCTYPE HTML PUBLIC "-/'+"/W3C/"+"/DTD HTML 4.01/"+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',editorDirty:null,_defaultCSS:"html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }",_defaultToolbar:null,_lastButton:null,_baseHREF:function(){var E=document.location.href;
+if(E.indexOf("?")!==-1){E=E.substring(0,E.indexOf("?"));}E=E.substring(0,E.lastIndexOf("/"))+"/";return E;}(),_lastImage:null,_blankImageLoaded:null,_fixNodesTimer:null,_nodeChangeTimer:null,_lastNodeChangeEvent:null,_lastNodeChange:0,_rendered:null,DOMReady:null,_selection:null,_mask:null,_showingHiddenElements:null,currentWindow:null,currentEvent:null,operaEvent:null,currentFont:null,currentElement:null,dompath:null,beforeElement:null,afterElement:null,invalidHTML:{form:true,input:true,button:true,select:true,link:true,html:true,body:true,iframe:true,script:true,style:true,textarea:true},toolbar:null,_contentTimer:null,_contentTimerCounter:0,_disabled:["createlink","fontname","fontsize","forecolor","backcolor"],_alwaysDisabled:{undo:true,redo:true},_alwaysEnabled:{},_semantic:{"bold":true,"italic":true,"underline":true},_tag2cmd:{"b":"bold","strong":"bold","i":"italic","em":"italic","u":"underline","sup":"superscript","sub":"subscript","img":"insertimage","a":"createlink"!
 ,"ul":"insertunorderedlist","ol":"insertorderedlist"},_createIframe:function(){var I=document.createElement("iframe");I.id=this.get("id")+"_editor";var G={border:"0",frameBorder:"0",marginWidth:"0",marginHeight:"0",leftMargin:"0",topMargin:"0",allowTransparency:"true",width:"100%"};if(this.get("autoHeight")){G.scrolling="no";}for(var H in G){if(D.hasOwnProperty(G,H)){I.setAttribute(H,G[H]);}}var F="javascript:;";if(this.browser.ie){F="javascript:false;";}I.setAttribute("src",F);var E=new YAHOO.util.Element(I);E.setStyle("visibility","hidden");return E;},_isElement:function(F,E){if(F&&F.tagName&&(F.tagName.toLowerCase()==E)){return true;}if(F&&F.getAttribute&&(F.getAttribute("tag")==E)){return true;}return false;},_hasParent:function(F,E){if(!F||!F.parentNode){return false;}while(F.parentNode){if(this._isElement(F,E)){return F;}if(F.parentNode){F=F.parentNode;}else{return false;}}return false;},_getDoc:function(){var E=false;if(this.get){if(this.get("iframe")){if(this.get("i!
 frame").get){if(this.get("iframe").get("element")){try{if(this!
 .get("if
rame").get("element").contentWindow){if(this.get("iframe").get("element").contentWindow.document){E=this.get("iframe").get("element").contentWindow.document;return E;}}}catch(F){}}}}}return false;},_getWindow:function(){return this.get("iframe").get("element").contentWindow;},focus:function(){this._getWindow().focus();},_focusWindow:function(){this.focus();},_hasSelection:function(){var G=this._getSelection();var E=this._getRange();var F=false;if(!G||!E){return F;}if(this.browser.ie||this.browser.opera){if(E.text){F=true;}if(E.html){F=true;}}else{if(this.browser.webkit){if(G+""!==""){F=true;}}else{if(G&&(G.toString()!=="")&&(G!==undefined)){F=true;}}}return F;},_getSelection:function(){var E=null;if(this._getDoc()&&this._getWindow()){if(this._getDoc().selection){E=this._getDoc().selection;}else{E=this._getWindow().getSelection();}if(this.browser.webkit){if(E.baseNode){this._selection={};this._selection.baseNode=E.baseNode;this._selection.baseOffset=E.baseOffset;this._selecti!
 on.extentNode=E.extentNode;this._selection.extentOffset=E.extentOffset;}else{if(this._selection!==null){E=this._getWindow().getSelection();E.setBaseAndExtent(this._selection.baseNode,this._selection.baseOffset,this._selection.extentNode,this._selection.extentOffset);this._selection=null;}}}}return E;},_selectNode:function(F,I){if(!F){return false;}var G=this._getSelection(),E=null;if(this.browser.ie){try{E=this._getDoc().body.createTextRange();E.moveToElementText(F);E.select();}catch(H){}}else{if(this.browser.webkit){if(I){G.setBaseAndExtent(F,1,F,F.innerText.length);}else{G.setBaseAndExtent(F,0,F,F.innerText.length);}}else{if(this.browser.opera){G=this._getWindow().getSelection();E=this._getDoc().createRange();E.selectNode(F);G.removeAllRanges();G.addRange(E);}else{E=this._getDoc().createRange();E.selectNodeContents(F);G.removeAllRanges();G.addRange(E);}}}this.nodeChange();},_getRange:function(){var E=this._getSelection();if(E===null){return null;}if(this.browser.webkit&&!!
 E.getRangeAt){var H=this._getDoc().createRange();try{H.setStar!
 t(E.anch
orNode,E.anchorOffset);H.setEnd(E.focusNode,E.focusOffset);}catch(G){H=this._getWindow().getSelection()+"";}return H;}if(this.browser.ie||this.browser.opera){try{return E.createRange();}catch(F){return null;}}if(E.rangeCount>0){return E.getRangeAt(0);}return null;},_setDesignMode:function(E){try{var G=true;if(this.browser.ie&&(E.toLowerCase()=="off")){G=false;}if(G){this._getDoc().designMode=E;}}catch(F){}},_toggleDesignMode:function(){var F=this._getDoc().designMode.toLowerCase(),E="on";if(F=="on"){E="off";}this._setDesignMode(E);return E;},_focused:null,_handleFocus:function(E){if(!this._focused){this._focused=true;this.fireEvent("editorWindowFocus",{type:"editorWindowFocus",target:this});}},_handleBlur:function(E){if(this._focused){this._focused=false;this.fireEvent("editorWindowBlur",{type:"editorWindowBlur",target:this});}},_initEditorEvents:function(){var F=this._getDoc(),E=this._getWindow();A.on(F,"mouseup",this._handleMouseUp,this,true);A.on(F,"mousedown",this._handl!
 eMouseDown,this,true);A.on(F,"click",this._handleClick,this,true);A.on(F,"dblclick",this._handleDoubleClick,this,true);A.on(F,"keypress",this._handleKeyPress,this,true);A.on(F,"keyup",this._handleKeyUp,this,true);A.on(F,"keydown",this._handleKeyDown,this,true);A.on(E,"focus",this._handleFocus,this,true);A.on(E,"blur",this._handleBlur,this,true);},_removeEditorEvents:function(){var F=this._getDoc(),E=this._getWindow();A.removeListener(F,"mouseup",this._handleMouseUp,this,true);A.removeListener(F,"mousedown",this._handleMouseDown,this,true);A.removeListener(F,"click",this._handleClick,this,true);A.removeListener(F,"dblclick",this._handleDoubleClick,this,true);A.removeListener(F,"keypress",this._handleKeyPress,this,true);A.removeListener(F,"keyup",this._handleKeyUp,this,true);A.removeListener(F,"keydown",this._handleKeyDown,this,true);A.removeListener(E,"focus",this._handleFocus,this,true);A.removeListener(E,"blur",this._handleBlur,this,true);
+},_fixWebkitDivs:function(){if(this.browser.webkit){var E=this._getDoc().body.getElementsByTagName("div");C.addClass(E,"yui-wk-div");}},_initEditor:function(){if(this.browser.ie){this._getDoc().body.style.margin="0";}if(!this.get("disabled")){if(this._getDoc().designMode.toLowerCase()!="on"){this._setDesignMode("on");this._contentTimerCounter=0;}}if(!this._getDoc().body){this._contentTimerCounter=0;this._checkLoaded();return false;}this.toolbar.on("buttonClick",this._handleToolbarClick,this,true);if(!this.get("disabled")){this._initEditorEvents();this.toolbar.set("disabled",false);}this.fireEvent("editorContentLoaded",{type:"editorLoaded",target:this});this._fixWebkitDivs();if(this.get("dompath")){var E=this;setTimeout(function(){E._writeDomPath.call(E);E._setupResize.call(E);},150);}var G=[];for(var F in this.browser){if(this.browser[F]){G.push(F);}}if(this.get("ptags")){G.push("ptags");}C.addClass(this._getDoc().body,G.join(" "));this.nodeChange(true);},_checkLoaded:funct!
 ion(){this._contentTimerCounter++;if(this._contentTimer){clearTimeout(this._contentTimer);}if(this._contentTimerCounter>500){return false;}var G=false;try{if(this._getDoc()&&this._getDoc().body){if(this.browser.ie){if(this._getDoc().body.readyState=="complete"){G=true;}}else{if(this._getDoc().body._rteLoaded===true){G=true;}}}}catch(F){G=false;}if(G===true){this._initEditor();}else{var E=this;this._contentTimer=setTimeout(function(){E._checkLoaded.call(E);},20);}},_setInitialContent:function(){var H=((this._textarea)?this.get("element").value:this.get("element").innerHTML),J=null;if((H==="")&&this.browser.gecko){H="<br>";}var F=D.substitute(this.get("html"),{TITLE:this.STR_TITLE,CONTENT:this._cleanIncomingHTML(H),CSS:this.get("css"),HIDDEN_CSS:((this.get("hiddencss"))?this.get("hiddencss"):"/* No Hidden CSS */"),EXTRA_CSS:((this.get("extracss"))?this.get("extracss"):"/* No Extra CSS */")}),E=true;if(document.compatMode!="BackCompat"){F=this._docType+"\n"+F;}else{}if(this.br!
 owser.ie||this.browser.webkit||this.browser.opera||(navigator.!
 userAgen
t.indexOf("Firefox/1.5")!=-1)){try{if(this.browser.air){J=this._getDoc().implementation.createHTMLDocument();var K=this._getDoc();K.open();K.close();J.open();J.write(F);J.close();var G=K.importNode(J.getElementsByTagName("html")[0],true);K.replaceChild(G,K.getElementsByTagName("html")[0]);K.body._rteLoaded=true;}else{J=this._getDoc();J.open();J.write(F);J.close();}}catch(I){E=false;}}else{this.get("iframe").get("element").src="data:text/html;charset=utf-8,"+encodeURIComponent(F);}this.get("iframe").setStyle("visibility","");if(E){this._checkLoaded();}},_setMarkupType:function(E){switch(this.get("markup")){case"css":this._setEditorStyle(true);break;case"default":this._setEditorStyle(false);break;case"semantic":case"xhtml":if(this._semantic[E]){this._setEditorStyle(false);}else{this._setEditorStyle(true);}break;}},_setEditorStyle:function(F){try{this._getDoc().execCommand("useCSS",false,!F);}catch(E){}},_getSelectedElement:function(){var J=this._getDoc(),G=null,H=null,K=null,F!
 =true;if(this.browser.ie){this.currentEvent=this._getWindow().event;G=this._getRange();if(G){K=G.item?G.item(0):G.parentElement();if(this._hasSelection()){}if(K===J.body){K=null;}}if((this.currentEvent!==null)&&(this.currentEvent.keyCode===0)){K=A.getTarget(this.currentEvent);}}else{H=this._getSelection();G=this._getRange();if(!H||!G){return null;}if(!this._hasSelection()&&this.browser.webkit3){}if(this.browser.gecko){if(G.startContainer){if(G.startContainer.nodeType===3){K=G.startContainer.parentNode;}else{if(G.startContainer.nodeType===1){K=G.startContainer;}}if(this.currentEvent){var E=A.getTarget(this.currentEvent);if(!this._isElement(E,"html")){if(K!==E){K=E;}}}}}if(F){if(H.anchorNode&&(H.anchorNode.nodeType==3)){if(H.anchorNode.parentNode){K=H.anchorNode.parentNode;}if(H.anchorNode.nextSibling!=H.focusNode.nextSibling){K=H.anchorNode.nextSibling;}}if(this._isElement(K,"br")){K=null;}if(!K){K=G.commonAncestorContainer;if(!G.collapsed){if(G.startContainer==G.endContaine!
 r){if(G.startOffset-G.endOffset<2){if(G.startContainer.hasChil!
 dNodes()
){K=G.startContainer.childNodes[G.startOffset];}}}}}}}if(this.currentEvent!==null){try{switch(this.currentEvent.type){case"click":case"mousedown":case"mouseup":if(this.browser.webkit){K=A.getTarget(this.currentEvent);}break;default:break;}}catch(I){}}else{if((this.currentElement&&this.currentElement[0])&&(!this.browser.ie)){}}if(this.browser.opera||this.browser.webkit){if(this.currentEvent&&!K){K=YAHOO.util.Event.getTarget(this.currentEvent);}}if(!K||!K.tagName){K=J.body;}if(this._isElement(K,"html")){K=J.body;}if(this._isElement(K,"body")){K=J.body;}if(K&&!K.parentNode){K=J.body;}if(K===undefined){K=null;}return K;},_getDomPath:function(E){if(!E){E=this._getSelectedElement();}var F=[];while(E!==null){if(E.ownerDocument!=this._getDoc()){E=null;break;}if(E.nodeName&&E.nodeType&&(E.nodeType==1)){F[F.length]=E;}if(this._isElement(E,"body")){break;}E=E.parentNode;}if(F.length===0){if(this._getDoc()&&this._getDoc().body){F[0]=this._getDoc().body;}}return F.reverse();},_writeDomPa!
 th:function(){var K=this._getDomPath(),I=[],G="",L="";for(var E=0;E<K.length;E++){var M=K[E].tagName.toLowerCase();if((M=="ol")&&(K[E].type)){M+=":"+K[E].type;}if(C.hasClass(K[E],"yui-tag")){M=K[E].getAttribute("tag");}if((this.get("markup")=="semantic")||(this.get("markup")=="xhtml")){switch(M){case"b":M="strong";break;case"i":M="em";break;}}if(!C.hasClass(K[E],"yui-non")){if(C.hasClass(K[E],"yui-tag")){L=M;}else{G=((K[E].className!=="")?"."+K[E].className.replace(/ /g,"."):"");if((G.indexOf("yui")!=-1)||(G.toLowerCase().indexOf("apple-style-span")!=-1)){G="";}L=M+((K[E].id)?"#"+K[E].id:"")+G;}switch(M){case"body":L="body";break;case"a":if(K[E].getAttribute("href",2)){L+=":"+K[E].getAttribute("href",2).replace("mailto:","").replace("http:/"+"/","").replace("https:/"+"/","");}break;case"img":var F=K[E].height;var J=K[E].width;if(K[E].style.height){F=parseInt(K[E].style.height,10);}if(K[E].style.width){J=parseInt(K[E].style.width,10);
+}L+="("+J+"x"+F+")";break;}if(L.length>10){L='<span title="'+L+'">'+L.substring(0,10)+"..."+"</span>";}else{L='<span title="'+L+'">'+L+"</span>";}I[I.length]=L;}}var H=I.join(" "+this.SEP_DOMPATH+" ");if(this.dompath.innerHTML!=H){this.dompath.innerHTML=H;}},_fixNodes:function(){var J=this._getDoc(),H=[];for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(E.toLowerCase()!="span"){var F=J.body.getElementsByTagName(E);if(F.length){for(var G=0;G<F.length;G++){H.push(F[G]);}}}}}for(var I=0;I<H.length;I++){if(H[I].parentNode){if(D.isObject(this.invalidHTML[H[I].tagName.toLowerCase()])&&this.invalidHTML[H[I].tagName.toLowerCase()].keepContents){this._swapEl(H[I],"span",function(L){L.className="yui-non";});}else{H[I].parentNode.removeChild(H[I]);}}}var K=this._getDoc().getElementsByTagName("img");C.addClass(K,"yui-img");},_isNonEditable:function(G){if(this.get("allowNoEdit")){var F=A.getTarget(G);if(this._isElement(F,"html")){F=null;}var J=this._get!
 DomPath(F);for(var E=(J.length-1);E>-1;E--){if(C.hasClass(J[E],this.CLASS_NOEDIT)){try{this._getDoc().execCommand("enableObjectResizing",false,"false");}catch(I){}this.nodeChange();A.stopEvent(G);return true;}}try{this._getDoc().execCommand("enableObjectResizing",false,"true");}catch(H){}}return false;},_setCurrentEvent:function(E){this.currentEvent=E;},_handleClick:function(G){var F=this.fireEvent("beforeEditorClick",{type:"beforeEditorClick",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}if(this.browser.webkit){var E=A.getTarget(G);if(this._isElement(E,"a")||this._isElement(E.parentNode,"a")){A.stopEvent(G);this.nodeChange();}}else{this.nodeChange();}this.fireEvent("editorClick",{type:"editorClick",target:this,ev:G});},_handleMouseUp:function(G){var F=this.fireEvent("beforeEditorMouseUp",{type:"beforeEditorMouseUp",target:!
 this,ev:G});if(F===false){return false;}if(this._isNonEditable!
 (G)){ret
urn false;}var E=this;if(this.browser.opera){var H=A.getTarget(G);if(this._isElement(H,"img")){this.nodeChange();if(this.operaEvent){clearTimeout(this.operaEvent);this.operaEvent=null;this._handleDoubleClick(G);}else{this.operaEvent=window.setTimeout(function(){E.operaEvent=false;},700);}}}if(this.browser.webkit||this.browser.opera){if(this.browser.webkit){A.stopEvent(G);}}this.nodeChange();this.fireEvent("editorMouseUp",{type:"editorMouseUp",target:this,ev:G});},_handleMouseDown:function(F){var E=this.fireEvent("beforeEditorMouseDown",{type:"beforeEditorMouseDown",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this.browser.webkit&&this._hasSelection()){var H=this._getSelection();if(!this.browser.webkit3){H.collapse(true);}else{H.collapseToStart();}}if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}if(this._isElement(G,"img")||this.!
 _isElement(G,"a")){if(this.browser.webkit){A.stopEvent(F);if(this._isElement(G,"img")){C.addClass(G,"selected");this._lastImage=G;}}if(this.currentWindow){this.closeWindow();}this.nodeChange();}this.fireEvent("editorMouseDown",{type:"editorMouseDown",target:this,ev:F});},_handleDoubleClick:function(F){var E=this.fireEvent("beforeEditorDoubleClick",{type:"beforeEditorDoubleClick",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this._isElement(G,"img")){this.currentElement[0]=G;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}else{if(this._hasParent(G,"a")){this.currentElement[0]=this._hasParent(G,"a");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}}this.nodeChange!
 ();this.fireEvent("editorDoubleClick",{type:"editorDoubleClick!
 ",target
:this,ev:F});},_handleKeyUp:function(G){var F=this.fireEvent("beforeEditorKeyUp",{type:"beforeEditorKeyUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);switch(G.keyCode){case this._keyMap.SELECT_ALL.key:if(this._checkKey(this._keyMap.SELECT_ALL,G)){this.nodeChange();}break;case 32:case 35:case 36:case 37:case 38:case 39:case 40:case 46:case 8:case this._keyMap.CLOSE_WINDOW.key:if((G.keyCode==this._keyMap.CLOSE_WINDOW.key)&&this.currentWindow){if(this._checkKey(this._keyMap.CLOSE_WINDOW,G)){this.closeWindow();}}else{if(!this.browser.ie){if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);}var E=this;this._nodeChangeTimer=setTimeout(function(){E._nodeChangeTimer=null;E.nodeChange.call(E);},100);}else{this.nodeChange();}this.editorDirty=true;}break;}this.fireEvent("editorKeyUp",{type:"editorKeyUp",target:this,ev:G});this._storeUndo();},_handleKeyPress:function(G){var F=this.fireEvent("beforeEditorKeyP!
 ress",{type:"beforeEditorKeyPress",target:this,ev:G});if(F===false){return false;}if(this.get("allowNoEdit")){if(G&&G.keyCode&&(G.keyCode==63272)){A.stopEvent(G);}}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.browser.opera){if(G.keyCode===13){var E=this._getSelectedElement();if(!this._isElement(E,"li")){this.execCommand("inserthtml","<br>");A.stopEvent(G);}}}if(this.browser.webkit){if(!this.browser.webkit3){if(G.keyCode&&(G.keyCode==122)&&(G.metaKey)){if(this._hasParent(this._getSelectedElement(),"li")){A.stopEvent(G);}}}this._listFix(G);}this.fireEvent("editorKeyPress",{type:"editorKeyPress",target:this,ev:G});},_handleKeyDown:function(X){var Z=this.fireEvent("beforeEditorKeyDown",{type:"beforeEditorKeyDown",target:this,ev:X});if(Z===false){return false;}var U=null,E=null;if(this._isNonEditable(X)){return false;}this._setCurrentEvent(X);if(this.currentWindow){this.closeWindow();
+}if(this.currentWindow){this.closeWindow();}var N=false,S=null,P=null,R=false;switch(X.keyCode){case this._keyMap.FOCUS_TOOLBAR.key:if(this._checkKey(this._keyMap.FOCUS_TOOLBAR,X)){var W=this.toolbar.getElementsByTagName("h2")[0];if(W&&W.firstChild){W.firstChild.focus();}}else{if(this._checkKey(this._keyMap.FOCUS_AFTER,X)){this.afterElement.focus();}}A.stopEvent(X);N=false;break;case this._keyMap.CREATE_LINK.key:if(this._hasSelection()){if(this._checkKey(this._keyMap.CREATE_LINK,X)){var F=true;if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){F=false;}}if(F){this.execCommand("createlink","");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});N=false;}}}break;case this._keyMap.UNDO.key:case this._keyMap.REDO.key:if(this._checkKey(this._keyMap.REDO,X)){S="redo";N=true;}else{if(this._checkKey(this._keyMap.UNDO,X)){S="undo";N=true;}}break;cas!
 e this._keyMap.BOLD.key:if(this._checkKey(this._keyMap.BOLD,X)){S="bold";N=true;}break;case this._keyMap.FONT_SIZE_UP.key:case this._keyMap.FONT_SIZE_DOWN.key:var K=false,T=false;if(this._checkKey(this._keyMap.FONT_SIZE_UP,X)){K=true;}if(this._checkKey(this._keyMap.FONT_SIZE_DOWN,X)){T=true;}if(K||T){var H=this.toolbar.getButtonByValue("fontsize"),G=parseInt(H.get("label"),10),I=(G+1);if(T){I=(G-1);}S="fontsize";P=I+"px";N=true;}break;case this._keyMap.ITALIC.key:if(this._checkKey(this._keyMap.ITALIC,X)){S="italic";N=true;}break;case this._keyMap.UNDERLINE.key:if(this._checkKey(this._keyMap.UNDERLINE,X)){S="underline";N=true;}break;case 9:if(this.browser.ie){E=this._getRange();U=this._getSelectedElement();if(!this._isElement(U,"li")){if(E){E.pasteHTML("    ");E.collapse(false);E.select();}A.stopEvent(X);}}if(this.browser.gecko>1.8){U=this._getSelectedElement();if(this._isElement(U,"li")){if(X.shiftKey){this._getDoc().execCommand("outdent",null,"");}else{!
 this._getDoc().execCommand("indent",null,"");}}else{if(!this._!
 hasSelec
tion()){this.execCommand("inserthtml","    ");}}A.stopEvent(X);}break;case 13:var M=null,V=0;if(this.get("ptags")&&!X.shiftKey){if(this.browser.gecko){U=this._getSelectedElement();if(!this._hasParent(U,"li")){if(this._hasParent(U,"p")){M=this._getDoc().createElement("p");M.innerHTML=" ";C.insertAfter(M,U);this._selectNode(M.firstChild);}else{if(this._isElement(U,"body")){this.execCommand("insertparagraph",null);var O=this._getDoc().body.getElementsByTagName("p");for(V=0;V<O.length;V++){if(O[V].getAttribute("_moz_dirty")!==null){M=this._getDoc().createElement("p");M.innerHTML=" ";C.insertAfter(M,O[V]);this._selectNode(M.firstChild);O[V].removeAttribute("_moz_dirty");}}}else{N=true;S="insertparagraph";}}A.stopEvent(X);}}if(this.browser.webkit){U=this._getSelectedElement();if(!this._hasParent(U,"li")){this.execCommand("insertparagraph",null);var Q=this._getDoc().body.getElementsByTagName("div");for(V=0;V<Q.length;V++){if(!C.hasClass(Q[V],"yui-wk-di!
 v")){C.addClass(Q[V],"yui-wk-p");}}A.stopEvent(X);}}}else{if(this.browser.webkit){U=this._getSelectedElement();if(!this._hasParent(U,"li")){this.execCommand("inserthtml",'<var id="yui-br"></var>');var L=this._getDoc().getElementById("yui-br"),Y=this._getDoc().createElement("br"),J=this._getDoc().createElement("span");L.parentNode.replaceChild(Y,L);J.className="yui-non";J.innerHTML=" ";C.insertAfter(J,Y);this._selectNode(J);A.stopEvent(X);}}if(this.browser.ie){E=this._getRange();U=this._getSelectedElement();if(!this._isElement(U,"li")){if(E){E.pasteHTML("<br>");E.collapse(false);E.select();}A.stopEvent(X);}}}break;}if(this.browser.ie){this._listFix(X);}if(N&&S){this.execCommand(S,P);A.stopEvent(X);this.nodeChange();}this.fireEvent("editorKeyDown",{type:"editorKeyDown",target:this,ev:X});},_listFix:function(K){var M=null,I=null,E=false,G=null;if(this.browser.webkit){if(K.keyCode&&(K.keyCode==13)){if(this._hasParent(this._getSelectedElement(),"li")){var H=this._hasParent(!
 this._getSelectedElement(),"li");if(H.previousSibling){if(H.fi!
 rstChild
&&(H.firstChild.length==1)){this._selectNode(H);}}}}}if(K.keyCode&&((!this.browser.webkit3&&(K.keyCode==25))||((this.browser.webkit3||!this.browser.webkit)&&((K.keyCode==9)&&K.shiftKey)))){M=this._getSelectedElement();if(this._hasParent(M,"li")){M=this._hasParent(M,"li");if(this._hasParent(M,"ul")||this._hasParent(M,"ol")){I=this._hasParent(M,"ul");if(!I){I=this._hasParent(M,"ol");}if(this._isElement(I.previousSibling,"li")){I.removeChild(M);I.parentNode.insertBefore(M,I.nextSibling);if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(M);G.collapse(false);G.select();}if(this.browser.webkit){this._selectNode(M.firstChild);}A.stopEvent(K);}}}}if(K.keyCode&&((K.keyCode==9)&&(!K.shiftKey))){var F=this._getSelectedElement();if(this._hasParent(F,"li")){E=this._hasParent(F,"li").innerHTML;}if(this.browser.webkit){this._getDoc().execCommand("inserttext",false,"\t");}M=this._getSelectedElement();if(this._hasParent(M,"li")){I=this._hasParent(M,"li");var J=t!
 his._getDoc().createElement(I.parentNode.tagName.toLowerCase());if(this.browser.webkit){var L=C.getElementsByClassName("Apple-tab-span","span",I);if(L[0]){I.removeChild(L[0]);I.innerHTML=D.trim(I.innerHTML);if(E){I.innerHTML='<span class="yui-non">'+E+"</span> ";}else{I.innerHTML='<span class="yui-non"> </span> ';}}}else{if(E){I.innerHTML=E+" ";}else{I.innerHTML=" ";}}I.parentNode.replaceChild(J,I);J.appendChild(I);if(this.browser.webkit){this._getSelection().setBaseAndExtent(I.firstChild,1,I.firstChild,I.firstChild.innerText.length);if(!this.browser.webkit3){I.parentNode.parentNode.style.display="list-item";setTimeout(function(){I.parentNode.parentNode.style.display="block";},1);}}else{if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(I);G.collapse(false);G.select();}else{this._selectNode(I);}}A.stopEvent(K);}if(this.browser.webkit){A.stopEvent(K);}this.nodeChange();
+}},nodeChange:function(E){var F=this;this._storeUndo();if(this.get("nodeChangeDelay")){window.setTimeout(function(){F._nodeChange.apply(F,arguments);},0);}else{this._nodeChange();}},_nodeChange:function(F){var H=parseInt(this.get("nodeChangeThreshold"),10),O=Math.round(new Date().getTime()/1000),R=this;if(F===true){this._lastNodeChange=0;}if((this._lastNodeChange+H)<O){if(this._fixNodesTimer===null){this._fixNodesTimer=window.setTimeout(function(){R._fixNodes.call(R);R._fixNodesTimer=null;},0);}}this._lastNodeChange=O;if(this.currentEvent){try{this._lastNodeChangeEvent=this.currentEvent.type;}catch(a){}}var Z=this.fireEvent("beforeNodeChange",{type:"beforeNodeChange",target:this});if(Z===false){return false;}if(this.get("dompath")){window.setTimeout(function(){R._writeDomPath.call(R);},0);}if(!this.get("disabled")){if(this.STOP_NODE_CHANGE){this.STOP_NODE_CHANGE=false;return false;}else{var T=this._getSelection(),Q=this._getRange(),E=this._getSelectedElement(),M=this.toolba!
 r.getButtonByValue("fontname"),L=this.toolbar.getButtonByValue("fontsize"),J=this.toolbar.getButtonByValue("undo"),G=this.toolbar.getButtonByValue("redo");var N={};if(this._lastButton){N[this._lastButton.id]=true;}if(!this._isElement(E,"body")){if(M){N[M.get("id")]=true;}if(L){N[L.get("id")]=true;}}if(G){delete N[G.get("id")];}this.toolbar.resetAllButtons(N);for(var b=0;b<this._disabled.length;b++){var P=this.toolbar.getButtonByValue(this._disabled[b]);if(P&&P.get){if(this._lastButton&&(P.get("id")===this._lastButton.id)){}else{if(!this._hasSelection()&&!this.get("insert")){switch(this._disabled[b]){case"fontname":case"fontsize":break;default:this.toolbar.disableButton(P);}}else{if(!this._alwaysDisabled[this._disabled[b]]){this.toolbar.enableButton(P);}}if(!this._alwaysEnabled[this._disabled[b]]){this.toolbar.deselectButton(P);}}}}var S=this._getDomPath();var c=null,W=null;for(var X=0;X<S.length;X++){c=S[X].tagName.toLowerCase();if(S[X].getAttribute("tag")){c=S[X].getAttrib!
 ute("tag").toLowerCase();}W=this._tag2cmd[c];if(W===undefined)!
 {W=[];}i
f(!D.isArray(W)){W=[W];}if(S[X].style.fontWeight.toLowerCase()=="bold"){W[W.length]="bold";}if(S[X].style.fontStyle.toLowerCase()=="italic"){W[W.length]="italic";}if(S[X].style.textDecoration.toLowerCase()=="underline"){W[W.length]="underline";}if(S[X].style.textDecoration.toLowerCase()=="line-through"){W[W.length]="strikethrough";}if(W.length>0){for(var V=0;V<W.length;V++){this.toolbar.selectButton(W[V]);this.toolbar.enableButton(W[V]);}}switch(S[X].style.textAlign.toLowerCase()){case"left":case"right":case"center":case"justify":var U=S[X].style.textAlign.toLowerCase();if(S[X].style.textAlign.toLowerCase()=="justify"){U="full";}this.toolbar.selectButton("justify"+U);this.toolbar.enableButton("justify"+U);break;}}if(M){var Y=M._configs.label._initialConfig.value;M.set("label",'<span class="yui-toolbar-fontname-'+this._cleanClassName(Y)+'">'+Y+"</span>");this._updateMenuChecked("fontname",Y);}if(L){L.set("label",L._configs.label._initialConfig.value);}var K=this.toolbar.getBu!
 ttonByValue("heading");if(K){K.set("label",K._configs.label._initialConfig.value);this._updateMenuChecked("heading","none");}var I=this.toolbar.getButtonByValue("insertimage");if(I&&this.currentWindow&&(this.currentWindow.name=="insertimage")){this.toolbar.disableButton(I);}if(this._lastButton&&this._lastButton.isSelected){this.toolbar.deselectButton(this._lastButton.id);}this._undoNodeChange();}}this.fireEvent("afterNodeChange",{type:"afterNodeChange",target:this});},_updateMenuChecked:function(E,F,H){if(!H){H=this.toolbar;}var G=H.getButtonByValue(E);G.checkValue(F);},_handleToolbarClick:function(F){var H="";var I="";var G=F.button.value;if(F.button.menucmd){H=G;G=F.button.menucmd;}this._lastButton=F.button;if(this.STOP_EXEC_COMMAND){this.STOP_EXEC_COMMAND=false;return false;}else{this.execCommand(G,H);if(!this.browser.webkit){var E=this;setTimeout(function(){E.focus.call(E);},5);}}A.stopEvent(F);},_setupAfterElement:function(){if(!this.beforeElement){this.beforeElement=d!
 ocument.createElement("h2");this.beforeElement.className="yui-!
 editor-s
kipheader";this.beforeElement.tabIndex="-1";this.beforeElement.innerHTML=this.STR_BEFORE_EDITOR;this.get("element_cont").get("firstChild").insertBefore(this.beforeElement,this.toolbar.get("nextSibling"));}if(!this.afterElement){this.afterElement=document.createElement("h2");this.afterElement.className="yui-editor-skipheader";this.afterElement.tabIndex="-1";this.afterElement.innerHTML=this.STR_LEAVE_EDITOR;this.get("element_cont").get("firstChild").appendChild(this.afterElement);}},_disableEditor:function(F){if(F){this._removeEditorEvents();if(!this._mask){if(!!this.browser.ie){this._setDesignMode("off");}if(this.toolbar){this.toolbar.set("disabled",true);}this._mask=document.createElement("DIV");C.addClass(this._mask,"yui-editor-masked");this.get("iframe").get("parentNode").appendChild(this._mask);}}else{this._initEditorEvents();if(this._mask){this._mask.parentNode.removeChild(this._mask);this._mask=null;if(this.toolbar){this.toolbar.set("disabled",false);}this._setDesignMod!
 e("on");this.focus();var E=this;window.setTimeout(function(){E.nodeChange.call(E);},100);}}},SEP_DOMPATH:"<",STR_LEAVE_EDITOR:"You have left the Rich Text Editor.",STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Shift + Escape to place focus on the toolbar and navigate between options with your arrow keys. To exit this text editor use the Escape key and continue tabbing. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets text to italic</li> <li>Control Shift U underlines text</li> <li>Control Shift L adds an HTML link</li></ul>",STR_TITLE:"Rich Text Area.",STR_IMAGE_HERE:"Image URL Here",STR_IMAGE_URL:"Image URL",STR_LINK_URL:"Link URL",STOP_EXEC_COMMAND:false,STOP_NODE_CHANGE:false,CLASS_NOEDIT:"yui-noedit",CLASS_CONTAINER:"yui-editor-container",CLASS_EDITABLE:"yui-editor-editable",CLASS_EDITABLE_CONT:"yui-editor-e!
 ditable-container",CLASS_PREFIX:"yui-editor",browser:function(!
 ){var E=
YAHOO.env.ua;
+if(E.webkit>=420){E.webkit3=E.webkit;}else{E.webkit3=0;}E.mac=false;if(navigator.userAgent.indexOf("Macintosh")!==-1){E.mac=true;}return E;}(),init:function(F,E){if(!this._defaultToolbar){this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:false,buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"push",label:"Strike Through",value:"strikethrough"},{type:"s!
 eparator"},{type:"color",label:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Background Color",value:"backcolor",disabled:true}]},{type:"separator"},{group:"indentlist",label:"Lists",buttons:[{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};}YAHOO.widget.SimpleEditor.superclass.init.call(this,F,E);YAHOO.widget.EditorInfo._instances[this.get("id")]=this;this.currentElement=[];this.on("contentReady",function(){this.DOMReady=true;this.fireQueue();},this,true);},initAttributes:function(E){YAHOO.widget.SimpleEditor.superclass.initAttributes.call(this,E);var F=this;this.setAttributeConfig("nodeChangeDelay",{value:((E.nodeChangeDelay===false)?false:true)});t!
 his.setAttributeConfig("maxUndo",{writeOnce:true,value:E.maxUn!
 do||30})
;this.setAttributeConfig("ptags",{writeOnce:true,value:E.ptags||false});this.setAttributeConfig("insert",{writeOnce:true,value:E.insert||false,method:function(K){if(K){var J={fontname:true,fontsize:true,forecolor:true,backcolor:true};var I=this._defaultToolbar.buttons;for(var H=0;H<I.length;H++){if(I[H].buttons){for(var G=0;G<I[H].buttons.length;G++){if(I[H].buttons[G].value){if(J[I[H].buttons[G].value]){delete I[H].buttons[G].disabled;}}}}}}}});this.setAttributeConfig("container",{writeOnce:true,value:E.container||false});this.setAttributeConfig("plainText",{writeOnce:true,value:E.plainText||false});this.setAttributeConfig("iframe",{value:null});this.setAttributeConfig("textarea",{value:null,writeOnce:true});this.setAttributeConfig("nodeChangeThreshold",{value:E.nodeChangeThreshold||3,validator:YAHOO.lang.isNumber});this.setAttributeConfig("allowNoEdit",{value:E.allowNoEdit||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("limitCommands",{value:E.limitCommand!
 s||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("element_cont",{value:E.element_cont});this.setAttributeConfig("editor_wrapper",{value:E.editor_wrapper||null,writeOnce:true});this.setAttributeConfig("height",{value:E.height||C.getStyle(F.get("element"),"height"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("iframe").get("parentNode"),{height:{to:parseInt(G,10)}},0.5);H.animate();}else{C.setStyle(this.get("iframe").get("parentNode"),"height",G);}}}});this.setAttributeConfig("autoHeight",{value:E.autoHeight||false,method:function(G){if(G){if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","no");}this.on("afterNodeChange",this._handleAutoHeight,this,true);this.on("editorKeyDown",this._handleAutoHeight,this,true);this.on("editorKeyPress",this._handleAutoHeight,this,true);}else{if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","auto");}this.unsubsc!
 ribe("afterNodeChange",this._handleAutoHeight);this.unsubscrib!
 e("edito
rKeyDown",this._handleAutoHeight);this.unsubscribe("editorKeyPress",this._handleAutoHeight);}}});this.setAttributeConfig("width",{value:E.width||C.getStyle(this.get("element"),"width"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("element_cont").get("element"),{width:{to:parseInt(G,10)}},0.5);H.animate();}else{this.get("element_cont").setStyle("width",G);}}}});this.setAttributeConfig("blankimage",{value:E.blankimage||this._getBlankImage()});this.setAttributeConfig("css",{value:E.css||this._defaultCSS,writeOnce:true});this.setAttributeConfig("html",{value:E.html||'<html><head><title>{TITLE}</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><base href="'+this._baseHREF+'"><style>{CSS}</style><style>{HIDDEN_CSS}</style><style>{EXTRA_CSS}</style></head><body onload="document.body._rteLoaded = true;">{CONTENT}</body></html>',writeOnce:true});this.setAttributeConfig("extracss",{value:E.extracss||"",write!
 Once:true});this.setAttributeConfig("handleSubmit",{value:E.handleSubmit||false,method:function(G){if(this.get("element").form){if(!this._formButtons){this._formButtons=[];}if(G){A.on(this.get("element").form,"submit",this._handleFormSubmit,this,true);var H=this.get("element").form.getElementsByTagName("input");for(var J=0;J<H.length;J++){var I=H[J].getAttribute("type");if(I&&(I.toLowerCase()=="submit")){A.on(H[J],"click",this._handleFormButtonClick,this,true);this._formButtons[this._formButtons.length]=H[J];}}}else{A.removeListener(this.get("element").form,"submit",this._handleFormSubmit);if(this._formButtons){A.removeListener(this._formButtons,"click",this._handleFormButtonClick);}}}}});this.setAttributeConfig("disabled",{value:false,method:function(G){if(this._rendered){this._disableEditor(G);}}});this.setAttributeConfig("saveEl",{value:this.get("element")});this.setAttributeConfig("toolbar_cont",{value:null,writeOnce:true});
+this.setAttributeConfig("toolbar",{value:E.toolbar||this._defaultToolbar,writeOnce:true,method:function(G){if(!G.buttonType){G.buttonType=this._defaultToolbar.buttonType;}this._defaultToolbar=G;}});this.setAttributeConfig("animate",{value:((E.animate)?((YAHOO.util.Anim)?true:false):false),validator:function(H){var G=true;if(!YAHOO.util.Anim){G=false;}return G;}});this.setAttributeConfig("panel",{value:null,writeOnce:true,validator:function(H){var G=true;if(!YAHOO.widget.Overlay){G=false;}return G;}});this.setAttributeConfig("focusAtStart",{value:E.focusAtStart||false,writeOnce:true,method:function(G){if(G){this.on("editorContentLoaded",function(){var H=this;setTimeout(function(){H.focus.call(H);H.editorDirty=false;},400);},this,true);}}});this.setAttributeConfig("dompath",{value:E.dompath||false,method:function(G){if(G&&!this.dompath){this.dompath=document.createElement("DIV");this.dompath.id=this.get("id")+"_dompath";C.addClass(this.dompath,"dompath");this.get("element_con!
 t").get("firstChild").appendChild(this.dompath);if(this.get("iframe")){this._writeDomPath();}}else{if(!G&&this.dompath){this.dompath.parentNode.removeChild(this.dompath);this.dompath=null;}}}});this.setAttributeConfig("markup",{value:E.markup||"semantic",validator:function(G){switch(G.toLowerCase()){case"semantic":case"css":case"default":case"xhtml":return true;}return false;}});this.setAttributeConfig("removeLineBreaks",{value:E.removeLineBreaks||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("drag",{writeOnce:true,value:E.drag||false});this.setAttributeConfig("resize",{writeOnce:true,value:E.resize||false});this.setAttributeConfig("filterWord",{value:E.filterWord||false,validator:YAHOO.lang.isBoolean});},_getBlankImage:function(){if(!this.DOMReady){this._queue[this._queue.length]=["_getBlankImage",arguments];return"";}var E="";if(!this._blankImageLoaded){if(YAHOO.widget.EditorInfo.blankImage){this.set("blankimage",YAHOO.widget.EditorInfo.blankImage);this._!
 blankImageLoaded=true;}else{var F=document.createElement("div"!
 );F.styl
e.position="absolute";F.style.top="-9999px";F.style.left="-9999px";F.className=this.CLASS_PREFIX+"-blankimage";document.body.appendChild(F);E=YAHOO.util.Dom.getStyle(F,"background-image");E=E.replace("url(","").replace(")","").replace(/"/g,"");E=E.replace("app:/","");this.set("blankimage",E);this._blankImageLoaded=true;F.parentNode.removeChild(F);YAHOO.widget.EditorInfo.blankImage=E;}}else{E=this.get("blankimage");}return E;},_handleAutoHeight:function(){var J=this._getDoc(),F=J.body,K=J.documentElement;var E=parseInt(C.getStyle(this.get("editor_wrapper"),"height"),10);var G=F.scrollHeight;if(this.browser.webkit){G=K.scrollHeight;}if(G<parseInt(this.get("height"),10)){G=parseInt(this.get("height"),10);}if((E!=G)&&(G>=parseInt(this.get("height"),10))){var I=this.get("animate");this.set("animate",false);this.set("height",G+"px");this.set("animate",I);if(this.browser.ie){this.get("iframe").setStyle("height","99%");this.get("iframe").setStyle("zoom","1");var H=this;window.setTim!
 eout(function(){H.get("iframe").setStyle("height","100%");},1);}}},_formButtons:null,_formButtonClicked:null,_handleFormButtonClick:function(F){var E=A.getTarget(F);this._formButtonClicked=E;},_handleFormSubmit:function(H){this.saveHTML();var G=this.get("element").form,E=this._formButtonClicked||false;A.removeListener(G,"submit",this._handleFormSubmit);if(YAHOO.env.ua.ie){if(E&&!E.disabled){E.click();}}else{if(E&&!E.disabled){E.click();}var F=document.createEvent("HTMLEvents");F.initEvent("submit",true,true);G.dispatchEvent(F);if(YAHOO.env.ua.webkit){if(YAHOO.lang.isFunction(G.submit)){G.submit();}}}},_handleFontSize:function(G){var E=this.toolbar.getButtonById(G.button.id);var F=E.get("label")+"px";this.execCommand("fontsize",F);return false;},_handleColorPicker:function(G){var F=G.button;var E="#"+G.color;if((F=="forecolor")||(F=="backcolor")){this.execCommand(F,E);}},_handleAlign:function(H){var G=null;for(var E=0;E<H.button.menu.length;E++){if(H.button.menu[E].value==H.!
 button.value){G=H.button.menu[E].value;}}var F=this._getSelect!
 ion();th
is.execCommand(G,F);return false;},_handleAfterNodeChange:function(){var Q=this._getDomPath(),L=null,H=null,M=null,F=false,J=this.toolbar.getButtonByValue("fontname"),K=this.toolbar.getButtonByValue("fontsize"),E=this.toolbar.getButtonByValue("heading");for(var G=0;G<Q.length;G++){L=Q[G];var P=L.tagName.toLowerCase();if(L.getAttribute("tag")){P=L.getAttribute("tag");}H=L.getAttribute("face");if(C.getStyle(L,"font-family")){H=C.getStyle(L,"font-family");H=H.replace(/'/g,"");}if(P.substring(0,1)=="h"){if(E){for(var I=0;I<E._configs.menu.value.length;I++){if(E._configs.menu.value[I].value.toLowerCase()==P){E.set("label",E._configs.menu.value[I].text);}}this._updateMenuChecked("heading",P);}}}if(J){for(var O=0;O<J._configs.menu.value.length;O++){if(H&&J._configs.menu.value[O].text.toLowerCase()==H.toLowerCase()){F=true;H=J._configs.menu.value[O].text;}}if(!F){H=J._configs.label._initialConfig.value;}var N='<span class="yui-toolbar-fontname-'+this._cleanClassName(H)+'">'+H+"</spa!
 n>";if(J.get("label")!=N){J.set("label",N);this._updateMenuChecked("fontname",H);}}if(K){M=parseInt(C.getStyle(L,"fontSize"),10);if((M===null)||isNaN(M)){M=K._configs.label._initialConfig.value;}K.set("label",""+M);}if(!this._isElement(L,"body")&&!this._isElement(L,"img")){this.toolbar.enableButton(J);this.toolbar.enableButton(K);this.toolbar.enableButton("forecolor");this.toolbar.enableButton("backcolor");}if(this._isElement(L,"img")){if(YAHOO.widget.Overlay){this.toolbar.enableButton("createlink");}}if(this._hasParent(L,"blockquote")){this.toolbar.selectButton("indent");this.toolbar.disableButton("indent");this.toolbar.enableButton("outdent");}if(this._hasParent(L,"ol")||this._hasParent(L,"ul")){this.toolbar.disableButton("indent");}this._lastButton=null;},_handleInsertImageClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.toolbar.set("disabled",true);
+var E=function(){var F=this.currentElement[0],H="http://";if(!F){F=this._getSelectedElement();}if(F){if(F.getAttribute("src")){H=F.getAttribute("src",2);if(H.indexOf(this.get("blankimage"))!=-1){H=this.STR_IMAGE_HERE;}}}var G=prompt(this.STR_IMAGE_URL+": ",H);if((G!=="")&&(G!==null)){F.setAttribute("src",G);}else{if(G===""){F.parentNode.removeChild(F);this.currentElement=[];this.nodeChange();}else{if((G===null)){H=F.getAttribute("src",2);if(H.indexOf(this.get("blankimage"))!=-1){F.parentNode.removeChild(F);this.currentElement=[];this.nodeChange();}}}}this.closeWindow();this.toolbar.set("disabled",false);this.unsubscribe("afterExecCommand",E,this,true);};this.on("afterExecCommand",E,this,true);},_handleInsertImageWindowClose:function(){this.nodeChange();},_isLocalFile:function(E){if((E)&&(E!=="")&&((E.indexOf("file:/")!=-1)||(E.indexOf(":\\")!=-1))){return true;}return false;},_handleCreateLinkClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("!
 createlink")){return false;}}this.toolbar.set("disabled",true);var E=function(){var H=this.currentElement[0],G="";if(H){if(H.getAttribute("href",2)!==null){G=H.getAttribute("href",2);}}var J=prompt(this.STR_LINK_URL+": ",G);if((J!=="")&&(J!==null)){var I=J;if((I.indexOf(":/"+"/")==-1)&&(I.substring(0,1)!="/")&&(I.substring(0,6).toLowerCase()!="mailto")){if((I.indexOf("@")!=-1)&&(I.substring(0,6).toLowerCase()!="mailto")){I="mailto:"+I;}else{if(I.substring(0,1)!="#"){}}}H.setAttribute("href",I);}else{if(J!==null){var F=this._getDoc().createElement("span");F.innerHTML=H.innerHTML;C.addClass(F,"yui-non");H.parentNode.replaceChild(F,H);}}this.closeWindow();this.toolbar.set("disabled",false);this.unsubscribe("afterExecCommand",E,this,true);};this.on("afterExecCommand",E,this);},_handleCreateLinkWindowClose:function(){this.nodeChange();this.currentElement=[];},render:function(){if(this._rendered){return false;}if(!this.DOMReady){this._queue[this._queue.length]=["render",arguments!
 ];return false;}if(this.get("element")){if(this.get("element")!
 .tagName
){this._textarea=true;if(this.get("element").tagName.toLowerCase()!=="textarea"){this._textarea=false;}}else{return false;}}else{return false;}this._rendered=true;var E=this;window.setTimeout(function(){E._render.call(E);},4);},_render:function(){var E=this;this.set("textarea",this.get("element"));this.get("element_cont").setStyle("display","none");this.get("element_cont").addClass(this.CLASS_CONTAINER);this.set("iframe",this._createIframe());window.setTimeout(function(){E._setInitialContent.call(E);},10);this.get("editor_wrapper").appendChild(this.get("iframe").get("element"));if(this.get("disabled")){this._disableEditor(true);}var F=this.get("toolbar");if(F instanceof B){this.toolbar=F;this.toolbar.set("disabled",true);}else{F.disabled=true;this.toolbar=new B(this.get("toolbar_cont"),F);}this.fireEvent("toolbarLoaded",{type:"toolbarLoaded",target:this.toolbar});this.toolbar.on("toolbarCollapsed",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar!
 .on("toolbarExpanded",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("fontsizeClick",this._handleFontSize,this,true);this.toolbar.on("colorPickerClicked",function(G){this._handleColorPicker(G);return false;},this,true);this.toolbar.on("alignClick",this._handleAlign,this,true);this.on("afterNodeChange",this._handleAfterNodeChange,this,true);this.toolbar.on("insertimageClick",this._handleInsertImageClick,this,true);this.on("windowinsertimageClose",this._handleInsertImageWindowClose,this,true);this.toolbar.on("createlinkClick",this._handleCreateLinkClick,this,true);this.on("windowcreatelinkClose",this._handleCreateLinkWindowClose,this,true);this.get("parentNode").replaceChild(this.get("element_cont").get("element"),this.get("element"));this.setStyle("visibility","hidden");this.setStyle("position","absolute");this.setStyle("top","-9999px");this.setStyle("left","-9999px");this.get("element_cont").appendChild(this.get("element"));this.get("eleme!
 nt_cont").setStyle("display","block");C.addClass(this.get("ifr!
 ame").ge
t("parentNode"),this.CLASS_EDITABLE_CONT);this.get("iframe").addClass(this.CLASS_EDITABLE);this.get("element_cont").setStyle("width",this.get("width"));C.setStyle(this.get("iframe").get("parentNode"),"height",this.get("height"));this.get("iframe").setStyle("width","100%");this.get("iframe").setStyle("height","100%");this._setupDD();window.setTimeout(function(){E._setupAfterElement.call(E);},0);this.fireEvent("afterRender",{type:"afterRender",target:this});},execCommand:function(G,F){var J=this.fireEvent("beforeExecCommand",{type:"beforeExecCommand",target:this,args:arguments});if((J===false)||(this.STOP_EXEC_COMMAND)){this.STOP_EXEC_COMMAND=false;return false;}this._lastCommand=G;this._setMarkupType(G);if(this.browser.ie){this._getWindow().focus();}var E=true;if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue(G)){E=false;}}this.editorDirty=true;if((typeof this["cmd_"+G.toLowerCase()]=="function")&&E){var I=this["cmd_"+G.toLowerCase()](F);E=I[0];if(I[1]){G=I[1];}!
 if(I[2]){F=I[2];}}if(E){try{this._getDoc().execCommand(G,false,F);}catch(H){}}else{}this.on("afterExecCommand",function(){this.unsubscribeAll("afterExecCommand");this.nodeChange();},this,true);this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});},cmd_bold:function(H){if(!this.browser.webkit){var G=this._getSelectedElement();if(G&&this._isElement(G,"span")&&this._hasSelection()){if(G.style.fontWeight=="bold"){G.style.fontWeight="";var E=this._getDoc().createElement("b"),F=G.parentNode;F.replaceChild(E,G);E.appendChild(G);}}}return[true];},cmd_italic:function(H){if(!this.browser.webkit){var G=this._getSelectedElement();if(G&&this._isElement(G,"span")&&this._hasSelection()){if(G.style.fontStyle=="italic"){G.style.fontStyle="";var E=this._getDoc().createElement("i"),F=G.parentNode;F.replaceChild(E,G);E.appendChild(G);}}}return[true];},cmd_underline:function(F){if(!this.browser.webkit){var E=this._getSelectedElement();
+if(E&&this._isElement(E,"span")){if(E.style.textDecoration=="underline"){E.style.textDecoration="none";}else{E.style.textDecoration="underline";}return[false];}}return[true];},cmd_backcolor:function(H){var E=true,F=this._getSelectedElement(),G="backcolor";if(this.browser.gecko||this.browser.opera){this._setEditorStyle(true);G="hilitecolor";}if(!this._isElement(F,"body")&&!this._hasSelection()){F.style.backgroundColor=H;this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({backgroundColor:H});}else{this._createCurrentElement("span",{backgroundColor:H,color:F.style.color,fontSize:F.style.fontSize,fontFamily:F.style.fontFamily});this._selectNode(this.currentElement[0]);}E=false;}return[E,G];},cmd_forecolor:function(G){var E=true,F=this._getSelectedElement();if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({color:G});}else{this._creat!
 eCurrentElement("span",{color:G,fontSize:F.style.fontSize,fontFamily:F.style.fontFamily,backgroundColor:F.style.backgroundColor});this._selectNode(this.currentElement[0]);}E=false;}return[E];},cmd_unlink:function(E){this._swapEl(this.currentElement[0],"span",function(F){F.className="yui-non";});return[false];},cmd_createlink:function(G){var F=this._getSelectedElement(),E=null;if(this._hasParent(F,"a")){this.currentElement[0]=this._hasParent(F,"a");}else{if(this._isElement(F,"li")){E=this._getDoc().createElement("a");E.innerHTML=F.innerHTML;F.innerHTML="";F.appendChild(E);this.currentElement[0]=E;}else{if(!this._isElement(F,"a")){this._createCurrentElement("a");E=this._swapEl(this.currentElement[0],"a");this.currentElement[0]=E;}else{this.currentElement[0]=F;}}}return[false];},cmd_insertimage:function(J){var E=true,F=null,I="insertimage",H=this._getSelectedElement();if(J===""){J=this.get("blankimage");}if(this._isElement(H,"img")){this.currentElement[0]=H;E=false;}else{if(th!
 is._getDoc().queryCommandEnabled(I)){this._getDoc().execComman!
 d("inser
timage",false,J);var K=this._getDoc().getElementsByTagName("img");for(var G=0;G<K.length;G++){if(!YAHOO.util.Dom.hasClass(K[G],"yui-img")){YAHOO.util.Dom.addClass(K[G],"yui-img");this.currentElement[0]=K[G];}}E=false;}else{if(H==this._getDoc().body){F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this._getDoc().body.appendChild(F);}else{this._createCurrentElement("img");F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);}this.currentElement[0]=F;E=false;}}return[E];},cmd_inserthtml:function(H){var E=true,G="inserthtml",F=null,I=null;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled(G)){this._createCurrentElement("img");F=this._getDoc().createElement("span");F.innerHTML=H;this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);E=false;}else{if(this.browser.ie){I=this._getRange();i!
 f(I.item){I.item(0).outerHTML=H;}else{I.pasteHTML(H);}E=false;}}return[E];},cmd_list:function(b){var T=true,X=null,M=0,G=null,S="",Z=this._getSelectedElement(),U="insertorderedlist";if(b=="ul"){U="insertunorderedlist";}if(this.browser.webkit){if(this._isElement(Z,"li")&&this._isElement(Z.parentNode,b)){G=Z.parentNode;X=this._getDoc().createElement("span");YAHOO.util.Dom.addClass(X,"yui-non");S="";var F=G.getElementsByTagName("li");for(M=0;M<F.length;M++){S+="<div>"+F[M].innerHTML+"</div>";}X.innerHTML=S;this.currentElement[0]=G;this.currentElement[0].parentNode.replaceChild(X,this.currentElement[0]);}else{this._createCurrentElement(b.toLowerCase());X=this._getDoc().createElement(b);for(M=0;M<this.currentElement.length;M++){var J=this._getDoc().createElement("li");J.innerHTML=this.currentElement[M].innerHTML+'<span class="yui-non"> </span> ';X.appendChild(J);if(M>0){this.currentElement[M].parentNode.removeChild(this.currentElement[M]);}}var R=X.firstChild.innerHTML!
 .split("<br>");if(R.length>0){X.innerHTML="";for(var W=0;W<R.l!
 ength;W+
+){var Y=this._getDoc().createElement("li");Y.innerHTML=R[W];X.appendChild(Y);}}this.currentElement[0].parentNode.replaceChild(X,this.currentElement[0]);this.currentElement[0]=X;var H=this.currentElement[0].firstChild;H=C.getElementsByClassName("yui-non","span",H)[0];this._getSelection().setBaseAndExtent(H,1,H,H.innerText.length);}T=false;}else{G=this._getSelectedElement();if(this._isElement(G,"li")&&this._isElement(G.parentNode,b)||(this.browser.ie&&this._isElement(this._getRange().parentElement,"li"))||(this.browser.ie&&this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){if(this.browser.ie){if((this.browser.ie&&this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){G=G.getElementsByTagName("li")[0];}S="";var I=G.parentNode.getElementsByTagName("li");for(var V=0;V<I.length;V++){S+=I[V].innerHTML+"<br>";}var a=this._getDoc().createElement("span");a.innerHTML=S;G.parentNode.parentNode.replaceChild(a,G.parentNode);}else{this.nodeChange();this._!
 getDoc().execCommand(U,"",G.parentNode);this.nodeChange();}T=false;}if(this.browser.opera){var Q=this;window.setTimeout(function(){var c=Q._getDoc().getElementsByTagName("li");for(var d=0;d<c.length;d++){if(c[d].innerHTML.toLowerCase()=="<br>"){c[d].parentNode.parentNode.removeChild(c[d].parentNode);}}},30);}if(this.browser.ie&&T){var K="";if(this._getRange().html){K="<li>"+this._getRange().html+"</li>";}else{var L=this._getRange().text.split("\n");if(L.length>1){K="";for(var P=0;P<L.length;P++){K+="<li>"+L[P]+"</li>";}}else{var O=this._getRange().text;if(O===""){K='<li id="new_list_item">'+O+"</li>";}else{K="<li>"+O+"</li>";}}}this._getRange().pasteHTML("<"+b+">"+K+"</"+b+">");var E=this._getDoc().getElementById("new_list_item");if(E){var N=this._getDoc().body.createTextRange();N.moveToElementText(E);N.collapse(false);N.select();E.id="";}T=false;}}return T;},cmd_insertorderedlist:function(E){return[this.cmd_list("ol")];
+},cmd_insertunorderedlist:function(E){return[this.cmd_list("ul")];},cmd_fontname:function(H){var E=true,G=this._getSelectedElement();this.currentFont=H;if(G&&G.tagName&&!this._hasSelection()&&!this._isElement(G,"body")&&!this.get("insert")){YAHOO.util.Dom.setStyle(G,"font-family",H);E=false;}else{if(this.get("insert")&&!this._hasSelection()){var F=this._createInsertElement({fontFamily:H});E=false;}}return[E];},cmd_fontsize:function(H){var E=null,G=true;E=this._getSelectedElement();if(this.browser.webkit){if(this.currentElement[0]){if(E==this.currentElement[0]){G=false;YAHOO.util.Dom.setStyle(E,"fontSize",H);this._selectNode(E);this.currentElement[0]=E;}}}if(G){if(!this._isElement(this._getSelectedElement(),"body")&&(!this._hasSelection())){E=this._getSelectedElement();YAHOO.util.Dom.setStyle(E,"fontSize",H);if(this.get("insert")&&this.browser.ie){var F=this._getRange();F.collapse(false);F.select();}else{this._selectNode(E);}}else{if(this.currentElement&&(this.currentElement!
 .length>0)&&(!this._hasSelection())&&(!this.get("insert"))){YAHOO.util.Dom.setStyle(this.currentElement,"fontSize",H);}else{if(this.get("insert")&&!this._hasSelection()){E=this._createInsertElement({fontSize:H});this.currentElement[0]=E;this._selectNode(this.currentElement[0]);}else{this._createCurrentElement("span",{"fontSize":H,fontFamily:E.style.fontFamily,color:E.style.color,backgroundColor:E.style.backgroundColor});this._selectNode(this.currentElement[0]);}}}}return[false];},_swapEl:function(F,E,H){var G=this._getDoc().createElement(E);if(F){G.innerHTML=F.innerHTML;}if(typeof H=="function"){H.call(this,G);}if(F){F.parentNode.replaceChild(G,F);}return G;},_createInsertElement:function(E){this._createCurrentElement("span",E);var F=this.currentElement[0];if(this.browser.webkit){F.innerHTML='<span class="yui-non"> </span>';F=F.firstChild;this._getSelection().setBaseAndExtent(F,1,F,F.innerText.length);}else{if(this.browser.ie||this.browser.opera){F.innerHTML=" ";}!
 }this.focus();this._selectNode(F,true);return F;},_createCurre!
 ntElemen
t:function(G,J){G=((G)?G:"a");var R=null,F=[],H=this._getDoc();if(this.currentFont){if(!J){J={};}J.fontFamily=this.currentFont;this.currentFont=null;}this.currentElement=[];var M=function(X,Z){var Y=null;X=((X)?X:"span");X=X.toLowerCase();switch(X){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":Y=H.createElement(X);break;default:Y=H.createElement(X);if(X==="span"){YAHOO.util.Dom.addClass(Y,"yui-tag-"+X);YAHOO.util.Dom.addClass(Y,"yui-tag");Y.setAttribute("tag",X);}for(var W in Z){if(YAHOO.lang.hasOwnProperty(Z,W)){Y.style[W]=Z[W];}}break;}return Y;};if(!this._hasSelection()){if(this._getDoc().queryCommandEnabled("insertimage")){this._getDoc().execCommand("insertimage",false,"yui-tmp-img");var L=this._getDoc().getElementsByTagName("img");for(var Q=0;Q<L.length;Q++){if(L[Q].getAttribute("src",2)=="yui-tmp-img"){F=M(G,J);L[Q].parentNode.replaceChild(F,L[Q]);this.currentElement[this.currentElement.length]=F;}}}else{if(this.currentEvent){R=YAHOO.util.Event.getTarget(this.c!
 urrentEvent);}else{R=this._getDoc().body;}}if(R){F=M(G,J);if(this._isElement(R,"body")||this._isElement(R,"html")){if(this._isElement(R,"html")){R=this._getDoc().body;}R.appendChild(F);}else{if(R.nextSibling){R.parentNode.insertBefore(F,R.nextSibling);}else{R.parentNode.appendChild(F);}}this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}}}else{this._setEditorStyle(true);this._getDoc().execCommand("fontname",false,"yui-tmp");var E=[],P,V=["font","span","i","b","u"];if(!this._isElement(this._getSelectedElement(),"body")){V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().tagName);V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().parentNode.tagName);}for(var K=0;K<V.length;K++){var I=this._getDoc().getElementsByTagName(V[K]);for(va!
 r U=0;U<I.length;U++){E[E.length]=I[U];}}for(var S=0;S<E.lengt!
 h;S++){i
f((YAHOO.util.Dom.getStyle(E[S],"font-family")=="yui-tmp")||(E[S].face&&(E[S].face=="yui-tmp"))){if(G!=="span"){F=M(G,J);}else{F=M(E[S].tagName,J);}F.innerHTML=E[S].innerHTML;if(this._isElement(E[S],"ol")||(this._isElement(E[S],"ul"))){var N=E[S].getElementsByTagName("li")[0];E[S].style.fontFamily="inherit";N.style.fontFamily="inherit";F.innerHTML=N.innerHTML;N.innerHTML="";N.appendChild(F);this.currentElement[this.currentElement.length]=F;}else{if(this._isElement(E[S],"li")){E[S].innerHTML="";E[S].appendChild(F);E[S].style.fontFamily="inherit";this.currentElement[this.currentElement.length]=F;}else{if(E[S].parentNode){E[S].parentNode.replaceChild(F,E[S]);this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}if(this.browser.ie&&J&&J.fontSize){this._getSelection().empty();}if(this.!
 browser.gecko){this._getSelection().collapseToStart();}}}}}}var T=this.currentElement.length;for(var O=0;O<T;O++){if((O+1)!=T){if(this.currentElement[O]&&this.currentElement[O].nextSibling){if(this._isElement(this.currentElement[O],"br")){this.currentElement[this.currentElement.length]=this.currentElement[O].nextSibling;}}}}}},saveHTML:function(){var F=this.cleanHTML();if(this._textarea){this.get("element").value=F;}else{this.get("element").innerHTML=F;}if(this.get("saveEl")!==this.get("element")){var E=this.get("saveEl");if(D.isString(E)){E=C.get(E);}if(E){if(E.tagName.toLowerCase()==="textarea"){E.value=F;}else{E.innerHTML=F;}}}return F;},setEditorHTML:function(F){var E=this._cleanIncomingHTML(F);this._getDoc().body.innerHTML=E;this.nodeChange();},getEditorHTML:function(){var E=this._getDoc().body;if(E===null){return null;}return this._getDoc().body.innerHTML;},show:function(){if(this.browser.gecko){this._setDesignMode("on");
+this.focus();}if(this.browser.webkit){var E=this;window.setTimeout(function(){E._setInitialContent.call(E);},10);}if(this.currentWindow){this.closeWindow();}this.get("iframe").setStyle("position","static");this.get("iframe").setStyle("left","");},hide:function(){if(this.currentWindow){this.closeWindow();}if(this._fixNodesTimer){clearTimeout(this._fixNodesTimer);this._fixNodesTimer=null;}if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);this._nodeChangeTimer=null;}this._lastNodeChange=0;this.get("iframe").setStyle("position","absolute");this.get("iframe").setStyle("left","-9999px");},_cleanIncomingHTML:function(E){E=E.replace(/<strong([^>]*)>/gi,"<b$1>");E=E.replace(/<\/strong>/gi,"</b>");E=E.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");E=E.replace(/<\/embed>/gi,"</YUI_EMBED>");E=E.replace(/<em([^>]*)>/gi,"<i$1>");E=E.replace(/<\/em>/gi,"</i>");E=E.replace(/_moz_dirty=""/gi,"");E=E.replace(/<YUI_EMBED([^>]*)>/gi,"<embed$1>");E=E.replace(/<\/YUI_EMBED>/gi,"</embed>!
 ");if(this.get("plainText")){E=E.replace(/\n/g,"<br>").replace(/\r/g,"<br>");E=E.replace(/  /gi,"  ");E=E.replace(/\t/gi,"    ");}E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/\r\n/g,"<YUI_LF>").replace(/\n/g,"<YUI_LF>").replace(/\r/g,"<YUI_LF>");E=E.replace(new RegExp("<bad([^>]*)>(.*?)</bad>","gi"),"");E=E.replace(/<YUI_LF>/g,"\n");return E;},cleanHTML:function(H){if(!H){H=this.getEditorHTML();}var F=this.get("markup");H=this.pre_filter_linebreaks(H,F);H=this.filter_msword(H);H=H.replace(/<img([^>]*)\/>/gi,"<YUI_IMG$1>");H=H.replace(/<img([^>]*)>/gi,"<YUI_IMG$1>");H=H.replace(/<input([^>]*)\/>/gi,"<YUI_INPUT$1>");H=H.replace(/<input([^>]*)>/gi,"<YUI_INPUT$1>");H=H.replace(/<ul([^>]*)>/gi,"<YUI_UL$1>");H=H.replace(/<\/ul>/gi,"</YUI_UL>");H=H.replace(/<blockquote([^>]*)>/gi,"<YUI_BQ$1>");H=H.replac!
 e(/<\/blockquote>/gi,"</YUI_BQ>");H=H.replace(/<embed([^>]*)>/!
 gi,"<YUI
_EMBED$1>");H=H.replace(/<\/embed>/gi,"</YUI_EMBED>");if((F=="semantic")||(F=="xhtml")){H=H.replace(/<i(\s+[^>]*)?>/gi,"<em$1>");H=H.replace(/<\/i>/gi,"</em>");H=H.replace(/<b(\s+[^>]*)?>/gi,"<strong$1>");H=H.replace(/<\/b>/gi,"</strong>");}H=H.replace(/_moz_dirty=""/gi,"");H=H.replace(/<strike/gi,'<span style="text-decoration: line-through;"');H=H.replace(/\/strike>/gi,"/span>");if(this.browser.ie){H=H.replace(/text-decoration/gi,"text-decoration");H=H.replace(/font-weight/gi,"font-weight");H=H.replace(/_width="([^>]*)"/gi,"");H=H.replace(/_height="([^>]*)"/gi,"");var G=this._baseHREF.replace(/\//gi,"\\/"),I=new RegExp('src="'+G,"gi");H=H.replace(I,'src="');}H=H.replace(/<font/gi,"<font");H=H.replace(/<\/font>/gi,"</font>");H=H.replace(/<span/gi,"<span");H=H.replace(/<\/span>/gi,"</span>");if((F=="semantic")||(F=="xhtml")||(F=="css")){H=H.replace(new RegExp('<font([^>]*)face="([^>]*)">(.*?)</font>',"gi"),'<span $1 style="font-family: $2;">$3</span>');H=H.replace(/<u/gi,'<sp!
 an style="text-decoration: underline;"');if(this.browser.webkit){H=H.replace(new RegExp('<span class="Apple-style-span" style="font-weight: bold;">([^>]*)</span>',"gi"),"<strong>$1</strong>");H=H.replace(new RegExp('<span class="Apple-style-span" style="font-style: italic;">([^>]*)</span>',"gi"),"<em>$1</em>");}H=H.replace(/\/u>/gi,"/span>");if(F=="css"){H=H.replace(/<em([^>]*)>/gi,"<i$1>");H=H.replace(/<\/em>/gi,"</i>");H=H.replace(/<strong([^>]*)>/gi,"<b$1>");H=H.replace(/<\/strong>/gi,"</b>");H=H.replace(/<b/gi,'<span style="font-weight: bold;"');H=H.replace(/\/b>/gi,"/span>");H=H.replace(/<i/gi,'<span style="font-style: italic;"');H=H.replace(/\/i>/gi,"/span>");}H=H.replace(/  /gi," ");}else{H=H.replace(/<u/gi,"<u");H=H.replace(/\/u>/gi,"/u>");}H=H.replace(/<ol([^>]*)>/gi,"<ol$1>");H=H.replace(/\/ol>/gi,"/ol>");H=H.replace(/<li/gi,"<li");H=H.replace(/\/li>/gi,"/li>");H=this.filter_safari(H);H=this.filter_internals(H);H=this.filter_all_rgb(H);H=this.post_filter_linebreak!
 s(H,F);if(F=="xhtml"){H=H.replace(/<YUI_IMG([^>]*)>/g,"<img $1!
  />");H=
H.replace(/<YUI_INPUT([^>]*)>/g,"<input $1 />");}else{H=H.replace(/<YUI_IMG([^>]*)>/g,"<img $1>");H=H.replace(/<YUI_INPUT([^>]*)>/g,"<input $1>");}H=H.replace(/<YUI_UL([^>]*)>/g,"<ul$1>");H=H.replace(/<\/YUI_UL>/g,"</ul>");H=this.filter_invalid_lists(H);H=H.replace(/<YUI_BQ([^>]*)>/g,"<blockquote$1>");H=H.replace(/<\/YUI_BQ>/g,"</blockquote>");H=H.replace(/<YUI_EMBED([^>]*)>/g,"<embed$1>");H=H.replace(/<\/YUI_EMBED>/g,"</embed>");H=H.replace(/ & /gi,"YUI_AMP");H=H.replace(/&/gi,"&");H=H.replace(/YUI_AMP/gi," & ");H=YAHOO.lang.trim(H);if(this.get("removeLineBreaks")){H=H.replace(/\n/g,"").replace(/\r/g,"");H=H.replace(/  /gi," ");}if(H.substring(0,6).toLowerCase()=="<span>"){H=H.substring(6);if(H.substring(H.length-7,H.length).toLowerCase()=="</span>"){H=H.substring(0,H.length-7);}}for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(D.isObject(E)&&E.keepContents){H=H.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"$1");}else!
 {H=H.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"");}}}this.fireEvent("cleanHTML",{type:"cleanHTML",target:this,html:H});return H;},filter_msword:function(E){if(!this.get("filterWord")){return E;}E=E.replace(/<o:p>\s*<\/o:p>/g,"");E=E.replace(/<o:p>[\s\S]*?<\/o:p>/g," ");E=E.replace(/<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi,"");E=E.replace(/\s*mso-[^:]+:[^;"]+;?/gi,"");E=E.replace(/\s*MARGIN: 0cm 0cm 0pt\s*;/gi,"");E=E.replace(/\s*MARGIN: 0cm 0cm 0pt\s*"/gi,'"');E=E.replace(/\s*TEXT-INDENT: 0cm\s*;/gi,"");E=E.replace(/\s*TEXT-INDENT: 0cm\s*"/gi,'"');E=E.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi,'"');E=E.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi,'"');E=E.replace(/\s*tab-stops:[^;"]*;?/gi,"");E=E.replace(/\s*tab-stops:[^"]*/gi,"");E=E.replace(/<\\?\?xml[^>]*>/gi,"");E=E.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");E=E.replace(/<(\w[^>]*) language=([^ |>]*)([^>]*)/gi,"<$1$3");E=E.replace(/<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi,"<$1$3");
+E=E.replace(/<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi,"<$1$3");return E;},filter_invalid_lists:function(E){E=E.replace(/<\/li>\n/gi,"</li>");E=E.replace(/<\/li><ol>/gi,"</li><li><ol>");E=E.replace(/<\/ol>/gi,"</ol></li>");E=E.replace(/<\/ol><\/li>\n/gi,"</ol>");E=E.replace(/<\/li><ul>/gi,"</li><li><ul>");E=E.replace(/<\/ul>/gi,"</ul></li>");E=E.replace(/<\/ul><\/li>\n?/gi,"</ul>");E=E.replace(/<\/li>/gi,"</li>");E=E.replace(/<\/ol>/gi,"</ol>");E=E.replace(/<ol>/gi,"<ol>");E=E.replace(/<ul>/gi,"<ul>");return E;},filter_safari:function(E){if(this.browser.webkit){E=E.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi,"    ");E=E.replace(/Apple-style-span/gi,"");E=E.replace(/style="line-height: normal;"/gi,"");E=E.replace(/yui-wk-div/gi,"");E=E.replace(/yui-wk-p/gi,"");E=E.replace(/<li><\/li>/gi,"");E=E.replace(/<li> <\/li>/gi,"");E=E.replace(/<li>  <\/li>/gi,"");if(this.get("ptags")){E=E.replace(/<div([^>]*)>/g,"<p$1>");E=E.re!
 place(/<\/div>/gi,"</p>");}else{E=E.replace(/<div>/gi,"<br>");E=E.replace(/<\/div>/gi,"");}}return E;},filter_internals:function(E){E=E.replace(/\r/g,"");E=E.replace(/<\/?(body|head|html)[^>]*>/gi,"");E=E.replace(/<YUI_BR><\/li>/gi,"</li>");E=E.replace(/yui-tag-span/gi,"");E=E.replace(/yui-tag/gi,"");E=E.replace(/yui-non/gi,"");E=E.replace(/yui-img/gi,"");E=E.replace(/ tag="span"/gi,"");E=E.replace(/ class=""/gi,"");E=E.replace(/ style=""/gi,"");E=E.replace(/ class=" "/gi,"");E=E.replace(/ class="  "/gi,"");E=E.replace(/ target=""/gi,"");E=E.replace(/ title=""/gi,"");if(this.browser.ie){E=E.replace(/ class= /gi,"");E=E.replace(/ class= >/gi,"");}return E;},filter_all_rgb:function(I){var H=new RegExp("rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)","gi");var E=I.match(H);if(D.isArray(E)){for(var G=0;G<E.length;G++){var F=this.filter_rgb(E[G]);I=I.replace(E[G].toString(),F);}}return I;},filter_rgb:function(G){if(G.toLowerCase().indexOf("rgb")!=-1){var J=new !
 RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*!
 ?([0-9]+
).*?\\)(.*?)","gi");var F=G.replace(J,"$1,$2,$3,$4,$5").split(",");if(F.length==5){var I=parseInt(F[1],10).toString(16);var H=parseInt(F[2],10).toString(16);var E=parseInt(F[3],10).toString(16);I=I.length==1?"0"+I:I;H=H.length==1?"0"+H:H;E=E.length==1?"0"+E:E;G="#"+I+H+E;}}return G;},pre_filter_linebreaks:function(F,E){if(this.browser.webkit){F=F.replace(/<br class="khtml-block-placeholder">/gi,"<YUI_BR>");F=F.replace(/<br class="webkit-block-placeholder">/gi,"<YUI_BR>");}F=F.replace(/<br>/gi,"<YUI_BR>");F=F.replace(/<br (.*?)>/gi,"<YUI_BR>");F=F.replace(/<br\/>/gi,"<YUI_BR>");F=F.replace(/<br \/>/gi,"<YUI_BR>");F=F.replace(/<div><YUI_BR><\/div>/gi,"<YUI_BR>");F=F.replace(/<p>( | )<\/p>/g,"<YUI_BR>");F=F.replace(/<p><br> <\/p>/gi,"<YUI_BR>");F=F.replace(/<p> <\/p>/gi,"<YUI_BR>");F=F.replace(/<YUI_BR>$/,"");F=F.replace(/<YUI_BR><\/p>/g,"</p>");if(this.browser.ie){F=F.replace(/    /g,"\t");}return F;},post_filter_linebreaks:function(F,E)!
 {if(E=="xhtml"){F=F.replace(/<YUI_BR>/g,"<br />");}else{F=F.replace(/<YUI_BR>/g,"<br>");}return F;},clearEditorDoc:function(){this._getDoc().body.innerHTML=" ";},openWindow:function(E){},moveWindow:function(){},_closeWindow:function(){},closeWindow:function(){this.toolbar.resetAllButtons();this.focus();},destroy:function(){if(this.resize){this.resize.destroy();}if(this.dd){this.dd.unreg();}if(this.get("panel")){this.get("panel").destroy();}this.saveHTML();this.toolbar.destroy();this.setStyle("visibility","visible");this.setStyle("position","static");this.setStyle("top","");this.setStyle("left","");var E=this.get("element");this.get("element_cont").get("parentNode").replaceChild(E,this.get("element_cont").get("element"));this.get("element_cont").get("element").innerHTML="";this.set("handleSubmit",false);return true;},toString:function(){var E="SimpleEditor";if(this.get&&this.get("element_cont")){E="SimpleEditor (#"+this.get("element_cont").get("id")+")"+((this.get("disa!
 bled")?" Disabled":""));}return E;}});YAHOO.widget.EditorInfo=!
 {_instan
ces:{},blankImage:"",window:{},panel:null,getEditorById:function(E){if(!YAHOO.lang.isString(E)){E=E.id;}if(this._instances[E]){return this._instances[E];}return false;},toString:function(){var E=0;for(var F in this._instances){if(D.hasOwnProperty(this._instances,F)){E++;}}return"Editor Info ("+E+" registered intance"+((E>1)?"s":"")+")";}};})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.Editor=function(F,E){YAHOO.widget.Editor.superclass.constructor.call(this,F,E);};YAHOO.extend(YAHOO.widget.Editor,YAHOO.widget.SimpleEditor,{_undoCache:null,_undoLevel:null,_hasUndoLevel:function(){return((this._undoCache.length>1)&&this._undoLevel);},_undoNodeChange:function(){var E=this.toolbar.getButtonByValue("undo"),F=this.toolbar.getButtonByValue("redo");if(E&&F){if(this._hasUndoLevel()){this.toolbar.enableButton(E);}if(this._undoLevel<this._undoCache.length){this.toolbar.enableButton(F);}}this._lastCommand=null;},_checkUndo:funct!
 ion(){var E=this._undoCache.length,G=[];if(E>=this.get("maxUndo")){for(var F=(E-this.get("maxUndo"));F<E;F++){G.push(this._undoCache[F]);}this._undoCache=G;}},_putUndo:function(E){this._undoCache.push(E);},_getUndo:function(E){return this._undoCache[E];},_storeUndo:function(){if(this._lastCommand==="undo"||this._lastCommand==="redo"){return false;}if(!this._undoCache){this._undoCache=[];}this._checkUndo();var F=this.getEditorHTML();var E=this._undoCache[this._undoCache.length-1];if(E){if(F!==E){this._putUndo(F);}}else{this._putUndo(F);}this._undoLevel=this._undoCache.length;this._undoNodeChange();},STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Control + Shift + T to place focus on the toolbar and navigate between option heading names. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets text to italic</li> <li>Contr!
 ol Shift U underlines text</li> <li>Control Shift [ aligns tex!
 t left</
li> <li>Control Shift | centers text</li> <li>Control Shift ] aligns text right</li> <li>Control Shift L adds an HTML link</li> <li>To exit this text editor use the keyboard shortcut Control + Shift + ESC.</li></ul>",STR_CLOSE_WINDOW:"Close Window",STR_CLOSE_WINDOW_NOTE:"To close this window use the Control + Shift + W key",STR_IMAGE_PROP_TITLE:"Image Options",STR_IMAGE_TITLE:"Description",STR_IMAGE_SIZE:"Size",STR_IMAGE_ORIG_SIZE:"Original Size",STR_IMAGE_COPY:'<span class="tip"><span class="icon icon-info"></span><strong>Note:</strong>To move this image just highlight it, cut, and paste where ever you\'d like.</span>',STR_IMAGE_PADDING:"Padding",STR_IMAGE_BORDER:"Border",STR_IMAGE_BORDER_SIZE:"Border Size",STR_IMAGE_BORDER_TYPE:"Border Type",STR_IMAGE_TEXTFLOW:"Text Flow",STR_LOCAL_FILE_WARNING:'<span class="tip"><span class="icon icon-warn"></span><strong>Note:</strong>This image/link points to a file on your computer and will not be accessible to others on the internet.<!
 /span>',STR_LINK_PROP_TITLE:"Link Options",STR_LINK_PROP_REMOVE:"Remove link from text",STR_LINK_NEW_WINDOW:"Open in a new window.",STR_LINK_TITLE:"Description",STR_NONE:"none",CLASS_LOCAL_FILE:"warning-localfile",CLASS_HIDDEN:"yui-hidden",init:function(F,E){this._windows={};
+this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:false,buttonType:"advanced",buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"separator"},{type:"push",label:"Subscript",value:"subscript",disabled:true},{type:"push",label:"Superscript",value:"superscript",disabled:true}]},{type:"separator"},{group:"textstyle2",label:" ",buttons:[{type:"color",lab!
 el:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Background Color",value:"backcolor",disabled:true},{type:"separator"},{type:"push",label:"Remove Formatting",value:"removeformat",disabled:true},{type:"push",label:"Show/Hide Hidden Elements",value:"hiddenelements"}]},{type:"separator"},{group:"undoredo",label:"Undo/Redo",buttons:[{type:"push",label:"Undo",value:"undo",disabled:true},{type:"push",label:"Redo",value:"redo",disabled:true}]},{type:"separator"},{group:"alignment",label:"Alignment",buttons:[{type:"push",label:"Align Left CTRL + SHIFT + [",value:"justifyleft"},{type:"push",label:"Align Center CTRL + SHIFT + |",value:"justifycenter"},{type:"push",label:"Align Right CTRL + SHIFT + ]",value:"justifyright"},{type:"push",label:"Justify",value:"justifyfull"}]},{type:"separator"},{group:"parastyle",label:"Paragraph Style",buttons:[{type:"select",label:"Normal",value:"heading",disabled:true,menu:[{text:"Normal",value:"none",checked:true},{text:"Header !
 1",value:"h1"},{text:"Header 2",value:"h2"},{text:"Header 3",v!
 alue:"h3
"},{text:"Header 4",value:"h4"},{text:"Header 5",value:"h5"},{text:"Header 6",value:"h6"}]}]},{type:"separator"},{group:"indentlist2",label:"Indenting and Lists",buttons:[{type:"push",label:"Indent",value:"indent",disabled:true},{type:"push",label:"Outdent",value:"outdent",disabled:true},{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};this._defaultImageToolbarConfig={buttonType:this._defaultToolbar.buttonType,buttons:[{group:"textflow",label:this.STR_IMAGE_TEXTFLOW+":",buttons:[{type:"push",label:"Left",value:"left"},{type:"push",label:"Inline",value:"inline"},{type:"push",label:"Block",value:"block"},{type:"push",label:"Right",value:"right"}]},{type:"separator"},{group:"!
 padding",label:this.STR_IMAGE_PADDING+":",buttons:[{type:"spin",label:"0",value:"padding",range:[0,50]}]},{type:"separator"},{group:"border",label:this.STR_IMAGE_BORDER+":",buttons:[{type:"select",label:this.STR_IMAGE_BORDER_SIZE,value:"bordersize",menu:[{text:"none",value:"0",checked:true},{text:"1px",value:"1"},{text:"2px",value:"2"},{text:"3px",value:"3"},{text:"4px",value:"4"},{text:"5px",value:"5"}]},{type:"select",label:this.STR_IMAGE_BORDER_TYPE,value:"bordertype",disabled:true,menu:[{text:"Solid",value:"solid",checked:true},{text:"Dashed",value:"dashed"},{text:"Dotted",value:"dotted"}]},{type:"color",label:"Border Color",value:"bordercolor",disabled:true}]}]};YAHOO.widget.Editor.superclass.init.call(this,F,E);},_render:function(){YAHOO.widget.Editor.superclass._render.apply(this,arguments);var E=this;window.setTimeout(function(){E._renderPanel.call(E);},800);},initAttributes:function(E){YAHOO.widget.Editor.superclass.initAttributes.call(this,E);this.setAttributeConf!
 ig("localFileWarning",{value:E.locaFileWarning||true});this.se!
 tAttribu
teConfig("hiddencss",{value:E.hiddencss||".yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u, .yui-hidden div,.yui-hidden p,.yui-hidden span,.yui-hidden img, .yui-hidden ul, .yui-hidden ol, .yui-hidden li, .yui-hidden table { border: 1px dotted #ccc; } .yui-hidden .yui-non { border: none; } .yui-hidden img { padding: 2px; }",writeOnce:true});},_windows:null,_defaultImageToolbar:null,_defaultImageToolbarConfig:null,_fixNodes:function(){YAHOO.widget.Editor.superclass._fixNodes.call(this);var H="";var I=this._getDoc().getElementsByTagName("img");for(var F=0;F<I.length;F++){if(I[F].getAttribute("href",2)){H=I[F].getAttribute("src",2);if(this._isLocalFile(H)){C.addClass(I[F],this.CLASS_LOCAL_FILE);}else{C.removeClass(I[F],this.CLASS_LOCAL_FILE);}}}var G=this._getDoc().body.getElementsByTagName("a");for(var E=0;E<G.length;E++){if(G[E].getAttribute("href",2)){H=G[E].getAttribute("href",2);if(this._isLocalFile(H)){C.addClass(G[E],this.C!
 LASS_LOCAL_FILE);}else{C.removeClass(G[E],this.CLASS_LOCAL_FILE);}}}},_disabled:["createlink","forecolor","backcolor","fontname","fontsize","superscript","subscript","removeformat","heading","indent"],_alwaysDisabled:{"outdent":true},_alwaysEnabled:{hiddenelements:true},_handleKeyDown:function(G){YAHOO.widget.Editor.superclass._handleKeyDown.call(this,G);var F=false,H=null,E=false;switch(G.keyCode){case this._keyMap.JUSTIFY_LEFT.key:if(this._checkKey(this._keyMap.JUSTIFY_LEFT,G)){H="justifyleft";F=true;}break;case this._keyMap.JUSTIFY_CENTER.key:if(this._checkKey(this._keyMap.JUSTIFY_CENTER,G)){H="justifycenter";F=true;}break;case 221:case this._keyMap.JUSTIFY_RIGHT.key:if(this._checkKey(this._keyMap.JUSTIFY_RIGHT,G)){H="justifyright";F=true;}break;}if(F&&H){this.execCommand(H,null);A.stopEvent(G);this.nodeChange();}},_renderCreateLinkWindow:function(){var H='<label for="'+this.get("id")+'_createlink_url"><strong>'+this.STR_LINK_URL+':</strong> <input type="text" name="'+th!
 is.get("id")+'_createlink_url" id="'+this.get("id")+'_createli!
 nk_url" 
value=""></label>';
+H+='<label for="'+this.get("id")+'_createlink_target"><strong> </strong><input type="checkbox" name="'+this.get("id")+'_createlink_target" id="'+this.get("id")+'_createlink_target" value="_blank" class="createlink_target"> '+this.STR_LINK_NEW_WINDOW+"</label>";H+='<label for="'+this.get("id")+'_createlink_title"><strong>'+this.STR_LINK_TITLE+':</strong> <input type="text" name="'+this.get("id")+'_createlink_title" id="'+this.get("id")+'_createlink_title" value=""></label>';var E=document.createElement("div");E.innerHTML=H;var G=document.createElement("div");G.className="removeLink";var F=document.createElement("a");F.href="#";F.innerHTML=this.STR_LINK_PROP_REMOVE;F.title=this.STR_LINK_PROP_REMOVE;A.on(F,"click",function(I){A.stopEvent(I);this.unsubscribeAll("afterExecCommand");this.execCommand("unlink");this.closeWindow();},this,true);G.appendChild(F);E.appendChild(G);this._windows.createlink={};this._windows.createlink.body=E;A.on(E,"keyup",function(I){A.stopPropagati!
 on(I);});this.get("panel").editor_form.appendChild(E);this.fireEvent("windowCreateLinkRender",{type:"windowCreateLinkRender",panel:this.get("panel"),body:E});return E;},_handleCreateLinkClick:function(){var E=this._getSelectedElement();if(this._isElement(E,"img")){this.STOP_EXEC_COMMAND=true;this.currentElement[0]=E;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});return false;}if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){return false;}}this.on("afterExecCommand",function(){var K=new YAHOO.widget.EditorWindow("createlink",{width:"350px"});var I=this.currentElement[0],H="",L="",J="",G=false;if(I){K.el=I;if(I.getAttribute("href",2)!==null){H=I.getAttribute("href",2);if(this._isLocalFile(H)){K.setFooter(this.STR_LOCAL_FILE_WARNING);G=true;}else{K.setFooter(" ");}}if(I.getAttribute("title")!==null){L=I.getAttribute("title");}if(I.get!
 Attribute("target")!==null){J=I.getAttribute("target");}}var F!
 =null;if
(this._windows.createlink&&this._windows.createlink.body){F=this._windows.createlink.body;}else{F=this._renderCreateLinkWindow();}K.setHeader(this.STR_LINK_PROP_TITLE);K.setBody(F);A.purgeElement(this.get("id")+"_createlink_url");C.get(this.get("id")+"_createlink_url").value=H;C.get(this.get("id")+"_createlink_title").value=L;C.get(this.get("id")+"_createlink_target").checked=((J)?true:false);A.onAvailable(this.get("id")+"_createlink_url",function(){var M=this.get("id");window.setTimeout(function(){try{YAHOO.util.Dom.get(M+"_createlink_url").focus();}catch(N){}},50);if(this._isLocalFile(H)){C.addClass(this.get("id")+"_createlink_url","warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(this.get("id")+"_createlink_url","warning");this.get("panel").setFooter(" ");}A.on(this.get("id")+"_createlink_url","blur",function(){var N=C.get(this.get("id")+"_createlink_url");if(this._isLocalFile(N.value)){C.addClass(N,"warning");this.get("panel").setFoo!
 ter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(N,"warning");this.get("panel").setFooter(" ");}},this,true);},this,true);this.openWindow(K);});},_handleCreateLinkWindowClose:function(){var G=C.get(this.get("id")+"_createlink_url"),I=C.get(this.get("id")+"_createlink_target"),K=C.get(this.get("id")+"_createlink_title"),H=arguments[0].win.el,E=H;if(G&&G.value){var J=G.value;if((J.indexOf(":/"+"/")==-1)&&(J.substring(0,1)!="/")&&(J.substring(0,6).toLowerCase()!="mailto")){if((J.indexOf("@")!=-1)&&(J.substring(0,6).toLowerCase()!="mailto")){J="mailto:"+J;}else{if(J.substring(0,1)!="#"){J="http:/"+"/"+J;}}}H.setAttribute("href",J);if(I.checked){H.setAttribute("target",I.value);}else{H.setAttribute("target","");}H.setAttribute("title",((K.value)?K.value:""));}else{var F=this._getDoc().createElement("span");F.innerHTML=H.innerHTML;C.addClass(F,"yui-non");H.parentNode.replaceChild(F,H);}C.removeClass(G,"warning");C.get(this.get("id")+"_createlink_url").value="";C.get(this.get(!
 "id")+"_createlink_title").value="";C.get(this.get("id")+"_cre!
 atelink_
target").checked=false;this.nodeChange();this.currentElement=[];},_renderInsertImageWindow:function(){var G=this.currentElement[0];var M='<label for="'+this.get("id")+'_insertimage_url"><strong>'+this.STR_IMAGE_URL+':</strong> <input type="text" id="'+this.get("id")+'_insertimage_url" value="" size="40"></label>';var K=document.createElement("div");K.innerHTML=M;var J=document.createElement("div");J.id=this.get("id")+"_img_toolbar";K.appendChild(J);var I='<label for="'+this.get("id")+'_insertimage_title"><strong>'+this.STR_IMAGE_TITLE+':</strong> <input type="text" id="'+this.get("id")+'_insertimage_title" value="" size="40"></label>';I+='<label for="'+this.get("id")+'_insertimage_link"><strong>'+this.STR_LINK_URL+':</strong> <input type="text" name="'+this.get("id")+'_insertimage_link" id="'+this.get("id")+'_insertimage_link" value=""></label>';I+='<label for="'+this.get("id")+'_insertimage_target"><strong> </strong><input type="checkbox" name="'+this.get("id")+'_inser!
 timage_target_" id="'+this.get("id")+'_insertimage_target" value="_blank" class="insertimage_target"> '+this.STR_LINK_NEW_WINDOW+"</label>";var E=document.createElement("div");E.innerHTML=I;K.appendChild(E);var F={};D.augmentObject(F,this._defaultImageToolbarConfig);var H=new YAHOO.widget.Toolbar(J,F);H.editor_el=G;this._defaultImageToolbar=H;var N=H.get("cont");var L=document.createElement("div");L.className="yui-toolbar-group yui-toolbar-group-height-width height-width";L.innerHTML="<h3>"+this.STR_IMAGE_SIZE+":</h3>";L.innerHTML+='<span tabIndex="-1"><input type="text" size="3" value="" id="'+this.get("id")+'_insertimage_width"> x <input type="text" size="3" value="" id="'+this.get("id")+'_insertimage_height"></span>';N.insertBefore(L,N.firstChild);A.onAvailable(this.get("id")+"_insertimage_width",function(){A.on(this.get("id")+"_insertimage_width","blur",function(){var O=parseInt(C.get(this.get("id")+"_insertimage_width").value,10);
+if(O>5){this._defaultImageToolbar.editor_el.style.width=O+"px";}},this,true);},this,true);A.onAvailable(this.get("id")+"_insertimage_height",function(){A.on(this.get("id")+"_insertimage_height","blur",function(){var O=parseInt(C.get(this.get("id")+"_insertimage_height").value,10);if(O>5){this._defaultImageToolbar.editor_el.style.height=O+"px";}},this,true);},this,true);H.on("colorPickerClicked",function(T){var P="1",S="solid",O="black",R=this._defaultImageToolbar.editor_el;if(R.style.borderLeftWidth){P=parseInt(R.style.borderLeftWidth,10);}if(R.style.borderLeftStyle){S=R.style.borderLeftStyle;}if(R.style.borderLeftColor){O=R.style.borderLeftColor;}var Q=P+"px "+S+" #"+T.color;R.style.border=Q;},this,true);H.on("buttonClick",function(V){var T=V.button.value,S=this._defaultImageToolbar.editor_el,R="";if(V.button.menucmd){T=V.button.menucmd;}var P="1",Q="solid",O="black";if(S.style.borderLeftWidth){P=parseInt(S.style.borderLeftWidth,10);}if(S.style.borderLeftStyle){Q=S.style.b!
 orderLeftStyle;}if(S.style.borderLeftColor){O=S.style.borderLeftColor;}switch(T){case"bordersize":if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}R=parseInt(V.button.value,10)+"px "+Q+" "+O;S.style.border=R;if(parseInt(V.button.value,10)>0){H.enableButton("bordertype");H.enableButton("bordercolor");}else{H.disableButton("bordertype");H.disableButton("bordercolor");}break;case"bordertype":if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}R=P+"px "+V.button.value+" "+O;S.style.border=R;break;case"right":case"left":H.deselectAllButtons();S.style.display="";S.align=V.button.value;break;case"inline":H.deselectAllButtons();S.style.display="";S.align="";break;case"block":H.deselectAllButtons();S.style.display="block";S.align="center";break;case"padding":var U=H.getButtonById(V.button.id);S.style.margin=U.get("label")+"px";break;}H.selectButton(V.button.value);if(T!=="pad!
 ding"){this.moveWindow();}},this,true);if(this.get("localFileW!
 arning")
){A.on(this.get("id")+"_insertimage_link","blur",function(){var O=C.get(this.get("id")+"_insertimage_link");if(this._isLocalFile(O.value)){C.addClass(O,"warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{C.removeClass(O,"warning");this.get("panel").setFooter(" ");if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){this.get("panel").setFooter(this.STR_IMAGE_COPY);}}},this,true);}A.on(this.get("id")+"_insertimage_url","blur",function(){var Q=C.get(this.get("id")+"_insertimage_url");if(Q.value&&G){if(Q.value==G.getAttribute("src",2)){return false;}}if(this._isLocalFile(Q.value)){C.addClass(Q,"warning");this.get("panel").setFooter(this.STR_LOCAL_FILE_WARNING);}else{if(this.currentElement[0]){C.removeClass(Q,"warning");this.get("panel").setFooter(" ");if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){this.get("panel").setFooter(this.STR_IMAGE_COPY);}if(Q&&Q.value&&(Q.value!=this.STR_IMAG!
 E_HERE)){this.currentElement[0].setAttribute("src",Q.value);var P=this,O=new Image();O.onerror=function(){Q.value=P.STR_IMAGE_HERE;O.setAttribute("src",P.get("blankimage"));P.currentElement[0].setAttribute("src",P.get("blankimage"));YAHOO.util.Dom.get(P.get("id")+"_insertimage_height").value=O.height;YAHOO.util.Dom.get(P.get("id")+"_insertimage_width").value=O.width;};var R=this.get("id");window.setTimeout(function(){YAHOO.util.Dom.get(R+"_insertimage_height").value=O.height;YAHOO.util.Dom.get(R+"_insertimage_width").value=O.width;if(P.currentElement&&P.currentElement[0]){if(!P.currentElement[0]._height){P.currentElement[0]._height=O.height;}if(!P.currentElement[0]._width){P.currentElement[0]._width=O.width;}}},800);if(Q.value!=this.STR_IMAGE_HERE){O.src=Q.value;}}}}},this,true);this._windows.insertimage={};this._windows.insertimage.body=K;this.get("panel").editor_form.appendChild(K);this.fireEvent("windowInsertImageRender",{type:"windowInsertImageRender",panel:this.get("pa!
 nel"),body:K,toolbar:H});return K;},_handleInsertImageClick:fu!
 nction()
{if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.on("afterExecCommand",function(){var H=this.currentElement[0],P=null,M="",a="",G=null,b="",L="",Y="",S=75,W=75,R=0,N=0,K=0,T=false,J=new YAHOO.widget.EditorWindow("insertimage",{width:"415px"});if(!H){H=this._getSelectedElement();}if(H){J.el=H;if(H.getAttribute("src")){L=H.getAttribute("src",2);if(L.indexOf(this.get("blankimage"))!=-1){L=this.STR_IMAGE_HERE;T=true;}}if(H.getAttribute("alt",2)){b=H.getAttribute("alt",2);}if(H.getAttribute("title",2)){b=H.getAttribute("title",2);}if(H.parentNode&&this._isElement(H.parentNode,"a")){M=H.parentNode.getAttribute("href",2);if(H.parentNode.getAttribute("target")!==null){a=H.parentNode.getAttribute("target");}}S=parseInt(H.height,10);W=parseInt(H.width,10);if(H.style.height){S=parseInt(H.style.height,10);}if(H.style.width){W=parseInt(H.style.width,10);}if(H.style.margin){R=parseInt(H.style.margin,10);}if(!H._height){H._height=S;}if(!H!
 ._width){H._width=W;}N=H._height;K=H._width;}if(this._windows.insertimage&&this._windows.insertimage.body){P=this._windows.insertimage.body;this._defaultImageToolbar.resetAllButtons();}else{P=this._renderInsertImageWindow();}G=this._defaultImageToolbar;G.editor_el=H;var F="0",V="solid";if(H.style.borderLeftWidth){F=parseInt(H.style.borderLeftWidth,10);}if(H.style.borderLeftStyle){V=H.style.borderLeftStyle;}var Z=G.getButtonByValue("bordersize"),X=((parseInt(F,10)>0)?"":this.STR_NONE);Z.set("label",'<span class="yui-toolbar-bordersize-'+F+'">'+X+"</span>");this._updateMenuChecked("bordersize",F,G);var O=G.getButtonByValue("bordertype");O.set("label",'<span class="yui-toolbar-bordertype-'+V+'">asdfa</span>');this._updateMenuChecked("bordertype",V,G);if(parseInt(F,10)>0){G.enableButton(O);G.enableButton(Z);G.enableButton("bordercolor");}if((H.align=="right")||(H.align=="left")){G.selectButton(H.align);}else{if(H.style.display=="block"){G.selectButton("block");
+}else{G.selectButton("inline");}}if(parseInt(H.style.marginLeft,10)>0){G.getButtonByValue("padding").set("label",""+parseInt(H.style.marginLeft,10));}if(H.style.borderSize){G.selectButton("bordersize");G.selectButton(parseInt(H.style.borderSize,10));}G.getButtonByValue("padding").set("label",""+R);J.setHeader(this.STR_IMAGE_PROP_TITLE);J.setBody(P);if((this.browser.webkit&&!this.browser.webkit3||this.browser.air)||this.browser.opera){J.setFooter(this.STR_IMAGE_COPY);}this.openWindow(J);C.get(this.get("id")+"_insertimage_url").value=L;C.get(this.get("id")+"_insertimage_title").value=b;C.get(this.get("id")+"_insertimage_link").value=M;C.get(this.get("id")+"_insertimage_target").checked=((a)?true:false);C.get(this.get("id")+"_insertimage_width").value=W;C.get(this.get("id")+"_insertimage_height").value=S;var I="";if((S!=N)||(W!=K)){var Q=document.createElement("span");Q.className="info";Q.innerHTML=this.STR_IMAGE_ORIG_SIZE+": ("+K+" x "+N+")";if(C.get(this.get("id")+"_insertim!
 age_height").nextSibling){var E=C.get(this.get("id")+"_insertimage_height").nextSibling;E.parentNode.removeChild(E);}C.get(this.get("id")+"_insertimage_height").parentNode.appendChild(Q);}this.toolbar.selectButton("insertimage");var U=this.get("id");window.setTimeout(function(){try{YAHOO.util.Dom.get(U+"_insertimage_url").focus();if(T){YAHOO.util.Dom.get(U+"_insertimage_url").select();}}catch(c){}},50);});},_handleInsertImageWindowClose:function(){var E=C.get(this.get("id")+"_insertimage_url"),L=C.get(this.get("id")+"_insertimage_title"),I=C.get(this.get("id")+"_insertimage_link"),J=C.get(this.get("id")+"_insertimage_target"),H=arguments[0].win.el;if(E&&E.value&&(E.value!=this.STR_IMAGE_HERE)){H.setAttribute("src",E.value);H.setAttribute("title",L.value);H.setAttribute("alt",L.value);var G=H.parentNode;if(I.value){var K=I.value;if((K.indexOf(":/"+"/")==-1)&&(K.substring(0,1)!="/")&&(K.substring(0,6).toLowerCase()!="mailto")){if((K.indexOf("@")!=-1)&&(K.substring(0,6).toLowe!
 rCase()!="mailto")){K="mailto:"+K;}else{K="http:/"+"/"+K;}}if(!
 G&&this.
_isElement(G,"a")){G.setAttribute("href",K);if(J.checked){G.setAttribute("target",J.value);}else{G.setAttribute("target","");}}else{var F=this._getDoc().createElement("a");F.setAttribute("href",K);if(J.checked){F.setAttribute("target",J.value);}else{F.setAttribute("target","");}H.parentNode.replaceChild(F,H);F.appendChild(H);}}else{if(G&&this._isElement(G,"a")){G.parentNode.replaceChild(H,G);}}}else{H.parentNode.removeChild(H);}C.get(this.get("id")+"_insertimage_url").value="";C.get(this.get("id")+"_insertimage_title").value="";C.get(this.get("id")+"_insertimage_link").value="";C.get(this.get("id")+"_insertimage_target").checked=false;C.get(this.get("id")+"_insertimage_width").value=0;C.get(this.get("id")+"_insertimage_height").value=0;this._defaultImageToolbar.resetAllButtons();this.currentElement=[];this.nodeChange();},EDITOR_PANEL_ID:"-panel",_renderPanel:function(){var H=document.createElement("div");C.addClass(H,"yui-editor-panel");H.id=this.get("id")+this.EDITOR_PANEL_!
 ID;H.style.position="absolute";H.style.top="-9999px";H.style.left="-9999px";document.body.appendChild(H);this.get("element_cont").insertBefore(H,this.get("element_cont").get("firstChild"));var E=new YAHOO.widget.Overlay(this.get("id")+this.EDITOR_PANEL_ID,{width:"300px",iframe:true,visible:false,underlay:"none",draggable:false,close:false});this.set("panel",E);E.setBody("---");E.setHeader(" ");E.setFooter(" ");var K=document.createElement("div");K.className=this.CLASS_PREFIX+"-body-cont";for(var L in this.browser){if(this.browser[L]){C.addClass(K,L);break;}}C.addClass(K,((YAHOO.widget.Button&&(this._defaultToolbar.buttonType=="advanced"))?"good-button":"no-button"));var I=document.createElement("h3");I.className="yui-editor-skipheader";I.innerHTML=this.STR_CLOSE_WINDOW_NOTE;K.appendChild(I);var F=document.createElement("fieldset");E.editor_form=F;K.appendChild(F);var G=document.createElement("span");G.innerHTML="X";G.title=this.STR_CLOSE_WINDOW;G.className="close";A.on(G,"c!
 lick",this.closeWindow,this,true);var M=document.createElement!
 ("span")
;M.innerHTML="^";M.className="knob";E.editor_knob=M;var N=document.createElement("h3");E.editor_header=N;N.innerHTML="<span></span>";E.setHeader(" ");E.appendToHeader(N);N.appendChild(G);N.appendChild(M);E.setBody(" ");E.setFooter(" ");E.appendToBody(K);A.on(E.element,"click",function(O){A.stopPropagation(O);});var J=function(){E.bringToTop();YAHOO.util.Dom.setStyle(this.element,"display","block");this._handleWindowInputs(false);};E.showEvent.subscribe(J,this,true);E.hideEvent.subscribe(function(){this._handleWindowInputs(true);},this,true);E.renderEvent.subscribe(function(){this._renderInsertImageWindow();this._renderCreateLinkWindow();this.fireEvent("windowRender",{type:"windowRender",panel:E});this._handleWindowInputs(true);},this,true);if(this.DOMReady){this.get("panel").render();}else{A.onDOMReady(function(){this.get("panel").render();},this,true);}return this.get("panel");},_handleWindowInputs:function(F){if(!D.isBoolean(F)){F=false;}var E=this.get("panel").element.get!
 ElementsByTagName("input");for(var G=0;G<E.length;G++){try{E[G].disabled=F;}catch(H){}}},openWindow:function(K){var P=this;window.setTimeout(function(){P.toolbar.set("disabled",true);},10);A.on(document,"keydown",this._closeWindow,this,true);if(this.currentWindow){this.closeWindow();}var Q=C.getXY(this.currentElement[0]),N=C.getXY(this.get("iframe").get("element")),E=this.get("panel"),H=[(Q[0]+N[0]-20),(Q[1]+N[1]+10)],G=(parseInt(K.attrs.width,10)/2),L="center",J=null;this.fireEvent("beforeOpenWindow",{type:"beforeOpenWindow",win:K,panel:E});var F=E.editor_form;var I=this._windows;for(var O in I){if(D.hasOwnProperty(I,O)){if(I[O]&&I[O].body){if(O==K.name){C.setStyle(I[O].body,"display","block");}else{C.setStyle(I[O].body,"display","none");}}}}if(this._windows[K.name].body){C.setStyle(this._windows[K.name].body,"display","block");F.appendChild(this._windows[K.name].body);}else{if(D.isObject(K.body)){F.appendChild(K.body);
+}else{var M=document.createElement("div");M.innerHTML=K.body;F.appendChild(M);}}E.editor_header.firstChild.innerHTML=K.header;if(K.footer!==null){E.setFooter(K.footer);C.addClass(E.footer,"open");}else{C.removeClass(E.footer,"open");}E.cfg.setProperty("width",K.attrs.width);this.currentWindow=K;this.moveWindow(true);E.show();this.fireEvent("afterOpenWindow",{type:"afterOpenWindow",win:K,panel:E});},moveWindow:function(F){if(!this.currentWindow){return false;}var I=this.currentWindow,J=C.getXY(this.currentElement[0]),a=C.getXY(this.get("iframe").get("element")),O=this.get("panel"),Y=[(J[0]+a[0]),(J[1]+a[1])],R=(parseInt(I.attrs.width,10)/2),U="center",Q=O.cfg.getProperty("xy")||[0,0],G=O.editor_knob,X=0,L=0,T=false;Y[0]=((Y[0]-R)+20);Y[0]=Y[0]-C.getDocumentScrollLeft(this._getDoc());Y[1]=Y[1]-C.getDocumentScrollTop(this._getDoc());if(this._isElement(this.currentElement[0],"img")){if(this.currentElement[0].src.indexOf(this.get("blankimage"))!=-1){Y[0]=(Y[0]+(75/2));Y[1]=(Y[1]!
 +75);}else{var N=parseInt(this.currentElement[0].width,10);var W=parseInt(this.currentElement[0].height,10);Y[0]=(Y[0]+(N/2));Y[1]=(Y[1]+W);}Y[1]=Y[1]+15;}else{var K=C.getStyle(this.currentElement[0],"fontSize");if(K&&K.indexOf&&K.indexOf("px")!=-1){Y[1]=Y[1]+parseInt(C.getStyle(this.currentElement[0],"fontSize"),10)+5;}else{Y[1]=Y[1]+20;}}if(Y[0]<a[0]){Y[0]=a[0]+5;U="left";}if((Y[0]+(R*2))>(a[0]+parseInt(this.get("iframe").get("element").clientWidth,10))){Y[0]=((a[0]+parseInt(this.get("iframe").get("element").clientWidth,10))-(R*2)-5);U="right";}try{X=(Y[0]-Q[0]);L=(Y[1]-Q[1]);}catch(b){}var P=a[1]+parseInt(this.get("height"),10);var H=a[0]+parseInt(this.get("width"),10);if(Y[1]>P){Y[1]=P;}if(Y[0]>H){Y[0]=(H/2);}X=((X<0)?(X*-1):X);L=((L<0)?(L*-1):L);if(((X>10)||(L>10))||F){var S=0,V=0;if(this.currentElement[0].width){V=(parseInt(this.currentElement[0].width,10)/2);}var M=J[0]+a[0]+V;S=M-Y[0];if(S>(parseInt(I.attrs.width,10)-1)){S=((parseInt(I.attrs.width,10)-30)-1);}else{i!
 f(S<40){S=1;}}if(isNaN(S)){S=1;}if(F){if(G){G.style.left=S+"px!
 ";}O.cfg
.setProperty("xy",Y);}else{if(this.get("animate")){T=new YAHOO.util.Anim(O.element,{},0.5,YAHOO.util.Easing.easeOut);T.attributes={top:{to:Y[1]},left:{to:Y[0]}};T.onComplete.subscribe(function(){O.cfg.setProperty("xy",Y);});var Z=new YAHOO.util.Anim(O.iframe,T.attributes,0.5,YAHOO.util.Easing.easeOut);var E=new YAHOO.util.Anim(G,{left:{to:S}},0.6,YAHOO.util.Easing.easeOut);T.animate();Z.animate();E.animate();}else{G.style.left=S+"px";O.cfg.setProperty("xy",Y);}}}},_closeWindow:function(E){if(this._checkKey(this._keyMap.CLOSE_WINDOW,E)){if(this.currentWindow){this.closeWindow();}}},closeWindow:function(E){this.fireEvent("window"+this.currentWindow.name+"Close",{type:"window"+this.currentWindow.name+"Close",win:this.currentWindow,el:this.currentElement[0]});this.fireEvent("closeWindow",{type:"closeWindow",win:this.currentWindow});this.currentWindow=null;this.get("panel").hide();this.get("panel").cfg.setProperty("xy",[-900,-900]);this.get("panel").syncIframe();this.unsubscribeA!
 ll("afterExecCommand");this.toolbar.set("disabled",false);this.toolbar.resetAllButtons();this.focus();A.removeListener(document,"keydown",this._closeWindow);},cmd_undo:function(F){if(this._hasUndoLevel()){if(!this._undoLevel){this._undoLevel=this._undoCache.length;}this._undoLevel=(this._undoLevel-1);if(this._undoCache[this._undoLevel]){var E=this._getUndo(this._undoLevel);this.setEditorHTML(E);}else{this._undoLevel=null;this.toolbar.disableButton("undo");}}return[false];},cmd_redo:function(F){this._undoLevel=this._undoLevel+1;if(this._undoLevel>=this._undoCache.length){this._undoLevel=this._undoCache.length;}if(this._undoCache[this._undoLevel]){var E=this._getUndo(this._undoLevel);this.setEditorHTML(E);}else{this.toolbar.disableButton("redo");}return[false];},cmd_heading:function(I){var F=true,G=null,H="heading",J=this._getSelection(),E=this._getSelectedElement();if(E){J=E;}if(this.browser.ie){H="formatblock";}if(I==this.STR_NONE){if((J&&J.tagName&&(J.tagName.toLowerCase()!
 .substring(0,1)=="h"))||(J&&J.parentNode&&J.parentNode.tagName!
 &&(J.par
entNode.tagName.toLowerCase().substring(0,1)=="h"))){if(J.parentNode.tagName.toLowerCase().substring(0,1)=="h"){J=J.parentNode;}if(this._isElement(J,"html")){return[false];}G=this._swapEl(E,"span",function(K){K.className="yui-non";});this._selectNode(G);this.currentElement[0]=G;}F=false;}else{if(this._isElement(E,"h1")||this._isElement(E,"h2")||this._isElement(E,"h3")||this._isElement(E,"h4")||this._isElement(E,"h5")||this._isElement(E,"h6")){G=this._swapEl(E,I);this._selectNode(G);this.currentElement[0]=G;}else{this._createCurrentElement(I);this._selectNode(this.currentElement[0]);}F=false;}return[F,H];},cmd_hiddenelements:function(E){if(this._showingHiddenElements){this._lastButton=null;this._showingHiddenElements=false;this.toolbar.deselectButton("hiddenelements");C.removeClass(this._getDoc().body,this.CLASS_HIDDEN);}else{this._showingHiddenElements=true;C.addClass(this._getDoc().body,this.CLASS_HIDDEN);this.toolbar.selectButton("hiddenelements");}return[false];},cmd_remo!
 veformat:function(H){var F=true;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled("removeformat")){var E=this._getSelection()+"";this._createCurrentElement("span");this.currentElement[0].className="yui-non";this.currentElement[0].innerHTML=E;for(var G=1;G<this.currentElement.length;G++){this.currentElement[G].parentNode.removeChild(this.currentElement[G]);}F=false;}return[F];},cmd_script:function(K,J){var G=true,E=K.toLowerCase().substring(0,3),H=null,F=this._getSelectedElement();if(this.browser.webkit){if(this._isElement(F,E)){H=this._swapEl(this.currentElement[0],"span",function(L){L.className="yui-non";});this._selectNode(H);}else{this._createCurrentElement(E);var I=this._swapEl(this.currentElement[0],E);this._selectNode(I);this.currentElement[0]=I;}G=false;}return G;},cmd_superscript:function(E){return[this.cmd_script("superscript",E)];},cmd_subscript:function(E){return[this.cmd_script("subscript",E)];
+},cmd_indent:function(H){var E=true,G=this._getSelectedElement(),I=null;if(this.browser.ie){if(this._isElement(G,"blockquote")){I=this._getDoc().createElement("blockquote");I.innerHTML=G.innerHTML;G.innerHTML="";G.appendChild(I);this._selectNode(I);}else{I=this._getDoc().createElement("blockquote");var F=this._getRange().htmlText;I.innerHTML=F;this._createCurrentElement("blockquote");this.currentElement[0].parentNode.replaceChild(I,this.currentElement[0]);this.currentElement[0]=I;this._selectNode(this.currentElement[0]);}E=false;}else{H="blockquote";}return[E,"formatblock",H];},cmd_outdent:function(I){var E=true,H=this._getSelectedElement(),J=null,F=null;if(this.browser.webkit||this.browser.ie){H=this._getSelectedElement();if(this._isElement(H,"blockquote")){var G=H.parentNode;if(this._isElement(H.parentNode,"blockquote")){G.innerHTML=H.innerHTML;this._selectNode(G);}else{F=this._getDoc().createElement("span");F.innerHTML=H.innerHTML;YAHOO.util.Dom.addClass(F,"yui-non");G.r!
 eplaceChild(F,H);this._selectNode(F);}}else{}E=false;}else{I=false;}return[E,"outdent",I];},cmd_justify:function(E){if(this.browser.ie){if(this._hasSelection()){this._createCurrentElement("span");this._swapEl(this.currentElement[0],"div",function(F){F.style.textAlign=E;});return[false];}}return[true,"justify"+E,""];},cmd_justifycenter:function(){return[this.cmd_justify("center")];},cmd_justifyleft:function(){return[this.cmd_justify("left")];},cmd_justifyright:function(){return[this.cmd_justify("right")];},toString:function(){var E="Editor";if(this.get&&this.get("element_cont")){E="Editor (#"+this.get("element_cont").get("id")+")"+((this.get("disabled")?" Disabled":""));}return E;}});YAHOO.widget.EditorWindow=function(F,E){this.name=F.replace(" ","_");this.attrs=E;};YAHOO.widget.EditorWindow.prototype={header:null,body:null,footer:null,setHeader:function(E){this.header=E;},setBody:function(E){this.body=E;},setFooter:function(E){this.footer=E;},toString:function(){return"Edit!
 or Window ("+this.name+")";}};})();YAHOO.register("editor",YAH!
 OO.widge
t.Editor,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/editor/editor.js
===================================================================
--- trunk/root/static/yui/editor/editor.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/editor.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
     /**
+     * @module editor    
      * @description <p>Creates a rich custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
      * @class ToolbarButtonAdvanced
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event, container_core, menu, button
-     * @beta
      * 
      * Provides a toolbar button based on the button and menu widgets.
      * @constructor
+     * @class ToolbarButtonAdvanced
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
     */
@@ -55,14 +53,13 @@
 
 
     /**
-     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
+     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p><p>Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.</p>
      * @class ToolbarButton
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event
-     * @Extends YAHOO.util.Element
-     * @beta
+     * @extends YAHOO.util.Element
      * 
-     * Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.
+     * 
      * @constructor
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
@@ -89,7 +86,8 @@
         oConfig.element.className = 'yui-button yui-' + oConfig.attributes.type + '-button';
         oConfig.element.innerHTML = '<span class="first-child"><a href="#">LABEL</a></span>';
         oConfig.element.firstChild.firstChild.tabIndex = '-1';
-        oConfig.attributes.id = Dom.generateId();
+        oConfig.attributes.id = (oConfig.attributes.id || Dom.generateId());
+        oConfig.element.id = oConfig.attributes.id;
 
         YAHOO.widget.ToolbarButton.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
     };
@@ -145,6 +143,10 @@
 
             this.on('mouseover', this._handleMouseOver, this, true);
             this.on('mouseout', this._handleMouseOut, this, true);
+            this.on('click', function(ev) {
+                Event.stopEvent(ev);
+                return false;
+            }, this, true);
         },
         /**
         * @method initAttributes
@@ -303,9 +305,10 @@
         * @method fireEvent
         * @description Overridden fireEvent method to prevent DOM events from firing if the button is disabled.
         */        
-        fireEvent: function (p_sType , p_aArgs) {
+        fireEvent: function(p_sType, p_aArgs) {
             //  Disabled buttons should not respond to DOM events
             if (this.DOM_EVENTS[p_sType] && this.get('disabled')) {
+                Event.stopEvent(p_aArgs);
                 return;
             }
         
@@ -323,16 +326,13 @@
     });
 })();
 /**
+ * @module editor
  * @description <p>Creates a rich Toolbar widget based on Button. Primarily used with the Rich Text Editor</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbarbutton
  * @optional container_core, dragdrop
- * @beta
  */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
@@ -982,11 +982,6 @@
                             } else {
                                 this.get('cont').appendChild(this._dragHandle);
                             }
-                            /**
-                            * @property dd
-                            * @description The DragDrop instance associated with the Toolbar
-                            * @type Object
-                            */
                             this.dd = new YAHOO.util.DD(this.get('id'));
                             this.dd.setHandleElId(this._dragHandle.id);
                             
@@ -2090,11 +2085,11 @@
 */
 })();
 /**
+ * @module editor
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbar
  * @optional animation, container_core, resize, dragdrop
- * @beta
  */
 
 (function() {
@@ -2217,6 +2212,11 @@
         * @type YAHOO.util.Resize
         */
         resize: null,
+        /**
+        * @private
+        * @method _setupDD
+        * @description Sets up the DD instance used from the 'drag' config option.
+        */
         _setupDD: function() {
             if (!YAHOO.util.DD) { return false; }
             if (this.get('drag')) {
@@ -2301,6 +2301,14 @@
             FOCUS_AFTER: {
                 key: 27
             },
+            FONT_SIZE_UP: {
+                key: 38,
+                mods: ['shift', 'ctrl']
+            },
+            FONT_SIZE_DOWN: {
+                key: 40,
+                mods: ['shift', 'ctrl']
+            },
             CREATE_LINK: {
                 key: 76,
                 mods: ['shift', 'ctrl']
@@ -2371,7 +2379,7 @@
         * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' }
         * @type String
         */
-        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }',
+        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }',
         /**
         * @property _defaultToolbar
         * @private
@@ -2725,38 +2733,20 @@
             return this.get('iframe').get('element').contentWindow;
         },
         /**
+        * @method focus
+        * @description Attempt to set the focus of the iframes window.
+        */
+        focus: function() {
+            this._getWindow().focus();
+        },
+        /**
         * @private
+        * @depreciated - This should not be used, moved to this.focus();
         * @method _focusWindow
         * @description Attempt to set the focus of the iframes window.
-        * @param {Boolean} onLoad Safari needs some special care to set the cursor in the iframe
         */
-        _focusWindow: function(onLoad) {
-            if (this.browser.webkit) {
-                if (onLoad) {
-                    /**
-                    * @knownissue Safari Cursor Position
-                    * @browser Safari 2.x
-                    * @description Can't get Safari to place the cursor at the beginning of the text..
-                    * This workaround at least set's the toolbar into the proper state.
-                    */
-                    this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild, 0, this._getDoc().body.firstChild, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                } else {
-                    this._getSelection().setBaseAndExtent(this._getDoc().body, 1, this._getDoc().body, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                }
-                this._getWindow().focus();
-            } else {
-                this._getWindow().focus();
-            }
+        _focusWindow: function() {
+            this.focus();
         },
         /**
         * @private
@@ -2942,12 +2932,45 @@
         },
         /**
         * @private
+        * @property _focused
+        * @description Holder for trapping focus/blur state and prevent double events
+        * @type Boolean
+        */
+        _focused: null,
+        /**
+        * @private
+        * @method _handleFocus
+        * @description Handles the focus of the iframe. Note, this is window focus event, not an Editor focus event.
+        * @param {Event} e The DOM Event
+        */
+        _handleFocus: function(e) {
+            if (!this._focused) {
+                this._focused = true;
+                this.fireEvent('editorWindowFocus', { type: 'editorWindowFocus', target: this });
+            }
+        },
+        /**
+        * @private
+        * @method _handleBlur
+        * @description Handles the blur of the iframe. Note, this is window blur event, not an Editor blur event.
+        * @param {Event} e The DOM Event
+        */
+        _handleBlur: function(e) {
+            if (this._focused) {
+                this._focused = false;
+                this.fireEvent('editorWindowBlur', { type: 'editorWindowBlur', target: this });
+            }
+        },
+        /**
+        * @private
         * @method _initEditorEvents
         * @description This method sets up the listeners on the Editors document.
         */
         _initEditorEvents: function() {
             //Setup Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.on(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.on(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.on(doc, 'click', this._handleClick, this, true);
@@ -2955,6 +2978,14 @@
             Event.on(doc, 'keypress', this._handleKeyPress, this, true);
             Event.on(doc, 'keyup', this._handleKeyUp, this, true);
             Event.on(doc, 'keydown', this._handleKeyDown, this, true);
+            /* TODO -- Everyone but Opera works here..
+            Event.on(doc, 'paste', function() {
+            }, this, true);
+            */
+ 
+            //Focus and blur..
+            Event.on(win, 'focus', this._handleFocus, this, true);
+            Event.on(win, 'blur', this._handleBlur, this, true);
         },
         /**
         * @private
@@ -2963,7 +2994,9 @@
         */
         _removeEditorEvents: function() {
             //Remove Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.removeListener(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.removeListener(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.removeListener(doc, 'click', this._handleClick, this, true);
@@ -2971,7 +3004,17 @@
             Event.removeListener(doc, 'keypress', this._handleKeyPress, this, true);
             Event.removeListener(doc, 'keyup', this._handleKeyUp, this, true);
             Event.removeListener(doc, 'keydown', this._handleKeyDown, this, true);
+
+            //Focus and blur..
+            Event.removeListener(win, 'focus', this._handleFocus, this, true);
+            Event.removeListener(win, 'blur', this._handleBlur, this, true);
         },
+        _fixWebkitDivs: function() {
+            if (this.browser.webkit) {
+                var divs = this._getDoc().body.getElementsByTagName('div');
+                Dom.addClass(divs, 'yui-wk-div');
+            }
+        },
         /**
         * @private
         * @method _initEditor
@@ -3000,6 +3043,7 @@
             }
 
             this.fireEvent('editorContentLoaded', { type: 'editorLoaded', target: this });
+            this._fixWebkitDivs();
             if (this.get('dompath')) {
                 var self = this;
                 setTimeout(function() {
@@ -3069,6 +3113,11 @@
             var value = ((this._textarea) ? this.get('element').value : this.get('element').innerHTML),
                 doc = null;
 
+            if ((value === '') && this.browser.gecko) {
+                //It seems that Gecko doesn't like an empty body so we have to give it something..
+                value = '<br>';
+            }
+
             var html = Lang.substitute(this.get('html'), {
                 TITLE: this.STR_TITLE,
                 CONTENT: this._cleanIncomingHTML(value),
@@ -3193,19 +3242,23 @@
                 if (this.browser.gecko) {
                     //Added in 2.6.0
                     if (range.startContainer) {
-                        check = false;
                         if (range.startContainer.nodeType === 3) {
                             elm = range.startContainer.parentNode;
                         } else if (range.startContainer.nodeType === 1) {
                             elm = range.startContainer;
-                        } else {
-                            check = true;
                         }
-                        if (!check) {
-                            this.currentEvent = null;
+                        //Added in 2.7.0
+                        if (this.currentEvent) {
+                            var tar = Event.getTarget(this.currentEvent);
+                            if (!this._isElement(tar, 'html')) {
+                                if (elm !== tar) {
+                                    elm = tar;
+                                }
+                            }
                         }
                     }
                 }
+                
                 if (check) {
                     if (sel.anchorNode && (sel.anchorNode.nodeType == 3)) {
                         if (sel.anchorNode.parentNode) { //next check parentNode
@@ -3324,6 +3377,7 @@
                 pathArr = [],
                 classPath = '',
                 pathStr = '';
+
             for (var i = 0; i < path.length; i++) {
                 var tag = path[i].tagName.toLowerCase();
                 if ((tag == 'ol') && (path[i].type)) {
@@ -3518,7 +3572,7 @@
             //this._setCurrentEvent(ev);
             var self = this;
             if (this.browser.opera) {
-                /**
+                /*
                 * @knownissue Opera appears to stop the MouseDown, Click and DoubleClick events on an image inside of a document with designMode on..
                 * @browser Opera
                 * @description This work around traps the MouseUp event and sets a timer to check if another MouseUp event fires in so many seconds. If another event is fired, they we internally fire the DoubleClick event.
@@ -3741,6 +3795,7 @@
             }
             var doExec = false,
                 action = null,
+                value = null,
                 exec = false;
 
 
@@ -3795,6 +3850,29 @@
                         doExec = true;
                     }
                     break;
+                case this._keyMap.FONT_SIZE_UP.key:
+                case this._keyMap.FONT_SIZE_DOWN.key:
+                    var uk = false, dk = false;
+                    if (this._checkKey(this._keyMap.FONT_SIZE_UP, ev)) {
+                        uk = true;
+                    }
+                    if (this._checkKey(this._keyMap.FONT_SIZE_DOWN, ev)) {
+                        dk = true;
+                    }
+                    if (uk || dk) {
+                        var fs_button = this.toolbar.getButtonByValue('fontsize'),
+                            label = parseInt(fs_button.get('label'), 10),
+                            newValue = (label + 1);
+
+                        if (dk) {
+                            newValue = (label - 1);
+                        }
+
+                        action = 'fontsize';
+                        value = newValue + 'px';
+                        doExec = true;
+                    }
+                    break;
                 //case 73: //I
                 case this._keyMap.ITALIC.key:
                     if (this._checkKey(this._keyMap.ITALIC, ev)) {
@@ -3840,24 +3918,65 @@
                     }
                     break;
                 case 13:
+                    var p = null, i = 0;
                     if (this.get('ptags') && !ev.shiftKey) {
                         if (this.browser.gecko) {
                             tar = this._getSelectedElement();
-                            if (!this._isElement(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                            if (!this._hasParent(tar, 'li')) {
+                                if (this._hasParent(tar, 'p')) {
+                                    p = this._getDoc().createElement('p');
+                                    p.innerHTML = ' ';
+                                    Dom.insertAfter(p, tar);
+                                    this._selectNode(p.firstChild);
+                                } else if (this._isElement(tar, 'body')) {
+                                    this.execCommand('insertparagraph', null);
+                                    var ps = this._getDoc().body.getElementsByTagName('p');
+                                    for (i = 0; i < ps.length; i++) {
+                                        if (ps[i].getAttribute('_moz_dirty') !== null) {
+                                            p = this._getDoc().createElement('p');
+                                            p.innerHTML = ' ';
+                                            Dom.insertAfter(p, ps[i]);
+                                            this._selectNode(p.firstChild);
+                                            ps[i].removeAttribute('_moz_dirty');
+                                        }
+                                    }
+                                } else {
+                                    doExec = true;
+                                    action = 'insertparagraph';
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                         if (this.browser.webkit) {
                             tar = this._getSelectedElement();
                             if (!this._hasParent(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                                this.execCommand('insertparagraph', null);
+                                var divs = this._getDoc().body.getElementsByTagName('div');
+                                for (i = 0; i < divs.length; i++) {
+                                    if (!Dom.hasClass(divs[i], 'yui-wk-div')) {
+                                        Dom.addClass(divs[i], 'yui-wk-p');
+                                    }
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                     } else {
+                        if (this.browser.webkit) {
+                            tar = this._getSelectedElement();
+                            if (!this._hasParent(tar, 'li')) {
+                                this.execCommand('inserthtml', '<var id="yui-br"></var>');
+                                var holder = this._getDoc().getElementById('yui-br'),
+                                    br = this._getDoc().createElement('br'),
+                                    caret = this._getDoc().createElement('span');
+
+                                holder.parentNode.replaceChild(br, holder);
+                                caret.className = 'yui-non';
+                                caret.innerHTML = ' ';
+                                Dom.insertAfter(caret, br);
+                                this._selectNode(caret);
+                                Event.stopEvent(ev);
+                            }
+                        }
                         if (this.browser.ie) {
                             //Insert a <br> instead of a <p></p> in Internet Explorer
                             _range = this._getRange();
@@ -3878,7 +3997,7 @@
                 this._listFix(ev);
             }
             if (doExec && action) {
-                this.execCommand(action, null);
+                this.execCommand(action, value);
                 Event.stopEvent(ev);
                 this.nodeChange();
             }
@@ -4226,7 +4345,7 @@
                 if (!this.browser.webkit) {
                      var Fself = this;
                      setTimeout(function() {
-                         Fself._focusWindow.call(Fself);
+                         Fself.focus.call(Fself);
                      }, 5);
                  }
             }
@@ -4270,12 +4389,6 @@
                         this.toolbar.set('disabled', true);
                     }
                     this._mask = document.createElement('DIV');
-                    Dom.setStyle(this._mask, 'height', '100%');
-                    Dom.setStyle(this._mask, 'width', '100%');
-                    Dom.setStyle(this._mask, 'position', 'absolute');
-                    Dom.setStyle(this._mask, 'top', '0');
-                    Dom.setStyle(this._mask, 'left', '0');
-                    Dom.setStyle(this._mask, 'opacity', '.5');
                     Dom.addClass(this._mask, 'yui-editor-masked');
                     this.get('iframe').get('parentNode').appendChild(this._mask);
                 }
@@ -4288,7 +4401,7 @@
                         this.toolbar.set('disabled', false);
                     }
                     this._setDesignMode('on');
-                    this._focusWindow();
+                    this.focus();
                     var self = this;
                     window.setTimeout(function() {
                         self.nodeChange.call(self);
@@ -4327,6 +4440,12 @@
         */
         STR_IMAGE_HERE: 'Image URL Here',
         /**
+        * @property STR_IMAGE_URL
+        * @description The label string for Image URL
+        * @type String
+        */
+        STR_IMAGE_URL: 'Image URL',        
+        /**
         * @property STR_LINK_URL
         * @description The label string for the Link URL.
         * @type String
@@ -4507,7 +4626,7 @@
 
             /**
             * @config ptags
-            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
+            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
             * @default false
             * @type Boolean
             */
@@ -4580,7 +4699,7 @@
             });
             /**
             * @private
-            * @depreciated
+            * @depreciated - No longer used, should use this.get('element')
             * @config textarea
             * @description Internal config for holding the textarea element (replaced with element).
             * @default null
@@ -4591,17 +4710,6 @@
                 writeOnce: true
             });
             /**
-            * @private
-            * @config container
-            * @description Internal config for holding a reference to the container to append a dynamic editor to.
-            * @default null
-            * @type HTMLElement
-            */
-            this.setAttributeConfig('container', {
-                readOnly: true,
-                value: null
-            });
-            /**
             * @config nodeChangeThreshold
             * @description The number of seconds that need to be in between nodeChange processing
             * @default 3
@@ -4948,7 +5056,7 @@
                         this.on('editorContentLoaded', function() {
                             var self = this;
                             setTimeout(function() {
-                                self._focusWindow.call(self, true);
+                                self.focus.call(self);
                                 self.editorDirty = false;
                             }, 400);
                         }, this, true);
@@ -5028,6 +5136,17 @@
                 writeOnce: true,
                 value: attr.resize || false
             });
+
+            /**
+            * @config filterWord
+            * @description Attempt to filter out MS Word HTML from the Editor's output.
+            * @type Boolean
+            */
+            this.setAttributeConfig('filterWord', {
+                value: attr.filterWord || false,
+                validator: YAHOO.lang.isBoolean
+            });
+
         },
         /**
         * @private
@@ -5085,7 +5204,10 @@
                 newHeight = parseInt(this.get('height'), 10);
             }
             if ((height != newHeight) && (newHeight >= parseInt(this.get('height'), 10))) {   
-                Dom.setStyle(this.get('editor_wrapper'), 'height', newHeight + 'px');
+                var anim = this.get('animate');
+                this.set('animate', false);
+                this.set('height', newHeight + 'px');
+                this.set('animate', anim);
                 if (this.browser.ie) {
                     //Internet Explorer needs this
                     this.get('iframe').setStyle('height', '99%');
@@ -5166,7 +5288,7 @@
             var button = this.toolbar.getButtonById(o.button.id);
             var value = button.get('label') + 'px';
             this.execCommand('fontsize', value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5196,7 +5318,7 @@
             var value = this._getSelection();
 
             this.execCommand(cmd, value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5302,7 +5424,7 @@
             }
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     src = 'http://';
                 if (!el) {
@@ -5316,17 +5438,26 @@
                         }
                     }
                 }
-                var str = prompt(this.STR_LINK_URL + ': ', src);
+                var str = prompt(this.STR_IMAGE_URL + ': ', src);
                 if ((str !== '') && (str !== null)) {
                     el.setAttribute('src', str);
-                } else if (str === null) {
+                } else if (str === '') {
                     el.parentNode.removeChild(el);
                     this.currentElement = [];
                     this.nodeChange();
+                } else if ((str === null)) {
+                    src = el.getAttribute('src', 2);
+                    if (src.indexOf(this.get('blankimage')) != -1) {
+                        el.parentNode.removeChild(el);
+                        this.currentElement = [];
+                        this.nodeChange();
+                    }
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this, true);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this, true);
         },
         /**
         * @private
@@ -5362,7 +5493,7 @@
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
 
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     url = '';
 
@@ -5394,7 +5525,9 @@
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this);
 
         },
         /**
@@ -5447,8 +5580,9 @@
 
             this.get('element_cont').setStyle('display', 'none');
             this.get('element_cont').addClass(this.CLASS_CONTAINER);
+            
+            this.set('iframe', this._createIframe());
 
-            this.set('iframe', this._createIframe());
             window.setTimeout(function() {
                 self._setInitialContent.call(self);
             }, 10);
@@ -5582,6 +5716,49 @@
     /* {{{  Command Overrides */
 
         /**
+        * @method cmd_bold
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('bold') is used.
+        */
+        cmd_bold: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontWeight == 'bold') {
+                        el.style.fontWeight = '';
+                        var b = this._getDoc().createElement('b'),
+                        par = el.parentNode;
+                        par.replaceChild(b, el);
+                        b.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+        /**
+        * @method cmd_italic
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('italic') is used.
+        */
+
+        cmd_italic: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontStyle == 'italic') {
+                        el.style.fontStyle = '';
+                        var i = this._getDoc().createElement('i'),
+                        par = el.parentNode;
+                        par.replaceChild(i, el);
+                        i.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+
+
+        /**
         * @method cmd_underline
         * @param value Value passed from the execCommand method
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('underline') is used.
@@ -5616,18 +5793,14 @@
             }
 
             if (!this._isElement(el, 'body') && !this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
+                el.style.backgroundColor = value;
                 this._selectNode(el);
                 exec = false;
-            } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
-                this._selectNode(el);
-                exec = false;
             } else {
                 if (this.get('insert')) {
                     el = this._createInsertElement({ backgroundColor: value });
                 } else {
-                    this._createCurrentElement('span', { backgroundColor: value });
+                    this._createCurrentElement('span', { backgroundColor: value, color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily });
                     this._selectNode(this.currentElement[0]);
                 }
                 exec = false;
@@ -5644,20 +5817,15 @@
             var exec = true,
                 el = this._getSelectedElement();
                 
-
                 if (!this._isElement(el, 'body') && !this._hasSelection()) {
                     Dom.setStyle(el, 'color', value);
                     this._selectNode(el);
                     exec = false;
-                } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                    Dom.setStyle(el, 'color', value);
-                    this._selectNode(el);
-                    exec = false;
                 } else {
                     if (this.get('insert')) {
                         el = this._createInsertElement({ color: value });
                     } else {
-                        this._createCurrentElement('span', { color: value });
+                        this._createCurrentElement('span', { color: value, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily, backgroundColor: el.style.backgroundColor });
                         this._selectNode(this.currentElement[0]);
                     }
                     exec = false;
@@ -5684,6 +5852,12 @@
             var el = this._getSelectedElement(), _a = null;
             if (this._hasParent(el, 'a')) {
                 this.currentElement[0] = this._hasParent(el, 'a');
+            } else if (this._isElement(el, 'li')) {
+                _a = this._getDoc().createElement('a');
+                _a.innerHTML = el.innerHTML;
+                el.innerHTML = '';
+                el.appendChild(_a);
+                this.currentElement[0] = _a;
             } else if (!this._isElement(el, 'a')) {
                 this._createCurrentElement('a');
                 _a = this._swapEl(this.currentElement[0], 'a');
@@ -5706,8 +5880,8 @@
                 value = this.get('blankimage');
             }
 
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari Cursor Position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5753,8 +5927,8 @@
         */
         cmd_inserthtml: function(value) {
             var exec = true, action = 'inserthtml', _span = null, _range = null;
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari cursor position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5787,7 +5961,7 @@
                 if (tag == 'ul') {
                     action = 'insertunorderedlist';
                 }
-            /**
+            /*
             * @knownissue Safari 2.+ doesn't support ordered and unordered lists
             * @browser Safari 2.x
             * The issue with this workaround is that when applied to a set of text
@@ -5820,6 +5994,17 @@
                             this.currentElement[li].parentNode.removeChild(this.currentElement[li]);
                         }
                     }
+                    
+                    var items = list.firstChild.innerHTML.split('<br>');
+                    if (items.length > 0) {
+                        list.innerHTML = '';
+                        for (var i = 0; i < items.length; i++) {
+                            var item = this._getDoc().createElement('li');
+                            item.innerHTML = items[i];
+                            list.appendChild(item);
+                        }
+                    }
+
                     this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
                     this.currentElement[0] = list;
                     var _h = this.currentElement[0].firstChild;
@@ -5935,27 +6120,40 @@
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontsize') is used.
         */
         cmd_fontsize: function(value) {
-            var el = null;
-            if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
-                YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
-            } else if (!this._isElement(this._getSelectedElement(), 'body')) {
-                el = this._getSelectedElement();
-                YAHOO.util.Dom.setStyle(el, 'fontSize', value);
-                if (this.get('insert') && this.browser.ie) {
-                    var r = this._getRange();
-                    r.collapse(false);
-                    r.select();
-                } else {
-                    this._selectNode(el);
+            var el = null, go = true;
+            el = this._getSelectedElement();
+            if (this.browser.webkit) {
+                if (this.currentElement[0]) {
+                    if (el == this.currentElement[0]) {
+                        go = false;
+                        YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                        this._selectNode(el);
+                        this.currentElement[0] = el;
+                    }
                 }
-            } else {
-                if (this.get('insert') && !this._hasSelection()) {
-                    el = this._createInsertElement({ fontSize: value });
-                    this.currentElement[0] = el;
-                    this._selectNode(this.currentElement[0]);
+            }
+            if (go) {
+                if (!this._isElement(this._getSelectedElement(), 'body') && (!this._hasSelection())) {
+                    el = this._getSelectedElement();
+                    YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                    if (this.get('insert') && this.browser.ie) {
+                        var r = this._getRange();
+                        r.collapse(false);
+                        r.select();
+                    } else {
+                        this._selectNode(el);
+                    }
+                } else if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
+                    YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
                 } else {
-                    this._createCurrentElement('span', {'fontSize': value });
-                    this._selectNode(this.currentElement[0]);
+                    if (this.get('insert') && !this._hasSelection()) {
+                        el = this._createInsertElement({ fontSize: value });
+                        this.currentElement[0] = el;
+                        this._selectNode(this.currentElement[0]);
+                    } else {
+                        this._createCurrentElement('span', {'fontSize': value, fontFamily: el.style.fontFamily, color: el.style.color, backgroundColor: el.style.backgroundColor });
+                        this._selectNode(this.currentElement[0]);
+                    }
                 }
             }
             return [false];
@@ -5987,7 +6185,7 @@
         * @method _createInsertElement
         * @description Creates a new "currentElement" then adds some text (and other things) to make it selectable and stylable. Then the user can continue typing.
         * @param {Object} css (optional) Object literal containing styles to apply to the new element.
-        * @return
+        * @return {HTMLElement}
         */
         _createInsertElement: function(css) {
             this._createCurrentElement('span', css);
@@ -6000,7 +6198,7 @@
             } else if (this.browser.ie || this.browser.opera) {
                 el.innerHTML = ' ';
             }
-            this._focusWindow();
+            this.focus();
             this._selectNode(el, true);
             return el;
         },
@@ -6079,8 +6277,8 @@
                     }
                 }
                 if (tar) {
-                    /**
-                    * @knownissue
+                    /*
+                    * @knownissue Safari Cursor Position
                     * @browser Safari 2.x
                     * @description The issue here is that we have no way of knowing where the cursor position is
                     * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -6125,12 +6323,15 @@
                         _tmp[_tmp.length] = _tmp1[e];
                     }
                 }
+
                 
                 for (var i = 0; i < _tmp.length; i++) {
                     if ((YAHOO.util.Dom.getStyle(_tmp[i], 'font-family') == 'yui-tmp') || (_tmp[i].face && (_tmp[i].face == 'yui-tmp'))) {
-                        //TODO Why is this here?!?
-                        //el = _elCreate(_tmp[i].tagName, tagStyle);
-                        el = _elCreate(tagName, tagStyle);
+                        if (tagName !== 'span') {
+                            el = _elCreate(tagName, tagStyle);
+                        } else {
+                            el = _elCreate(_tmp[i].tagName, tagStyle);
+                        }
                         el.innerHTML = _tmp[i].innerHTML;
                         if (this._isElement(_tmp[i], 'ol') || (this._isElement(_tmp[i], 'ul'))) {
                             var fc = _tmp[i].getElementsByTagName('li')[0];
@@ -6236,7 +6437,7 @@
         show: function() {
             if (this.browser.gecko) {
                 this._setDesignMode('on');
-                this._focusWindow();
+                this.focus();
             }
             if (this.browser.webkit) {
                 var self = this;
@@ -6290,6 +6491,7 @@
 
             html = html.replace(/<em([^>]*)>/gi, '<i$1>');
             html = html.replace(/<\/em>/gi, '</i>');
+            html = html.replace(/_moz_dirty=""/gi, '');
             
             //Put embed tags back in..
             html = html.replace(/<YUI_EMBED([^>]*)>/gi, '<embed$1>');
@@ -6305,7 +6507,8 @@
             html = html.replace(/<script([^>]*)>/gi, '<bad>');
             html = html.replace(/<\/script([^>]*)>/gi, '</bad>');
             //Replace the line feeds
-            html = html.replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            html = html.replace(/\r\n/g, '<YUI_LF>').replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            
             //Remove Bad HTML elements (used to be script nodes)
             html = html.replace(new RegExp('<bad([^>]*)>(.*?)<\/bad>', 'gi'), '');
             //Replace the lines feeds
@@ -6328,6 +6531,9 @@
             //Make some backups...
             html = this.pre_filter_linebreaks(html, markup);
 
+            //Filter MS Word
+            html = this.filter_msword(html);
+
 		    html = html.replace(/<img([^>]*)\/>/gi, '<YUI_IMG$1>');
 		    html = html.replace(/<img([^>]*)>/gi, '<YUI_IMG$1>');
 
@@ -6349,8 +6555,25 @@
                 html = html.replace(/<b(\s+[^>]*)?>/gi, '<strong$1>');
                 html = html.replace(/<\/b>/gi, '</strong>');
             }
+
+            html = html.replace(/_moz_dirty=""/gi, '');
+
+            //normalize strikethrough
+            html = html.replace(/<strike/gi, '<span style="text-decoration: line-through;"');
+            html = html.replace(/\/strike>/gi, '/span>');
             
+            
             //Case Changing
+            if (this.browser.ie) {
+                html = html.replace(/text-decoration/gi, 'text-decoration');
+                html = html.replace(/font-weight/gi, 'font-weight');
+                html = html.replace(/_width="([^>]*)"/gi, '');
+                html = html.replace(/_height="([^>]*)"/gi, '');
+                //Cleanup Image URL's
+                var url = this._baseHREF.replace(/\//gi, '\\/'),
+                    re = new RegExp('src="' + url, 'gi');
+                html = html.replace(re, 'src="');
+            }
 		    html = html.replace(/<font/gi, '<font');
 		    html = html.replace(/<\/font>/gi, '</font>');
 		    html = html.replace(/<span/gi, '<span');
@@ -6410,9 +6633,9 @@
 		    html = html.replace(/<\/YUI_EMBED>/g, '<\/embed>');
             
             //This should fix &s in URL's
-            html = html.replace(' & ', 'YUI_AMP');
-            html = html.replace('&', '&');
-            html = html.replace('YUI_AMP', '&');
+            html = html.replace(/ & /gi, 'YUI_AMP');
+            html = html.replace(/&/gi, '&');
+            html = html.replace(/YUI_AMP/gi, ' & ');
 
             //Trim the output, removing whitespace from the beginning and end
             html = YAHOO.lang.trim(html);
@@ -6446,6 +6669,50 @@
             return html;
         },
         /**
+        * @method filter_msword
+        * @param String html The HTML string to filter
+        * @description Filters out msword html attributes and other junk. Activate with filterWord: true in config
+        */
+        filter_msword: function(html) {
+            if (!this.get('filterWord')) {
+                return html;
+            }
+            //Remove the ms o: tags
+            html = html.replace(/<o:p>\s*<\/o:p>/g, '');
+            html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, ' ');
+
+            //Remove the ms w: tags
+            html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '');
+
+            //Remove mso-? styles.
+            html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '');
+
+            //Remove more bogus MS styles.
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '');
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '');
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
+            html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
+            html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" );
+            html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '');
+            html = html.replace( /\s*tab-stops:[^"]*/gi, '');
+
+            //Remove XML declarations
+            html = html.replace(/<\\?\?xml[^>]*>/gi, '');
+
+            //Remove lang
+            html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove language tags
+            html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove onmouseover and onmouseout events (from MS Word comments effect)
+            html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3");
+            html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3");
+            
+            return html;
+        },
+        /**
         * @method filter_invalid_lists
         * @param String html The HTML string to filter
         * @description Filters invalid ol and ul list markup, converts this: <li></li><ol>..</ol> to this: <li></li><li><ol>..</ol></li>
@@ -6455,16 +6722,16 @@
 
             html = html.replace(/<\/li><ol>/gi, '</li><li><ol>');
             html = html.replace(/<\/ol>/gi, '</ol></li>');
-            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>\n");
+            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>");
 
             html = html.replace(/<\/li><ul>/gi, '</li><li><ul>');
             html = html.replace(/<\/ul>/gi, '</ul></li>');
-            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>\n");
+            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>");
 
-            html = html.replace(/<\/li>/gi, "</li>\n");
-            html = html.replace(/<\/ol>/gi, "</ol>\n");
-            html = html.replace(/<ol>/gi, "<ol>\n");
-            html = html.replace(/<ul>/gi, "<ul>\n");
+            html = html.replace(/<\/li>/gi, "</li>");
+            html = html.replace(/<\/ol>/gi, "</ol>");
+            html = html.replace(/<ol>/gi, "<ol>");
+            html = html.replace(/<ul>/gi, "<ul>");
             return html;
         },
         /**
@@ -6479,6 +6746,10 @@
                 html = html.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi, '    ');
                 html = html.replace(/Apple-style-span/gi, '');
                 html = html.replace(/style="line-height: normal;"/gi, '');
+                html = html.replace(/yui-wk-div/gi, '');
+                html = html.replace(/yui-wk-p/gi, '');
+
+
                 //Remove bogus LI's
                 html = html.replace(/<li><\/li>/gi, '');
                 html = html.replace(/<li> <\/li>/gi, '');
@@ -6488,8 +6759,8 @@
 		            html = html.replace(/<div([^>]*)>/g, '<p$1>');
 				    html = html.replace(/<\/div>/gi, '</p>');
                 } else {
-                    html = html.replace(/<div>/gi, '');
-				    html = html.replace(/<\/div>/gi, '<br>');
+                    html = html.replace(/<div>/gi, '<br>');
+				    html = html.replace(/<\/div>/gi, '');
                 }
             }
             return html;
@@ -6522,8 +6793,6 @@
             if (this.browser.ie) {
 		        html = html.replace(/ class= /gi, '');
 		        html = html.replace(/ class= >/gi, '');
-		        html = html.replace(/_height="([^>])"/gi, '');
-		        html = html.replace(/_width="([^>])"/gi, '');
             }
             
             return html;
@@ -6648,7 +6917,7 @@
         closeWindow: function() {
             //this.unsubscribeAll('afterExecCommand');
             this.toolbar.resetAllButtons();
-            this._focusWindow();        
+            this.focus();        
         },
         /**
         * @method destroy
@@ -6816,72 +7085,83 @@
 * @type YAHOO.util.CustomEvent
 */
 
+/**
+* @event editorWindowFocus
+* @description Fires when the iframe is focused. Note, this is window focus event, not an Editor focus event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event editorWindowBlur
+* @description Fires when the iframe is blurred. Note, this is window blur event, not an Editor blur event.
+* @type YAHOO.util.CustomEvent
+*/
 
+
+/**
+ * @description Singleton object used to track the open window objects and panels across the various open editors
+ * @class EditorInfo
+ * @static
+*/
+YAHOO.widget.EditorInfo = {
     /**
-     * @description Singleton object used to track the open window objects and panels across the various open editors
-     * @class EditorInfo
-     * @static
+    * @private
+    * @property _instances
+    * @description A reference to all editors on the page.
+    * @type Object
     */
-    YAHOO.widget.EditorInfo = {
-        /**
-        * @private
-        * @property _instances
-        * @description A reference to all editors on the page.
-        * @type Object
-        */
-        _instances: {},
-        /**
-        * @private
-        * @property blankImage
-        * @description A reference to the blankImage url
-        * @type String 
-        */
-        blankImage: '',
-        /**
-        * @private
-        * @property window
-        * @description A reference to the currently open window object in any editor on the page.
-        * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
-        */
-        window: {},
-        /**
-        * @private
-        * @property panel
-        * @description A reference to the currently open panel in any editor on the page.
-        * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
-        */
-        panel: null,
-        /**
-        * @method getEditorById
-        * @description Returns a reference to the Editor object associated with the given textarea
-        * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
-        * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
-        */
-        getEditorById: function(id) {
-            if (!YAHOO.lang.isString(id)) {
-                //Not a string, assume a node Reference
-                id = id.id;
+    _instances: {},
+    /**
+    * @private
+    * @property blankImage
+    * @description A reference to the blankImage url
+    * @type String 
+    */
+    blankImage: '',
+    /**
+    * @private
+    * @property window
+    * @description A reference to the currently open window object in any editor on the page.
+    * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
+    */
+    window: {},
+    /**
+    * @private
+    * @property panel
+    * @description A reference to the currently open panel in any editor on the page.
+    * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
+    */
+    panel: null,
+    /**
+    * @method getEditorById
+    * @description Returns a reference to the Editor object associated with the given textarea
+    * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
+    * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
+    */
+    getEditorById: function(id) {
+        if (!YAHOO.lang.isString(id)) {
+            //Not a string, assume a node Reference
+            id = id.id;
+        }
+        if (this._instances[id]) {
+            return this._instances[id];
+        }
+        return false;
+    },
+    /**
+    * @method toString
+    * @description Returns a string representing the EditorInfo.
+    * @return {String}
+    */
+    toString: function() {
+        var len = 0;
+        for (var i in this._instances) {
+            if (Lang.hasOwnProperty(this._instances, i)) {
+                len++;
             }
-            if (this._instances[id]) {
-                return this._instances[id];
-            }
-            return false;
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the EditorInfo.
-        * @return {String}
-        */
-        toString: function() {
-            var len = 0;
-            for (var i in this._instances) {
-                if (Lang.hasOwnProperty(this._instances, i)) {
-                    len++;
-                }
-            }
-            return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
         }
-    };
+        return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
+    }
+};
 
 
 
@@ -6892,8 +7172,7 @@
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, container_core, simpleeditor
- * @optional dragdrop, animation, menu, button
- * @beta
+ * @optional dragdrop, animation, menu, button, resize
  */
 
 (function() {
@@ -6937,7 +7216,7 @@
         * @return Boolean
         */
         _hasUndoLevel: function() {
-            return (this._undoCache.length && this._undoLevel);
+            return ((this._undoCache.length > 1) && this._undoLevel);
         },
         /**
         * @private
@@ -6955,6 +7234,7 @@
                     this.toolbar.enableButton(redo_button);
                 }
             }
+            this._lastCommand = null;
         },
         /**
         * @private
@@ -7041,12 +7321,6 @@
         */
         STR_IMAGE_PROP_TITLE: 'Image Options',
         /**
-        * @property STR_IMAGE_URL
-        * @description The label string for Image URL
-        * @type String
-        */
-        STR_IMAGE_URL: 'Image URL',
-        /**
         * @property STR_IMAGE_TITLE
         * @description The label string for Image Description
         * @type String
@@ -7131,6 +7405,12 @@
         */
         STR_LINK_TITLE: 'Description',
         /**
+        * @property STR_NONE
+        * @description The string for the word none.
+        * @type String
+        */
+        STR_NONE: 'none',
+        /**
         * @protected
         * @property CLASS_LOCAL_FILE
         * @description CSS class applied to an element when it's found to have a local url.
@@ -7326,7 +7606,9 @@
             * @attribute hiddencss
             * @description The CSS used to show/hide hidden elements on the page, these rules must be prefixed with the class provided in <code>this.CLASS_HIDDEN</code>
             * @default <code><pre>
-            .yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u, .yui-hidden div, .yui-hidden p, .yui-hidden span, .yui-hidden img, .yui-hidden ul, .yui-hidden ol, .yui-hidden li, .yui-hidden table {
+            .yui-hidden font, .yui-hidden strong, .yui-hidden b, .yui-hidden em, .yui-hidden i, .yui-hidden u,
+            .yui-hidden div, .yui-hidden p, .yui-hidden span, .yui-hidden img, .yui-hidden ul, .yui-hidden ol,
+            .yui-hidden li, .yui-hidden table {
                 border: 1px dotted #ccc;
             }
             .yui-hidden .yui-non {
@@ -7476,6 +7758,7 @@
                 unlink.title = this.STR_LINK_PROP_REMOVE;
                 Event.on(unlink, 'click', function(ev) {
                     Event.stopEvent(ev);
+                    this.unsubscribeAll('afterExecCommand');
                     this.execCommand('unlink');
                     this.closeWindow();
                 }, this, true);
@@ -7484,7 +7767,10 @@
                 
                 this._windows.createlink = {};
                 this._windows.createlink.body = body;
-                body.style.display = 'none';
+                //body.style.display = 'none';
+                Event.on(body, 'keyup', function(e) {
+                    Event.stopPropagation(e);
+                });
                 this.get('panel').editor_form.appendChild(body);
                 this.fireEvent('windowCreateLinkRender', { type: 'windowCreateLinkRender', panel: this.get('panel'), body: body });
                 return body;
@@ -7863,7 +8149,7 @@
 
                 this._windows.insertimage = {};
                 this._windows.insertimage.body = body;
-                body.style.display = 'none';
+                //body.style.display = 'none';
                 this.get('panel').editor_form.appendChild(body);
                 this.fireEvent('windowInsertImageRender', { type: 'windowInsertImageRender', panel: this.get('panel'), body: body, toolbar: tbar });
                 return body;
@@ -7954,21 +8240,22 @@
                 tbar.editor_el = el;
                 
 
-                var bsize = '0';
-                var btype = 'solid';
+                var bsize = '0',
+                    btype = 'solid';
+
                 if (el.style.borderLeftWidth) {
                     bsize = parseInt(el.style.borderLeftWidth, 10);
                 }
                 if (el.style.borderLeftStyle) {
                     btype = el.style.borderLeftStyle;
                 }
-                var bs_button = tbar.getButtonByValue('bordersize');
-                var bSizeStr = ((parseInt(bsize, 10) > 0) ? '' : 'none');
-                bs_button.set('label', '<span class="yui-toolbar-bordersize-' + bsize + '">'+bSizeStr+'</span>');
+                var bs_button = tbar.getButtonByValue('bordersize'),
+                    bSizeStr = ((parseInt(bsize, 10) > 0) ? '' : this.STR_NONE);
+                bs_button.set('label', '<span class="yui-toolbar-bordersize-' + bsize + '">' + bSizeStr + '</span>');
                 this._updateMenuChecked('bordersize', bsize, tbar);
 
                 var bt_button = tbar.getButtonByValue('bordertype');
-                bt_button.set('label', '<span class="yui-toolbar-bordertype-' + btype + '"></span>');
+                bt_button.set('label', '<span class="yui-toolbar-bordertype-' + btype + '">asdfa</span>');
                 this._updateMenuChecked('bordertype', btype, tbar);
                 if (parseInt(bsize, 10) > 0) {
                     tbar.enableButton(bt_button);
@@ -7984,7 +8271,7 @@
                     tbar.selectButton('inline');
                 }
                 if (parseInt(el.style.marginLeft, 10) > 0) {
-                     tbar.getButtonByValue('padding').set('label', ''+parseInt(el.style.marginLeft, 10));
+                    tbar.getButtonByValue('padding').set('label', ''+parseInt(el.style.marginLeft, 10));
                 }
                 if (el.style.borderSize) {
                     tbar.selectButton('bordersize');
@@ -8013,7 +8300,6 @@
                 if ((height != oheight) || (width != owidth)) {
                     var s = document.createElement('span');
                     s.className = 'info';
-                    //s.innerHTML = this.STR_IMAGE_ORIG_SIZE + '<br>'+ owidth +' x ' + oheight;
                     s.innerHTML = this.STR_IMAGE_ORIG_SIZE + ': ('+ owidth +' x ' + oheight + ')';
                     if (Dom.get(this.get('id') + '_insertimage_height').nextSibling) {
                         var old = Dom.get(this.get('id') + '_insertimage_height').nextSibling;
@@ -8113,6 +8399,17 @@
         * @return {<a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>}
         */
         _renderPanel: function() {
+            var panelEl = document.createElement('div');
+            Dom.addClass(panelEl, 'yui-editor-panel');
+            panelEl.id = this.get('id') + this.EDITOR_PANEL_ID;
+            panelEl.style.position = 'absolute';
+            panelEl.style.top = '-9999px';
+            panelEl.style.left = '-9999px';
+            document.body.appendChild(panelEl);
+            this.get('element_cont').insertBefore(panelEl, this.get('element_cont').get('firstChild'));
+
+                
+
             var panel = new YAHOO.widget.Overlay(this.get('id') + this.EDITOR_PANEL_ID, {
                     width: '300px',
                     iframe: true,
@@ -8123,9 +8420,9 @@
                 });
             this.set('panel', panel);
 
-            this.get('panel').setBody('---');
-            this.get('panel').setHeader(' ');
-            this.get('panel').setFooter(' ');
+            panel.setBody('---');
+            panel.setHeader(' ');
+            panel.setFooter(' ');
 
 
             var body = document.createElement('div');
@@ -8142,13 +8439,9 @@
             _note.className = 'yui-editor-skipheader';
             _note.innerHTML = this.STR_CLOSE_WINDOW_NOTE;
             body.appendChild(_note);
-            var form = document.createElement('form');
-            form.setAttribute('method', 'GET');
+            var form = document.createElement('fieldset');
             panel.editor_form = form;
 
-            Event.on(form, 'submit', function(ev) {
-                Event.stopEvent(ev);
-            }, this, true);
             body.appendChild(form);
             var _close = document.createElement('span');
             _close.innerHTML = 'X';
@@ -8179,39 +8472,53 @@
             });
 
             var fireShowEvent = function() {
-                //panel.bringToTop();
+                panel.bringToTop();
+                YAHOO.util.Dom.setStyle(this.element, 'display', 'block');
+                this._handleWindowInputs(false);
             };
             panel.showEvent.subscribe(fireShowEvent, this, true);
+            panel.hideEvent.subscribe(function() {
+                this._handleWindowInputs(true);
+            }, this, true);
             panel.renderEvent.subscribe(function() {
                 this._renderInsertImageWindow();
                 this._renderCreateLinkWindow();
                 this.fireEvent('windowRender', { type: 'windowRender', panel: panel });
+                this._handleWindowInputs(true);
             }, this, true);
 
             if (this.DOMReady) {
-                this.get('panel').render(document.body);
-                //Render to the element_cont so we can skin it better
-                //this.get('panel').render(this.get('element_cont').get('element'));
-                Dom.addClass(this.get('panel').element, 'yui-editor-panel');
+                this.get('panel').render();
             } else {
                 Event.onDOMReady(function() {
-                    this.get('panel').render(document.body);
-                    //Render to the element_cont so we can skin it better
-                    //this.get('panel').render(this.get('element_cont').get('element'));
-                    Dom.addClass(this.get('panel').element, 'yui-editor-panel');
+                    this.get('panel').render();
                 }, this, true);
             }
-            this.get('panel').showEvent.subscribe(function() {
-                YAHOO.util.Dom.setStyle(this.element, 'display', 'block');
-            });
             return this.get('panel');
         },
         /**
+        * @method _handleWindowInputs
+        * @param {Boolean} disable The state to set all inputs in all Editor windows to. Defaults to: false.
+        * @description Disables/Enables all fields inside Editor windows. Used in show/hide events to keep window fields from submitting when the parent form is submitted.
+        */
+        _handleWindowInputs: function(disable) {
+            if (!Lang.isBoolean(disable)) {
+                disable = false;
+            }
+            var inputs = this.get('panel').element.getElementsByTagName('input');
+            for (var i = 0; i < inputs.length; i++) {
+                try {
+                    inputs[i].disabled = disable;
+                } catch (e) {}
+            }
+        },
+        /**
         * @method openWindow
         * @param {<a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>} win A <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a> instance
         * @description Opens a new "window/panel"
         */
         openWindow: function(win) {
+            
             var self = this;
             window.setTimeout(function() {
                 self.toolbar.set('disabled', true); //Disable the toolbar when an editor window is open..
@@ -8222,7 +8529,6 @@
                 this.closeWindow();
             }
             
-
             var xy = Dom.getXY(this.currentElement[0]),
             elXY = Dom.getXY(this.get('iframe').get('element')),
             panel = this.get('panel'),
@@ -8338,16 +8644,14 @@
             } catch (e) {}
 
 
-            if (this.get('autoHeight') === false) {
-                var iTop = elXY[1] + parseInt(this.get('height'), 10);
-                var iLeft = elXY[0] + parseInt(this.get('width'), 10);
-                if (newXY[1] > iTop) {
-                    newXY[1] = iTop;
-                }
-                if (newXY[0] > iLeft) {
-                    newXY[0] = (iLeft / 2);
-                }
+            var iTop = elXY[1] + parseInt(this.get('height'), 10);
+            var iLeft = elXY[0] + parseInt(this.get('width'), 10);
+            if (newXY[1] > iTop) {
+                newXY[1] = iTop;
             }
+            if (newXY[0] > iLeft) {
+                newXY[0] = (iLeft / 2);
+            }
             
             //Convert negative numbers to positive so we can get the difference in distance
             xDiff = ((xDiff < 0) ? (xDiff * -1) : xDiff);
@@ -8429,7 +8733,6 @@
         * @description Close the currently open EditorWindow.
         */
         closeWindow: function(keepOpen) {
-            //YAHOO.widget.EditorInfo.window = {};
             this.fireEvent('window' + this.currentWindow.name + 'Close', { type: 'window' + this.currentWindow.name + 'Close', win: this.currentWindow, el: this.currentElement[0] });
             this.fireEvent('closeWindow', { type: 'closeWindow', win: this.currentWindow });
             this.currentWindow = null;
@@ -8439,7 +8742,7 @@
             this.unsubscribeAll('afterExecCommand');
             this.toolbar.set('disabled', false); //enable the toolbar now that the window is closed
             this.toolbar.resetAllButtons();
-            this._focusWindow();
+            this.focus();
             Event.removeListener(document, 'keydown', this._closeWindow);
         },
 
@@ -8505,7 +8808,7 @@
             if (this.browser.ie) {
                 action = 'formatblock';
             }
-            if (value == 'none') {
+            if (value == this.STR_NONE) {
                 if ((_sel && _sel.tagName && (_sel.tagName.toLowerCase().substring(0,1) == 'h')) || (_sel && _sel.parentNode && _sel.parentNode.tagName && (_sel.parentNode.tagName.toLowerCase().substring(0,1) == 'h'))) {
                     if (_sel.parentNode.tagName.toLowerCase().substring(0,1) == 'h') {
                         _sel = _sel.parentNode;
@@ -8559,7 +8862,7 @@
         */
         cmd_removeformat: function(value) {
             var exec = true;
-            /**
+            /*
             * @knownissue Remove Format issue
             * @browser Safari 2.x
             * @description There is an issue here with Safari, that it may not always remove the format of the item that is selected.
@@ -8574,14 +8877,6 @@
                 for (var i = 1; i < this.currentElement.length; i++) {
                     this.currentElement[i].parentNode.removeChild(this.currentElement[i]);
                 }
-                /*
-                this._createCurrentElement('span');
-                YAHOO.util.Dom.addClass(this.currentElement[0], 'yui-non');
-                var re= /<\S[^><]*>/g;
-                var str = this.currentElement[0].innerHTML.replace(re, '');
-                var _txt = this._getDoc().createTextNode(str);
-                this.currentElement[0].parentNode.parentNode.replaceChild(_txt, this.currentElement[0].parentNode);
-                */
                 
                 exec = false;
             }
@@ -8756,6 +9051,65 @@
             return str;
         }
     });
+/**
+* @event beforeOpenWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fires before an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event afterOpenWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fires after an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event closeWindow
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @description Event fires after an Editor Window is closed. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCMDOpen
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is opened.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkOpen event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCMDClose
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is closed.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkClose event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowRender
+* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @description Event fired when the initial Overlay is rendered. Can be used to manipulate the content of the panel.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowInsertImageRender
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @param {HTMLElement} body The HTML element used as the body of the window..
+* @param {Toolbar} toolbar A reference to the toolbar object used inside this window.
+* @description Event fired when the pre render of the Insert Image window has finished.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event windowCreateLinkRender
+* @param {Overlay} panel The Overlay object that is used to create the window.
+* @param {HTMLElement} body The HTML element used as the body of the window..
+* @description Event fired when the pre render of the Create Link window has finished.
+* @type YAHOO.util.CustomEvent
+*/
+
+
+
     /**
      * @description Class to hold Window information between uses. We use the same panel to show the windows, so using this will allow you to configure a window before it is shown.
      * This is what you pass to Editor.openWindow();. These parameters will not take effect until the openWindow() is called in the editor.
@@ -8830,62 +9184,5 @@
             return 'Editor Window (' + this.name + ')';
         }
     };
-/**
-* @event beforeOpenWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fires before an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event afterOpenWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fires after an Editor Window is opened. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event closeWindow
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @description Event fires after an Editor Window is closed. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCMDOpen
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is opened.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkOpen event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCMDClose
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Dynamic event fired when an <a href="YAHOO.widget.EditorWindow.html">EditorWindow</a> is closed.. The dynamic event is based on the name of the window. Example Window: createlink, opening this window would fire the windowcreatelinkClose event. See <a href="YAHOO.util.Element.html#addListener">Element.addListener</a> for more information on listening for this event.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowRender
-* @param {<a href="YAHOO.widget.EditorWindow.html">EditorWindow</a>} win The EditorWindow object
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @description Event fired when the initial Overlay is rendered. Can be used to manipulate the content of the panel.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowInsertImageRender
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @param {HTMLElement} body The HTML element used as the body of the window..
-* @param {Toolbar} toolbar A reference to the toolbar object used inside this window.
-* @description Event fired when the pre render of the Insert Image window has finished.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event windowCreateLinkRender
-* @param {Overlay} panel The Overlay object that is used to create the window.
-* @param {HTMLElement} body The HTML element used as the body of the window..
-* @description Event fired when the pre render of the Create Link window has finished.
-* @type YAHOO.util.CustomEvent
-*/
-
 })();
-YAHOO.register("editor", YAHOO.widget.Editor, {version: "2.6.0", build: "1321"});
+YAHOO.register("editor", YAHOO.widget.Editor, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/editor/simpleeditor-debug.js
===================================================================
--- trunk/root/static/yui/editor/simpleeditor-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/simpleeditor-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
     /**
+     * @module editor    
      * @description <p>Creates a rich custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
      * @class ToolbarButtonAdvanced
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event, container_core, menu, button
-     * @beta
      * 
      * Provides a toolbar button based on the button and menu widgets.
      * @constructor
+     * @class ToolbarButtonAdvanced
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
     */
@@ -55,14 +53,13 @@
 
 
     /**
-     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
+     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p><p>Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.</p>
      * @class ToolbarButton
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event
-     * @Extends YAHOO.util.Element
-     * @beta
+     * @extends YAHOO.util.Element
      * 
-     * Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.
+     * 
      * @constructor
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
@@ -91,7 +88,8 @@
         oConfig.element.className = 'yui-button yui-' + oConfig.attributes.type + '-button';
         oConfig.element.innerHTML = '<span class="first-child"><a href="#">LABEL</a></span>';
         oConfig.element.firstChild.firstChild.tabIndex = '-1';
-        oConfig.attributes.id = Dom.generateId();
+        oConfig.attributes.id = (oConfig.attributes.id || Dom.generateId());
+        oConfig.element.id = oConfig.attributes.id;
 
         YAHOO.widget.ToolbarButton.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
     };
@@ -147,6 +145,10 @@
 
             this.on('mouseover', this._handleMouseOver, this, true);
             this.on('mouseout', this._handleMouseOut, this, true);
+            this.on('click', function(ev) {
+                Event.stopEvent(ev);
+                return false;
+            }, this, true);
         },
         /**
         * @method initAttributes
@@ -305,9 +307,10 @@
         * @method fireEvent
         * @description Overridden fireEvent method to prevent DOM events from firing if the button is disabled.
         */        
-        fireEvent: function (p_sType , p_aArgs) {
+        fireEvent: function(p_sType, p_aArgs) {
             //  Disabled buttons should not respond to DOM events
             if (this.DOM_EVENTS[p_sType] && this.get('disabled')) {
+                Event.stopEvent(p_aArgs);
                 return;
             }
         
@@ -325,16 +328,13 @@
     });
 })();
 /**
+ * @module editor
  * @description <p>Creates a rich Toolbar widget based on Button. Primarily used with the Rich Text Editor</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbarbutton
  * @optional container_core, dragdrop
- * @beta
  */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
@@ -992,11 +992,6 @@
                             } else {
                                 this.get('cont').appendChild(this._dragHandle);
                             }
-                            /**
-                            * @property dd
-                            * @description The DragDrop instance associated with the Toolbar
-                            * @type Object
-                            */
                             this.dd = new YAHOO.util.DD(this.get('id'));
                             this.dd.setHandleElId(this._dragHandle.id);
                             
@@ -2112,11 +2107,11 @@
 */
 })();
 /**
+ * @module editor
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbar
  * @optional animation, container_core, resize, dragdrop
- * @beta
  */
 
 (function() {
@@ -2240,6 +2235,11 @@
         * @type YAHOO.util.Resize
         */
         resize: null,
+        /**
+        * @private
+        * @method _setupDD
+        * @description Sets up the DD instance used from the 'drag' config option.
+        */
         _setupDD: function() {
             if (!YAHOO.util.DD) { return false; }
             if (this.get('drag')) {
@@ -2326,6 +2326,14 @@
             FOCUS_AFTER: {
                 key: 27
             },
+            FONT_SIZE_UP: {
+                key: 38,
+                mods: ['shift', 'ctrl']
+            },
+            FONT_SIZE_DOWN: {
+                key: 40,
+                mods: ['shift', 'ctrl']
+            },
             CREATE_LINK: {
                 key: 76,
                 mods: ['shift', 'ctrl']
@@ -2396,7 +2404,7 @@
         * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' }
         * @type String
         */
-        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }',
+        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }',
         /**
         * @property _defaultToolbar
         * @private
@@ -2750,38 +2758,21 @@
             return this.get('iframe').get('element').contentWindow;
         },
         /**
+        * @method focus
+        * @description Attempt to set the focus of the iframes window.
+        */
+        focus: function() {
+            this._getWindow().focus();
+        },
+        /**
         * @private
+        * @depreciated - This should not be used, moved to this.focus();
         * @method _focusWindow
         * @description Attempt to set the focus of the iframes window.
-        * @param {Boolean} onLoad Safari needs some special care to set the cursor in the iframe
         */
-        _focusWindow: function(onLoad) {
-            if (this.browser.webkit) {
-                if (onLoad) {
-                    /**
-                    * @knownissue Safari Cursor Position
-                    * @browser Safari 2.x
-                    * @description Can't get Safari to place the cursor at the beginning of the text..
-                    * This workaround at least set's the toolbar into the proper state.
-                    */
-                    this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild, 0, this._getDoc().body.firstChild, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                } else {
-                    this._getSelection().setBaseAndExtent(this._getDoc().body, 1, this._getDoc().body, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                }
-                this._getWindow().focus();
-            } else {
-                this._getWindow().focus();
-            }
+        _focusWindow: function() {
+            YAHOO.log('_focusWindow: depreciated in favor of this.focus()', 'warn', 'Editor');
+            this.focus();
         },
         /**
         * @private
@@ -2968,12 +2959,47 @@
         },
         /**
         * @private
+        * @property _focused
+        * @description Holder for trapping focus/blur state and prevent double events
+        * @type Boolean
+        */
+        _focused: null,
+        /**
+        * @private
+        * @method _handleFocus
+        * @description Handles the focus of the iframe. Note, this is window focus event, not an Editor focus event.
+        * @param {Event} e The DOM Event
+        */
+        _handleFocus: function(e) {
+            if (!this._focused) {
+                YAHOO.log('Editor Window Focused', 'info', 'SimpleEditor');
+                this._focused = true;
+                this.fireEvent('editorWindowFocus', { type: 'editorWindowFocus', target: this });
+            }
+        },
+        /**
+        * @private
+        * @method _handleBlur
+        * @description Handles the blur of the iframe. Note, this is window blur event, not an Editor blur event.
+        * @param {Event} e The DOM Event
+        */
+        _handleBlur: function(e) {
+            if (this._focused) {
+                YAHOO.log('Editor Window Blurred', 'info', 'SimpleEditor');
+                this._focused = false;
+                this.fireEvent('editorWindowBlur', { type: 'editorWindowBlur', target: this });
+            }
+        },
+        /**
+        * @private
         * @method _initEditorEvents
         * @description This method sets up the listeners on the Editors document.
         */
         _initEditorEvents: function() {
             //Setup Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.on(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.on(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.on(doc, 'click', this._handleClick, this, true);
@@ -2981,6 +3007,15 @@
             Event.on(doc, 'keypress', this._handleKeyPress, this, true);
             Event.on(doc, 'keyup', this._handleKeyUp, this, true);
             Event.on(doc, 'keydown', this._handleKeyDown, this, true);
+            /* TODO -- Everyone but Opera works here..
+            Event.on(doc, 'paste', function() {
+                YAHOO.log('PASTE', 'info', 'SimpleEditor');
+            }, this, true);
+            */
+ 
+            //Focus and blur..
+            Event.on(win, 'focus', this._handleFocus, this, true);
+            Event.on(win, 'blur', this._handleBlur, this, true);
         },
         /**
         * @private
@@ -2989,7 +3024,9 @@
         */
         _removeEditorEvents: function() {
             //Remove Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.removeListener(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.removeListener(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.removeListener(doc, 'click', this._handleClick, this, true);
@@ -2997,7 +3034,17 @@
             Event.removeListener(doc, 'keypress', this._handleKeyPress, this, true);
             Event.removeListener(doc, 'keyup', this._handleKeyUp, this, true);
             Event.removeListener(doc, 'keydown', this._handleKeyDown, this, true);
+
+            //Focus and blur..
+            Event.removeListener(win, 'focus', this._handleFocus, this, true);
+            Event.removeListener(win, 'blur', this._handleBlur, this, true);
         },
+        _fixWebkitDivs: function() {
+            if (this.browser.webkit) {
+                var divs = this._getDoc().body.getElementsByTagName('div');
+                Dom.addClass(divs, 'yui-wk-div');
+            }
+        },
         /**
         * @private
         * @method _initEditor
@@ -3028,6 +3075,7 @@
             }
 
             this.fireEvent('editorContentLoaded', { type: 'editorLoaded', target: this });
+            this._fixWebkitDivs();
             if (this.get('dompath')) {
                 YAHOO.log('Delayed DomPath write', 'info', 'SimpleEditor');
                 var self = this;
@@ -3102,6 +3150,11 @@
             var value = ((this._textarea) ? this.get('element').value : this.get('element').innerHTML),
                 doc = null;
 
+            if ((value === '') && this.browser.gecko) {
+                //It seems that Gecko doesn't like an empty body so we have to give it something..
+                value = '<br>';
+            }
+
             var html = Lang.substitute(this.get('html'), {
                 TITLE: this.STR_TITLE,
                 CONTENT: this._cleanIncomingHTML(value),
@@ -3229,19 +3282,23 @@
                 if (this.browser.gecko) {
                     //Added in 2.6.0
                     if (range.startContainer) {
-                        check = false;
                         if (range.startContainer.nodeType === 3) {
                             elm = range.startContainer.parentNode;
                         } else if (range.startContainer.nodeType === 1) {
                             elm = range.startContainer;
-                        } else {
-                            check = true;
                         }
-                        if (!check) {
-                            this.currentEvent = null;
+                        //Added in 2.7.0
+                        if (this.currentEvent) {
+                            var tar = Event.getTarget(this.currentEvent);
+                            if (!this._isElement(tar, 'html')) {
+                                if (elm !== tar) {
+                                    elm = tar;
+                                }
+                            }
                         }
                     }
                 }
+                
                 if (check) {
                     if (sel.anchorNode && (sel.anchorNode.nodeType == 3)) {
                         if (sel.anchorNode.parentNode) { //next check parentNode
@@ -3361,6 +3418,7 @@
                 pathArr = [],
                 classPath = '',
                 pathStr = '';
+
             for (var i = 0; i < path.length; i++) {
                 var tag = path[i].tagName.toLowerCase();
                 if ((tag == 'ol') && (path[i].type)) {
@@ -3556,7 +3614,7 @@
             //this._setCurrentEvent(ev);
             var self = this;
             if (this.browser.opera) {
-                /**
+                /*
                 * @knownissue Opera appears to stop the MouseDown, Click and DoubleClick events on an image inside of a document with designMode on..
                 * @browser Opera
                 * @description This work around traps the MouseUp event and sets a timer to check if another MouseUp event fires in so many seconds. If another event is fired, they we internally fire the DoubleClick event.
@@ -3781,6 +3839,7 @@
             }
             var doExec = false,
                 action = null,
+                value = null,
                 exec = false;
 
             //YAHOO.log('keyCode: ' + ev.keyCode, 'info', 'SimpleEditor');
@@ -3837,6 +3896,29 @@
                         doExec = true;
                     }
                     break;
+                case this._keyMap.FONT_SIZE_UP.key:
+                case this._keyMap.FONT_SIZE_DOWN.key:
+                    var uk = false, dk = false;
+                    if (this._checkKey(this._keyMap.FONT_SIZE_UP, ev)) {
+                        uk = true;
+                    }
+                    if (this._checkKey(this._keyMap.FONT_SIZE_DOWN, ev)) {
+                        dk = true;
+                    }
+                    if (uk || dk) {
+                        var fs_button = this.toolbar.getButtonByValue('fontsize'),
+                            label = parseInt(fs_button.get('label'), 10),
+                            newValue = (label + 1);
+
+                        if (dk) {
+                            newValue = (label - 1);
+                        }
+
+                        action = 'fontsize';
+                        value = newValue + 'px';
+                        doExec = true;
+                    }
+                    break;
                 //case 73: //I
                 case this._keyMap.ITALIC.key:
                     if (this._checkKey(this._keyMap.ITALIC, ev)) {
@@ -3882,24 +3964,66 @@
                     }
                     break;
                 case 13:
+                    var p = null, i = 0;
                     if (this.get('ptags') && !ev.shiftKey) {
                         if (this.browser.gecko) {
                             tar = this._getSelectedElement();
-                            if (!this._isElement(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                            if (!this._hasParent(tar, 'li')) {
+                                if (this._hasParent(tar, 'p')) {
+                                    p = this._getDoc().createElement('p');
+                                    p.innerHTML = ' ';
+                                    Dom.insertAfter(p, tar);
+                                    this._selectNode(p.firstChild);
+                                } else if (this._isElement(tar, 'body')) {
+                                    this.execCommand('insertparagraph', null);
+                                    var ps = this._getDoc().body.getElementsByTagName('p');
+                                    for (i = 0; i < ps.length; i++) {
+                                        if (ps[i].getAttribute('_moz_dirty') !== null) {
+                                            p = this._getDoc().createElement('p');
+                                            p.innerHTML = ' ';
+                                            Dom.insertAfter(p, ps[i]);
+                                            this._selectNode(p.firstChild);
+                                            ps[i].removeAttribute('_moz_dirty');
+                                        }
+                                    }
+                                } else {
+                                    YAHOO.log('Something went wrong with paragraphs, please file a bug!!', 'error', 'SimpleEditor');
+                                    doExec = true;
+                                    action = 'insertparagraph';
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                         if (this.browser.webkit) {
                             tar = this._getSelectedElement();
                             if (!this._hasParent(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                                this.execCommand('insertparagraph', null);
+                                var divs = this._getDoc().body.getElementsByTagName('div');
+                                for (i = 0; i < divs.length; i++) {
+                                    if (!Dom.hasClass(divs[i], 'yui-wk-div')) {
+                                        Dom.addClass(divs[i], 'yui-wk-p');
+                                    }
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                     } else {
+                        if (this.browser.webkit) {
+                            tar = this._getSelectedElement();
+                            if (!this._hasParent(tar, 'li')) {
+                                this.execCommand('inserthtml', '<var id="yui-br"></var>');
+                                var holder = this._getDoc().getElementById('yui-br'),
+                                    br = this._getDoc().createElement('br'),
+                                    caret = this._getDoc().createElement('span');
+
+                                holder.parentNode.replaceChild(br, holder);
+                                caret.className = 'yui-non';
+                                caret.innerHTML = ' ';
+                                Dom.insertAfter(caret, br);
+                                this._selectNode(caret);
+                                Event.stopEvent(ev);
+                            }
+                        }
                         if (this.browser.ie) {
                             YAHOO.log('Stopping P tags', 'info', 'SimpleEditor');
                             //Insert a <br> instead of a <p></p> in Internet Explorer
@@ -3921,7 +4045,7 @@
                 this._listFix(ev);
             }
             if (doExec && action) {
-                this.execCommand(action, null);
+                this.execCommand(action, value);
                 Event.stopEvent(ev);
                 this.nodeChange();
             }
@@ -4279,7 +4403,7 @@
                 if (!this.browser.webkit) {
                      var Fself = this;
                      setTimeout(function() {
-                         Fself._focusWindow.call(Fself);
+                         Fself.focus.call(Fself);
                      }, 5);
                  }
             }
@@ -4323,12 +4447,6 @@
                         this.toolbar.set('disabled', true);
                     }
                     this._mask = document.createElement('DIV');
-                    Dom.setStyle(this._mask, 'height', '100%');
-                    Dom.setStyle(this._mask, 'width', '100%');
-                    Dom.setStyle(this._mask, 'position', 'absolute');
-                    Dom.setStyle(this._mask, 'top', '0');
-                    Dom.setStyle(this._mask, 'left', '0');
-                    Dom.setStyle(this._mask, 'opacity', '.5');
                     Dom.addClass(this._mask, 'yui-editor-masked');
                     this.get('iframe').get('parentNode').appendChild(this._mask);
                 }
@@ -4341,7 +4459,7 @@
                         this.toolbar.set('disabled', false);
                     }
                     this._setDesignMode('on');
-                    this._focusWindow();
+                    this.focus();
                     var self = this;
                     window.setTimeout(function() {
                         self.nodeChange.call(self);
@@ -4380,6 +4498,12 @@
         */
         STR_IMAGE_HERE: 'Image URL Here',
         /**
+        * @property STR_IMAGE_URL
+        * @description The label string for Image URL
+        * @type String
+        */
+        STR_IMAGE_URL: 'Image URL',        
+        /**
         * @property STR_LINK_URL
         * @description The label string for the Link URL.
         * @type String
@@ -4561,7 +4685,7 @@
 
             /**
             * @config ptags
-            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
+            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
             * @default false
             * @type Boolean
             */
@@ -4634,7 +4758,7 @@
             });
             /**
             * @private
-            * @depreciated
+            * @depreciated - No longer used, should use this.get('element')
             * @config textarea
             * @description Internal config for holding the textarea element (replaced with element).
             * @default null
@@ -4645,17 +4769,6 @@
                 writeOnce: true
             });
             /**
-            * @private
-            * @config container
-            * @description Internal config for holding a reference to the container to append a dynamic editor to.
-            * @default null
-            * @type HTMLElement
-            */
-            this.setAttributeConfig('container', {
-                readOnly: true,
-                value: null
-            });
-            /**
             * @config nodeChangeThreshold
             * @description The number of seconds that need to be in between nodeChange processing
             * @default 3
@@ -5002,7 +5115,7 @@
                         this.on('editorContentLoaded', function() {
                             var self = this;
                             setTimeout(function() {
-                                self._focusWindow.call(self, true);
+                                self.focus.call(self);
                                 self.editorDirty = false;
                             }, 400);
                         }, this, true);
@@ -5082,6 +5195,17 @@
                 writeOnce: true,
                 value: attr.resize || false
             });
+
+            /**
+            * @config filterWord
+            * @description Attempt to filter out MS Word HTML from the Editor's output.
+            * @type Boolean
+            */
+            this.setAttributeConfig('filterWord', {
+                value: attr.filterWord || false,
+                validator: YAHOO.lang.isBoolean
+            });
+
         },
         /**
         * @private
@@ -5139,7 +5263,10 @@
                 newHeight = parseInt(this.get('height'), 10);
             }
             if ((height != newHeight) && (newHeight >= parseInt(this.get('height'), 10))) {   
-                Dom.setStyle(this.get('editor_wrapper'), 'height', newHeight + 'px');
+                var anim = this.get('animate');
+                this.set('animate', false);
+                this.set('height', newHeight + 'px');
+                this.set('animate', anim);
                 if (this.browser.ie) {
                     //Internet Explorer needs this
                     this.get('iframe').setStyle('height', '99%');
@@ -5220,7 +5347,7 @@
             var button = this.toolbar.getButtonById(o.button.id);
             var value = button.get('label') + 'px';
             this.execCommand('fontsize', value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5250,7 +5377,7 @@
             var value = this._getSelection();
 
             this.execCommand(cmd, value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5357,7 +5484,7 @@
             }
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     src = 'http://';
                 if (!el) {
@@ -5371,17 +5498,26 @@
                         }
                     }
                 }
-                var str = prompt(this.STR_LINK_URL + ': ', src);
+                var str = prompt(this.STR_IMAGE_URL + ': ', src);
                 if ((str !== '') && (str !== null)) {
                     el.setAttribute('src', str);
-                } else if (str === null) {
+                } else if (str === '') {
                     el.parentNode.removeChild(el);
                     this.currentElement = [];
                     this.nodeChange();
+                } else if ((str === null)) {
+                    src = el.getAttribute('src', 2);
+                    if (src.indexOf(this.get('blankimage')) != -1) {
+                        el.parentNode.removeChild(el);
+                        this.currentElement = [];
+                        this.nodeChange();
+                    }
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this, true);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this, true);
         },
         /**
         * @private
@@ -5418,7 +5554,7 @@
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
 
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     url = '';
 
@@ -5450,7 +5586,9 @@
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this);
 
         },
         /**
@@ -5507,8 +5645,9 @@
 
             this.get('element_cont').setStyle('display', 'none');
             this.get('element_cont').addClass(this.CLASS_CONTAINER);
+            
+            this.set('iframe', this._createIframe());
 
-            this.set('iframe', this._createIframe());
             window.setTimeout(function() {
                 self._setInitialContent.call(self);
             }, 10);
@@ -5648,6 +5787,49 @@
     /* {{{  Command Overrides */
 
         /**
+        * @method cmd_bold
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('bold') is used.
+        */
+        cmd_bold: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontWeight == 'bold') {
+                        el.style.fontWeight = '';
+                        var b = this._getDoc().createElement('b'),
+                        par = el.parentNode;
+                        par.replaceChild(b, el);
+                        b.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+        /**
+        * @method cmd_italic
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('italic') is used.
+        */
+
+        cmd_italic: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontStyle == 'italic') {
+                        el.style.fontStyle = '';
+                        var i = this._getDoc().createElement('i'),
+                        par = el.parentNode;
+                        par.replaceChild(i, el);
+                        i.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+
+
+        /**
         * @method cmd_underline
         * @param value Value passed from the execCommand method
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('underline') is used.
@@ -5682,18 +5864,14 @@
             }
 
             if (!this._isElement(el, 'body') && !this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
+                el.style.backgroundColor = value;
                 this._selectNode(el);
                 exec = false;
-            } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
-                this._selectNode(el);
-                exec = false;
             } else {
                 if (this.get('insert')) {
                     el = this._createInsertElement({ backgroundColor: value });
                 } else {
-                    this._createCurrentElement('span', { backgroundColor: value });
+                    this._createCurrentElement('span', { backgroundColor: value, color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily });
                     this._selectNode(this.currentElement[0]);
                 }
                 exec = false;
@@ -5710,20 +5888,15 @@
             var exec = true,
                 el = this._getSelectedElement();
                 
-
                 if (!this._isElement(el, 'body') && !this._hasSelection()) {
                     Dom.setStyle(el, 'color', value);
                     this._selectNode(el);
                     exec = false;
-                } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                    Dom.setStyle(el, 'color', value);
-                    this._selectNode(el);
-                    exec = false;
                 } else {
                     if (this.get('insert')) {
                         el = this._createInsertElement({ color: value });
                     } else {
-                        this._createCurrentElement('span', { color: value });
+                        this._createCurrentElement('span', { color: value, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily, backgroundColor: el.style.backgroundColor });
                         this._selectNode(this.currentElement[0]);
                     }
                     exec = false;
@@ -5750,6 +5923,12 @@
             var el = this._getSelectedElement(), _a = null;
             if (this._hasParent(el, 'a')) {
                 this.currentElement[0] = this._hasParent(el, 'a');
+            } else if (this._isElement(el, 'li')) {
+                _a = this._getDoc().createElement('a');
+                _a.innerHTML = el.innerHTML;
+                el.innerHTML = '';
+                el.appendChild(_a);
+                this.currentElement[0] = _a;
             } else if (!this._isElement(el, 'a')) {
                 this._createCurrentElement('a');
                 _a = this._swapEl(this.currentElement[0], 'a');
@@ -5772,8 +5951,8 @@
                 value = this.get('blankimage');
             }
 
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari Cursor Position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5820,8 +5999,8 @@
         */
         cmd_inserthtml: function(value) {
             var exec = true, action = 'inserthtml', _span = null, _range = null;
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari cursor position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5855,7 +6034,7 @@
                 if (tag == 'ul') {
                     action = 'insertunorderedlist';
                 }
-            /**
+            /*
             * @knownissue Safari 2.+ doesn't support ordered and unordered lists
             * @browser Safari 2.x
             * The issue with this workaround is that when applied to a set of text
@@ -5890,6 +6069,17 @@
                             this.currentElement[li].parentNode.removeChild(this.currentElement[li]);
                         }
                     }
+                    
+                    var items = list.firstChild.innerHTML.split('<br>');
+                    if (items.length > 0) {
+                        list.innerHTML = '';
+                        for (var i = 0; i < items.length; i++) {
+                            var item = this._getDoc().createElement('li');
+                            item.innerHTML = items[i];
+                            list.appendChild(item);
+                        }
+                    }
+
                     this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
                     this.currentElement[0] = list;
                     var _h = this.currentElement[0].firstChild;
@@ -6009,27 +6199,40 @@
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontsize') is used.
         */
         cmd_fontsize: function(value) {
-            var el = null;
-            if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
-                YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
-            } else if (!this._isElement(this._getSelectedElement(), 'body')) {
-                el = this._getSelectedElement();
-                YAHOO.util.Dom.setStyle(el, 'fontSize', value);
-                if (this.get('insert') && this.browser.ie) {
-                    var r = this._getRange();
-                    r.collapse(false);
-                    r.select();
-                } else {
-                    this._selectNode(el);
+            var el = null, go = true;
+            el = this._getSelectedElement();
+            if (this.browser.webkit) {
+                if (this.currentElement[0]) {
+                    if (el == this.currentElement[0]) {
+                        go = false;
+                        YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                        this._selectNode(el);
+                        this.currentElement[0] = el;
+                    }
                 }
-            } else {
-                if (this.get('insert') && !this._hasSelection()) {
-                    el = this._createInsertElement({ fontSize: value });
-                    this.currentElement[0] = el;
-                    this._selectNode(this.currentElement[0]);
+            }
+            if (go) {
+                if (!this._isElement(this._getSelectedElement(), 'body') && (!this._hasSelection())) {
+                    el = this._getSelectedElement();
+                    YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                    if (this.get('insert') && this.browser.ie) {
+                        var r = this._getRange();
+                        r.collapse(false);
+                        r.select();
+                    } else {
+                        this._selectNode(el);
+                    }
+                } else if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
+                    YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
                 } else {
-                    this._createCurrentElement('span', {'fontSize': value });
-                    this._selectNode(this.currentElement[0]);
+                    if (this.get('insert') && !this._hasSelection()) {
+                        el = this._createInsertElement({ fontSize: value });
+                        this.currentElement[0] = el;
+                        this._selectNode(this.currentElement[0]);
+                    } else {
+                        this._createCurrentElement('span', {'fontSize': value, fontFamily: el.style.fontFamily, color: el.style.color, backgroundColor: el.style.backgroundColor });
+                        this._selectNode(this.currentElement[0]);
+                    }
                 }
             }
             return [false];
@@ -6061,7 +6264,7 @@
         * @method _createInsertElement
         * @description Creates a new "currentElement" then adds some text (and other things) to make it selectable and stylable. Then the user can continue typing.
         * @param {Object} css (optional) Object literal containing styles to apply to the new element.
-        * @return
+        * @return {HTMLElement}
         */
         _createInsertElement: function(css) {
             this._createCurrentElement('span', css);
@@ -6074,7 +6277,7 @@
             } else if (this.browser.ie || this.browser.opera) {
                 el.innerHTML = ' ';
             }
-            this._focusWindow();
+            this.focus();
             this._selectNode(el, true);
             return el;
         },
@@ -6153,8 +6356,8 @@
                     }
                 }
                 if (tar) {
-                    /**
-                    * @knownissue
+                    /*
+                    * @knownissue Safari Cursor Position
                     * @browser Safari 2.x
                     * @description The issue here is that we have no way of knowing where the cursor position is
                     * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -6199,12 +6402,15 @@
                         _tmp[_tmp.length] = _tmp1[e];
                     }
                 }
+
                 
                 for (var i = 0; i < _tmp.length; i++) {
                     if ((YAHOO.util.Dom.getStyle(_tmp[i], 'font-family') == 'yui-tmp') || (_tmp[i].face && (_tmp[i].face == 'yui-tmp'))) {
-                        //TODO Why is this here?!?
-                        //el = _elCreate(_tmp[i].tagName, tagStyle);
-                        el = _elCreate(tagName, tagStyle);
+                        if (tagName !== 'span') {
+                            el = _elCreate(tagName, tagStyle);
+                        } else {
+                            el = _elCreate(_tmp[i].tagName, tagStyle);
+                        }
                         el.innerHTML = _tmp[i].innerHTML;
                         if (this._isElement(_tmp[i], 'ol') || (this._isElement(_tmp[i], 'ul'))) {
                             var fc = _tmp[i].getElementsByTagName('li')[0];
@@ -6311,7 +6517,7 @@
         show: function() {
             if (this.browser.gecko) {
                 this._setDesignMode('on');
-                this._focusWindow();
+                this.focus();
             }
             if (this.browser.webkit) {
                 var self = this;
@@ -6365,6 +6571,7 @@
 
             html = html.replace(/<em([^>]*)>/gi, '<i$1>');
             html = html.replace(/<\/em>/gi, '</i>');
+            html = html.replace(/_moz_dirty=""/gi, '');
             
             //Put embed tags back in..
             html = html.replace(/<YUI_EMBED([^>]*)>/gi, '<embed$1>');
@@ -6381,7 +6588,8 @@
             html = html.replace(/<script([^>]*)>/gi, '<bad>');
             html = html.replace(/<\/script([^>]*)>/gi, '</bad>');
             //Replace the line feeds
-            html = html.replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            html = html.replace(/\r\n/g, '<YUI_LF>').replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            
             //Remove Bad HTML elements (used to be script nodes)
             html = html.replace(new RegExp('<bad([^>]*)>(.*?)<\/bad>', 'gi'), '');
             //Replace the lines feeds
@@ -6404,6 +6612,9 @@
             //Make some backups...
             html = this.pre_filter_linebreaks(html, markup);
 
+            //Filter MS Word
+            html = this.filter_msword(html);
+
 		    html = html.replace(/<img([^>]*)\/>/gi, '<YUI_IMG$1>');
 		    html = html.replace(/<img([^>]*)>/gi, '<YUI_IMG$1>');
 
@@ -6425,8 +6636,25 @@
                 html = html.replace(/<b(\s+[^>]*)?>/gi, '<strong$1>');
                 html = html.replace(/<\/b>/gi, '</strong>');
             }
+
+            html = html.replace(/_moz_dirty=""/gi, '');
+
+            //normalize strikethrough
+            html = html.replace(/<strike/gi, '<span style="text-decoration: line-through;"');
+            html = html.replace(/\/strike>/gi, '/span>');
             
+            
             //Case Changing
+            if (this.browser.ie) {
+                html = html.replace(/text-decoration/gi, 'text-decoration');
+                html = html.replace(/font-weight/gi, 'font-weight');
+                html = html.replace(/_width="([^>]*)"/gi, '');
+                html = html.replace(/_height="([^>]*)"/gi, '');
+                //Cleanup Image URL's
+                var url = this._baseHREF.replace(/\//gi, '\\/'),
+                    re = new RegExp('src="' + url, 'gi');
+                html = html.replace(re, 'src="');
+            }
 		    html = html.replace(/<font/gi, '<font');
 		    html = html.replace(/<\/font>/gi, '</font>');
 		    html = html.replace(/<span/gi, '<span');
@@ -6486,9 +6714,9 @@
 		    html = html.replace(/<\/YUI_EMBED>/g, '<\/embed>');
             
             //This should fix &s in URL's
-            html = html.replace(' & ', 'YUI_AMP');
-            html = html.replace('&', '&');
-            html = html.replace('YUI_AMP', '&');
+            html = html.replace(/ & /gi, 'YUI_AMP');
+            html = html.replace(/&/gi, '&');
+            html = html.replace(/YUI_AMP/gi, ' & ');
 
             //Trim the output, removing whitespace from the beginning and end
             html = YAHOO.lang.trim(html);
@@ -6522,6 +6750,50 @@
             return html;
         },
         /**
+        * @method filter_msword
+        * @param String html The HTML string to filter
+        * @description Filters out msword html attributes and other junk. Activate with filterWord: true in config
+        */
+        filter_msword: function(html) {
+            if (!this.get('filterWord')) {
+                return html;
+            }
+            //Remove the ms o: tags
+            html = html.replace(/<o:p>\s*<\/o:p>/g, '');
+            html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, ' ');
+
+            //Remove the ms w: tags
+            html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '');
+
+            //Remove mso-? styles.
+            html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '');
+
+            //Remove more bogus MS styles.
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '');
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '');
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
+            html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
+            html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" );
+            html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '');
+            html = html.replace( /\s*tab-stops:[^"]*/gi, '');
+
+            //Remove XML declarations
+            html = html.replace(/<\\?\?xml[^>]*>/gi, '');
+
+            //Remove lang
+            html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove language tags
+            html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove onmouseover and onmouseout events (from MS Word comments effect)
+            html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3");
+            html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3");
+            
+            return html;
+        },
+        /**
         * @method filter_invalid_lists
         * @param String html The HTML string to filter
         * @description Filters invalid ol and ul list markup, converts this: <li></li><ol>..</ol> to this: <li></li><li><ol>..</ol></li>
@@ -6531,16 +6803,16 @@
 
             html = html.replace(/<\/li><ol>/gi, '</li><li><ol>');
             html = html.replace(/<\/ol>/gi, '</ol></li>');
-            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>\n");
+            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>");
 
             html = html.replace(/<\/li><ul>/gi, '</li><li><ul>');
             html = html.replace(/<\/ul>/gi, '</ul></li>');
-            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>\n");
+            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>");
 
-            html = html.replace(/<\/li>/gi, "</li>\n");
-            html = html.replace(/<\/ol>/gi, "</ol>\n");
-            html = html.replace(/<ol>/gi, "<ol>\n");
-            html = html.replace(/<ul>/gi, "<ul>\n");
+            html = html.replace(/<\/li>/gi, "</li>");
+            html = html.replace(/<\/ol>/gi, "</ol>");
+            html = html.replace(/<ol>/gi, "<ol>");
+            html = html.replace(/<ul>/gi, "<ul>");
             return html;
         },
         /**
@@ -6555,6 +6827,10 @@
                 html = html.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi, '    ');
                 html = html.replace(/Apple-style-span/gi, '');
                 html = html.replace(/style="line-height: normal;"/gi, '');
+                html = html.replace(/yui-wk-div/gi, '');
+                html = html.replace(/yui-wk-p/gi, '');
+
+
                 //Remove bogus LI's
                 html = html.replace(/<li><\/li>/gi, '');
                 html = html.replace(/<li> <\/li>/gi, '');
@@ -6564,8 +6840,8 @@
 		            html = html.replace(/<div([^>]*)>/g, '<p$1>');
 				    html = html.replace(/<\/div>/gi, '</p>');
                 } else {
-                    html = html.replace(/<div>/gi, '');
-				    html = html.replace(/<\/div>/gi, '<br>');
+                    html = html.replace(/<div>/gi, '<br>');
+				    html = html.replace(/<\/div>/gi, '');
                 }
             }
             return html;
@@ -6598,8 +6874,6 @@
             if (this.browser.ie) {
 		        html = html.replace(/ class= /gi, '');
 		        html = html.replace(/ class= >/gi, '');
-		        html = html.replace(/_height="([^>])"/gi, '');
-		        html = html.replace(/_width="([^>])"/gi, '');
             }
             
             return html;
@@ -6724,7 +6998,7 @@
         closeWindow: function() {
             //this.unsubscribeAll('afterExecCommand');
             this.toolbar.resetAllButtons();
-            this._focusWindow();        
+            this.focus();        
         },
         /**
         * @method destroy
@@ -6897,75 +7171,86 @@
 * @type YAHOO.util.CustomEvent
 */
 
+/**
+* @event editorWindowFocus
+* @description Fires when the iframe is focused. Note, this is window focus event, not an Editor focus event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event editorWindowBlur
+* @description Fires when the iframe is blurred. Note, this is window blur event, not an Editor blur event.
+* @type YAHOO.util.CustomEvent
+*/
 
+
+/**
+ * @description Singleton object used to track the open window objects and panels across the various open editors
+ * @class EditorInfo
+ * @static
+*/
+YAHOO.widget.EditorInfo = {
     /**
-     * @description Singleton object used to track the open window objects and panels across the various open editors
-     * @class EditorInfo
-     * @static
+    * @private
+    * @property _instances
+    * @description A reference to all editors on the page.
+    * @type Object
     */
-    YAHOO.widget.EditorInfo = {
-        /**
-        * @private
-        * @property _instances
-        * @description A reference to all editors on the page.
-        * @type Object
-        */
-        _instances: {},
-        /**
-        * @private
-        * @property blankImage
-        * @description A reference to the blankImage url
-        * @type String 
-        */
-        blankImage: '',
-        /**
-        * @private
-        * @property window
-        * @description A reference to the currently open window object in any editor on the page.
-        * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
-        */
-        window: {},
-        /**
-        * @private
-        * @property panel
-        * @description A reference to the currently open panel in any editor on the page.
-        * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
-        */
-        panel: null,
-        /**
-        * @method getEditorById
-        * @description Returns a reference to the Editor object associated with the given textarea
-        * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
-        * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
-        */
-        getEditorById: function(id) {
-            if (!YAHOO.lang.isString(id)) {
-                //Not a string, assume a node Reference
-                id = id.id;
+    _instances: {},
+    /**
+    * @private
+    * @property blankImage
+    * @description A reference to the blankImage url
+    * @type String 
+    */
+    blankImage: '',
+    /**
+    * @private
+    * @property window
+    * @description A reference to the currently open window object in any editor on the page.
+    * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
+    */
+    window: {},
+    /**
+    * @private
+    * @property panel
+    * @description A reference to the currently open panel in any editor on the page.
+    * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
+    */
+    panel: null,
+    /**
+    * @method getEditorById
+    * @description Returns a reference to the Editor object associated with the given textarea
+    * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
+    * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
+    */
+    getEditorById: function(id) {
+        if (!YAHOO.lang.isString(id)) {
+            //Not a string, assume a node Reference
+            id = id.id;
+        }
+        if (this._instances[id]) {
+            return this._instances[id];
+        }
+        return false;
+    },
+    /**
+    * @method toString
+    * @description Returns a string representing the EditorInfo.
+    * @return {String}
+    */
+    toString: function() {
+        var len = 0;
+        for (var i in this._instances) {
+            if (Lang.hasOwnProperty(this._instances, i)) {
+                len++;
             }
-            if (this._instances[id]) {
-                return this._instances[id];
-            }
-            return false;
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the EditorInfo.
-        * @return {String}
-        */
-        toString: function() {
-            var len = 0;
-            for (var i in this._instances) {
-                if (Lang.hasOwnProperty(this._instances, i)) {
-                    len++;
-                }
-            }
-            return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
         }
-    };
+        return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
+    }
+};
 
 
 
     
 })();
-YAHOO.register("simpleeditor", YAHOO.widget.SimpleEditor, {version: "2.6.0", build: "1321"});
+YAHOO.register("simpleeditor", YAHOO.widget.SimpleEditor, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/editor/simpleeditor-min.js
===================================================================
--- trunk/root/static/yui/editor/simpleeditor-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/simpleeditor-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,23 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var B=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;if(YAHOO.widget.Button){YAHOO.widget.ToolbarButtonAdvanced=YAHOO.widget.Button;YAHOO.widget.ToolbarButtonAdvanced.prototype.buttonType="rich";YAHOO.widget.ToolbarButtonAdvanced.prototype.checkValue=function(F){var E=this.getMenu().getItems();if(E.length===0){this.getMenu()._onBeforeShow();E=this.getMenu().getItems();}for(var D=0;D<E.length;D++){E[D].cfg.setProperty("checked",false);if(E[D].value==F){E[D].cfg.setProperty("checked",true);}}};}else{YAHOO.widget.ToolbarButtonAdvanced=function(){};}YAHOO.widget.ToolbarButton=function(E,D){if(C.isObject(arguments[0])&&!B.get(E).nodeType){D=E;}var G=(D||{});var F={element:null,attributes:G};if(!F.attributes.type){F.attributes.type="push";}F.element=document.createElement("span");F.element.setAttribute("unselectable","on");F.element.className="yui-button yui-"+F.attributes.type+"-button";F.element.innerHTML='<span class="first-child"><a href="#">LABEL</a></span>';F.el!
 ement.firstChild.firstChild.tabIndex="-1";F.attributes.id=B.generateId();YAHOO.widget.ToolbarButton.superclass.constructor.call(this,F.element,F.attributes);};YAHOO.extend(YAHOO.widget.ToolbarButton,YAHOO.util.Element,{buttonType:"normal",_handleMouseOver:function(){if(!this.get("disabled")){this.addClass("yui-button-hover");this.addClass("yui-"+this.get("type")+"-button-hover");}},_handleMouseOut:function(){this.removeClass("yui-button-hover");this.removeClass("yui-"+this.get("type")+"-button-hover");},checkValue:function(F){if(this.get("type")=="menu"){var E=this._button.options;for(var D=0;D<E.length;D++){if(E[D].value==F){E.selectedIndex=D;}}}},init:function(E,D){YAHOO.widget.ToolbarButton.superclass.init.call(this,E,D);this.on("mouseover",this._handleMouseOver,this,true);this.on("mouseout",this._handleMouseOut,this,true);},initAttributes:function(D){YAHOO.widget.ToolbarButton.superclass.initAttributes.call(this,D);this.setAttributeConfig("value",{value:D.value});this.s!
 etAttributeConfig("menu",{value:D.menu||false});this.setAttrib!
 uteConfi
g("type",{value:D.type,writeOnce:true,method:function(H){var G,F;if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}switch(H){case"select":case"menu":G=document.createElement("select");var I=this.get("menu");for(var E=0;E<I.length;E++){F=document.createElement("option");F.innerHTML=I[E].text;F.value=I[E].value;if(I[E].checked){F.selected=true;}G.appendChild(F);}this._button.parentNode.replaceChild(G,this._button);A.on(G,"change",this._handleSelect,this,true);this._button=G;break;}}});this.setAttributeConfig("disabled",{value:D.disabled||false,method:function(E){if(E){this.addClass("yui-button-disabled");this.addClass("yui-"+this.get("type")+"-button-disabled");}else{this.removeClass("yui-button-disabled");this.removeClass("yui-"+this.get("type")+"-button-disabled");}if(this.get("type")=="menu"){this._button.disabled=E;}}});this.setAttributeConfig("label",{value:D.label,method:function(E){if(!this._button){this._button=this.get("element").getElem!
 entsByTagName("a")[0];}if(this.get("type")=="push"){this._button.innerHTML=E;}}});this.setAttributeConfig("title",{value:D.title});this.setAttributeConfig("container",{value:null,writeOnce:true,method:function(E){this.appendTo(E);}});},_handleSelect:function(E){var D=A.getTarget(E);var F=D.options[D.selectedIndex].value;this.fireEvent("change",{type:"change",value:F});},getMenu:function(){return this.get("menu");},destroy:function(){A.purgeElement(this.get("element"),true);this.get("element").parentNode.removeChild(this.get("element"));for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;}}},fireEvent:function(E,D){if(this.DOM_EVENTS[E]&&this.get("disabled")){return ;}YAHOO.widget.ToolbarButton.superclass.fireEvent.call(this,E,D);},toString:function(){return"ToolbarButton ("+this.get("id")+")";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F){var E=F;if(D.isString(F)){E=this.getButtonById(F);}if(D.isNumber(F)){E=this.getButt!
 onByIndex(F);}if((!(E instanceof YAHOO.widget.ToolbarButton))&!
 &(!(E in
stanceof YAHOO.widget.ToolbarButtonAdvanced))){E=this.getButtonByValue(F);}if((E instanceof YAHOO.widget.ToolbarButton)||(E instanceof YAHOO.widget.ToolbarButtonAdvanced)){return E;}return false;};YAHOO.widget.Toolbar=function(I,H){if(D.isObject(arguments[0])&&!C.get(I).nodeType){H=I;}var K={};if(H){D.augmentObject(K,H);}var J={element:null,attributes:K};if(D.isString(I)&&C.get(I)){J.element=C.get(I);}else{if(D.isObject(I)&&C.get(I)&&C.get(I).nodeType){J.element=C.get(I);}}if(!J.element){J.element=document.createElement("DIV");J.element.id=C.generateId();if(K.container&&C.get(K.container)){C.get(K.container).appendChild(J.element);}}if(!J.element.id){J.element.id=((D.isString(I))?I:C.generateId());}var F=document.createElement("fieldset");var G=document.createElement("legend");G.innerHTML="Toolbar";F.appendChild(G);var E=document.createElement("DIV");J.attributes.cont=E;C.addClass(E,"yui-toolbar-subcont");F.appendChild(E);J.element.appendChild(F);J.element.tabIndex=-1;J.attr!
 ibutes.element=J.element;J.attributes.id=J.element.id;YAHOO.widget.Toolbar.superclass.constructor.call(this,J.element,J.attributes);};YAHOO.extend(YAHOO.widget.Toolbar,YAHOO.util.Element,{_addMenuClasses:function(H,E,I){C.addClass(this.element,"yui-toolbar-"+I.get("value")+"-menu");if(C.hasClass(I._button.parentNode.parentNode,"yui-toolbar-select")){C.addClass(this.element,"yui-toolbar-select-menu");}var F=this.getItems();for(var G=0;G<F.length;G++){C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-").toLowerCase():F[G]._oText.nodeValue.replace(/ /g,"-").toLowerCase()));C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-"):F[G]._oText.nodeValue.replace(/ /g,"-")));}},buttonType:YAHOO.widget.ToolbarButton,dd:null,_colorData:{"#111111":"Obsidian","#2D2D2D":"Dark Gray","#434343":"Shale","#5B5B5B":"Flint","#737373":"Gray","#8B8B8B":"Concrete","#A2A2A2":"Gray","#B9B9B9":"Titanium","#00!
 0000":"Black","#D0D0D0":"Light Gray","#E6E6E6":"Silver","#FFFF!
 FF":"Whi
te","#BFBF00":"Pumpkin","#FFFF00":"Yellow","#FFFF40":"Banana","#FFFF80":"Pale Yellow","#FFFFBF":"Butter","#525330":"Raw Siena","#898A49":"Mildew","#AEA945":"Olive","#7F7F00":"Paprika","#C3BE71":"Earth","#E0DCAA":"Khaki","#FCFAE1":"Cream","#60BF00":"Cactus","#80FF00":"Chartreuse","#A0FF40":"Green","#C0FF80":"Pale Lime","#DFFFBF":"Light Mint","#3B5738":"Green","#668F5A":"Lime Gray","#7F9757":"Yellow","#407F00":"Clover","#8A9B55":"Pistachio","#B7C296":"Light Jade","#E6EBD5":"Breakwater","#00BF00":"Spring Frost","#00FF80":"Pastel Green","#40FFA0":"Light Emerald","#80FFC0":"Sea Foam","#BFFFDF":"Sea Mist","#033D21":"Dark Forrest","#438059":"Moss","#7FA37C":"Medium Green","#007F40":"Pine","#8DAE94":"Yellow Gray Green","#ACC6B5":"Aqua Lung","#DDEBE2":"Sea Vapor","#00BFBF":"Fog","#00FFFF":"Cyan","#40FFFF":"Turquoise Blue","#80FFFF":"Light Aqua","#BFFFFF":"Pale Cyan","#033D3D":"Dark Teal","#347D7E":"Gray Turquoise","#609A9F":"Green Blue","#007F7F":"Seaweed","#96BDC4":"Green Gray","#B5!
 D1D7":"Soapstone","#E2F1F4":"Light Turquoise","#0060BF":"Summer Sky","#0080FF":"Sky Blue","#40A0FF":"Electric Blue","#80C0FF":"Light Azure","#BFDFFF":"Ice Blue","#1B2C48":"Navy","#385376":"Biscay","#57708F":"Dusty Blue","#00407F":"Sea Blue","#7792AC":"Sky Blue Gray","#A8BED1":"Morning Sky","#DEEBF6":"Vapor","#0000BF":"Deep Blue","#0000FF":"Blue","#4040FF":"Cerulean Blue","#8080FF":"Evening Blue","#BFBFFF":"Light Blue","#212143":"Deep Indigo","#373E68":"Sea Blue","#444F75":"Night Blue","#00007F":"Indigo Blue","#585E82":"Dockside","#8687A4":"Blue Gray","#D2D1E1":"Light Blue Gray","#6000BF":"Neon Violet","#8000FF":"Blue Violet","#A040FF":"Violet Purple","#C080FF":"Violet Dusk","#DFBFFF":"Pale Lavender","#302449":"Cool Shale","#54466F":"Dark Indigo","#655A7F":"Dark Violet","#40007F":"Violet","#726284":"Smoky Violet","#9E8FA9":"Slate Gray","#DCD1DF":"Violet White","#BF00BF":"Royal Violet","#FF00FF":"Fuchsia","#FF40FF":"Magenta","#FF80FF":"Orchid","#FFBFFF":"Pale Magenta","#4A234!
 A":"Dark Purple","#794A72":"Medium Purple","#936386":"Cool Gra!
 nite","#
7F007F":"Purple","#9D7292":"Purple Moon","#C0A0B6":"Pale Purple","#ECDAE5":"Pink Cloud","#BF005F":"Hot Pink","#FF007F":"Deep Pink","#FF409F":"Grape","#FF80BF":"Electric Pink","#FFBFDF":"Pink","#451528":"Purple Red","#823857":"Purple Dino","#A94A76":"Purple Gray","#7F003F":"Rose","#BC6F95":"Antique Mauve","#D8A5BB":"Cool Marble","#F7DDE9":"Pink Granite","#C00000":"Apple","#FF0000":"Fire Truck","#FF4040":"Pale Red","#FF8080":"Salmon","#FFC0C0":"Warm Pink","#441415":"Sepia","#82393C":"Rust","#AA4D4E":"Brick","#800000":"Brick Red","#BC6E6E":"Mauve","#D8A3A4":"Shrimp Pink","#F8DDDD":"Shell Pink","#BF5F00":"Dark Orange","#FF7F00":"Orange","#FF9F40":"Grapefruit","#FFBF80":"Canteloupe","#FFDFBF":"Wax","#482C1B":"Dark Brick","#855A40":"Dirt","#B27C51":"Tan","#7F3F00":"Nutmeg","#C49B71":"Mustard","#E1C4A8":"Pale Tan","#FDEEE0":"Marble"},_colorPicker:null,STR_COLLAPSE:"Collapse Toolbar",STR_SPIN_LABEL:"Spin Button with value {VALUE}. Use Control Shift Up Arrow and Control Shift Down ar!
 row keys to increase or decrease the value.",STR_SPIN_UP:"Click to increase the value of this input",STR_SPIN_DOWN:"Click to decrease the value of this input",_titlebar:null,browser:YAHOO.env.ua,_buttonList:null,_buttonGroupList:null,_sep:null,_sepCount:null,_dragHandle:null,_toolbarConfigs:{renderer:true},CLASS_CONTAINER:"yui-toolbar-container",CLASS_DRAGHANDLE:"yui-toolbar-draghandle",CLASS_SEPARATOR:"yui-toolbar-separator",CLASS_DISABLED:"yui-toolbar-disabled",CLASS_PREFIX:"yui-toolbar",init:function(F,E){YAHOO.widget.Toolbar.superclass.init.call(this,F,E);
+(function(){var B=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;if(YAHOO.widget.Button){YAHOO.widget.ToolbarButtonAdvanced=YAHOO.widget.Button;YAHOO.widget.ToolbarButtonAdvanced.prototype.buttonType="rich";YAHOO.widget.ToolbarButtonAdvanced.prototype.checkValue=function(F){var E=this.getMenu().getItems();if(E.length===0){this.getMenu()._onBeforeShow();E=this.getMenu().getItems();}for(var D=0;D<E.length;D++){E[D].cfg.setProperty("checked",false);if(E[D].value==F){E[D].cfg.setProperty("checked",true);}}};}else{YAHOO.widget.ToolbarButtonAdvanced=function(){};}YAHOO.widget.ToolbarButton=function(E,D){if(C.isObject(arguments[0])&&!B.get(E).nodeType){D=E;}var G=(D||{});var F={element:null,attributes:G};if(!F.attributes.type){F.attributes.type="push";}F.element=document.createElement("span");F.element.setAttribute("unselectable","on");F.element.className="yui-button yui-"+F.attributes.type+"-button";F.element.innerHTML='<span class="first-child"><a href="#">LABEL</a></span>';F.el!
 ement.firstChild.firstChild.tabIndex="-1";F.attributes.id=(F.attributes.id||B.generateId());F.element.id=F.attributes.id;YAHOO.widget.ToolbarButton.superclass.constructor.call(this,F.element,F.attributes);};YAHOO.extend(YAHOO.widget.ToolbarButton,YAHOO.util.Element,{buttonType:"normal",_handleMouseOver:function(){if(!this.get("disabled")){this.addClass("yui-button-hover");this.addClass("yui-"+this.get("type")+"-button-hover");}},_handleMouseOut:function(){this.removeClass("yui-button-hover");this.removeClass("yui-"+this.get("type")+"-button-hover");},checkValue:function(F){if(this.get("type")=="menu"){var E=this._button.options;for(var D=0;D<E.length;D++){if(E[D].value==F){E.selectedIndex=D;}}}},init:function(E,D){YAHOO.widget.ToolbarButton.superclass.init.call(this,E,D);this.on("mouseover",this._handleMouseOver,this,true);this.on("mouseout",this._handleMouseOut,this,true);this.on("click",function(F){A.stopEvent(F);return false;},this,true);},initAttributes:function(D){YAHO!
 O.widget.ToolbarButton.superclass.initAttributes.call(this,D);!
 this.set
AttributeConfig("value",{value:D.value});this.setAttributeConfig("menu",{value:D.menu||false});this.setAttributeConfig("type",{value:D.type,writeOnce:true,method:function(H){var G,F;if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}switch(H){case"select":case"menu":G=document.createElement("select");var I=this.get("menu");for(var E=0;E<I.length;E++){F=document.createElement("option");F.innerHTML=I[E].text;F.value=I[E].value;if(I[E].checked){F.selected=true;}G.appendChild(F);}this._button.parentNode.replaceChild(G,this._button);A.on(G,"change",this._handleSelect,this,true);this._button=G;break;}}});this.setAttributeConfig("disabled",{value:D.disabled||false,method:function(E){if(E){this.addClass("yui-button-disabled");this.addClass("yui-"+this.get("type")+"-button-disabled");}else{this.removeClass("yui-button-disabled");this.removeClass("yui-"+this.get("type")+"-button-disabled");}if(this.get("type")=="menu"){this._button.disabled=E;}}});this.se!
 tAttributeConfig("label",{value:D.label,method:function(E){if(!this._button){this._button=this.get("element").getElementsByTagName("a")[0];}if(this.get("type")=="push"){this._button.innerHTML=E;}}});this.setAttributeConfig("title",{value:D.title});this.setAttributeConfig("container",{value:null,writeOnce:true,method:function(E){this.appendTo(E);}});},_handleSelect:function(E){var D=A.getTarget(E);var F=D.options[D.selectedIndex].value;this.fireEvent("change",{type:"change",value:F});},getMenu:function(){return this.get("menu");},destroy:function(){A.purgeElement(this.get("element"),true);this.get("element").parentNode.removeChild(this.get("element"));for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;}}},fireEvent:function(E,D){if(this.DOM_EVENTS[E]&&this.get("disabled")){A.stopEvent(D);return;}YAHOO.widget.ToolbarButton.superclass.fireEvent.call(this,E,D);},toString:function(){return"ToolbarButton ("+this.get("id")+")";}});})();(function(){var C=YAHOO.util.Dom,A=!
 YAHOO.util.Event,D=YAHOO.lang;var B=function(F){var E=F;if(D.i!
 sString(
F)){E=this.getButtonById(F);}if(D.isNumber(F)){E=this.getButtonByIndex(F);}if((!(E instanceof YAHOO.widget.ToolbarButton))&&(!(E instanceof YAHOO.widget.ToolbarButtonAdvanced))){E=this.getButtonByValue(F);}if((E instanceof YAHOO.widget.ToolbarButton)||(E instanceof YAHOO.widget.ToolbarButtonAdvanced)){return E;}return false;};YAHOO.widget.Toolbar=function(I,H){if(D.isObject(arguments[0])&&!C.get(I).nodeType){H=I;}var K={};if(H){D.augmentObject(K,H);}var J={element:null,attributes:K};if(D.isString(I)&&C.get(I)){J.element=C.get(I);}else{if(D.isObject(I)&&C.get(I)&&C.get(I).nodeType){J.element=C.get(I);}}if(!J.element){J.element=document.createElement("DIV");J.element.id=C.generateId();if(K.container&&C.get(K.container)){C.get(K.container).appendChild(J.element);}}if(!J.element.id){J.element.id=((D.isString(I))?I:C.generateId());}var F=document.createElement("fieldset");var G=document.createElement("legend");G.innerHTML="Toolbar";F.appendChild(G);var E=document.createElement("D!
 IV");J.attributes.cont=E;C.addClass(E,"yui-toolbar-subcont");F.appendChild(E);J.element.appendChild(F);J.element.tabIndex=-1;J.attributes.element=J.element;J.attributes.id=J.element.id;YAHOO.widget.Toolbar.superclass.constructor.call(this,J.element,J.attributes);};YAHOO.extend(YAHOO.widget.Toolbar,YAHOO.util.Element,{_addMenuClasses:function(H,E,I){C.addClass(this.element,"yui-toolbar-"+I.get("value")+"-menu");if(C.hasClass(I._button.parentNode.parentNode,"yui-toolbar-select")){C.addClass(this.element,"yui-toolbar-select-menu");}var F=this.getItems();for(var G=0;G<F.length;G++){C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-").toLowerCase():F[G]._oText.nodeValue.replace(/ /g,"-").toLowerCase()));C.addClass(F[G].element,"yui-toolbar-"+I.get("value")+"-"+((F[G].value)?F[G].value.replace(/ /g,"-"):F[G]._oText.nodeValue.replace(/ /g,"-")));}},buttonType:YAHOO.widget.ToolbarButton,dd:null,_colorData:{"#111111":"Obsidian","#2D2D2!
 D":"Dark Gray","#434343":"Shale","#5B5B5B":"Flint","#737373":"!
 Gray","#
8B8B8B":"Concrete","#A2A2A2":"Gray","#B9B9B9":"Titanium","#000000":"Black","#D0D0D0":"Light Gray","#E6E6E6":"Silver","#FFFFFF":"White","#BFBF00":"Pumpkin","#FFFF00":"Yellow","#FFFF40":"Banana","#FFFF80":"Pale Yellow","#FFFFBF":"Butter","#525330":"Raw Siena","#898A49":"Mildew","#AEA945":"Olive","#7F7F00":"Paprika","#C3BE71":"Earth","#E0DCAA":"Khaki","#FCFAE1":"Cream","#60BF00":"Cactus","#80FF00":"Chartreuse","#A0FF40":"Green","#C0FF80":"Pale Lime","#DFFFBF":"Light Mint","#3B5738":"Green","#668F5A":"Lime Gray","#7F9757":"Yellow","#407F00":"Clover","#8A9B55":"Pistachio","#B7C296":"Light Jade","#E6EBD5":"Breakwater","#00BF00":"Spring Frost","#00FF80":"Pastel Green","#40FFA0":"Light Emerald","#80FFC0":"Sea Foam","#BFFFDF":"Sea Mist","#033D21":"Dark Forrest","#438059":"Moss","#7FA37C":"Medium Green","#007F40":"Pine","#8DAE94":"Yellow Gray Green","#ACC6B5":"Aqua Lung","#DDEBE2":"Sea Vapor","#00BFBF":"Fog","#00FFFF":"Cyan","#40FFFF":"Turquoise Blue","#80FFFF":"Light Aqua","#BFFFFF":!
 "Pale Cyan","#033D3D":"Dark Teal","#347D7E":"Gray Turquoise","#609A9F":"Green Blue","#007F7F":"Seaweed","#96BDC4":"Green Gray","#B5D1D7":"Soapstone","#E2F1F4":"Light Turquoise","#0060BF":"Summer Sky","#0080FF":"Sky Blue","#40A0FF":"Electric Blue","#80C0FF":"Light Azure","#BFDFFF":"Ice Blue","#1B2C48":"Navy","#385376":"Biscay","#57708F":"Dusty Blue","#00407F":"Sea Blue","#7792AC":"Sky Blue Gray","#A8BED1":"Morning Sky","#DEEBF6":"Vapor","#0000BF":"Deep Blue","#0000FF":"Blue","#4040FF":"Cerulean Blue","#8080FF":"Evening Blue","#BFBFFF":"Light Blue","#212143":"Deep Indigo","#373E68":"Sea Blue","#444F75":"Night Blue","#00007F":"Indigo Blue","#585E82":"Dockside","#8687A4":"Blue Gray","#D2D1E1":"Light Blue Gray","#6000BF":"Neon Violet","#8000FF":"Blue Violet","#A040FF":"Violet Purple","#C080FF":"Violet Dusk","#DFBFFF":"Pale Lavender","#302449":"Cool Shale","#54466F":"Dark Indigo","#655A7F":"Dark Violet","#40007F":"Violet","#726284":"Smoky Violet","#9E8FA9":"Slate Gray","#DCD1DF":!
 "Violet White","#BF00BF":"Royal Violet","#FF00FF":"Fuchsia","#!
 FF40FF":
"Magenta","#FF80FF":"Orchid","#FFBFFF":"Pale Magenta","#4A234A":"Dark Purple","#794A72":"Medium Purple","#936386":"Cool Granite","#7F007F":"Purple","#9D7292":"Purple Moon","#C0A0B6":"Pale Purple","#ECDAE5":"Pink Cloud","#BF005F":"Hot Pink","#FF007F":"Deep Pink","#FF409F":"Grape","#FF80BF":"Electric Pink","#FFBFDF":"Pink","#451528":"Purple Red","#823857":"Purple Dino","#A94A76":"Purple Gray","#7F003F":"Rose","#BC6F95":"Antique Mauve","#D8A5BB":"Cool Marble","#F7DDE9":"Pink Granite","#C00000":"Apple","#FF0000":"Fire Truck","#FF4040":"Pale Red","#FF8080":"Salmon","#FFC0C0":"Warm Pink","#441415":"Sepia","#82393C":"Rust","#AA4D4E":"Brick","#800000":"Brick Red","#BC6E6E":"Mauve","#D8A3A4":"Shrimp Pink","#F8DDDD":"Shell Pink","#BF5F00":"Dark Orange","#FF7F00":"Orange","#FF9F40":"Grapefruit","#FFBF80":"Canteloupe","#FFDFBF":"Wax","#482C1B":"Dark Brick","#855A40":"Dirt","#B27C51":"Tan","#7F3F00":"Nutmeg","#C49B71":"Mustard","#E1C4A8":"Pale Tan","#FDEEE0":"Marble"},_colorPicker:null,S!
 TR_COLLAPSE:"Collapse Toolbar",STR_SPIN_LABEL:"Spin Button with value {VALUE}. Use Control Shift Up Arrow and Control Shift Down arrow keys to increase or decrease the value.",STR_SPIN_UP:"Click to increase the value of this input",STR_SPIN_DOWN:"Click to decrease the value of this input",_titlebar:null,browser:YAHOO.env.ua,_buttonList:null,_buttonGroupList:null,_sep:null,_sepCount:null,_dragHandle:null,_toolbarConfigs:{renderer:true},CLASS_CONTAINER:"yui-toolbar-container",CLASS_DRAGHANDLE:"yui-toolbar-draghandle",CLASS_SEPARATOR:"yui-toolbar-separator",CLASS_DISABLED:"yui-toolbar-disabled",CLASS_PREFIX:"yui-toolbar",init:function(F,E){YAHOO.widget.Toolbar.superclass.init.call(this,F,E);
 },initAttributes:function(E){YAHOO.widget.Toolbar.superclass.initAttributes.call(this,E);this.addClass(this.CLASS_CONTAINER);this.setAttributeConfig("buttonType",{value:E.buttonType||"basic",writeOnce:true,validator:function(F){switch(F){case"advanced":case"basic":return true;}return false;},method:function(F){if(F=="advanced"){if(YAHOO.widget.Button){this.buttonType=YAHOO.widget.ToolbarButtonAdvanced;}else{this.buttonType=YAHOO.widget.ToolbarButton;}}else{this.buttonType=YAHOO.widget.ToolbarButton;}}});this.setAttributeConfig("buttons",{value:[],writeOnce:true,method:function(G){for(var F in G){if(D.hasOwnProperty(G,F)){if(G[F].type=="separator"){this.addSeparator();}else{if(G[F].group!==undefined){this.addButtonGroup(G[F]);}else{this.addButton(G[F]);}}}}}});this.setAttributeConfig("disabled",{value:false,method:function(F){if(this.get("disabled")===F){return false;}if(F){this.addClass(this.CLASS_DISABLED);this.set("draggable",false);this.disableAllButtons();}else{this.rem!
 oveClass(this.CLASS_DISABLED);if(this._configs.draggable._initialConfig.value){this.set("draggable",true);}this.resetAllButtons();}}});this.setAttributeConfig("cont",{value:E.cont,readOnly:true});this.setAttributeConfig("grouplabels",{value:((E.grouplabels===false)?false:true),method:function(F){if(F){C.removeClass(this.get("cont"),(this.CLASS_PREFIX+"-nogrouplabels"));}else{C.addClass(this.get("cont"),(this.CLASS_PREFIX+"-nogrouplabels"));}}});this.setAttributeConfig("titlebar",{value:false,method:function(G){if(G){if(this._titlebar&&this._titlebar.parentNode){this._titlebar.parentNode.removeChild(this._titlebar);}this._titlebar=document.createElement("DIV");this._titlebar.tabIndex="-1";A.on(this._titlebar,"focus",function(){this._handleFocus();},this,true);C.addClass(this._titlebar,this.CLASS_PREFIX+"-titlebar");if(D.isString(G)){var F=document.createElement("h2");F.tabIndex="-1";F.innerHTML='<a href="#" tabIndex="0">'+G+"</a>";this._titlebar.appendChild(F);A.on(F.firstCh!
 ild,"click",function(H){A.stopEvent(H);});A.on([F,F.firstChild!
 ],"focus
",function(){this._handleFocus();},this,true);}if(this.get("firstChild")){this.insertBefore(this._titlebar,this.get("firstChild"));}else{this.appendChild(this._titlebar);}if(this.get("collapse")){this.set("collapse",true);}}else{if(this._titlebar){if(this._titlebar&&this._titlebar.parentNode){this._titlebar.parentNode.removeChild(this._titlebar);}}}}});this.setAttributeConfig("collapse",{value:false,method:function(H){if(this._titlebar){var G=null;var F=C.getElementsByClassName("collapse","span",this._titlebar);if(H){if(F.length>0){return true;}G=document.createElement("SPAN");G.innerHTML="X";G.title=this.STR_COLLAPSE;C.addClass(G,"collapse");this._titlebar.appendChild(G);A.addListener(G,"click",function(){if(C.hasClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed")){this.collapse(false);}else{this.collapse();}},this,true);}else{G=C.getElementsByClassName("collapse","span",this._titlebar);if(G[0]){if(C.hasClass(this.get("cont").parentNode,"yui-toolbar-contain!
 er-collapsed")){this.collapse(false);}G[0].parentNode.removeChild(G[0]);}}}}});this.setAttributeConfig("draggable",{value:(E.draggable||false),method:function(F){if(F&&!this.get("titlebar")){if(!this._dragHandle){this._dragHandle=document.createElement("SPAN");this._dragHandle.innerHTML="|";this._dragHandle.setAttribute("title","Click to drag the toolbar");this._dragHandle.id=this.get("id")+"_draghandle";C.addClass(this._dragHandle,this.CLASS_DRAGHANDLE);if(this.get("cont").hasChildNodes()){this.get("cont").insertBefore(this._dragHandle,this.get("cont").firstChild);}else{this.get("cont").appendChild(this._dragHandle);}this.dd=new YAHOO.util.DD(this.get("id"));this.dd.setHandleElId(this._dragHandle.id);}}else{if(this._dragHandle){this._dragHandle.parentNode.removeChild(this._dragHandle);this._dragHandle=null;this.dd=null;}}if(this._titlebar){if(F){this.dd=new YAHOO.util.DD(this.get("id"));this.dd.setHandleElId(this._titlebar);C.addClass(this._titlebar,"draggable");}else{C.re!
 moveClass(this._titlebar,"draggable");if(this.dd){this.dd.unre!
 g();this
.dd=null;}}}},validator:function(G){var F=true;if(!YAHOO.util.DD){F=false;}return F;}});},addButtonGroup:function(I){if(!this.get("element")){this._queue[this._queue.length]=["addButtonGroup",arguments];return false;}if(!this.hasClass(this.CLASS_PREFIX+"-grouped")){this.addClass(this.CLASS_PREFIX+"-grouped");}var J=document.createElement("DIV");C.addClass(J,this.CLASS_PREFIX+"-group");C.addClass(J,this.CLASS_PREFIX+"-group-"+I.group);if(I.label){var F=document.createElement("h3");F.innerHTML=I.label;J.appendChild(F);}if(!this.get("grouplabels")){C.addClass(this.get("cont"),this.CLASS_PREFIX,"-nogrouplabels");}this.get("cont").appendChild(J);var H=document.createElement("ul");J.appendChild(H);if(!this._buttonGroupList){this._buttonGroupList={};}this._buttonGroupList[I.group]=H;for(var G=0;G<I.buttons.length;G++){var E=document.createElement("li");E.className=this.CLASS_PREFIX+"-groupitem";H.appendChild(E);if((I.buttons[G].type!==undefined)&&I.buttons[G].type=="separator"){thi!
 s.addSeparator(E);}else{I.buttons[G].container=E;this.addButton(I.buttons[G]);}}},addButtonToGroup:function(G,H,I){var F=this._buttonGroupList[H];var E=document.createElement("li");E.className=this.CLASS_PREFIX+"-groupitem";G.container=E;this.addButton(G,I);F.appendChild(E);},addButton:function(J,I){if(!this.get("element")){this._queue[this._queue.length]=["addButton",arguments];return false;}if(!this._buttonList){this._buttonList=[];}if(!J.container){J.container=this.get("cont");}if((J.type=="menu")||(J.type=="split")||(J.type=="select")){if(D.isArray(J.menu)){for(var P in J.menu){if(D.hasOwnProperty(J.menu,P)){var V={fn:function(Y,W,X){if(!J.menucmd){J.menucmd=J.value;}J.value=((X.value)?X.value:X._oText.nodeValue);},scope:this};J.menu[P].onclick=V;}}}}var Q={},N=false;for(var L in J){if(D.hasOwnProperty(J,L)){if(!this._toolbarConfigs[L]){Q[L]=J[L];}}}if(J.type=="select"){Q.type="menu";}if(J.type=="spin"){Q.type="push";
 }if(Q.type=="color"){if(YAHOO.widget.Overlay){Q=this._makeColorButton(Q);}else{N=true;}}if(Q.menu){if((YAHOO.widget.Overlay)&&(J.menu instanceof YAHOO.widget.Overlay)){J.menu.showEvent.subscribe(function(){this._button=Q;});}else{for(var O=0;O<Q.menu.length;O++){if(!Q.menu[O].value){Q.menu[O].value=Q.menu[O].text;}}if(this.browser.webkit){Q.focusmenu=false;}}}if(N){J=false;}else{this._configs.buttons.value[this._configs.buttons.value.length]=J;var T=new this.buttonType(Q);T.get("element").tabIndex="-1";T.get("element").setAttribute("role","button");T._selected=true;if(this.get("disabled")){T.set("disabled",true);}if(!J.id){J.id=T.get("id");}if(I){var F=T.get("element");var M=null;if(I.get){M=I.get("element").nextSibling;}else{if(I.nextSibling){M=I.nextSibling;}}if(M){M.parentNode.insertBefore(F,M);}}T.addClass(this.CLASS_PREFIX+"-"+T.get("value"));var S=document.createElement("span");S.className=this.CLASS_PREFIX+"-icon";T.get("element").insertBefore(S,T.get("firstChild"));!
 if(T._button.tagName.toLowerCase()=="button"){T.get("element").setAttribute("unselectable","on");var U=document.createElement("a");U.innerHTML=T._button.innerHTML;U.href="#";U.tabIndex="-1";A.on(U,"click",function(W){A.stopEvent(W);});T._button.parentNode.replaceChild(U,T._button);T._button=U;}if(J.type=="select"){if(T._button.tagName.toLowerCase()=="select"){S.parentNode.removeChild(S);var G=T._button;var R=T.get("element");R.parentNode.replaceChild(G,R);}else{T.addClass(this.CLASS_PREFIX+"-select");}}if(J.type=="spin"){if(!D.isArray(J.range)){J.range=[10,100];}this._makeSpinButton(T,J);}T.get("element").setAttribute("title",T.get("label"));if(J.type!="spin"){if((YAHOO.widget.Overlay)&&(Q.menu instanceof YAHOO.widget.Overlay)){var H=function(Y){var W=true;if(Y.keyCode&&(Y.keyCode==9)){W=false;}if(W){if(this._colorPicker){this._colorPicker._button=J.value;}var X=T.getMenu().element;if(C.getStyle(X,"visibility")=="hidden"){T.getMenu().show();}else{T.getMenu().hide();}}YAHOO.!
 util.Event.stopEvent(Y);};T.on("mousedown",H,J,this);T.on("key!
 down",H,
J,this);}else{if((J.type!="menu")&&(J.type!="select")){T.on("keypress",this._buttonClick,J,this);T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);this._buttonClick(W,J);},J,this);T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});}else{T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);});T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});T.on("change",function(W){if(!J.menucmd){J.menucmd=J.value;}J.value=W.value;this._buttonClick(W,J);},this,true);var K=this;T.on("appendTo",function(){var W=this;if(W.getMenu()&&W.getMenu().mouseDownEvent){W.getMenu().mouseDownEvent.subscribe(function(Z,Y){var X=Y[1];YAHOO.util.Event.stopEvent(Y[0]);W._onMenuClick(Y[0],W);if(!J.menucmd){J.menucmd=J.value;}J.value=((X.value)?X.value:X._oText.nodeValue);K._buttonClick.call(K,Y[1],J);W._hideMenu();return false;});W.getMenu().clickEvent.subscribe(function(Y,X){YAHOO.util.Event.stopEvent(X[0]);});W.getMenu().mouseUpEvent.subscribe(function(Y,X){YAHOO.util.Event.sto!
 pEvent(X[0]);});}});}}}else{T.on("mousedown",function(W){YAHOO.util.Event.stopEvent(W);});T.on("click",function(W){YAHOO.util.Event.stopEvent(W);});}if(this.browser.ie){}if(this.browser.webkit){T.hasFocus=function(){return true;};}this._buttonList[this._buttonList.length]=T;if((J.type=="menu")||(J.type=="split")||(J.type=="select")){if(D.isArray(J.menu)){var E=T.getMenu();if(E&&E.renderEvent){E.renderEvent.subscribe(this._addMenuClasses,T);if(J.renderer){E.renderEvent.subscribe(J.renderer,T);}}}}}return J;},addSeparator:function(E,H){if(!this.get("element")){this._queue[this._queue.length]=["addSeparator",arguments];return false;}var F=((E)?E:this.get("cont"));if(!this.get("element")){this._queue[this._queue.length]=["addSeparator",arguments];return false;}if(this._sepCount===null){this._sepCount=0;}if(!this._sep){this._sep=document.createElement("SPAN");C.addClass(this._sep,this.CLASS_SEPARATOR);this._sep.innerHTML="|";}var G=this._sep.cloneNode(true);this._sepCount++;C.ad!
 dClass(G,this.CLASS_SEPARATOR+"-"+this._sepCount);if(H){var I=!
 null;if(
H.get){I=H.get("element").nextSibling;}else{if(H.nextSibling){I=H.nextSibling;}else{I=H;}}if(I){if(I==H){I.parentNode.appendChild(G);}else{I.parentNode.insertBefore(G,I);}}}else{F.appendChild(G);}return G;},_createColorPicker:function(H){if(C.get(H+"_colors")){C.get(H+"_colors").parentNode.removeChild(C.get(H+"_colors"));}var E=document.createElement("div");E.className="yui-toolbar-colors";E.id=H+"_colors";E.style.display="none";A.on(window,"load",function(){document.body.appendChild(E);},this,true);this._colorPicker=E;var G="";for(var F in this._colorData){if(D.hasOwnProperty(this._colorData,F)){G+='<a style="background-color: '+F+'" href="#">'+F.replace("#","")+"</a>";}}G+="<span><em>X</em><strong></strong></span>";window.setTimeout(function(){E.innerHTML=G;},0);A.on(E,"mouseover",function(M){var K=this._colorPicker;var L=K.getElementsByTagName("em")[0];var J=K.getElementsByTagName("strong")[0];var I=A.getTarget(M);if(I.tagName.toLowerCase()=="a"){L.style.backgroundColor=I!
 .style.backgroundColor;J.innerHTML=this._colorData["#"+I.innerHTML]+"<br>"+I.innerHTML;}},this,true);A.on(E,"focus",function(I){A.stopEvent(I);});A.on(E,"click",function(I){A.stopEvent(I);});A.on(E,"mousedown",function(J){A.stopEvent(J);var I=A.getTarget(J);if(I.tagName.toLowerCase()=="a"){var L=this.fireEvent("colorPickerClicked",{type:"colorPickerClicked",target:this,button:this._colorPicker._button,color:I.innerHTML,colorName:this._colorData["#"+I.innerHTML]});if(L!==false){var K={color:I.innerHTML,colorName:this._colorData["#"+I.innerHTML],value:this._colorPicker._button};this.fireEvent("buttonClick",{type:"buttonClick",target:this.get("element"),button:K});}this.getButtonByValue(this._colorPicker._button).getMenu().hide();}},this,true);},_resetColorPicker:function(){var F=this._colorPicker.getElementsByTagName("em")[0];var E=this._colorPicker.getElementsByTagName("strong")[0];F.style.backgroundColor="transparent";
 E.innerHTML="";},_makeColorButton:function(E){if(!this._colorPicker){this._createColorPicker(this.get("id"));}E.type="color";E.menu=new YAHOO.widget.Overlay(this.get("id")+"_"+E.value+"_menu",{visible:false,position:"absolute",iframe:true});E.menu.setBody("");E.menu.render(this.get("cont"));C.addClass(E.menu.element,"yui-button-menu");C.addClass(E.menu.element,"yui-color-button-menu");E.menu.beforeShowEvent.subscribe(function(){E.menu.cfg.setProperty("zindex",5);E.menu.cfg.setProperty("context",[this.getButtonById(E.id).get("element"),"tl","bl"]);this._resetColorPicker();var F=this._colorPicker;if(F.parentNode){F.parentNode.removeChild(F);}E.menu.setBody("");E.menu.appendToBody(F);this._colorPicker.style.display="block";},this,true);return E;},_makeSpinButton:function(R,L){R.addClass(this.CLASS_PREFIX+"-spinbutton");var S=this,N=R._button.parentNode.parentNode,I=L.range,H=document.createElement("a"),G=document.createElement("a");H.href="#";G.href="#";H.tabIndex="-1";G.tabIn!
 dex="-1";H.className="up";H.title=this.STR_SPIN_UP;H.innerHTML=this.STR_SPIN_UP;G.className="down";G.title=this.STR_SPIN_DOWN;G.innerHTML=this.STR_SPIN_DOWN;N.appendChild(H);N.appendChild(G);var M=YAHOO.lang.substitute(this.STR_SPIN_LABEL,{VALUE:R.get("label")});R.set("title",M);var Q=function(T){T=((T<I[0])?I[0]:T);T=((T>I[1])?I[1]:T);return T;};var P=this.browser;var F=false;var K=this.STR_SPIN_LABEL;if(this._titlebar&&this._titlebar.firstChild){F=this._titlebar.firstChild;}var E=function(U){YAHOO.util.Event.stopEvent(U);if(!R.get("disabled")&&(U.keyCode!=9)){var V=parseInt(R.get("label"),10);V++;V=Q(V);R.set("label",""+V);var T=YAHOO.lang.substitute(K,{VALUE:R.get("label")});R.set("title",T);if(!P.webkit&&F){}S._buttonClick(U,L);}};var O=function(U){YAHOO.util.Event.stopEvent(U);if(!R.get("disabled")&&(U.keyCode!=9)){var V=parseInt(R.get("label"),10);V--;V=Q(V);R.set("label",""+V);var T=YAHOO.lang.substitute(K,{VALUE:R.get("label")});R.set("title",T);if(!P.webkit&&F){}S.!
 _buttonClick(U,L);}};var J=function(T){if(T.keyCode==38){E(T);!
 }else{if
(T.keyCode==40){O(T);}else{if(T.keyCode==107&&T.shiftKey){E(T);}else{if(T.keyCode==109&&T.shiftKey){O(T);}}}}};R.on("keydown",J,this,true);A.on(H,"mousedown",function(T){A.stopEvent(T);},this,true);A.on(G,"mousedown",function(T){A.stopEvent(T);},this,true);A.on(H,"click",E,this,true);A.on(G,"click",O,this,true);},_buttonClick:function(L,F){var E=true;if(L&&L.type=="keypress"){if(L.keyCode==9){E=false;}else{if((L.keyCode===13)||(L.keyCode===0)||(L.keyCode===32)){}else{E=false;}}}if(E){var N=true,H=false;F.isSelected=this.isSelected(F.id);if(F.value){H=this.fireEvent(F.value+"Click",{type:F.value+"Click",target:this.get("element"),button:F});if(H===false){N=false;}}if(F.menucmd&&N){H=this.fireEvent(F.menucmd+"Click",{type:F.menucmd+"Click",target:this.get("element"),button:F});if(H===false){N=false;}}if(N){this.fireEvent("buttonClick",{type:"buttonClick",target:this.get("element"),button:F});}if(F.type=="select"){var K=this.getButtonById(F.id);if(K.buttonType=="rich"){var J=F.!
 value;for(var I=0;I<F.menu.length;I++){if(F.menu[I].value==F.value){J=F.menu[I].text;break;}}K.set("label",'<span class="yui-toolbar-'+F.menucmd+"-"+(F.value).replace(/ /g,"-").toLowerCase()+'">'+J+"</span>");var M=K.getMenu().getItems();for(var G=0;G<M.length;G++){if(M[G].value.toLowerCase()==F.value.toLowerCase()){M[G].cfg.setProperty("checked",true);}else{M[G].cfg.setProperty("checked",false);}}}}if(L){A.stopEvent(L);}}},_keyNav:null,_navCounter:null,_navigateButtons:function(F){switch(F.keyCode){case 37:case 39:if(F.keyCode==37){this._navCounter--;}else{this._navCounter++;}if(this._navCounter>(this._buttonList.length-1)){this._navCounter=0;}if(this._navCounter<0){this._navCounter=(this._buttonList.length-1);}if(this._buttonList[this._navCounter]){var E=this._buttonList[this._navCounter].get("element");if(this.browser.ie){E=this._buttonList[this._navCounter].get("element").getElementsByTagName("a")[0];}if(this._buttonList[this._navCounter].get("disabled")){this._navigate!
 Buttons(F);}else{E.focus();}}break;}},_handleFocus:function(){!
 if(!this
._keyNav){var E="keypress";if(this.browser.ie){E="keydown";}A.on(this.get("element"),E,this._navigateButtons,this,true);this._keyNav=true;this._navCounter=-1;}},getButtonById:function(G){var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==G){return this._buttonList[F];}}return false;},getButtonByValue:function(K){var H=this.get("buttons");var F=H.length;for(var I=0;I<F;I++){if(H[I].group!==undefined){for(var E=0;E<H[I].buttons.length;E++){if((H[I].buttons[E].value==K)||(H[I].buttons[E].menucmd==K)){return this.getButtonById(H[I].buttons[E].id);}if(H[I].buttons[E].menu){for(var J=0;J<H[I].buttons[E].menu.length;J++){if(H[I].buttons[E].menu[J].value==K){return this.getButtonById(H[I].buttons[E].id);}}}}}else{if((H[I].value==K)||(H[I].menucmd==K)){return this.getButtonById(H[I].id);}if(H[I].menu){for(var G=0;G<H[I].menu.length;G++){if(H[I].menu[G].value==K){return this.getButtonById(H[I].id);}}}}}return false;},getButtonByIn!
 dex:function(E){if(this._buttonList[E]){return this._buttonList[E];}else{return false;}},getButtons:function(){return this._buttonList;},disableButton:function(F){var E=B.call(this,F);if(E){E.set("disabled",true);}else{return false;}},enableButton:function(F){if(this.get("disabled")){return false;}var E=B.call(this,F);if(E){if(E.get("disabled")){E.set("disabled",false);}}else{return false;}},isSelected:function(F){var E=B.call(this,F);if(E){return E._selected;}return false;},selectButton:function(I,G){var F=B.call(this,I);if(F){F.addClass("yui-button-selected");F.addClass("yui-button-"+F.get("value")+"-selected");F._selected=true;if(G){if(F.buttonType=="rich"){var H=F.getMenu().getItems();for(var E=0;E<H.length;E++){if(H[E].value==G){H[E].cfg.setProperty("checked",true);F.set("label",'<span class="yui-toolbar-'+F.get("value")+"-"+(G).replace(/ /g,"-").toLowerCase()+'">'+H[E]._oText.nodeValue+"</span>");}else{H[E].cfg.setProperty("checked",false);
-}}}}}else{return false;}},deselectButton:function(F){var E=B.call(this,F);if(E){E.removeClass("yui-button-selected");E.removeClass("yui-button-"+E.get("value")+"-selected");E.removeClass("yui-button-hover");E._selected=false;}else{return false;}},deselectAllButtons:function(){var E=this._buttonList.length;for(var F=0;F<E;F++){this.deselectButton(this._buttonList[F]);}},disableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.disableButton(this._buttonList[F]);}},enableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.enableButton(this._buttonList[F]);}},resetAllButtons:function(I){if(!D.isObject(I)){I={};}if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){var H=this._buttonList[F];if(H){var G=H._configs.disabled._initialConfig.value;if(I[H.get("id")]){this.enableButton(H);this.selectButton(H);}else{if(G)!
 {this.disableButton(H);}else{this.enableButton(H);}this.deselectButton(H);}}}},destroyButton:function(I){var G=B.call(this,I);if(G){var H=G.get("id");G.destroy();var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==H){this._buttonList[F]=null;}}}else{return false;}},destroy:function(){this.get("element").innerHTML="";this.get("element").className="";for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}return true;},collapse:function(F){var E=C.getElementsByClassName("collapse","span",this._titlebar);if(F===false){C.removeClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");if(E[0]){C.removeClass(E[0],"collapsed");}this.fireEvent("toolbarExpanded",{type:"toolbarExpanded",target:this});}else{if(E[0]){C.addClass(E[0],"collapsed");}C.addClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");this.fireEvent("toolbarCollapsed",{type:"toolbarCollapsed",target:this});}},toString:function(){r!
 eturn"Toolbar (#"+this.get("element").id+") with "+this._butto!
 nList.le
ngth+" buttons.";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.SimpleEditor=function(H,M){var G={};if(D.isObject(H)&&(!H.tagName)&&!M){D.augmentObject(G,H);H=document.createElement("textarea");this.DOMReady=true;if(G.container){var K=C.get(G.container);K.appendChild(H);}else{document.body.appendChild(H);}}else{if(M){D.augmentObject(G,M);}}var I={element:null,attributes:G},F=null;if(D.isString(H)){F=H;}else{if(I.attributes.id){F=I.attributes.id;}else{this.DOMReady=true;F=C.generateId(H);}}I.element=H;var J=document.createElement("DIV");I.attributes.element_cont=new YAHOO.util.Element(J,{id:F+"_container"});var E=document.createElement("div");C.addClass(E,"first-child");I.attributes.element_cont.appendChild(E);if(!I.attributes.toolbar_cont){I.attributes.toolbar_cont=document.createElement("DIV");I.attributes.toolbar_cont.id=F+"_toolbar";E.appendChild(I.attributes.toolbar_cont);}var L=document.createElement("DIV");!
 E.appendChild(L);I.attributes.editor_wrapper=L;YAHOO.widget.SimpleEditor.superclass.constructor.call(this,I.element,I.attributes);};YAHOO.extend(YAHOO.widget.SimpleEditor,YAHOO.util.Element,{_resizeConfig:{handles:["br"],autoRatio:true,status:true,proxy:true,useShim:true,setSize:false},_setupResize:function(){if(!YAHOO.util.DD||!YAHOO.util.Resize){return false;}if(this.get("resize")){var E={};D.augmentObject(E,this._resizeConfig);this.resize=new YAHOO.util.Resize(this.get("element_cont").get("element"),E);this.resize.on("resize",function(G){var K=this.get("animate");this.set("animate",false);this.set("width",G.width+"px");var H=G.height,I=(this.toolbar.get("element").clientHeight+2),J=0;if(this.dompath){J=(this.dompath.clientHeight+1);}var F=(H-I-J);this.set("height",F+"px");this.get("element_cont").setStyle("height","");this.set("animate",K);},this,true);}},resize:null,_setupDD:function(){if(!YAHOO.util.DD){return false;}if(this.get("drag")){var F=this.get("drag"),E=YAHOO.!
 util.DD;if(F==="proxy"){E=YAHOO.util.DDProxy;}this.dd=new E(th!
 is.get("
element_cont").get("element"));this.toolbar.addClass("draggable");this.dd.setHandleElId(this.toolbar._titlebar);}},dd:null,_lastCommand:null,_undoNodeChange:function(){},_storeUndo:function(){},_checkKey:function(E,H){var F=false;if((H.keyCode===E.key)){if(E.mods&&(E.mods.length>0)){var I=0;for(var G=0;G<E.mods.length;G++){if(this.browser.mac){if(E.mods[G]=="ctrl"){E.mods[G]="meta";}}if(H[E.mods[G]+"Key"]===true){I++;}}if(I===E.mods.length){F=true;}}else{F=true;}}return F;},_keyMap:{SELECT_ALL:{key:65,mods:["ctrl"]},CLOSE_WINDOW:{key:87,mods:["shift","ctrl"]},FOCUS_TOOLBAR:{key:27,mods:["shift"]},FOCUS_AFTER:{key:27},CREATE_LINK:{key:76,mods:["shift","ctrl"]},BOLD:{key:66,mods:["shift","ctrl"]},ITALIC:{key:73,mods:["shift","ctrl"]},UNDERLINE:{key:85,mods:["shift","ctrl"]},UNDO:{key:90,mods:["ctrl"]},REDO:{key:90,mods:["shift","ctrl"]},JUSTIFY_LEFT:{key:219,mods:["shift","ctrl"]},JUSTIFY_CENTER:{key:220,mods:["shift","ctrl"]},JUSTIFY_RIGHT:{key:221,mods:["shift","ctrl"]}},_cl!
 eanClassName:function(E){return E.replace(/ /g,"-").toLowerCase();},_textarea:null,_docType:'<!DOCTYPE HTML PUBLIC "-/'+"/W3C/"+"/DTD HTML 4.01/"+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',editorDirty:null,_defaultCSS:"html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }",_defaultToolbar:null,_lastButton:null,_baseHREF:function(){var E=document.location.href;if(E.indexOf("?")!==-1){E=E.substring(0,E.indexOf("?"));}E=E.substring(0,E.lastIndexOf("/"))+"/";return E;
-}(),_lastImage:null,_blankImageLoaded:null,_fixNodesTimer:null,_nodeChangeTimer:null,_lastNodeChangeEvent:null,_lastNodeChange:0,_rendered:null,DOMReady:null,_selection:null,_mask:null,_showingHiddenElements:null,currentWindow:null,currentEvent:null,operaEvent:null,currentFont:null,currentElement:null,dompath:null,beforeElement:null,afterElement:null,invalidHTML:{form:true,input:true,button:true,select:true,link:true,html:true,body:true,iframe:true,script:true,style:true,textarea:true},toolbar:null,_contentTimer:null,_contentTimerCounter:0,_disabled:["createlink","fontname","fontsize","forecolor","backcolor"],_alwaysDisabled:{undo:true,redo:true},_alwaysEnabled:{},_semantic:{"bold":true,"italic":true,"underline":true},_tag2cmd:{"b":"bold","strong":"bold","i":"italic","em":"italic","u":"underline","sup":"superscript","sub":"subscript","img":"insertimage","a":"createlink","ul":"insertunorderedlist","ol":"insertorderedlist"},_createIframe:function(){var I=document.createElemen!
 t("iframe");I.id=this.get("id")+"_editor";var G={border:"0",frameBorder:"0",marginWidth:"0",marginHeight:"0",leftMargin:"0",topMargin:"0",allowTransparency:"true",width:"100%"};if(this.get("autoHeight")){G.scrolling="no";}for(var H in G){if(D.hasOwnProperty(G,H)){I.setAttribute(H,G[H]);}}var F="javascript:;";if(this.browser.ie){F="javascript:false;";}I.setAttribute("src",F);var E=new YAHOO.util.Element(I);E.setStyle("visibility","hidden");return E;},_isElement:function(F,E){if(F&&F.tagName&&(F.tagName.toLowerCase()==E)){return true;}if(F&&F.getAttribute&&(F.getAttribute("tag")==E)){return true;}return false;},_hasParent:function(F,E){if(!F||!F.parentNode){return false;}while(F.parentNode){if(this._isElement(F,E)){return F;}if(F.parentNode){F=F.parentNode;}else{return false;}}return false;},_getDoc:function(){var E=false;if(this.get){if(this.get("iframe")){if(this.get("iframe").get){if(this.get("iframe").get("element")){try{if(this.get("iframe").get("element").contentWindow)!
 {if(this.get("iframe").get("element").contentWindow.document){!
 E=this.g
et("iframe").get("element").contentWindow.document;return E;}}}catch(F){}}}}}return false;},_getWindow:function(){return this.get("iframe").get("element").contentWindow;},_focusWindow:function(E){if(this.browser.webkit){if(E){this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild,0,this._getDoc().body.firstChild,1);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(false);}}else{this._getSelection().setBaseAndExtent(this._getDoc().body,1,this._getDoc().body,1);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(false);}}this._getWindow().focus();}else{this._getWindow().focus();}},_hasSelection:function(){var G=this._getSelection();var E=this._getRange();var F=false;if(!G||!E){return F;}if(this.browser.ie||this.browser.opera){if(E.text){F=true;}if(E.html){F=true;}}else{if(this.browser.webkit){if(G+""!==""){F=true;}}else{if(G&&(G.toString()!=="")&&(G!==undefined)){F=t!
 rue;}}}return F;},_getSelection:function(){var E=null;if(this._getDoc()&&this._getWindow()){if(this._getDoc().selection){E=this._getDoc().selection;}else{E=this._getWindow().getSelection();}if(this.browser.webkit){if(E.baseNode){this._selection={};this._selection.baseNode=E.baseNode;this._selection.baseOffset=E.baseOffset;this._selection.extentNode=E.extentNode;this._selection.extentOffset=E.extentOffset;}else{if(this._selection!==null){E=this._getWindow().getSelection();E.setBaseAndExtent(this._selection.baseNode,this._selection.baseOffset,this._selection.extentNode,this._selection.extentOffset);this._selection=null;}}}}return E;},_selectNode:function(F,I){if(!F){return false;}var G=this._getSelection(),E=null;if(this.browser.ie){try{E=this._getDoc().body.createTextRange();E.moveToElementText(F);E.select();}catch(H){}}else{if(this.browser.webkit){if(I){G.setBaseAndExtent(F,1,F,F.innerText.length);}else{G.setBaseAndExtent(F,0,F,F.innerText.length);}}else{if(this.browser.ope!
 ra){G=this._getWindow().getSelection();E=this._getDoc().create!
 Range();
E.selectNode(F);G.removeAllRanges();G.addRange(E);}else{E=this._getDoc().createRange();E.selectNodeContents(F);G.removeAllRanges();G.addRange(E);}}}this.nodeChange();},_getRange:function(){var E=this._getSelection();if(E===null){return null;}if(this.browser.webkit&&!E.getRangeAt){var H=this._getDoc().createRange();try{H.setStart(E.anchorNode,E.anchorOffset);H.setEnd(E.focusNode,E.focusOffset);}catch(G){H=this._getWindow().getSelection()+"";}return H;}if(this.browser.ie||this.browser.opera){try{return E.createRange();}catch(F){return null;}}if(E.rangeCount>0){return E.getRangeAt(0);}return null;},_setDesignMode:function(E){try{var G=true;if(this.browser.ie&&(E.toLowerCase()=="off")){G=false;}if(G){this._getDoc().designMode=E;}}catch(F){}},_toggleDesignMode:function(){var F=this._getDoc().designMode.toLowerCase(),E="on";if(F=="on"){E="off";}this._setDesignMode(E);return E;},_initEditorEvents:function(){var E=this._getDoc();A.on(E,"mouseup",this._handleMouseUp,this,true);A.on(E!
 ,"mousedown",this._handleMouseDown,this,true);A.on(E,"click",this._handleClick,this,true);A.on(E,"dblclick",this._handleDoubleClick,this,true);A.on(E,"keypress",this._handleKeyPress,this,true);A.on(E,"keyup",this._handleKeyUp,this,true);A.on(E,"keydown",this._handleKeyDown,this,true);},_removeEditorEvents:function(){var E=this._getDoc();A.removeListener(E,"mouseup",this._handleMouseUp,this,true);A.removeListener(E,"mousedown",this._handleMouseDown,this,true);A.removeListener(E,"click",this._handleClick,this,true);A.removeListener(E,"dblclick",this._handleDoubleClick,this,true);A.removeListener(E,"keypress",this._handleKeyPress,this,true);A.removeListener(E,"keyup",this._handleKeyUp,this,true);A.removeListener(E,"keydown",this._handleKeyDown,this,true);},_initEditor:function(){if(this.browser.ie){this._getDoc().body.style.margin="0";}if(!this.get("disabled")){if(this._getDoc().designMode.toLowerCase()!="on"){this._setDesignMode("on");
-this._contentTimerCounter=0;}}if(!this._getDoc().body){this._contentTimerCounter=0;this._checkLoaded();return false;}this.toolbar.on("buttonClick",this._handleToolbarClick,this,true);if(!this.get("disabled")){this._initEditorEvents();this.toolbar.set("disabled",false);}this.fireEvent("editorContentLoaded",{type:"editorLoaded",target:this});if(this.get("dompath")){var E=this;setTimeout(function(){E._writeDomPath.call(E);E._setupResize.call(E);},150);}var G=[];for(var F in this.browser){if(this.browser[F]){G.push(F);}}if(this.get("ptags")){G.push("ptags");}C.addClass(this._getDoc().body,G.join(" "));this.nodeChange(true);},_checkLoaded:function(){this._contentTimerCounter++;if(this._contentTimer){clearTimeout(this._contentTimer);}if(this._contentTimerCounter>500){return false;}var G=false;try{if(this._getDoc()&&this._getDoc().body){if(this.browser.ie){if(this._getDoc().body.readyState=="complete"){G=true;}}else{if(this._getDoc().body._rteLoaded===true){G=true;}}}}catch(F){G=f!
 alse;}if(G===true){this._initEditor();}else{var E=this;this._contentTimer=setTimeout(function(){E._checkLoaded.call(E);},20);}},_setInitialContent:function(){var H=((this._textarea)?this.get("element").value:this.get("element").innerHTML),J=null;var F=D.substitute(this.get("html"),{TITLE:this.STR_TITLE,CONTENT:this._cleanIncomingHTML(H),CSS:this.get("css"),HIDDEN_CSS:((this.get("hiddencss"))?this.get("hiddencss"):"/* No Hidden CSS */"),EXTRA_CSS:((this.get("extracss"))?this.get("extracss"):"/* No Extra CSS */")}),E=true;if(document.compatMode!="BackCompat"){F=this._docType+"\n"+F;}else{}if(this.browser.ie||this.browser.webkit||this.browser.opera||(navigator.userAgent.indexOf("Firefox/1.5")!=-1)){try{if(this.browser.air){J=this._getDoc().implementation.createHTMLDocument();var K=this._getDoc();K.open();K.close();J.open();J.write(F);J.close();var G=K.importNode(J.getElementsByTagName("html")[0],true);K.replaceChild(G,K.getElementsByTagName("html")[0]);K.body._rteLoaded=true;}!
 else{J=this._getDoc();J.open();J.write(F);J.close();}}catch(I)!
 {E=false
;}}else{this.get("iframe").get("element").src="data:text/html;charset=utf-8,"+encodeURIComponent(F);}this.get("iframe").setStyle("visibility","");if(E){this._checkLoaded();}},_setMarkupType:function(E){switch(this.get("markup")){case"css":this._setEditorStyle(true);break;case"default":this._setEditorStyle(false);break;case"semantic":case"xhtml":if(this._semantic[E]){this._setEditorStyle(false);}else{this._setEditorStyle(true);}break;}},_setEditorStyle:function(F){try{this._getDoc().execCommand("useCSS",false,!F);}catch(E){}},_getSelectedElement:function(){var I=this._getDoc(),F=null,G=null,J=null,E=true;if(this.browser.ie){this.currentEvent=this._getWindow().event;F=this._getRange();if(F){J=F.item?F.item(0):F.parentElement();if(this._hasSelection()){}if(J===I.body){J=null;}}if((this.currentEvent!==null)&&(this.currentEvent.keyCode===0)){J=A.getTarget(this.currentEvent);}}else{G=this._getSelection();F=this._getRange();if(!G||!F){return null;}if(!this._hasSelection()&&this.bro!
 wser.webkit3){}if(this.browser.gecko){if(F.startContainer){E=false;if(F.startContainer.nodeType===3){J=F.startContainer.parentNode;}else{if(F.startContainer.nodeType===1){J=F.startContainer;}else{E=true;}}if(!E){this.currentEvent=null;}}}if(E){if(G.anchorNode&&(G.anchorNode.nodeType==3)){if(G.anchorNode.parentNode){J=G.anchorNode.parentNode;}if(G.anchorNode.nextSibling!=G.focusNode.nextSibling){J=G.anchorNode.nextSibling;}}if(this._isElement(J,"br")){J=null;}if(!J){J=F.commonAncestorContainer;if(!F.collapsed){if(F.startContainer==F.endContainer){if(F.startOffset-F.endOffset<2){if(F.startContainer.hasChildNodes()){J=F.startContainer.childNodes[F.startOffset];}}}}}}}if(this.currentEvent!==null){try{switch(this.currentEvent.type){case"click":case"mousedown":case"mouseup":if(this.browser.webkit){J=A.getTarget(this.currentEvent);}break;default:break;}}catch(H){}}else{if((this.currentElement&&this.currentElement[0])&&(!this.browser.ie)){}}if(this.browser.opera||this.browser.webki!
 t){if(this.currentEvent&&!J){J=YAHOO.util.Event.getTarget(this!
 .current
Event);}}if(!J||!J.tagName){J=I.body;}if(this._isElement(J,"html")){J=I.body;}if(this._isElement(J,"body")){J=I.body;}if(J&&!J.parentNode){J=I.body;}if(J===undefined){J=null;}return J;},_getDomPath:function(E){if(!E){E=this._getSelectedElement();}var F=[];while(E!==null){if(E.ownerDocument!=this._getDoc()){E=null;break;}if(E.nodeName&&E.nodeType&&(E.nodeType==1)){F[F.length]=E;}if(this._isElement(E,"body")){break;}E=E.parentNode;}if(F.length===0){if(this._getDoc()&&this._getDoc().body){F[0]=this._getDoc().body;}}return F.reverse();},_writeDomPath:function(){var K=this._getDomPath(),I=[],G="",L="";for(var E=0;E<K.length;E++){var M=K[E].tagName.toLowerCase();if((M=="ol")&&(K[E].type)){M+=":"+K[E].type;}if(C.hasClass(K[E],"yui-tag")){M=K[E].getAttribute("tag");}if((this.get("markup")=="semantic")||(this.get("markup")=="xhtml")){switch(M){case"b":M="strong";break;case"i":M="em";break;}}if(!C.hasClass(K[E],"yui-non")){if(C.hasClass(K[E],"yui-tag")){L=M;}else{G=((K[E].className!==!
 "")?"."+K[E].className.replace(/ /g,"."):"");if((G.indexOf("yui")!=-1)||(G.toLowerCase().indexOf("apple-style-span")!=-1)){G="";}L=M+((K[E].id)?"#"+K[E].id:"")+G;}switch(M){case"body":L="body";break;case"a":if(K[E].getAttribute("href",2)){L+=":"+K[E].getAttribute("href",2).replace("mailto:","").replace("http:/"+"/","").replace("https:/"+"/","");}break;case"img":var F=K[E].height;var J=K[E].width;if(K[E].style.height){F=parseInt(K[E].style.height,10);}if(K[E].style.width){J=parseInt(K[E].style.width,10);}L+="("+J+"x"+F+")";break;}if(L.length>10){L='<span title="'+L+'">'+L.substring(0,10)+"..."+"</span>";}else{L='<span title="'+L+'">'+L+"</span>";}I[I.length]=L;}}var H=I.join(" "+this.SEP_DOMPATH+" ");if(this.dompath.innerHTML!=H){this.dompath.innerHTML=H;}},_fixNodes:function(){var J=this._getDoc(),H=[];for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(E.toLowerCase()!="span"){var F=J.body.getElementsByTagName(E);
-if(F.length){for(var G=0;G<F.length;G++){H.push(F[G]);}}}}}for(var I=0;I<H.length;I++){if(H[I].parentNode){if(D.isObject(this.invalidHTML[H[I].tagName.toLowerCase()])&&this.invalidHTML[H[I].tagName.toLowerCase()].keepContents){this._swapEl(H[I],"span",function(L){L.className="yui-non";});}else{H[I].parentNode.removeChild(H[I]);}}}var K=this._getDoc().getElementsByTagName("img");C.addClass(K,"yui-img");},_isNonEditable:function(G){if(this.get("allowNoEdit")){var F=A.getTarget(G);if(this._isElement(F,"html")){F=null;}var J=this._getDomPath(F);for(var E=(J.length-1);E>-1;E--){if(C.hasClass(J[E],this.CLASS_NOEDIT)){try{this._getDoc().execCommand("enableObjectResizing",false,"false");}catch(I){}this.nodeChange();A.stopEvent(G);return true;}}try{this._getDoc().execCommand("enableObjectResizing",false,"true");}catch(H){}}return false;},_setCurrentEvent:function(E){this.currentEvent=E;},_handleClick:function(G){var F=this.fireEvent("beforeEditorClick",{type:"beforeEditorClick",targ!
 et:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}if(this.browser.webkit){var E=A.getTarget(G);if(this._isElement(E,"a")||this._isElement(E.parentNode,"a")){A.stopEvent(G);this.nodeChange();}}else{this.nodeChange();}this.fireEvent("editorClick",{type:"editorClick",target:this,ev:G});},_handleMouseUp:function(G){var F=this.fireEvent("beforeEditorMouseUp",{type:"beforeEditorMouseUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}var E=this;if(this.browser.opera){var H=A.getTarget(G);if(this._isElement(H,"img")){this.nodeChange();if(this.operaEvent){clearTimeout(this.operaEvent);this.operaEvent=null;this._handleDoubleClick(G);}else{this.operaEvent=window.setTimeout(function(){E.operaEvent=false;},700);}}}if(this.browser.webkit||this.browser.opera){if(this.browser.webkit){A.stopEvent(G);}}this.n!
 odeChange();this.fireEvent("editorMouseUp",{type:"editorMouseU!
 p",targe
t:this,ev:G});},_handleMouseDown:function(F){var E=this.fireEvent("beforeEditorMouseDown",{type:"beforeEditorMouseDown",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this.browser.webkit&&this._hasSelection()){var H=this._getSelection();if(!this.browser.webkit3){H.collapse(true);}else{H.collapseToStart();}}if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}if(this._isElement(G,"img")||this._isElement(G,"a")){if(this.browser.webkit){A.stopEvent(F);if(this._isElement(G,"img")){C.addClass(G,"selected");this._lastImage=G;}}if(this.currentWindow){this.closeWindow();}this.nodeChange();}this.fireEvent("editorMouseDown",{type:"editorMouseDown",target:this,ev:F});},_handleDoubleClick:function(F){var E=this.fireEvent("beforeEditorDoubleClick",{type:"beforeEditorDoubleClick",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(!
 F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this._isElement(G,"img")){this.currentElement[0]=G;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}else{if(this._hasParent(G,"a")){this.currentElement[0]=this._hasParent(G,"a");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}}this.nodeChange();this.fireEvent("editorDoubleClick",{type:"editorDoubleClick",target:this,ev:F});},_handleKeyUp:function(G){var F=this.fireEvent("beforeEditorKeyUp",{type:"beforeEditorKeyUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);switch(G.keyCode){case this._keyMap.SELECT_ALL.key:if(this._checkKey(this._keyMap.SELECT_ALL,G)){this.nodeChange();}break;case 32:case 35:case 36:case 37:case 38:!
 case 39:case 40:case 46:case 8:case this._keyMap.CLOSE_WINDOW.!
 key:if((
G.keyCode==this._keyMap.CLOSE_WINDOW.key)&&this.currentWindow){if(this._checkKey(this._keyMap.CLOSE_WINDOW,G)){this.closeWindow();}}else{if(!this.browser.ie){if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);}var E=this;this._nodeChangeTimer=setTimeout(function(){E._nodeChangeTimer=null;E.nodeChange.call(E);},100);}else{this.nodeChange();}this.editorDirty=true;}break;}this.fireEvent("editorKeyUp",{type:"editorKeyUp",target:this,ev:G});this._storeUndo();},_handleKeyPress:function(G){var F=this.fireEvent("beforeEditorKeyPress",{type:"beforeEditorKeyPress",target:this,ev:G});if(F===false){return false;}if(this.get("allowNoEdit")){if(G&&G.keyCode&&(G.keyCode==63272)){A.stopEvent(G);}}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.browser.opera){if(G.keyCode===13){var E=this._getSelectedElement();if(!this._isElement(E,"li")){this.execCommand("inserthtml","<br>");A.stopEvent(G);}}}if(this.browser.webkit){if(!this.browser.webkit3){if(G.keyCode!
 &&(G.keyCode==122)&&(G.metaKey)){if(this._hasParent(this._getSelectedElement(),"li")){A.stopEvent(G);}}}this._listFix(G);}this.fireEvent("editorKeyPress",{type:"editorKeyPress",target:this,ev:G});},_handleKeyDown:function(M){var J=this.fireEvent("beforeEditorKeyDown",{type:"beforeEditorKeyDown",target:this,ev:M});if(J===false){return false;}var I=null,K=null;if(this._isNonEditable(M)){return false;}this._setCurrentEvent(M);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}var L=false,G=null,F=false;switch(M.keyCode){case this._keyMap.FOCUS_TOOLBAR.key:if(this._checkKey(this._keyMap.FOCUS_TOOLBAR,M)){var H=this.toolbar.getElementsByTagName("h2")[0];if(H&&H.firstChild){H.firstChild.focus();}}else{if(this._checkKey(this._keyMap.FOCUS_AFTER,M)){this.afterElement.focus();}}A.stopEvent(M);L=false;break;case this._keyMap.CREATE_LINK.key:if(this._hasSelection()){if(this._checkKey(this._keyMap.CREATE_LINK,M)){var E=true;
-if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){E=false;}}if(E){this.execCommand("createlink","");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});L=false;}}}break;case this._keyMap.UNDO.key:case this._keyMap.REDO.key:if(this._checkKey(this._keyMap.REDO,M)){G="redo";L=true;}else{if(this._checkKey(this._keyMap.UNDO,M)){G="undo";L=true;}}break;case this._keyMap.BOLD.key:if(this._checkKey(this._keyMap.BOLD,M)){G="bold";L=true;}break;case this._keyMap.ITALIC.key:if(this._checkKey(this._keyMap.ITALIC,M)){G="italic";L=true;}break;case this._keyMap.UNDERLINE.key:if(this._checkKey(this._keyMap.UNDERLINE,M)){G="underline";L=true;}break;case 9:if(this.browser.ie){K=this._getRange();I=this._getSelectedElement();if(!this._isElement(I,"li")){if(K){K.pasteHTML("    ");K.collapse(false);K.select();}A.stopEvent(M);}}if(this.browse!
 r.gecko>1.8){I=this._getSelectedElement();if(this._isElement(I,"li")){if(M.shiftKey){this._getDoc().execCommand("outdent",null,"");}else{this._getDoc().execCommand("indent",null,"");}}else{if(!this._hasSelection()){this.execCommand("inserthtml","    ");}}A.stopEvent(M);}break;case 13:if(this.get("ptags")&&!M.shiftKey){if(this.browser.gecko){I=this._getSelectedElement();if(!this._isElement(I,"li")){L=true;G="insertparagraph";A.stopEvent(M);}}if(this.browser.webkit){I=this._getSelectedElement();if(!this._hasParent(I,"li")){L=true;G="insertparagraph";A.stopEvent(M);}}}else{if(this.browser.ie){K=this._getRange();I=this._getSelectedElement();if(!this._isElement(I,"li")){if(K){K.pasteHTML("<br>");K.collapse(false);K.select();}A.stopEvent(M);}}}break;}if(this.browser.ie){this._listFix(M);}if(L&&G){this.execCommand(G,null);A.stopEvent(M);this.nodeChange();}this.fireEvent("editorKeyDown",{type:"editorKeyDown",target:this,ev:M});},_listFix:function(K){var M=null,I!
 =null,E=false,G=null;if(this.browser.webkit){if(K.keyCode&&(K.!
 keyCode=
=13)){if(this._hasParent(this._getSelectedElement(),"li")){var H=this._hasParent(this._getSelectedElement(),"li");if(H.previousSibling){if(H.firstChild&&(H.firstChild.length==1)){this._selectNode(H);}}}}}if(K.keyCode&&((!this.browser.webkit3&&(K.keyCode==25))||((this.browser.webkit3||!this.browser.webkit)&&((K.keyCode==9)&&K.shiftKey)))){M=this._getSelectedElement();if(this._hasParent(M,"li")){M=this._hasParent(M,"li");if(this._hasParent(M,"ul")||this._hasParent(M,"ol")){I=this._hasParent(M,"ul");if(!I){I=this._hasParent(M,"ol");}if(this._isElement(I.previousSibling,"li")){I.removeChild(M);I.parentNode.insertBefore(M,I.nextSibling);if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(M);G.collapse(false);G.select();}if(this.browser.webkit){this._selectNode(M.firstChild);}A.stopEvent(K);}}}}if(K.keyCode&&((K.keyCode==9)&&(!K.shiftKey))){var F=this._getSelectedElement();if(this._hasParent(F,"li")){E=this._hasParent(F,"li").innerHTML;}if(this.browser.!
 webkit){this._getDoc().execCommand("inserttext",false,"\t");}M=this._getSelectedElement();if(this._hasParent(M,"li")){I=this._hasParent(M,"li");var J=this._getDoc().createElement(I.parentNode.tagName.toLowerCase());if(this.browser.webkit){var L=C.getElementsByClassName("Apple-tab-span","span",I);if(L[0]){I.removeChild(L[0]);I.innerHTML=D.trim(I.innerHTML);if(E){I.innerHTML='<span class="yui-non">'+E+"</span> ";}else{I.innerHTML='<span class="yui-non"> </span> ';}}}else{if(E){I.innerHTML=E+" ";}else{I.innerHTML=" ";}}I.parentNode.replaceChild(J,I);J.appendChild(I);if(this.browser.webkit){this._getSelection().setBaseAndExtent(I.firstChild,1,I.firstChild,I.firstChild.innerText.length);if(!this.browser.webkit3){I.parentNode.parentNode.style.display="list-item";setTimeout(function(){I.parentNode.parentNode.style.display="block";},1);}}else{if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(I);G.collapse(false);G.select();}els!
 e{this._selectNode(I);}}A.stopEvent(K);}if(this.browser.webkit!
 ){A.stop
Event(K);}this.nodeChange();}},nodeChange:function(E){var F=this;this._storeUndo();if(this.get("nodeChangeDelay")){window.setTimeout(function(){F._nodeChange.apply(F,arguments);},0);}else{this._nodeChange();}},_nodeChange:function(F){var H=parseInt(this.get("nodeChangeThreshold"),10),O=Math.round(new Date().getTime()/1000),R=this;if(F===true){this._lastNodeChange=0;}if((this._lastNodeChange+H)<O){if(this._fixNodesTimer===null){this._fixNodesTimer=window.setTimeout(function(){R._fixNodes.call(R);R._fixNodesTimer=null;},0);}}this._lastNodeChange=O;if(this.currentEvent){try{this._lastNodeChangeEvent=this.currentEvent.type;}catch(a){}}var Z=this.fireEvent("beforeNodeChange",{type:"beforeNodeChange",target:this});if(Z===false){return false;}if(this.get("dompath")){window.setTimeout(function(){R._writeDomPath.call(R);},0);}if(!this.get("disabled")){if(this.STOP_NODE_CHANGE){this.STOP_NODE_CHANGE=false;return false;}else{var T=this._getSelection(),Q=this._getRange(),E=this._getSele!
 ctedElement(),M=this.toolbar.getButtonByValue("fontname"),L=this.toolbar.getButtonByValue("fontsize"),J=this.toolbar.getButtonByValue("undo"),G=this.toolbar.getButtonByValue("redo");var N={};if(this._lastButton){N[this._lastButton.id]=true;}if(!this._isElement(E,"body")){if(M){N[M.get("id")]=true;}if(L){N[L.get("id")]=true;}}if(G){delete N[G.get("id")];}this.toolbar.resetAllButtons(N);for(var b=0;b<this._disabled.length;b++){var P=this.toolbar.getButtonByValue(this._disabled[b]);if(P&&P.get){if(this._lastButton&&(P.get("id")===this._lastButton.id)){}else{if(!this._hasSelection()&&!this.get("insert")){switch(this._disabled[b]){case"fontname":case"fontsize":break;default:this.toolbar.disableButton(P);}}else{if(!this._alwaysDisabled[this._disabled[b]]){this.toolbar.enableButton(P);}}if(!this._alwaysEnabled[this._disabled[b]]){this.toolbar.deselectButton(P);}}}}var S=this._getDomPath();var c=null,W=null;for(var X=0;
-X<S.length;X++){c=S[X].tagName.toLowerCase();if(S[X].getAttribute("tag")){c=S[X].getAttribute("tag").toLowerCase();}W=this._tag2cmd[c];if(W===undefined){W=[];}if(!D.isArray(W)){W=[W];}if(S[X].style.fontWeight.toLowerCase()=="bold"){W[W.length]="bold";}if(S[X].style.fontStyle.toLowerCase()=="italic"){W[W.length]="italic";}if(S[X].style.textDecoration.toLowerCase()=="underline"){W[W.length]="underline";}if(S[X].style.textDecoration.toLowerCase()=="line-through"){W[W.length]="strikethrough";}if(W.length>0){for(var V=0;V<W.length;V++){this.toolbar.selectButton(W[V]);this.toolbar.enableButton(W[V]);}}switch(S[X].style.textAlign.toLowerCase()){case"left":case"right":case"center":case"justify":var U=S[X].style.textAlign.toLowerCase();if(S[X].style.textAlign.toLowerCase()=="justify"){U="full";}this.toolbar.selectButton("justify"+U);this.toolbar.enableButton("justify"+U);break;}}if(M){var Y=M._configs.label._initialConfig.value;M.set("label",'<span class="yui-toolbar-fontname-'+this!
 ._cleanClassName(Y)+'">'+Y+"</span>");this._updateMenuChecked("fontname",Y);}if(L){L.set("label",L._configs.label._initialConfig.value);}var K=this.toolbar.getButtonByValue("heading");if(K){K.set("label",K._configs.label._initialConfig.value);this._updateMenuChecked("heading","none");}var I=this.toolbar.getButtonByValue("insertimage");if(I&&this.currentWindow&&(this.currentWindow.name=="insertimage")){this.toolbar.disableButton(I);}if(this._lastButton&&this._lastButton.isSelected){this.toolbar.deselectButton(this._lastButton.id);}this._undoNodeChange();}}this.fireEvent("afterNodeChange",{type:"afterNodeChange",target:this});},_updateMenuChecked:function(E,F,H){if(!H){H=this.toolbar;}var G=H.getButtonByValue(E);G.checkValue(F);},_handleToolbarClick:function(F){var H="";var I="";var G=F.button.value;if(F.button.menucmd){H=G;G=F.button.menucmd;}this._lastButton=F.button;if(this.STOP_EXEC_COMMAND){this.STOP_EXEC_COMMAND=false;return false;}else{this.execCommand(G,H);if(!this.br!
 owser.webkit){var E=this;setTimeout(function(){E._focusWindow.!
 call(E);
},5);}}A.stopEvent(F);},_setupAfterElement:function(){if(!this.beforeElement){this.beforeElement=document.createElement("h2");this.beforeElement.className="yui-editor-skipheader";this.beforeElement.tabIndex="-1";this.beforeElement.innerHTML=this.STR_BEFORE_EDITOR;this.get("element_cont").get("firstChild").insertBefore(this.beforeElement,this.toolbar.get("nextSibling"));}if(!this.afterElement){this.afterElement=document.createElement("h2");this.afterElement.className="yui-editor-skipheader";this.afterElement.tabIndex="-1";this.afterElement.innerHTML=this.STR_LEAVE_EDITOR;this.get("element_cont").get("firstChild").appendChild(this.afterElement);}},_disableEditor:function(F){if(F){this._removeEditorEvents();if(!this._mask){if(!!this.browser.ie){this._setDesignMode("off");}if(this.toolbar){this.toolbar.set("disabled",true);}this._mask=document.createElement("DIV");C.setStyle(this._mask,"height","100%");C.setStyle(this._mask,"width","100%");C.setStyle(this._mask,"position","absol!
 ute");C.setStyle(this._mask,"top","0");C.setStyle(this._mask,"left","0");C.setStyle(this._mask,"opacity",".5");C.addClass(this._mask,"yui-editor-masked");this.get("iframe").get("parentNode").appendChild(this._mask);}}else{this._initEditorEvents();if(this._mask){this._mask.parentNode.removeChild(this._mask);this._mask=null;if(this.toolbar){this.toolbar.set("disabled",false);}this._setDesignMode("on");this._focusWindow();var E=this;window.setTimeout(function(){E.nodeChange.call(E);},100);}}},SEP_DOMPATH:"<",STR_LEAVE_EDITOR:"You have left the Rich Text Editor.",STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Shift + Escape to place focus on the toolbar and navigate between options with your arrow keys. To exit this text editor use the Escape key and continue tabbing. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets !
 text to italic</li> <li>Control Shift U underlines text</li> <!
 li>Contr
ol Shift L adds an HTML link</li></ul>",STR_TITLE:"Rich Text Area.",STR_IMAGE_HERE:"Image URL Here",STR_LINK_URL:"Link URL",STOP_EXEC_COMMAND:false,STOP_NODE_CHANGE:false,CLASS_NOEDIT:"yui-noedit",CLASS_CONTAINER:"yui-editor-container",CLASS_EDITABLE:"yui-editor-editable",CLASS_EDITABLE_CONT:"yui-editor-editable-container",CLASS_PREFIX:"yui-editor",browser:function(){var E=YAHOO.env.ua;if(E.webkit>=420){E.webkit3=E.webkit;}else{E.webkit3=0;}E.mac=false;if(navigator.userAgent.indexOf("Macintosh")!==-1){E.mac=true;}return E;}(),init:function(F,E){if(!this._defaultToolbar){this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:false,buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{!
 type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"push",label:"Strike Through",value:"strikethrough"},{type:"separator"},{type:"color",label:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Background Color",value:"backcolor",disabled:true}]},{type:"separator"},{group:"indentlist",label:"Lists",buttons:[{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};
-}YAHOO.widget.SimpleEditor.superclass.init.call(this,F,E);YAHOO.widget.EditorInfo._instances[this.get("id")]=this;this.currentElement=[];this.on("contentReady",function(){this.DOMReady=true;this.fireQueue();},this,true);},initAttributes:function(E){YAHOO.widget.SimpleEditor.superclass.initAttributes.call(this,E);var F=this;this.setAttributeConfig("nodeChangeDelay",{value:((E.nodeChangeDelay===false)?false:true)});this.setAttributeConfig("maxUndo",{writeOnce:true,value:E.maxUndo||30});this.setAttributeConfig("ptags",{writeOnce:true,value:E.ptags||false});this.setAttributeConfig("insert",{writeOnce:true,value:E.insert||false,method:function(K){if(K){var J={fontname:true,fontsize:true,forecolor:true,backcolor:true};var I=this._defaultToolbar.buttons;for(var H=0;H<I.length;H++){if(I[H].buttons){for(var G=0;G<I[H].buttons.length;G++){if(I[H].buttons[G].value){if(J[I[H].buttons[G].value]){delete I[H].buttons[G].disabled;}}}}}}}});this.setAttributeConfig("container",{writeOnce:tru!
 e,value:E.container||false});this.setAttributeConfig("plainText",{writeOnce:true,value:E.plainText||false});this.setAttributeConfig("iframe",{value:null});this.setAttributeConfig("textarea",{value:null,writeOnce:true});this.setAttributeConfig("container",{readOnly:true,value:null});this.setAttributeConfig("nodeChangeThreshold",{value:E.nodeChangeThreshold||3,validator:YAHOO.lang.isNumber});this.setAttributeConfig("allowNoEdit",{value:E.allowNoEdit||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("limitCommands",{value:E.limitCommands||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("element_cont",{value:E.element_cont});this.setAttributeConfig("editor_wrapper",{value:E.editor_wrapper||null,writeOnce:true});this.setAttributeConfig("height",{value:E.height||C.getStyle(F.get("element"),"height"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("iframe").get("parentNode"),{height:{to:parseInt(G,10)}},!
 0.5);H.animate();}else{C.setStyle(this.get("iframe").get("pare!
 ntNode")
,"height",G);}}}});this.setAttributeConfig("autoHeight",{value:E.autoHeight||false,method:function(G){if(G){if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","no");}this.on("afterNodeChange",this._handleAutoHeight,this,true);this.on("editorKeyDown",this._handleAutoHeight,this,true);this.on("editorKeyPress",this._handleAutoHeight,this,true);}else{if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","auto");}this.unsubscribe("afterNodeChange",this._handleAutoHeight);this.unsubscribe("editorKeyDown",this._handleAutoHeight);this.unsubscribe("editorKeyPress",this._handleAutoHeight);}}});this.setAttributeConfig("width",{value:E.width||C.getStyle(this.get("element"),"width"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("element_cont").get("element"),{width:{to:parseInt(G,10)}},0.5);H.animate();}else{this.get("element_cont").setStyle("width",G);}}}});this.setAttributeConf!
 ig("blankimage",{value:E.blankimage||this._getBlankImage()});this.setAttributeConfig("css",{value:E.css||this._defaultCSS,writeOnce:true});this.setAttributeConfig("html",{value:E.html||'<html><head><title>{TITLE}</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><base href="'+this._baseHREF+'"><style>{CSS}</style><style>{HIDDEN_CSS}</style><style>{EXTRA_CSS}</style></head><body onload="document.body._rteLoaded = true;">{CONTENT}</body></html>',writeOnce:true});this.setAttributeConfig("extracss",{value:E.extracss||"",writeOnce:true});this.setAttributeConfig("handleSubmit",{value:E.handleSubmit||false,method:function(G){if(this.get("element").form){if(!this._formButtons){this._formButtons=[];}if(G){A.on(this.get("element").form,"submit",this._handleFormSubmit,this,true);var H=this.get("element").form.getElementsByTagName("input");for(var J=0;J<H.length;J++){var I=H[J].getAttribute("type");if(I&&(I.toLowerCase()=="submit")){A.on(H[J],"click",this._han!
 dleFormButtonClick,this,true);this._formButtons[this._formButt!
 ons.leng
th]=H[J];}}}else{A.removeListener(this.get("element").form,"submit",this._handleFormSubmit);if(this._formButtons){A.removeListener(this._formButtons,"click",this._handleFormButtonClick);}}}}});this.setAttributeConfig("disabled",{value:false,method:function(G){if(this._rendered){this._disableEditor(G);}}});this.setAttributeConfig("saveEl",{value:this.get("element")});this.setAttributeConfig("toolbar_cont",{value:null,writeOnce:true});this.setAttributeConfig("toolbar",{value:E.toolbar||this._defaultToolbar,writeOnce:true,method:function(G){if(!G.buttonType){G.buttonType=this._defaultToolbar.buttonType;}this._defaultToolbar=G;}});this.setAttributeConfig("animate",{value:((E.animate)?((YAHOO.util.Anim)?true:false):false),validator:function(H){var G=true;if(!YAHOO.util.Anim){G=false;}return G;}});this.setAttributeConfig("panel",{value:null,writeOnce:true,validator:function(H){var G=true;if(!YAHOO.widget.Overlay){G=false;}return G;}});this.setAttributeConfig("focusAtStart",{value:!
 E.focusAtStart||false,writeOnce:true,method:function(G){if(G){this.on("editorContentLoaded",function(){var H=this;setTimeout(function(){H._focusWindow.call(H,true);H.editorDirty=false;},400);},this,true);}}});this.setAttributeConfig("dompath",{value:E.dompath||false,method:function(G){if(G&&!this.dompath){this.dompath=document.createElement("DIV");this.dompath.id=this.get("id")+"_dompath";C.addClass(this.dompath,"dompath");this.get("element_cont").get("firstChild").appendChild(this.dompath);if(this.get("iframe")){this._writeDomPath();}}else{if(!G&&this.dompath){this.dompath.parentNode.removeChild(this.dompath);this.dompath=null;}}}});this.setAttributeConfig("markup",{value:E.markup||"semantic",validator:function(G){switch(G.toLowerCase()){case"semantic":case"css":case"default":case"xhtml":return true;}return false;}});this.setAttributeConfig("removeLineBreaks",{value:E.removeLineBreaks||false,validator:YAHOO.lang.isBoolean});
-this.setAttributeConfig("drag",{writeOnce:true,value:E.drag||false});this.setAttributeConfig("resize",{writeOnce:true,value:E.resize||false});},_getBlankImage:function(){if(!this.DOMReady){this._queue[this._queue.length]=["_getBlankImage",arguments];return"";}var E="";if(!this._blankImageLoaded){if(YAHOO.widget.EditorInfo.blankImage){this.set("blankimage",YAHOO.widget.EditorInfo.blankImage);this._blankImageLoaded=true;}else{var F=document.createElement("div");F.style.position="absolute";F.style.top="-9999px";F.style.left="-9999px";F.className=this.CLASS_PREFIX+"-blankimage";document.body.appendChild(F);E=YAHOO.util.Dom.getStyle(F,"background-image");E=E.replace("url(","").replace(")","").replace(/"/g,"");E=E.replace("app:/","");this.set("blankimage",E);this._blankImageLoaded=true;F.parentNode.removeChild(F);YAHOO.widget.EditorInfo.blankImage=E;}}else{E=this.get("blankimage");}return E;},_handleAutoHeight:function(){var I=this._getDoc(),F=I.body,J=I.documentElement;var E=par!
 seInt(C.getStyle(this.get("editor_wrapper"),"height"),10);var G=F.scrollHeight;if(this.browser.webkit){G=J.scrollHeight;}if(G<parseInt(this.get("height"),10)){G=parseInt(this.get("height"),10);}if((E!=G)&&(G>=parseInt(this.get("height"),10))){C.setStyle(this.get("editor_wrapper"),"height",G+"px");if(this.browser.ie){this.get("iframe").setStyle("height","99%");this.get("iframe").setStyle("zoom","1");var H=this;window.setTimeout(function(){H.get("iframe").setStyle("height","100%");},1);}}},_formButtons:null,_formButtonClicked:null,_handleFormButtonClick:function(F){var E=A.getTarget(F);this._formButtonClicked=E;},_handleFormSubmit:function(H){this.saveHTML();var G=this.get("element").form,E=this._formButtonClicked||false;A.removeListener(G,"submit",this._handleFormSubmit);if(YAHOO.env.ua.ie){if(E&&!E.disabled){E.click();}}else{if(E&&!E.disabled){E.click();}var F=document.createEvent("HTMLEvents");F.initEvent("submit",true,true);G.dispatchEvent(F);if(YAHOO.env.ua.webkit){if(YA!
 HOO.lang.isFunction(G.submit)){G.submit();}}}},_handleFontSize!
 :functio
n(G){var E=this.toolbar.getButtonById(G.button.id);var F=E.get("label")+"px";this.execCommand("fontsize",F);this.STOP_EXEC_COMMAND=true;},_handleColorPicker:function(G){var F=G.button;var E="#"+G.color;if((F=="forecolor")||(F=="backcolor")){this.execCommand(F,E);}},_handleAlign:function(H){var G=null;for(var E=0;E<H.button.menu.length;E++){if(H.button.menu[E].value==H.button.value){G=H.button.menu[E].value;}}var F=this._getSelection();this.execCommand(G,F);this.STOP_EXEC_COMMAND=true;},_handleAfterNodeChange:function(){var Q=this._getDomPath(),L=null,H=null,M=null,F=false,J=this.toolbar.getButtonByValue("fontname"),K=this.toolbar.getButtonByValue("fontsize"),E=this.toolbar.getButtonByValue("heading");for(var G=0;G<Q.length;G++){L=Q[G];var P=L.tagName.toLowerCase();if(L.getAttribute("tag")){P=L.getAttribute("tag");}H=L.getAttribute("face");if(C.getStyle(L,"font-family")){H=C.getStyle(L,"font-family");H=H.replace(/'/g,"");}if(P.substring(0,1)=="h"){if(E){for(var I=0;I<E._confi!
 gs.menu.value.length;I++){if(E._configs.menu.value[I].value.toLowerCase()==P){E.set("label",E._configs.menu.value[I].text);}}this._updateMenuChecked("heading",P);}}}if(J){for(var O=0;O<J._configs.menu.value.length;O++){if(H&&J._configs.menu.value[O].text.toLowerCase()==H.toLowerCase()){F=true;H=J._configs.menu.value[O].text;}}if(!F){H=J._configs.label._initialConfig.value;}var N='<span class="yui-toolbar-fontname-'+this._cleanClassName(H)+'">'+H+"</span>";if(J.get("label")!=N){J.set("label",N);this._updateMenuChecked("fontname",H);}}if(K){M=parseInt(C.getStyle(L,"fontSize"),10);if((M===null)||isNaN(M)){M=K._configs.label._initialConfig.value;}K.set("label",""+M);}if(!this._isElement(L,"body")&&!this._isElement(L,"img")){this.toolbar.enableButton(J);this.toolbar.enableButton(K);this.toolbar.enableButton("forecolor");this.toolbar.enableButton("backcolor");}if(this._isElement(L,"img")){if(YAHOO.widget.Overlay){this.toolbar.enableButton("createlink");}}if(this._hasParent(L,"blo!
 ckquote")){this.toolbar.selectButton("indent");this.toolbar.di!
 sableBut
ton("indent");this.toolbar.enableButton("outdent");}if(this._hasParent(L,"ol")||this._hasParent(L,"ul")){this.toolbar.disableButton("indent");}this._lastButton=null;},_handleInsertImageClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.toolbar.set("disabled",true);this.on("afterExecCommand",function(){var E=this.currentElement[0],G="http://";if(!E){E=this._getSelectedElement();}if(E){if(E.getAttribute("src")){G=E.getAttribute("src",2);if(G.indexOf(this.get("blankimage"))!=-1){G=this.STR_IMAGE_HERE;}}}var F=prompt(this.STR_LINK_URL+": ",G);if((F!=="")&&(F!==null)){E.setAttribute("src",F);}else{if(F===null){E.parentNode.removeChild(E);this.currentElement=[];this.nodeChange();}}this.closeWindow();this.toolbar.set("disabled",false);},this,true);},_handleInsertImageWindowClose:function(){this.nodeChange();},_isLocalFile:function(E){if((E)&&(E!=="")&&((E.indexOf("file:/")!=-1)||(E.indexOf(":\\")!=-1))){return true;}!
 return false;},_handleCreateLinkClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){return false;}}this.toolbar.set("disabled",true);this.on("afterExecCommand",function(){var G=this.currentElement[0],F="";if(G){if(G.getAttribute("href",2)!==null){F=G.getAttribute("href",2);}}var I=prompt(this.STR_LINK_URL+": ",F);if((I!=="")&&(I!==null)){var H=I;if((H.indexOf(":/"+"/")==-1)&&(H.substring(0,1)!="/")&&(H.substring(0,6).toLowerCase()!="mailto")){if((H.indexOf("@")!=-1)&&(H.substring(0,6).toLowerCase()!="mailto")){H="mailto:"+H;}else{if(H.substring(0,1)!="#"){}}}G.setAttribute("href",H);}else{if(I!==null){var E=this._getDoc().createElement("span");E.innerHTML=G.innerHTML;C.addClass(E,"yui-non");G.parentNode.replaceChild(E,G);}}this.closeWindow();this.toolbar.set("disabled",false);},this);},_handleCreateLinkWindowClose:function(){this.nodeChange();this.currentElement=[];
-},render:function(){if(this._rendered){return false;}if(!this.DOMReady){this._queue[this._queue.length]=["render",arguments];return false;}if(this.get("element")){if(this.get("element").tagName){this._textarea=true;if(this.get("element").tagName.toLowerCase()!=="textarea"){this._textarea=false;}}else{return false;}}else{return false;}this._rendered=true;var E=this;window.setTimeout(function(){E._render.call(E);},4);},_render:function(){var E=this;this.set("textarea",this.get("element"));this.get("element_cont").setStyle("display","none");this.get("element_cont").addClass(this.CLASS_CONTAINER);this.set("iframe",this._createIframe());window.setTimeout(function(){E._setInitialContent.call(E);},10);this.get("editor_wrapper").appendChild(this.get("iframe").get("element"));if(this.get("disabled")){this._disableEditor(true);}var F=this.get("toolbar");if(F instanceof B){this.toolbar=F;this.toolbar.set("disabled",true);}else{F.disabled=true;this.toolbar=new B(this.get("toolbar_cont"!
 ),F);}this.fireEvent("toolbarLoaded",{type:"toolbarLoaded",target:this.toolbar});this.toolbar.on("toolbarCollapsed",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("toolbarExpanded",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("fontsizeClick",this._handleFontSize,this,true);this.toolbar.on("colorPickerClicked",function(G){this._handleColorPicker(G);return false;},this,true);this.toolbar.on("alignClick",this._handleAlign,this,true);this.on("afterNodeChange",this._handleAfterNodeChange,this,true);this.toolbar.on("insertimageClick",this._handleInsertImageClick,this,true);this.on("windowinsertimageClose",this._handleInsertImageWindowClose,this,true);this.toolbar.on("createlinkClick",this._handleCreateLinkClick,this,true);this.on("windowcreatelinkClose",this._handleCreateLinkWindowClose,this,true);this.get("parentNode").replaceChild(this.get("element_cont").get("element"),this.get("element"));this.setStyle("v!
 isibility","hidden");this.setStyle("position","absolute");this!
 .setStyl
e("top","-9999px");this.setStyle("left","-9999px");this.get("element_cont").appendChild(this.get("element"));this.get("element_cont").setStyle("display","block");C.addClass(this.get("iframe").get("parentNode"),this.CLASS_EDITABLE_CONT);this.get("iframe").addClass(this.CLASS_EDITABLE);this.get("element_cont").setStyle("width",this.get("width"));C.setStyle(this.get("iframe").get("parentNode"),"height",this.get("height"));this.get("iframe").setStyle("width","100%");this.get("iframe").setStyle("height","100%");this._setupDD();window.setTimeout(function(){E._setupAfterElement.call(E);},0);this.fireEvent("afterRender",{type:"afterRender",target:this});},execCommand:function(G,F){var J=this.fireEvent("beforeExecCommand",{type:"beforeExecCommand",target:this,args:arguments});if((J===false)||(this.STOP_EXEC_COMMAND)){this.STOP_EXEC_COMMAND=false;return false;}this._lastCommand=G;this._setMarkupType(G);if(this.browser.ie){this._getWindow().focus();}var E=true;if(this.get("limitCommand!
 s")){if(!this.toolbar.getButtonByValue(G)){E=false;}}this.editorDirty=true;if((typeof this["cmd_"+G.toLowerCase()]=="function")&&E){var I=this["cmd_"+G.toLowerCase()](F);E=I[0];if(I[1]){G=I[1];}if(I[2]){F=I[2];}}if(E){try{this._getDoc().execCommand(G,false,F);}catch(H){}}else{}this.on("afterExecCommand",function(){this.unsubscribeAll("afterExecCommand");this.nodeChange();},this,true);this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});},cmd_underline:function(F){if(!this.browser.webkit){var E=this._getSelectedElement();if(E&&this._isElement(E,"span")){if(E.style.textDecoration=="underline"){E.style.textDecoration="none";}else{E.style.textDecoration="underline";}return[false];}}return[true];},cmd_backcolor:function(H){var E=true,F=this._getSelectedElement(),G="backcolor";if(this.browser.gecko||this.browser.opera){this._setEditorStyle(true);G="hilitecolor";}if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"background-color",H);this._sele!
 ctNode(F);E=false;}else{if(!this._isElement(F,"body")&&this._h!
 asSelect
ion()){C.setStyle(F,"background-color",H);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({backgroundColor:H});}else{this._createCurrentElement("span",{backgroundColor:H});this._selectNode(this.currentElement[0]);}E=false;}}return[E,G];},cmd_forecolor:function(G){var E=true,F=this._getSelectedElement();if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(!this._isElement(F,"body")&&this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({color:G});}else{this._createCurrentElement("span",{color:G});this._selectNode(this.currentElement[0]);}E=false;}}return[E];},cmd_unlink:function(E){this._swapEl(this.currentElement[0],"span",function(F){F.className="yui-non";});return[false];},cmd_createlink:function(G){var F=this._getSelectedElement(),E=null;if(this._hasParent(F,"a")){this.currentElement[0]=this._hasPar!
 ent(F,"a");}else{if(!this._isElement(F,"a")){this._createCurrentElement("a");E=this._swapEl(this.currentElement[0],"a");this.currentElement[0]=E;}else{this.currentElement[0]=F;}}return[false];},cmd_insertimage:function(J){var E=true,F=null,I="insertimage",H=this._getSelectedElement();if(J===""){J=this.get("blankimage");}if(this._isElement(H,"img")){this.currentElement[0]=H;E=false;}else{if(this._getDoc().queryCommandEnabled(I)){this._getDoc().execCommand("insertimage",false,J);var K=this._getDoc().getElementsByTagName("img");for(var G=0;G<K.length;G++){if(!YAHOO.util.Dom.hasClass(K[G],"yui-img")){YAHOO.util.Dom.addClass(K[G],"yui-img");this.currentElement[0]=K[G];}}E=false;}else{if(H==this._getDoc().body){F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this._getDoc().body.appendChild(F);}else{this._createCurrentElement("img");F=this._getDoc().createElement("img");
-F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);}this.currentElement[0]=F;E=false;}}return[E];},cmd_inserthtml:function(H){var E=true,G="inserthtml",F=null,I=null;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled(G)){this._createCurrentElement("img");F=this._getDoc().createElement("span");F.innerHTML=H;this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);E=false;}else{if(this.browser.ie){I=this._getRange();if(I.item){I.item(0).outerHTML=H;}else{I.pasteHTML(H);}E=false;}}return[E];},cmd_list:function(Y){var S=true,V=null,M=0,G=null,R="",W=this._getSelectedElement(),T="insertorderedlist";if(Y=="ul"){T="insertunorderedlist";}if(this.browser.webkit){if(this._isElement(W,"li")&&this._isElement(W.parentNode,Y)){G=W.parentNode;V=this._getDoc().createElement("span");YAHOO.util.Dom.addClass(V,"yui-non");R="";var F=G.getElementsByTagName("li");for(M=0;M<F.length;M++){R+!
 ="<div>"+F[M].innerHTML+"</div>";}V.innerHTML=R;this.currentElement[0]=G;this.currentElement[0].parentNode.replaceChild(V,this.currentElement[0]);}else{this._createCurrentElement(Y.toLowerCase());V=this._getDoc().createElement(Y);for(M=0;M<this.currentElement.length;M++){var J=this._getDoc().createElement("li");J.innerHTML=this.currentElement[M].innerHTML+'<span class="yui-non"> </span> ';V.appendChild(J);if(M>0){this.currentElement[M].parentNode.removeChild(this.currentElement[M]);}}this.currentElement[0].parentNode.replaceChild(V,this.currentElement[0]);this.currentElement[0]=V;var H=this.currentElement[0].firstChild;H=C.getElementsByClassName("yui-non","span",H)[0];this._getSelection().setBaseAndExtent(H,1,H,H.innerText.length);}S=false;}else{G=this._getSelectedElement();if(this._isElement(G,"li")&&this._isElement(G.parentNode,Y)||(this.browser.ie&&this._isElement(this._getRange().parentElement,"li"))||(this.browser.ie&&this._isElement(G,"ul"))||(this.browser.i!
 e&&this._isElement(G,"ol"))){if(this.browser.ie){if((this.brow!
 ser.ie&&
this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){G=G.getElementsByTagName("li")[0];}R="";var I=G.parentNode.getElementsByTagName("li");for(var U=0;U<I.length;U++){R+=I[U].innerHTML+"<br>";}var X=this._getDoc().createElement("span");X.innerHTML=R;G.parentNode.parentNode.replaceChild(X,G.parentNode);}else{this.nodeChange();this._getDoc().execCommand(T,"",G.parentNode);this.nodeChange();}S=false;}if(this.browser.opera){var Q=this;window.setTimeout(function(){var Z=Q._getDoc().getElementsByTagName("li");for(var a=0;a<Z.length;a++){if(Z[a].innerHTML.toLowerCase()=="<br>"){Z[a].parentNode.parentNode.removeChild(Z[a].parentNode);}}},30);}if(this.browser.ie&&S){var K="";if(this._getRange().html){K="<li>"+this._getRange().html+"</li>";}else{var L=this._getRange().text.split("\n");if(L.length>1){K="";for(var P=0;P<L.length;P++){K+="<li>"+L[P]+"</li>";}}else{var O=this._getRange().text;if(O===""){K='<li id="new_list_item">'+O+"</li>";}else{K="<li>"+O+"</li>";}}}thi!
 s._getRange().pasteHTML("<"+Y+">"+K+"</"+Y+">");var E=this._getDoc().getElementById("new_list_item");if(E){var N=this._getDoc().body.createTextRange();N.moveToElementText(E);N.collapse(false);N.select();E.id="";}S=false;}}return S;},cmd_insertorderedlist:function(E){return[this.cmd_list("ol")];},cmd_insertunorderedlist:function(E){return[this.cmd_list("ul")];},cmd_fontname:function(H){var E=true,G=this._getSelectedElement();this.currentFont=H;if(G&&G.tagName&&!this._hasSelection()&&!this._isElement(G,"body")&&!this.get("insert")){YAHOO.util.Dom.setStyle(G,"font-family",H);E=false;}else{if(this.get("insert")&&!this._hasSelection()){var F=this._createInsertElement({fontFamily:H});E=false;}}return[E];},cmd_fontsize:function(G){var E=null;if(this.currentElement&&(this.currentElement.length>0)&&(!this._hasSelection())&&(!this.get("insert"))){YAHOO.util.Dom.setStyle(this.currentElement,"fontSize",G);}else{if(!this._isElement(this._getSelectedElement(),"body")){E=this._getSelected!
 Element();YAHOO.util.Dom.setStyle(E,"fontSize",G);if(this.get(!
 "insert"
)&&this.browser.ie){var F=this._getRange();F.collapse(false);F.select();}else{this._selectNode(E);}}else{if(this.get("insert")&&!this._hasSelection()){E=this._createInsertElement({fontSize:G});this.currentElement[0]=E;this._selectNode(this.currentElement[0]);}else{this._createCurrentElement("span",{"fontSize":G});this._selectNode(this.currentElement[0]);}}}return[false];},_swapEl:function(F,E,H){var G=this._getDoc().createElement(E);if(F){G.innerHTML=F.innerHTML;}if(typeof H=="function"){H.call(this,G);}if(F){F.parentNode.replaceChild(G,F);}return G;},_createInsertElement:function(E){this._createCurrentElement("span",E);var F=this.currentElement[0];if(this.browser.webkit){F.innerHTML='<span class="yui-non"> </span>';F=F.firstChild;this._getSelection().setBaseAndExtent(F,1,F,F.innerText.length);}else{if(this.browser.ie||this.browser.opera){F.innerHTML=" ";}}this._focusWindow();this._selectNode(F,true);return F;},_createCurrentElement:function(G,J){G=((G)?G:"a");var !
 R=null,F=[],H=this._getDoc();if(this.currentFont){if(!J){J={};}J.fontFamily=this.currentFont;this.currentFont=null;}this.currentElement=[];var M=function(X,Z){var Y=null;X=((X)?X:"span");X=X.toLowerCase();switch(X){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":Y=H.createElement(X);break;default:Y=H.createElement(X);if(X==="span"){YAHOO.util.Dom.addClass(Y,"yui-tag-"+X);YAHOO.util.Dom.addClass(Y,"yui-tag");Y.setAttribute("tag",X);}for(var W in Z){if(YAHOO.lang.hasOwnProperty(Z,W)){Y.style[W]=Z[W];}}break;}return Y;};if(!this._hasSelection()){if(this._getDoc().queryCommandEnabled("insertimage")){this._getDoc().execCommand("insertimage",false,"yui-tmp-img");var L=this._getDoc().getElementsByTagName("img");for(var Q=0;Q<L.length;Q++){if(L[Q].getAttribute("src",2)=="yui-tmp-img"){F=M(G,J);L[Q].parentNode.replaceChild(F,L[Q]);this.currentElement[this.currentElement.length]=F;}}}else{if(this.currentEvent){R=YAHOO.util.Event.getTarget(this.currentEvent);
-}else{R=this._getDoc().body;}}if(R){F=M(G,J);if(this._isElement(R,"body")||this._isElement(R,"html")){if(this._isElement(R,"html")){R=this._getDoc().body;}R.appendChild(F);}else{if(R.nextSibling){R.parentNode.insertBefore(F,R.nextSibling);}else{R.parentNode.appendChild(F);}}this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}}}else{this._setEditorStyle(true);this._getDoc().execCommand("fontname",false,"yui-tmp");var E=[],P,V=["font","span","i","b","u"];if(!this._isElement(this._getSelectedElement(),"body")){V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().tagName);V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().parentNode.tagName);}for(var K=0;K<V.length;K++){var I=this._getDoc().getElementsByTagName(V[K]);for(var U=0;U<I.len!
 gth;U++){E[E.length]=I[U];}}for(var S=0;S<E.length;S++){if((YAHOO.util.Dom.getStyle(E[S],"font-family")=="yui-tmp")||(E[S].face&&(E[S].face=="yui-tmp"))){F=M(G,J);F.innerHTML=E[S].innerHTML;if(this._isElement(E[S],"ol")||(this._isElement(E[S],"ul"))){var N=E[S].getElementsByTagName("li")[0];E[S].style.fontFamily="inherit";N.style.fontFamily="inherit";F.innerHTML=N.innerHTML;N.innerHTML="";N.appendChild(F);this.currentElement[this.currentElement.length]=F;}else{if(this._isElement(E[S],"li")){E[S].innerHTML="";E[S].appendChild(F);E[S].style.fontFamily="inherit";this.currentElement[this.currentElement.length]=F;}else{if(E[S].parentNode){E[S].parentNode.replaceChild(F,E[S]);this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}if(this.browser.ie&&J&&J.fontSize){this._getSelection().e!
 mpty();}if(this.browser.gecko){this._getSelection().collapseTo!
 Start();
}}}}}}var T=this.currentElement.length;for(var O=0;O<T;O++){if((O+1)!=T){if(this.currentElement[O]&&this.currentElement[O].nextSibling){if(this._isElement(this.currentElement[O],"br")){this.currentElement[this.currentElement.length]=this.currentElement[O].nextSibling;}}}}}},saveHTML:function(){var F=this.cleanHTML();if(this._textarea){this.get("element").value=F;}else{this.get("element").innerHTML=F;}if(this.get("saveEl")!==this.get("element")){var E=this.get("saveEl");if(D.isString(E)){E=C.get(E);}if(E){if(E.tagName.toLowerCase()==="textarea"){E.value=F;}else{E.innerHTML=F;}}}return F;},setEditorHTML:function(F){var E=this._cleanIncomingHTML(F);this._getDoc().body.innerHTML=E;this.nodeChange();},getEditorHTML:function(){var E=this._getDoc().body;if(E===null){return null;}return this._getDoc().body.innerHTML;},show:function(){if(this.browser.gecko){this._setDesignMode("on");this._focusWindow();}if(this.browser.webkit){var E=this;window.setTimeout(function(){E._setInitialCont!
 ent.call(E);},10);}if(this.currentWindow){this.closeWindow();}this.get("iframe").setStyle("position","static");this.get("iframe").setStyle("left","");},hide:function(){if(this.currentWindow){this.closeWindow();}if(this._fixNodesTimer){clearTimeout(this._fixNodesTimer);this._fixNodesTimer=null;}if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);this._nodeChangeTimer=null;}this._lastNodeChange=0;this.get("iframe").setStyle("position","absolute");this.get("iframe").setStyle("left","-9999px");},_cleanIncomingHTML:function(E){E=E.replace(/<strong([^>]*)>/gi,"<b$1>");E=E.replace(/<\/strong>/gi,"</b>");E=E.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");E=E.replace(/<\/embed>/gi,"</YUI_EMBED>");E=E.replace(/<em([^>]*)>/gi,"<i$1>");E=E.replace(/<\/em>/gi,"</i>");E=E.replace(/<YUI_EMBED([^>]*)>/gi,"<embed$1>");E=E.replace(/<\/YUI_EMBED>/gi,"</embed>");if(this.get("plainText")){E=E.replace(/\n/g,"<br>").replace(/\r/g,"<br>");E=E.replace(/  /gi,"  ");E=E.replace(/\t/g!
 i,"    ");}E=E.replace(/<script([^>]*)>/gi!
 ,"<bad>"
);E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/\n/g,"<YUI_LF>").replace(/\r/g,"<YUI_LF>");E=E.replace(new RegExp("<bad([^>]*)>(.*?)</bad>","gi"),"");E=E.replace(/<YUI_LF>/g,"\n");return E;},cleanHTML:function(G){if(!G){G=this.getEditorHTML();}var F=this.get("markup");G=this.pre_filter_linebreaks(G,F);G=G.replace(/<img([^>]*)\/>/gi,"<YUI_IMG$1>");G=G.replace(/<img([^>]*)>/gi,"<YUI_IMG$1>");G=G.replace(/<input([^>]*)\/>/gi,"<YUI_INPUT$1>");G=G.replace(/<input([^>]*)>/gi,"<YUI_INPUT$1>");G=G.replace(/<ul([^>]*)>/gi,"<YUI_UL$1>");G=G.replace(/<\/ul>/gi,"</YUI_UL>");G=G.replace(/<blockquote([^>]*)>/gi,"<YUI_BQ$1>");G=G.replace(/<\/blockquote>/gi,"</YUI_BQ>");G=G.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");G=G.replace(/<\/embed>/gi,"</YUI_EMBED>");if((F=="semantic")||(F=="xhtml")){G=G.replace(/<i(\s+[^>]*)?>/gi,"<em$1>");G=G.replace(/<\/i>/gi,"</em>");G=G.replace(/<b(\s+[^>!
 ]*)?>/gi,"<strong$1>");G=G.replace(/<\/b>/gi,"</strong>");}G=G.replace(/<font/gi,"<font");G=G.replace(/<\/font>/gi,"</font>");G=G.replace(/<span/gi,"<span");G=G.replace(/<\/span>/gi,"</span>");if((F=="semantic")||(F=="xhtml")||(F=="css")){G=G.replace(new RegExp('<font([^>]*)face="([^>]*)">(.*?)</font>',"gi"),'<span $1 style="font-family: $2;">$3</span>');G=G.replace(/<u/gi,'<span style="text-decoration: underline;"');if(this.browser.webkit){G=G.replace(new RegExp('<span class="Apple-style-span" style="font-weight: bold;">([^>]*)</span>',"gi"),"<strong>$1</strong>");G=G.replace(new RegExp('<span class="Apple-style-span" style="font-style: italic;">([^>]*)</span>',"gi"),"<em>$1</em>");}G=G.replace(/\/u>/gi,"/span>");if(F=="css"){G=G.replace(/<em([^>]*)>/gi,"<i$1>");G=G.replace(/<\/em>/gi,"</i>");G=G.replace(/<strong([^>]*)>/gi,"<b$1>");G=G.replace(/<\/strong>/gi,"</b>");G=G.replace(/<b/gi,'<span style="font-weight: bold;"');
-G=G.replace(/\/b>/gi,"/span>");G=G.replace(/<i/gi,'<span style="font-style: italic;"');G=G.replace(/\/i>/gi,"/span>");}G=G.replace(/  /gi," ");}else{G=G.replace(/<u/gi,"<u");G=G.replace(/\/u>/gi,"/u>");}G=G.replace(/<ol([^>]*)>/gi,"<ol$1>");G=G.replace(/\/ol>/gi,"/ol>");G=G.replace(/<li/gi,"<li");G=G.replace(/\/li>/gi,"/li>");G=this.filter_safari(G);G=this.filter_internals(G);G=this.filter_all_rgb(G);G=this.post_filter_linebreaks(G,F);if(F=="xhtml"){G=G.replace(/<YUI_IMG([^>]*)>/g,"<img $1 />");G=G.replace(/<YUI_INPUT([^>]*)>/g,"<input $1 />");}else{G=G.replace(/<YUI_IMG([^>]*)>/g,"<img $1>");G=G.replace(/<YUI_INPUT([^>]*)>/g,"<input $1>");}G=G.replace(/<YUI_UL([^>]*)>/g,"<ul$1>");G=G.replace(/<\/YUI_UL>/g,"</ul>");G=this.filter_invalid_lists(G);G=G.replace(/<YUI_BQ([^>]*)>/g,"<blockquote$1>");G=G.replace(/<\/YUI_BQ>/g,"</blockquote>");G=G.replace(/<YUI_EMBED([^>]*)>/g,"<embed$1>");G=G.replace(/<\/YUI_EMBED>/g,"</embed>");G=G.replace(" & ","YUI_AMP");G=G.replace("&"!
 ,"&");G=G.replace("YUI_AMP","&");G=YAHOO.lang.trim(G);if(this.get("removeLineBreaks")){G=G.replace(/\n/g,"").replace(/\r/g,"");G=G.replace(/  /gi," ");}if(G.substring(0,6).toLowerCase()=="<span>"){G=G.substring(6);if(G.substring(G.length-7,G.length).toLowerCase()=="</span>"){G=G.substring(0,G.length-7);}}for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(D.isObject(E)&&E.keepContents){G=G.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"$1");}else{G=G.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"");}}}this.fireEvent("cleanHTML",{type:"cleanHTML",target:this,html:G});return G;},filter_invalid_lists:function(E){E=E.replace(/<\/li>\n/gi,"</li>");E=E.replace(/<\/li><ol>/gi,"</li><li><ol>");E=E.replace(/<\/ol>/gi,"</ol></li>");E=E.replace(/<\/ol><\/li>\n/gi,"</ol>\n");E=E.replace(/<\/li><ul>/gi,"</li><li><ul>");E=E.replace(/<\/ul>/gi,"</ul></li>");E=E.replace(/<\/ul><\/li>\n?/gi,"</ul>\n");E=E.replace(/<\/li>/gi,"</li>\n");E!
 =E.replace(/<\/ol>/gi,"</ol>\n");E=E.replace(/<ol>/gi,"<ol>\n"!
 );E=E.re
place(/<ul>/gi,"<ul>\n");return E;},filter_safari:function(E){if(this.browser.webkit){E=E.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi,"    ");E=E.replace(/Apple-style-span/gi,"");E=E.replace(/style="line-height: normal;"/gi,"");E=E.replace(/<li><\/li>/gi,"");E=E.replace(/<li> <\/li>/gi,"");E=E.replace(/<li>  <\/li>/gi,"");if(this.get("ptags")){E=E.replace(/<div([^>]*)>/g,"<p$1>");E=E.replace(/<\/div>/gi,"</p>");}else{E=E.replace(/<div>/gi,"");E=E.replace(/<\/div>/gi,"<br>");}}return E;},filter_internals:function(E){E=E.replace(/\r/g,"");E=E.replace(/<\/?(body|head|html)[^>]*>/gi,"");E=E.replace(/<YUI_BR><\/li>/gi,"</li>");E=E.replace(/yui-tag-span/gi,"");E=E.replace(/yui-tag/gi,"");E=E.replace(/yui-non/gi,"");E=E.replace(/yui-img/gi,"");E=E.replace(/ tag="span"/gi,"");E=E.replace(/ class=""/gi,"");E=E.replace(/ style=""/gi,"");E=E.replace(/ class=" "/gi,"");E=E.replace(/ class="  "/gi,"");E=E.replace(/ target=""/gi,"");!
 E=E.replace(/ title=""/gi,"");if(this.browser.ie){E=E.replace(/ class= /gi,"");E=E.replace(/ class= >/gi,"");E=E.replace(/_height="([^>])"/gi,"");E=E.replace(/_width="([^>])"/gi,"");}return E;},filter_all_rgb:function(I){var H=new RegExp("rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)","gi");var E=I.match(H);if(D.isArray(E)){for(var G=0;G<E.length;G++){var F=this.filter_rgb(E[G]);I=I.replace(E[G].toString(),F);}}return I;},filter_rgb:function(G){if(G.toLowerCase().indexOf("rgb")!=-1){var J=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");var F=G.replace(J,"$1,$2,$3,$4,$5").split(",");if(F.length==5){var I=parseInt(F[1],10).toString(16);var H=parseInt(F[2],10).toString(16);var E=parseInt(F[3],10).toString(16);I=I.length==1?"0"+I:I;H=H.length==1?"0"+H:H;E=E.length==1?"0"+E:E;G="#"+I+H+E;}}return G;},pre_filter_linebreaks:function(F,E){if(this.browser.webkit){F=F.replace(/<br class="khtml-block-placeholder">/gi,"<Y!
 UI_BR>");F=F.replace(/<br class="webkit-block-placeholder">/gi!
 ,"<YUI_B
R>");}F=F.replace(/<br>/gi,"<YUI_BR>");F=F.replace(/<br (.*?)>/gi,"<YUI_BR>");F=F.replace(/<br\/>/gi,"<YUI_BR>");F=F.replace(/<br \/>/gi,"<YUI_BR>");F=F.replace(/<div><YUI_BR><\/div>/gi,"<YUI_BR>");F=F.replace(/<p>( | )<\/p>/g,"<YUI_BR>");F=F.replace(/<p><br> <\/p>/gi,"<YUI_BR>");F=F.replace(/<p> <\/p>/gi,"<YUI_BR>");F=F.replace(/<YUI_BR>$/,"");F=F.replace(/<YUI_BR><\/p>/g,"</p>");if(this.browser.ie){F=F.replace(/    /g,"\t");}return F;},post_filter_linebreaks:function(F,E){if(E=="xhtml"){F=F.replace(/<YUI_BR>/g,"<br />");}else{F=F.replace(/<YUI_BR>/g,"<br>");}return F;},clearEditorDoc:function(){this._getDoc().body.innerHTML=" ";},openWindow:function(E){},moveWindow:function(){},_closeWindow:function(){},closeWindow:function(){this.toolbar.resetAllButtons();this._focusWindow();},destroy:function(){if(this.resize){this.resize.destroy();}if(this.dd){this.dd.unreg();}if(this.get("panel")){this.get("panel").destroy();}this.saveHTML()!
 ;this.toolbar.destroy();this.setStyle("visibility","visible");this.setStyle("position","static");this.setStyle("top","");this.setStyle("left","");var E=this.get("element");this.get("element_cont").get("parentNode").replaceChild(E,this.get("element_cont").get("element"));this.get("element_cont").get("element").innerHTML="";this.set("handleSubmit",false);return true;},toString:function(){var E="SimpleEditor";if(this.get&&this.get("element_cont")){E="SimpleEditor (#"+this.get("element_cont").get("id")+")"+((this.get("disabled")?" Disabled":""));}return E;}});YAHOO.widget.EditorInfo={_instances:{},blankImage:"",window:{},panel:null,getEditorById:function(E){if(!YAHOO.lang.isString(E)){E=E.id;}if(this._instances[E]){return this._instances[E];}return false;},toString:function(){var E=0;for(var F in this._instances){if(D.hasOwnProperty(this._instances,F)){E++;}}return"Editor Info ("+E+" registered intance"+((E>1)?"s":"")+")";
-}};})();YAHOO.register("simpleeditor",YAHOO.widget.SimpleEditor,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+}}}}}else{return false;}},deselectButton:function(F){var E=B.call(this,F);if(E){E.removeClass("yui-button-selected");E.removeClass("yui-button-"+E.get("value")+"-selected");E.removeClass("yui-button-hover");E._selected=false;}else{return false;}},deselectAllButtons:function(){var E=this._buttonList.length;for(var F=0;F<E;F++){this.deselectButton(this._buttonList[F]);}},disableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.disableButton(this._buttonList[F]);}},enableAllButtons:function(){if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){this.enableButton(this._buttonList[F]);}},resetAllButtons:function(I){if(!D.isObject(I)){I={};}if(this.get("disabled")){return false;}var E=this._buttonList.length;for(var F=0;F<E;F++){var H=this._buttonList[F];if(H){var G=H._configs.disabled._initialConfig.value;if(I[H.get("id")]){this.enableButton(H);this.selectButton(H);}else{if(G)!
 {this.disableButton(H);}else{this.enableButton(H);}this.deselectButton(H);}}}},destroyButton:function(I){var G=B.call(this,I);if(G){var H=G.get("id");G.destroy();var E=this._buttonList.length;for(var F=0;F<E;F++){if(this._buttonList[F]&&this._buttonList[F].get("id")==H){this._buttonList[F]=null;}}}else{return false;}},destroy:function(){this.get("element").innerHTML="";this.get("element").className="";for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}return true;},collapse:function(F){var E=C.getElementsByClassName("collapse","span",this._titlebar);if(F===false){C.removeClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");if(E[0]){C.removeClass(E[0],"collapsed");}this.fireEvent("toolbarExpanded",{type:"toolbarExpanded",target:this});}else{if(E[0]){C.addClass(E[0],"collapsed");}C.addClass(this.get("cont").parentNode,"yui-toolbar-container-collapsed");this.fireEvent("toolbarCollapsed",{type:"toolbarCollapsed",target:this});}},toString:function(){r!
 eturn"Toolbar (#"+this.get("element").id+") with "+this._butto!
 nList.le
ngth+" buttons.";}});})();(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang,B=YAHOO.widget.Toolbar;YAHOO.widget.SimpleEditor=function(H,M){var G={};if(D.isObject(H)&&(!H.tagName)&&!M){D.augmentObject(G,H);H=document.createElement("textarea");this.DOMReady=true;if(G.container){var K=C.get(G.container);K.appendChild(H);}else{document.body.appendChild(H);}}else{if(M){D.augmentObject(G,M);}}var I={element:null,attributes:G},F=null;if(D.isString(H)){F=H;}else{if(I.attributes.id){F=I.attributes.id;}else{this.DOMReady=true;F=C.generateId(H);}}I.element=H;var J=document.createElement("DIV");I.attributes.element_cont=new YAHOO.util.Element(J,{id:F+"_container"});var E=document.createElement("div");C.addClass(E,"first-child");I.attributes.element_cont.appendChild(E);if(!I.attributes.toolbar_cont){I.attributes.toolbar_cont=document.createElement("DIV");I.attributes.toolbar_cont.id=F+"_toolbar";E.appendChild(I.attributes.toolbar_cont);}var L=document.createElement("DIV");!
 E.appendChild(L);I.attributes.editor_wrapper=L;YAHOO.widget.SimpleEditor.superclass.constructor.call(this,I.element,I.attributes);};YAHOO.extend(YAHOO.widget.SimpleEditor,YAHOO.util.Element,{_resizeConfig:{handles:["br"],autoRatio:true,status:true,proxy:true,useShim:true,setSize:false},_setupResize:function(){if(!YAHOO.util.DD||!YAHOO.util.Resize){return false;}if(this.get("resize")){var E={};D.augmentObject(E,this._resizeConfig);this.resize=new YAHOO.util.Resize(this.get("element_cont").get("element"),E);this.resize.on("resize",function(G){var K=this.get("animate");this.set("animate",false);this.set("width",G.width+"px");var H=G.height,I=(this.toolbar.get("element").clientHeight+2),J=0;if(this.dompath){J=(this.dompath.clientHeight+1);}var F=(H-I-J);this.set("height",F+"px");this.get("element_cont").setStyle("height","");this.set("animate",K);},this,true);}},resize:null,_setupDD:function(){if(!YAHOO.util.DD){return false;}if(this.get("drag")){var F=this.get("drag"),E=YAHOO.!
 util.DD;if(F==="proxy"){E=YAHOO.util.DDProxy;}this.dd=new E(th!
 is.get("
element_cont").get("element"));this.toolbar.addClass("draggable");this.dd.setHandleElId(this.toolbar._titlebar);}},dd:null,_lastCommand:null,_undoNodeChange:function(){},_storeUndo:function(){},_checkKey:function(E,H){var F=false;if((H.keyCode===E.key)){if(E.mods&&(E.mods.length>0)){var I=0;for(var G=0;G<E.mods.length;G++){if(this.browser.mac){if(E.mods[G]=="ctrl"){E.mods[G]="meta";}}if(H[E.mods[G]+"Key"]===true){I++;}}if(I===E.mods.length){F=true;}}else{F=true;}}return F;},_keyMap:{SELECT_ALL:{key:65,mods:["ctrl"]},CLOSE_WINDOW:{key:87,mods:["shift","ctrl"]},FOCUS_TOOLBAR:{key:27,mods:["shift"]},FOCUS_AFTER:{key:27},FONT_SIZE_UP:{key:38,mods:["shift","ctrl"]},FONT_SIZE_DOWN:{key:40,mods:["shift","ctrl"]},CREATE_LINK:{key:76,mods:["shift","ctrl"]},BOLD:{key:66,mods:["shift","ctrl"]},ITALIC:{key:73,mods:["shift","ctrl"]},UNDERLINE:{key:85,mods:["shift","ctrl"]},UNDO:{key:90,mods:["ctrl"]},REDO:{key:90,mods:["shift","ctrl"]},JUSTIFY_LEFT:{key:219,mods:["shift","ctrl"]},JUSTIFY!
 _CENTER:{key:220,mods:["shift","ctrl"]},JUSTIFY_RIGHT:{key:221,mods:["shift","ctrl"]}},_cleanClassName:function(E){return E.replace(/ /g,"-").toLowerCase();},_textarea:null,_docType:'<!DOCTYPE HTML PUBLIC "-/'+"/W3C/"+"/DTD HTML 4.01/"+'/EN" "http:/'+'/www.w3.org/TR/html4/strict.dtd">',editorDirty:null,_defaultCSS:"html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }",_defaultToolbar:null,_lastButton:null,_baseHREF:function(){var E=document.location.href;
+if(E.indexOf("?")!==-1){E=E.substring(0,E.indexOf("?"));}E=E.substring(0,E.lastIndexOf("/"))+"/";return E;}(),_lastImage:null,_blankImageLoaded:null,_fixNodesTimer:null,_nodeChangeTimer:null,_lastNodeChangeEvent:null,_lastNodeChange:0,_rendered:null,DOMReady:null,_selection:null,_mask:null,_showingHiddenElements:null,currentWindow:null,currentEvent:null,operaEvent:null,currentFont:null,currentElement:null,dompath:null,beforeElement:null,afterElement:null,invalidHTML:{form:true,input:true,button:true,select:true,link:true,html:true,body:true,iframe:true,script:true,style:true,textarea:true},toolbar:null,_contentTimer:null,_contentTimerCounter:0,_disabled:["createlink","fontname","fontsize","forecolor","backcolor"],_alwaysDisabled:{undo:true,redo:true},_alwaysEnabled:{},_semantic:{"bold":true,"italic":true,"underline":true},_tag2cmd:{"b":"bold","strong":"bold","i":"italic","em":"italic","u":"underline","sup":"superscript","sub":"subscript","img":"insertimage","a":"createlink"!
 ,"ul":"insertunorderedlist","ol":"insertorderedlist"},_createIframe:function(){var I=document.createElement("iframe");I.id=this.get("id")+"_editor";var G={border:"0",frameBorder:"0",marginWidth:"0",marginHeight:"0",leftMargin:"0",topMargin:"0",allowTransparency:"true",width:"100%"};if(this.get("autoHeight")){G.scrolling="no";}for(var H in G){if(D.hasOwnProperty(G,H)){I.setAttribute(H,G[H]);}}var F="javascript:;";if(this.browser.ie){F="javascript:false;";}I.setAttribute("src",F);var E=new YAHOO.util.Element(I);E.setStyle("visibility","hidden");return E;},_isElement:function(F,E){if(F&&F.tagName&&(F.tagName.toLowerCase()==E)){return true;}if(F&&F.getAttribute&&(F.getAttribute("tag")==E)){return true;}return false;},_hasParent:function(F,E){if(!F||!F.parentNode){return false;}while(F.parentNode){if(this._isElement(F,E)){return F;}if(F.parentNode){F=F.parentNode;}else{return false;}}return false;},_getDoc:function(){var E=false;if(this.get){if(this.get("iframe")){if(this.get("i!
 frame").get){if(this.get("iframe").get("element")){try{if(this!
 .get("if
rame").get("element").contentWindow){if(this.get("iframe").get("element").contentWindow.document){E=this.get("iframe").get("element").contentWindow.document;return E;}}}catch(F){}}}}}return false;},_getWindow:function(){return this.get("iframe").get("element").contentWindow;},focus:function(){this._getWindow().focus();},_focusWindow:function(){this.focus();},_hasSelection:function(){var G=this._getSelection();var E=this._getRange();var F=false;if(!G||!E){return F;}if(this.browser.ie||this.browser.opera){if(E.text){F=true;}if(E.html){F=true;}}else{if(this.browser.webkit){if(G+""!==""){F=true;}}else{if(G&&(G.toString()!=="")&&(G!==undefined)){F=true;}}}return F;},_getSelection:function(){var E=null;if(this._getDoc()&&this._getWindow()){if(this._getDoc().selection){E=this._getDoc().selection;}else{E=this._getWindow().getSelection();}if(this.browser.webkit){if(E.baseNode){this._selection={};this._selection.baseNode=E.baseNode;this._selection.baseOffset=E.baseOffset;this._selecti!
 on.extentNode=E.extentNode;this._selection.extentOffset=E.extentOffset;}else{if(this._selection!==null){E=this._getWindow().getSelection();E.setBaseAndExtent(this._selection.baseNode,this._selection.baseOffset,this._selection.extentNode,this._selection.extentOffset);this._selection=null;}}}}return E;},_selectNode:function(F,I){if(!F){return false;}var G=this._getSelection(),E=null;if(this.browser.ie){try{E=this._getDoc().body.createTextRange();E.moveToElementText(F);E.select();}catch(H){}}else{if(this.browser.webkit){if(I){G.setBaseAndExtent(F,1,F,F.innerText.length);}else{G.setBaseAndExtent(F,0,F,F.innerText.length);}}else{if(this.browser.opera){G=this._getWindow().getSelection();E=this._getDoc().createRange();E.selectNode(F);G.removeAllRanges();G.addRange(E);}else{E=this._getDoc().createRange();E.selectNodeContents(F);G.removeAllRanges();G.addRange(E);}}}this.nodeChange();},_getRange:function(){var E=this._getSelection();if(E===null){return null;}if(this.browser.webkit&&!!
 E.getRangeAt){var H=this._getDoc().createRange();try{H.setStar!
 t(E.anch
orNode,E.anchorOffset);H.setEnd(E.focusNode,E.focusOffset);}catch(G){H=this._getWindow().getSelection()+"";}return H;}if(this.browser.ie||this.browser.opera){try{return E.createRange();}catch(F){return null;}}if(E.rangeCount>0){return E.getRangeAt(0);}return null;},_setDesignMode:function(E){try{var G=true;if(this.browser.ie&&(E.toLowerCase()=="off")){G=false;}if(G){this._getDoc().designMode=E;}}catch(F){}},_toggleDesignMode:function(){var F=this._getDoc().designMode.toLowerCase(),E="on";if(F=="on"){E="off";}this._setDesignMode(E);return E;},_focused:null,_handleFocus:function(E){if(!this._focused){this._focused=true;this.fireEvent("editorWindowFocus",{type:"editorWindowFocus",target:this});}},_handleBlur:function(E){if(this._focused){this._focused=false;this.fireEvent("editorWindowBlur",{type:"editorWindowBlur",target:this});}},_initEditorEvents:function(){var F=this._getDoc(),E=this._getWindow();A.on(F,"mouseup",this._handleMouseUp,this,true);A.on(F,"mousedown",this._handl!
 eMouseDown,this,true);A.on(F,"click",this._handleClick,this,true);A.on(F,"dblclick",this._handleDoubleClick,this,true);A.on(F,"keypress",this._handleKeyPress,this,true);A.on(F,"keyup",this._handleKeyUp,this,true);A.on(F,"keydown",this._handleKeyDown,this,true);A.on(E,"focus",this._handleFocus,this,true);A.on(E,"blur",this._handleBlur,this,true);},_removeEditorEvents:function(){var F=this._getDoc(),E=this._getWindow();A.removeListener(F,"mouseup",this._handleMouseUp,this,true);A.removeListener(F,"mousedown",this._handleMouseDown,this,true);A.removeListener(F,"click",this._handleClick,this,true);A.removeListener(F,"dblclick",this._handleDoubleClick,this,true);A.removeListener(F,"keypress",this._handleKeyPress,this,true);A.removeListener(F,"keyup",this._handleKeyUp,this,true);A.removeListener(F,"keydown",this._handleKeyDown,this,true);A.removeListener(E,"focus",this._handleFocus,this,true);A.removeListener(E,"blur",this._handleBlur,this,true);
+},_fixWebkitDivs:function(){if(this.browser.webkit){var E=this._getDoc().body.getElementsByTagName("div");C.addClass(E,"yui-wk-div");}},_initEditor:function(){if(this.browser.ie){this._getDoc().body.style.margin="0";}if(!this.get("disabled")){if(this._getDoc().designMode.toLowerCase()!="on"){this._setDesignMode("on");this._contentTimerCounter=0;}}if(!this._getDoc().body){this._contentTimerCounter=0;this._checkLoaded();return false;}this.toolbar.on("buttonClick",this._handleToolbarClick,this,true);if(!this.get("disabled")){this._initEditorEvents();this.toolbar.set("disabled",false);}this.fireEvent("editorContentLoaded",{type:"editorLoaded",target:this});this._fixWebkitDivs();if(this.get("dompath")){var E=this;setTimeout(function(){E._writeDomPath.call(E);E._setupResize.call(E);},150);}var G=[];for(var F in this.browser){if(this.browser[F]){G.push(F);}}if(this.get("ptags")){G.push("ptags");}C.addClass(this._getDoc().body,G.join(" "));this.nodeChange(true);},_checkLoaded:funct!
 ion(){this._contentTimerCounter++;if(this._contentTimer){clearTimeout(this._contentTimer);}if(this._contentTimerCounter>500){return false;}var G=false;try{if(this._getDoc()&&this._getDoc().body){if(this.browser.ie){if(this._getDoc().body.readyState=="complete"){G=true;}}else{if(this._getDoc().body._rteLoaded===true){G=true;}}}}catch(F){G=false;}if(G===true){this._initEditor();}else{var E=this;this._contentTimer=setTimeout(function(){E._checkLoaded.call(E);},20);}},_setInitialContent:function(){var H=((this._textarea)?this.get("element").value:this.get("element").innerHTML),J=null;if((H==="")&&this.browser.gecko){H="<br>";}var F=D.substitute(this.get("html"),{TITLE:this.STR_TITLE,CONTENT:this._cleanIncomingHTML(H),CSS:this.get("css"),HIDDEN_CSS:((this.get("hiddencss"))?this.get("hiddencss"):"/* No Hidden CSS */"),EXTRA_CSS:((this.get("extracss"))?this.get("extracss"):"/* No Extra CSS */")}),E=true;if(document.compatMode!="BackCompat"){F=this._docType+"\n"+F;}else{}if(this.br!
 owser.ie||this.browser.webkit||this.browser.opera||(navigator.!
 userAgen
t.indexOf("Firefox/1.5")!=-1)){try{if(this.browser.air){J=this._getDoc().implementation.createHTMLDocument();var K=this._getDoc();K.open();K.close();J.open();J.write(F);J.close();var G=K.importNode(J.getElementsByTagName("html")[0],true);K.replaceChild(G,K.getElementsByTagName("html")[0]);K.body._rteLoaded=true;}else{J=this._getDoc();J.open();J.write(F);J.close();}}catch(I){E=false;}}else{this.get("iframe").get("element").src="data:text/html;charset=utf-8,"+encodeURIComponent(F);}this.get("iframe").setStyle("visibility","");if(E){this._checkLoaded();}},_setMarkupType:function(E){switch(this.get("markup")){case"css":this._setEditorStyle(true);break;case"default":this._setEditorStyle(false);break;case"semantic":case"xhtml":if(this._semantic[E]){this._setEditorStyle(false);}else{this._setEditorStyle(true);}break;}},_setEditorStyle:function(F){try{this._getDoc().execCommand("useCSS",false,!F);}catch(E){}},_getSelectedElement:function(){var J=this._getDoc(),G=null,H=null,K=null,F!
 =true;if(this.browser.ie){this.currentEvent=this._getWindow().event;G=this._getRange();if(G){K=G.item?G.item(0):G.parentElement();if(this._hasSelection()){}if(K===J.body){K=null;}}if((this.currentEvent!==null)&&(this.currentEvent.keyCode===0)){K=A.getTarget(this.currentEvent);}}else{H=this._getSelection();G=this._getRange();if(!H||!G){return null;}if(!this._hasSelection()&&this.browser.webkit3){}if(this.browser.gecko){if(G.startContainer){if(G.startContainer.nodeType===3){K=G.startContainer.parentNode;}else{if(G.startContainer.nodeType===1){K=G.startContainer;}}if(this.currentEvent){var E=A.getTarget(this.currentEvent);if(!this._isElement(E,"html")){if(K!==E){K=E;}}}}}if(F){if(H.anchorNode&&(H.anchorNode.nodeType==3)){if(H.anchorNode.parentNode){K=H.anchorNode.parentNode;}if(H.anchorNode.nextSibling!=H.focusNode.nextSibling){K=H.anchorNode.nextSibling;}}if(this._isElement(K,"br")){K=null;}if(!K){K=G.commonAncestorContainer;if(!G.collapsed){if(G.startContainer==G.endContaine!
 r){if(G.startOffset-G.endOffset<2){if(G.startContainer.hasChil!
 dNodes()
){K=G.startContainer.childNodes[G.startOffset];}}}}}}}if(this.currentEvent!==null){try{switch(this.currentEvent.type){case"click":case"mousedown":case"mouseup":if(this.browser.webkit){K=A.getTarget(this.currentEvent);}break;default:break;}}catch(I){}}else{if((this.currentElement&&this.currentElement[0])&&(!this.browser.ie)){}}if(this.browser.opera||this.browser.webkit){if(this.currentEvent&&!K){K=YAHOO.util.Event.getTarget(this.currentEvent);}}if(!K||!K.tagName){K=J.body;}if(this._isElement(K,"html")){K=J.body;}if(this._isElement(K,"body")){K=J.body;}if(K&&!K.parentNode){K=J.body;}if(K===undefined){K=null;}return K;},_getDomPath:function(E){if(!E){E=this._getSelectedElement();}var F=[];while(E!==null){if(E.ownerDocument!=this._getDoc()){E=null;break;}if(E.nodeName&&E.nodeType&&(E.nodeType==1)){F[F.length]=E;}if(this._isElement(E,"body")){break;}E=E.parentNode;}if(F.length===0){if(this._getDoc()&&this._getDoc().body){F[0]=this._getDoc().body;}}return F.reverse();},_writeDomPa!
 th:function(){var K=this._getDomPath(),I=[],G="",L="";for(var E=0;E<K.length;E++){var M=K[E].tagName.toLowerCase();if((M=="ol")&&(K[E].type)){M+=":"+K[E].type;}if(C.hasClass(K[E],"yui-tag")){M=K[E].getAttribute("tag");}if((this.get("markup")=="semantic")||(this.get("markup")=="xhtml")){switch(M){case"b":M="strong";break;case"i":M="em";break;}}if(!C.hasClass(K[E],"yui-non")){if(C.hasClass(K[E],"yui-tag")){L=M;}else{G=((K[E].className!=="")?"."+K[E].className.replace(/ /g,"."):"");if((G.indexOf("yui")!=-1)||(G.toLowerCase().indexOf("apple-style-span")!=-1)){G="";}L=M+((K[E].id)?"#"+K[E].id:"")+G;}switch(M){case"body":L="body";break;case"a":if(K[E].getAttribute("href",2)){L+=":"+K[E].getAttribute("href",2).replace("mailto:","").replace("http:/"+"/","").replace("https:/"+"/","");}break;case"img":var F=K[E].height;var J=K[E].width;if(K[E].style.height){F=parseInt(K[E].style.height,10);}if(K[E].style.width){J=parseInt(K[E].style.width,10);
+}L+="("+J+"x"+F+")";break;}if(L.length>10){L='<span title="'+L+'">'+L.substring(0,10)+"..."+"</span>";}else{L='<span title="'+L+'">'+L+"</span>";}I[I.length]=L;}}var H=I.join(" "+this.SEP_DOMPATH+" ");if(this.dompath.innerHTML!=H){this.dompath.innerHTML=H;}},_fixNodes:function(){var J=this._getDoc(),H=[];for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(E.toLowerCase()!="span"){var F=J.body.getElementsByTagName(E);if(F.length){for(var G=0;G<F.length;G++){H.push(F[G]);}}}}}for(var I=0;I<H.length;I++){if(H[I].parentNode){if(D.isObject(this.invalidHTML[H[I].tagName.toLowerCase()])&&this.invalidHTML[H[I].tagName.toLowerCase()].keepContents){this._swapEl(H[I],"span",function(L){L.className="yui-non";});}else{H[I].parentNode.removeChild(H[I]);}}}var K=this._getDoc().getElementsByTagName("img");C.addClass(K,"yui-img");},_isNonEditable:function(G){if(this.get("allowNoEdit")){var F=A.getTarget(G);if(this._isElement(F,"html")){F=null;}var J=this._get!
 DomPath(F);for(var E=(J.length-1);E>-1;E--){if(C.hasClass(J[E],this.CLASS_NOEDIT)){try{this._getDoc().execCommand("enableObjectResizing",false,"false");}catch(I){}this.nodeChange();A.stopEvent(G);return true;}}try{this._getDoc().execCommand("enableObjectResizing",false,"true");}catch(H){}}return false;},_setCurrentEvent:function(E){this.currentEvent=E;},_handleClick:function(G){var F=this.fireEvent("beforeEditorClick",{type:"beforeEditorClick",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.currentWindow){this.closeWindow();}if(this.currentWindow){this.closeWindow();}if(this.browser.webkit){var E=A.getTarget(G);if(this._isElement(E,"a")||this._isElement(E.parentNode,"a")){A.stopEvent(G);this.nodeChange();}}else{this.nodeChange();}this.fireEvent("editorClick",{type:"editorClick",target:this,ev:G});},_handleMouseUp:function(G){var F=this.fireEvent("beforeEditorMouseUp",{type:"beforeEditorMouseUp",target:!
 this,ev:G});if(F===false){return false;}if(this._isNonEditable!
 (G)){ret
urn false;}var E=this;if(this.browser.opera){var H=A.getTarget(G);if(this._isElement(H,"img")){this.nodeChange();if(this.operaEvent){clearTimeout(this.operaEvent);this.operaEvent=null;this._handleDoubleClick(G);}else{this.operaEvent=window.setTimeout(function(){E.operaEvent=false;},700);}}}if(this.browser.webkit||this.browser.opera){if(this.browser.webkit){A.stopEvent(G);}}this.nodeChange();this.fireEvent("editorMouseUp",{type:"editorMouseUp",target:this,ev:G});},_handleMouseDown:function(F){var E=this.fireEvent("beforeEditorMouseDown",{type:"beforeEditorMouseDown",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this.browser.webkit&&this._hasSelection()){var H=this._getSelection();if(!this.browser.webkit3){H.collapse(true);}else{H.collapseToStart();}}if(this.browser.webkit&&this._lastImage){C.removeClass(this._lastImage,"selected");this._lastImage=null;}if(this._isElement(G,"img")||this.!
 _isElement(G,"a")){if(this.browser.webkit){A.stopEvent(F);if(this._isElement(G,"img")){C.addClass(G,"selected");this._lastImage=G;}}if(this.currentWindow){this.closeWindow();}this.nodeChange();}this.fireEvent("editorMouseDown",{type:"editorMouseDown",target:this,ev:F});},_handleDoubleClick:function(F){var E=this.fireEvent("beforeEditorDoubleClick",{type:"beforeEditorDoubleClick",target:this,ev:F});if(E===false){return false;}if(this._isNonEditable(F)){return false;}this._setCurrentEvent(F);var G=A.getTarget(F);if(this._isElement(G,"img")){this.currentElement[0]=G;this.toolbar.fireEvent("insertimageClick",{type:"insertimageClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}else{if(this._hasParent(G,"a")){this.currentElement[0]=this._hasParent(G,"a");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});}}this.nodeChange!
 ();this.fireEvent("editorDoubleClick",{type:"editorDoubleClick!
 ",target
:this,ev:F});},_handleKeyUp:function(G){var F=this.fireEvent("beforeEditorKeyUp",{type:"beforeEditorKeyUp",target:this,ev:G});if(F===false){return false;}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);switch(G.keyCode){case this._keyMap.SELECT_ALL.key:if(this._checkKey(this._keyMap.SELECT_ALL,G)){this.nodeChange();}break;case 32:case 35:case 36:case 37:case 38:case 39:case 40:case 46:case 8:case this._keyMap.CLOSE_WINDOW.key:if((G.keyCode==this._keyMap.CLOSE_WINDOW.key)&&this.currentWindow){if(this._checkKey(this._keyMap.CLOSE_WINDOW,G)){this.closeWindow();}}else{if(!this.browser.ie){if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);}var E=this;this._nodeChangeTimer=setTimeout(function(){E._nodeChangeTimer=null;E.nodeChange.call(E);},100);}else{this.nodeChange();}this.editorDirty=true;}break;}this.fireEvent("editorKeyUp",{type:"editorKeyUp",target:this,ev:G});this._storeUndo();},_handleKeyPress:function(G){var F=this.fireEvent("beforeEditorKeyP!
 ress",{type:"beforeEditorKeyPress",target:this,ev:G});if(F===false){return false;}if(this.get("allowNoEdit")){if(G&&G.keyCode&&(G.keyCode==63272)){A.stopEvent(G);}}if(this._isNonEditable(G)){return false;}this._setCurrentEvent(G);if(this.browser.opera){if(G.keyCode===13){var E=this._getSelectedElement();if(!this._isElement(E,"li")){this.execCommand("inserthtml","<br>");A.stopEvent(G);}}}if(this.browser.webkit){if(!this.browser.webkit3){if(G.keyCode&&(G.keyCode==122)&&(G.metaKey)){if(this._hasParent(this._getSelectedElement(),"li")){A.stopEvent(G);}}}this._listFix(G);}this.fireEvent("editorKeyPress",{type:"editorKeyPress",target:this,ev:G});},_handleKeyDown:function(X){var Z=this.fireEvent("beforeEditorKeyDown",{type:"beforeEditorKeyDown",target:this,ev:X});if(Z===false){return false;}var U=null,E=null;if(this._isNonEditable(X)){return false;}this._setCurrentEvent(X);if(this.currentWindow){this.closeWindow();
+}if(this.currentWindow){this.closeWindow();}var N=false,S=null,P=null,R=false;switch(X.keyCode){case this._keyMap.FOCUS_TOOLBAR.key:if(this._checkKey(this._keyMap.FOCUS_TOOLBAR,X)){var W=this.toolbar.getElementsByTagName("h2")[0];if(W&&W.firstChild){W.firstChild.focus();}}else{if(this._checkKey(this._keyMap.FOCUS_AFTER,X)){this.afterElement.focus();}}A.stopEvent(X);N=false;break;case this._keyMap.CREATE_LINK.key:if(this._hasSelection()){if(this._checkKey(this._keyMap.CREATE_LINK,X)){var F=true;if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("createlink")){F=false;}}if(F){this.execCommand("createlink","");this.toolbar.fireEvent("createlinkClick",{type:"createlinkClick",target:this.toolbar});this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});N=false;}}}break;case this._keyMap.UNDO.key:case this._keyMap.REDO.key:if(this._checkKey(this._keyMap.REDO,X)){S="redo";N=true;}else{if(this._checkKey(this._keyMap.UNDO,X)){S="undo";N=true;}}break;cas!
 e this._keyMap.BOLD.key:if(this._checkKey(this._keyMap.BOLD,X)){S="bold";N=true;}break;case this._keyMap.FONT_SIZE_UP.key:case this._keyMap.FONT_SIZE_DOWN.key:var K=false,T=false;if(this._checkKey(this._keyMap.FONT_SIZE_UP,X)){K=true;}if(this._checkKey(this._keyMap.FONT_SIZE_DOWN,X)){T=true;}if(K||T){var H=this.toolbar.getButtonByValue("fontsize"),G=parseInt(H.get("label"),10),I=(G+1);if(T){I=(G-1);}S="fontsize";P=I+"px";N=true;}break;case this._keyMap.ITALIC.key:if(this._checkKey(this._keyMap.ITALIC,X)){S="italic";N=true;}break;case this._keyMap.UNDERLINE.key:if(this._checkKey(this._keyMap.UNDERLINE,X)){S="underline";N=true;}break;case 9:if(this.browser.ie){E=this._getRange();U=this._getSelectedElement();if(!this._isElement(U,"li")){if(E){E.pasteHTML("    ");E.collapse(false);E.select();}A.stopEvent(X);}}if(this.browser.gecko>1.8){U=this._getSelectedElement();if(this._isElement(U,"li")){if(X.shiftKey){this._getDoc().execCommand("outdent",null,"");}else{!
 this._getDoc().execCommand("indent",null,"");}}else{if(!this._!
 hasSelec
tion()){this.execCommand("inserthtml","    ");}}A.stopEvent(X);}break;case 13:var M=null,V=0;if(this.get("ptags")&&!X.shiftKey){if(this.browser.gecko){U=this._getSelectedElement();if(!this._hasParent(U,"li")){if(this._hasParent(U,"p")){M=this._getDoc().createElement("p");M.innerHTML=" ";C.insertAfter(M,U);this._selectNode(M.firstChild);}else{if(this._isElement(U,"body")){this.execCommand("insertparagraph",null);var O=this._getDoc().body.getElementsByTagName("p");for(V=0;V<O.length;V++){if(O[V].getAttribute("_moz_dirty")!==null){M=this._getDoc().createElement("p");M.innerHTML=" ";C.insertAfter(M,O[V]);this._selectNode(M.firstChild);O[V].removeAttribute("_moz_dirty");}}}else{N=true;S="insertparagraph";}}A.stopEvent(X);}}if(this.browser.webkit){U=this._getSelectedElement();if(!this._hasParent(U,"li")){this.execCommand("insertparagraph",null);var Q=this._getDoc().body.getElementsByTagName("div");for(V=0;V<Q.length;V++){if(!C.hasClass(Q[V],"yui-wk-di!
 v")){C.addClass(Q[V],"yui-wk-p");}}A.stopEvent(X);}}}else{if(this.browser.webkit){U=this._getSelectedElement();if(!this._hasParent(U,"li")){this.execCommand("inserthtml",'<var id="yui-br"></var>');var L=this._getDoc().getElementById("yui-br"),Y=this._getDoc().createElement("br"),J=this._getDoc().createElement("span");L.parentNode.replaceChild(Y,L);J.className="yui-non";J.innerHTML=" ";C.insertAfter(J,Y);this._selectNode(J);A.stopEvent(X);}}if(this.browser.ie){E=this._getRange();U=this._getSelectedElement();if(!this._isElement(U,"li")){if(E){E.pasteHTML("<br>");E.collapse(false);E.select();}A.stopEvent(X);}}}break;}if(this.browser.ie){this._listFix(X);}if(N&&S){this.execCommand(S,P);A.stopEvent(X);this.nodeChange();}this.fireEvent("editorKeyDown",{type:"editorKeyDown",target:this,ev:X});},_listFix:function(K){var M=null,I=null,E=false,G=null;if(this.browser.webkit){if(K.keyCode&&(K.keyCode==13)){if(this._hasParent(this._getSelectedElement(),"li")){var H=this._hasParent(!
 this._getSelectedElement(),"li");if(H.previousSibling){if(H.fi!
 rstChild
&&(H.firstChild.length==1)){this._selectNode(H);}}}}}if(K.keyCode&&((!this.browser.webkit3&&(K.keyCode==25))||((this.browser.webkit3||!this.browser.webkit)&&((K.keyCode==9)&&K.shiftKey)))){M=this._getSelectedElement();if(this._hasParent(M,"li")){M=this._hasParent(M,"li");if(this._hasParent(M,"ul")||this._hasParent(M,"ol")){I=this._hasParent(M,"ul");if(!I){I=this._hasParent(M,"ol");}if(this._isElement(I.previousSibling,"li")){I.removeChild(M);I.parentNode.insertBefore(M,I.nextSibling);if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(M);G.collapse(false);G.select();}if(this.browser.webkit){this._selectNode(M.firstChild);}A.stopEvent(K);}}}}if(K.keyCode&&((K.keyCode==9)&&(!K.shiftKey))){var F=this._getSelectedElement();if(this._hasParent(F,"li")){E=this._hasParent(F,"li").innerHTML;}if(this.browser.webkit){this._getDoc().execCommand("inserttext",false,"\t");}M=this._getSelectedElement();if(this._hasParent(M,"li")){I=this._hasParent(M,"li");var J=t!
 his._getDoc().createElement(I.parentNode.tagName.toLowerCase());if(this.browser.webkit){var L=C.getElementsByClassName("Apple-tab-span","span",I);if(L[0]){I.removeChild(L[0]);I.innerHTML=D.trim(I.innerHTML);if(E){I.innerHTML='<span class="yui-non">'+E+"</span> ";}else{I.innerHTML='<span class="yui-non"> </span> ';}}}else{if(E){I.innerHTML=E+" ";}else{I.innerHTML=" ";}}I.parentNode.replaceChild(J,I);J.appendChild(I);if(this.browser.webkit){this._getSelection().setBaseAndExtent(I.firstChild,1,I.firstChild,I.firstChild.innerText.length);if(!this.browser.webkit3){I.parentNode.parentNode.style.display="list-item";setTimeout(function(){I.parentNode.parentNode.style.display="block";},1);}}else{if(this.browser.ie){G=this._getDoc().body.createTextRange();G.moveToElementText(I);G.collapse(false);G.select();}else{this._selectNode(I);}}A.stopEvent(K);}if(this.browser.webkit){A.stopEvent(K);}this.nodeChange();
+}},nodeChange:function(E){var F=this;this._storeUndo();if(this.get("nodeChangeDelay")){window.setTimeout(function(){F._nodeChange.apply(F,arguments);},0);}else{this._nodeChange();}},_nodeChange:function(F){var H=parseInt(this.get("nodeChangeThreshold"),10),O=Math.round(new Date().getTime()/1000),R=this;if(F===true){this._lastNodeChange=0;}if((this._lastNodeChange+H)<O){if(this._fixNodesTimer===null){this._fixNodesTimer=window.setTimeout(function(){R._fixNodes.call(R);R._fixNodesTimer=null;},0);}}this._lastNodeChange=O;if(this.currentEvent){try{this._lastNodeChangeEvent=this.currentEvent.type;}catch(a){}}var Z=this.fireEvent("beforeNodeChange",{type:"beforeNodeChange",target:this});if(Z===false){return false;}if(this.get("dompath")){window.setTimeout(function(){R._writeDomPath.call(R);},0);}if(!this.get("disabled")){if(this.STOP_NODE_CHANGE){this.STOP_NODE_CHANGE=false;return false;}else{var T=this._getSelection(),Q=this._getRange(),E=this._getSelectedElement(),M=this.toolba!
 r.getButtonByValue("fontname"),L=this.toolbar.getButtonByValue("fontsize"),J=this.toolbar.getButtonByValue("undo"),G=this.toolbar.getButtonByValue("redo");var N={};if(this._lastButton){N[this._lastButton.id]=true;}if(!this._isElement(E,"body")){if(M){N[M.get("id")]=true;}if(L){N[L.get("id")]=true;}}if(G){delete N[G.get("id")];}this.toolbar.resetAllButtons(N);for(var b=0;b<this._disabled.length;b++){var P=this.toolbar.getButtonByValue(this._disabled[b]);if(P&&P.get){if(this._lastButton&&(P.get("id")===this._lastButton.id)){}else{if(!this._hasSelection()&&!this.get("insert")){switch(this._disabled[b]){case"fontname":case"fontsize":break;default:this.toolbar.disableButton(P);}}else{if(!this._alwaysDisabled[this._disabled[b]]){this.toolbar.enableButton(P);}}if(!this._alwaysEnabled[this._disabled[b]]){this.toolbar.deselectButton(P);}}}}var S=this._getDomPath();var c=null,W=null;for(var X=0;X<S.length;X++){c=S[X].tagName.toLowerCase();if(S[X].getAttribute("tag")){c=S[X].getAttrib!
 ute("tag").toLowerCase();}W=this._tag2cmd[c];if(W===undefined)!
 {W=[];}i
f(!D.isArray(W)){W=[W];}if(S[X].style.fontWeight.toLowerCase()=="bold"){W[W.length]="bold";}if(S[X].style.fontStyle.toLowerCase()=="italic"){W[W.length]="italic";}if(S[X].style.textDecoration.toLowerCase()=="underline"){W[W.length]="underline";}if(S[X].style.textDecoration.toLowerCase()=="line-through"){W[W.length]="strikethrough";}if(W.length>0){for(var V=0;V<W.length;V++){this.toolbar.selectButton(W[V]);this.toolbar.enableButton(W[V]);}}switch(S[X].style.textAlign.toLowerCase()){case"left":case"right":case"center":case"justify":var U=S[X].style.textAlign.toLowerCase();if(S[X].style.textAlign.toLowerCase()=="justify"){U="full";}this.toolbar.selectButton("justify"+U);this.toolbar.enableButton("justify"+U);break;}}if(M){var Y=M._configs.label._initialConfig.value;M.set("label",'<span class="yui-toolbar-fontname-'+this._cleanClassName(Y)+'">'+Y+"</span>");this._updateMenuChecked("fontname",Y);}if(L){L.set("label",L._configs.label._initialConfig.value);}var K=this.toolbar.getBu!
 ttonByValue("heading");if(K){K.set("label",K._configs.label._initialConfig.value);this._updateMenuChecked("heading","none");}var I=this.toolbar.getButtonByValue("insertimage");if(I&&this.currentWindow&&(this.currentWindow.name=="insertimage")){this.toolbar.disableButton(I);}if(this._lastButton&&this._lastButton.isSelected){this.toolbar.deselectButton(this._lastButton.id);}this._undoNodeChange();}}this.fireEvent("afterNodeChange",{type:"afterNodeChange",target:this});},_updateMenuChecked:function(E,F,H){if(!H){H=this.toolbar;}var G=H.getButtonByValue(E);G.checkValue(F);},_handleToolbarClick:function(F){var H="";var I="";var G=F.button.value;if(F.button.menucmd){H=G;G=F.button.menucmd;}this._lastButton=F.button;if(this.STOP_EXEC_COMMAND){this.STOP_EXEC_COMMAND=false;return false;}else{this.execCommand(G,H);if(!this.browser.webkit){var E=this;setTimeout(function(){E.focus.call(E);},5);}}A.stopEvent(F);},_setupAfterElement:function(){if(!this.beforeElement){this.beforeElement=d!
 ocument.createElement("h2");this.beforeElement.className="yui-!
 editor-s
kipheader";this.beforeElement.tabIndex="-1";this.beforeElement.innerHTML=this.STR_BEFORE_EDITOR;this.get("element_cont").get("firstChild").insertBefore(this.beforeElement,this.toolbar.get("nextSibling"));}if(!this.afterElement){this.afterElement=document.createElement("h2");this.afterElement.className="yui-editor-skipheader";this.afterElement.tabIndex="-1";this.afterElement.innerHTML=this.STR_LEAVE_EDITOR;this.get("element_cont").get("firstChild").appendChild(this.afterElement);}},_disableEditor:function(F){if(F){this._removeEditorEvents();if(!this._mask){if(!!this.browser.ie){this._setDesignMode("off");}if(this.toolbar){this.toolbar.set("disabled",true);}this._mask=document.createElement("DIV");C.addClass(this._mask,"yui-editor-masked");this.get("iframe").get("parentNode").appendChild(this._mask);}}else{this._initEditorEvents();if(this._mask){this._mask.parentNode.removeChild(this._mask);this._mask=null;if(this.toolbar){this.toolbar.set("disabled",false);}this._setDesignMod!
 e("on");this.focus();var E=this;window.setTimeout(function(){E.nodeChange.call(E);},100);}}},SEP_DOMPATH:"<",STR_LEAVE_EDITOR:"You have left the Rich Text Editor.",STR_BEFORE_EDITOR:"This text field can contain stylized text and graphics. To cycle through all formatting options, use the keyboard shortcut Shift + Escape to place focus on the toolbar and navigate between options with your arrow keys. To exit this text editor use the Escape key and continue tabbing. <h4>Common formatting keyboard shortcuts:</h4><ul><li>Control Shift B sets text to bold</li> <li>Control Shift I sets text to italic</li> <li>Control Shift U underlines text</li> <li>Control Shift L adds an HTML link</li></ul>",STR_TITLE:"Rich Text Area.",STR_IMAGE_HERE:"Image URL Here",STR_IMAGE_URL:"Image URL",STR_LINK_URL:"Link URL",STOP_EXEC_COMMAND:false,STOP_NODE_CHANGE:false,CLASS_NOEDIT:"yui-noedit",CLASS_CONTAINER:"yui-editor-container",CLASS_EDITABLE:"yui-editor-editable",CLASS_EDITABLE_CONT:"yui-editor-e!
 ditable-container",CLASS_PREFIX:"yui-editor",browser:function(!
 ){var E=
YAHOO.env.ua;
+if(E.webkit>=420){E.webkit3=E.webkit;}else{E.webkit3=0;}E.mac=false;if(navigator.userAgent.indexOf("Macintosh")!==-1){E.mac=true;}return E;}(),init:function(F,E){if(!this._defaultToolbar){this._defaultToolbar={collapse:true,titlebar:"Text Editing Tools",draggable:false,buttons:[{group:"fontstyle",label:"Font Name and Size",buttons:[{type:"select",label:"Arial",value:"fontname",disabled:true,menu:[{text:"Arial",checked:true},{text:"Arial Black"},{text:"Comic Sans MS"},{text:"Courier New"},{text:"Lucida Console"},{text:"Tahoma"},{text:"Times New Roman"},{text:"Trebuchet MS"},{text:"Verdana"}]},{type:"spin",label:"13",value:"fontsize",range:[9,75],disabled:true}]},{type:"separator"},{group:"textstyle",label:"Font Style",buttons:[{type:"push",label:"Bold CTRL + SHIFT + B",value:"bold"},{type:"push",label:"Italic CTRL + SHIFT + I",value:"italic"},{type:"push",label:"Underline CTRL + SHIFT + U",value:"underline"},{type:"push",label:"Strike Through",value:"strikethrough"},{type:"s!
 eparator"},{type:"color",label:"Font Color",value:"forecolor",disabled:true},{type:"color",label:"Background Color",value:"backcolor",disabled:true}]},{type:"separator"},{group:"indentlist",label:"Lists",buttons:[{type:"push",label:"Create an Unordered List",value:"insertunorderedlist"},{type:"push",label:"Create an Ordered List",value:"insertorderedlist"}]},{type:"separator"},{group:"insertitem",label:"Insert Item",buttons:[{type:"push",label:"HTML Link CTRL + SHIFT + L",value:"createlink",disabled:true},{type:"push",label:"Insert Image",value:"insertimage"}]}]};}YAHOO.widget.SimpleEditor.superclass.init.call(this,F,E);YAHOO.widget.EditorInfo._instances[this.get("id")]=this;this.currentElement=[];this.on("contentReady",function(){this.DOMReady=true;this.fireQueue();},this,true);},initAttributes:function(E){YAHOO.widget.SimpleEditor.superclass.initAttributes.call(this,E);var F=this;this.setAttributeConfig("nodeChangeDelay",{value:((E.nodeChangeDelay===false)?false:true)});t!
 his.setAttributeConfig("maxUndo",{writeOnce:true,value:E.maxUn!
 do||30})
;this.setAttributeConfig("ptags",{writeOnce:true,value:E.ptags||false});this.setAttributeConfig("insert",{writeOnce:true,value:E.insert||false,method:function(K){if(K){var J={fontname:true,fontsize:true,forecolor:true,backcolor:true};var I=this._defaultToolbar.buttons;for(var H=0;H<I.length;H++){if(I[H].buttons){for(var G=0;G<I[H].buttons.length;G++){if(I[H].buttons[G].value){if(J[I[H].buttons[G].value]){delete I[H].buttons[G].disabled;}}}}}}}});this.setAttributeConfig("container",{writeOnce:true,value:E.container||false});this.setAttributeConfig("plainText",{writeOnce:true,value:E.plainText||false});this.setAttributeConfig("iframe",{value:null});this.setAttributeConfig("textarea",{value:null,writeOnce:true});this.setAttributeConfig("nodeChangeThreshold",{value:E.nodeChangeThreshold||3,validator:YAHOO.lang.isNumber});this.setAttributeConfig("allowNoEdit",{value:E.allowNoEdit||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("limitCommands",{value:E.limitCommand!
 s||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("element_cont",{value:E.element_cont});this.setAttributeConfig("editor_wrapper",{value:E.editor_wrapper||null,writeOnce:true});this.setAttributeConfig("height",{value:E.height||C.getStyle(F.get("element"),"height"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("iframe").get("parentNode"),{height:{to:parseInt(G,10)}},0.5);H.animate();}else{C.setStyle(this.get("iframe").get("parentNode"),"height",G);}}}});this.setAttributeConfig("autoHeight",{value:E.autoHeight||false,method:function(G){if(G){if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","no");}this.on("afterNodeChange",this._handleAutoHeight,this,true);this.on("editorKeyDown",this._handleAutoHeight,this,true);this.on("editorKeyPress",this._handleAutoHeight,this,true);}else{if(this.get("iframe")){this.get("iframe").get("element").setAttribute("scrolling","auto");}this.unsubsc!
 ribe("afterNodeChange",this._handleAutoHeight);this.unsubscrib!
 e("edito
rKeyDown",this._handleAutoHeight);this.unsubscribe("editorKeyPress",this._handleAutoHeight);}}});this.setAttributeConfig("width",{value:E.width||C.getStyle(this.get("element"),"width"),method:function(G){if(this._rendered){if(this.get("animate")){var H=new YAHOO.util.Anim(this.get("element_cont").get("element"),{width:{to:parseInt(G,10)}},0.5);H.animate();}else{this.get("element_cont").setStyle("width",G);}}}});this.setAttributeConfig("blankimage",{value:E.blankimage||this._getBlankImage()});this.setAttributeConfig("css",{value:E.css||this._defaultCSS,writeOnce:true});this.setAttributeConfig("html",{value:E.html||'<html><head><title>{TITLE}</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><base href="'+this._baseHREF+'"><style>{CSS}</style><style>{HIDDEN_CSS}</style><style>{EXTRA_CSS}</style></head><body onload="document.body._rteLoaded = true;">{CONTENT}</body></html>',writeOnce:true});this.setAttributeConfig("extracss",{value:E.extracss||"",write!
 Once:true});this.setAttributeConfig("handleSubmit",{value:E.handleSubmit||false,method:function(G){if(this.get("element").form){if(!this._formButtons){this._formButtons=[];}if(G){A.on(this.get("element").form,"submit",this._handleFormSubmit,this,true);var H=this.get("element").form.getElementsByTagName("input");for(var J=0;J<H.length;J++){var I=H[J].getAttribute("type");if(I&&(I.toLowerCase()=="submit")){A.on(H[J],"click",this._handleFormButtonClick,this,true);this._formButtons[this._formButtons.length]=H[J];}}}else{A.removeListener(this.get("element").form,"submit",this._handleFormSubmit);if(this._formButtons){A.removeListener(this._formButtons,"click",this._handleFormButtonClick);}}}}});this.setAttributeConfig("disabled",{value:false,method:function(G){if(this._rendered){this._disableEditor(G);}}});this.setAttributeConfig("saveEl",{value:this.get("element")});this.setAttributeConfig("toolbar_cont",{value:null,writeOnce:true});
+this.setAttributeConfig("toolbar",{value:E.toolbar||this._defaultToolbar,writeOnce:true,method:function(G){if(!G.buttonType){G.buttonType=this._defaultToolbar.buttonType;}this._defaultToolbar=G;}});this.setAttributeConfig("animate",{value:((E.animate)?((YAHOO.util.Anim)?true:false):false),validator:function(H){var G=true;if(!YAHOO.util.Anim){G=false;}return G;}});this.setAttributeConfig("panel",{value:null,writeOnce:true,validator:function(H){var G=true;if(!YAHOO.widget.Overlay){G=false;}return G;}});this.setAttributeConfig("focusAtStart",{value:E.focusAtStart||false,writeOnce:true,method:function(G){if(G){this.on("editorContentLoaded",function(){var H=this;setTimeout(function(){H.focus.call(H);H.editorDirty=false;},400);},this,true);}}});this.setAttributeConfig("dompath",{value:E.dompath||false,method:function(G){if(G&&!this.dompath){this.dompath=document.createElement("DIV");this.dompath.id=this.get("id")+"_dompath";C.addClass(this.dompath,"dompath");this.get("element_con!
 t").get("firstChild").appendChild(this.dompath);if(this.get("iframe")){this._writeDomPath();}}else{if(!G&&this.dompath){this.dompath.parentNode.removeChild(this.dompath);this.dompath=null;}}}});this.setAttributeConfig("markup",{value:E.markup||"semantic",validator:function(G){switch(G.toLowerCase()){case"semantic":case"css":case"default":case"xhtml":return true;}return false;}});this.setAttributeConfig("removeLineBreaks",{value:E.removeLineBreaks||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("drag",{writeOnce:true,value:E.drag||false});this.setAttributeConfig("resize",{writeOnce:true,value:E.resize||false});this.setAttributeConfig("filterWord",{value:E.filterWord||false,validator:YAHOO.lang.isBoolean});},_getBlankImage:function(){if(!this.DOMReady){this._queue[this._queue.length]=["_getBlankImage",arguments];return"";}var E="";if(!this._blankImageLoaded){if(YAHOO.widget.EditorInfo.blankImage){this.set("blankimage",YAHOO.widget.EditorInfo.blankImage);this._!
 blankImageLoaded=true;}else{var F=document.createElement("div"!
 );F.styl
e.position="absolute";F.style.top="-9999px";F.style.left="-9999px";F.className=this.CLASS_PREFIX+"-blankimage";document.body.appendChild(F);E=YAHOO.util.Dom.getStyle(F,"background-image");E=E.replace("url(","").replace(")","").replace(/"/g,"");E=E.replace("app:/","");this.set("blankimage",E);this._blankImageLoaded=true;F.parentNode.removeChild(F);YAHOO.widget.EditorInfo.blankImage=E;}}else{E=this.get("blankimage");}return E;},_handleAutoHeight:function(){var J=this._getDoc(),F=J.body,K=J.documentElement;var E=parseInt(C.getStyle(this.get("editor_wrapper"),"height"),10);var G=F.scrollHeight;if(this.browser.webkit){G=K.scrollHeight;}if(G<parseInt(this.get("height"),10)){G=parseInt(this.get("height"),10);}if((E!=G)&&(G>=parseInt(this.get("height"),10))){var I=this.get("animate");this.set("animate",false);this.set("height",G+"px");this.set("animate",I);if(this.browser.ie){this.get("iframe").setStyle("height","99%");this.get("iframe").setStyle("zoom","1");var H=this;window.setTim!
 eout(function(){H.get("iframe").setStyle("height","100%");},1);}}},_formButtons:null,_formButtonClicked:null,_handleFormButtonClick:function(F){var E=A.getTarget(F);this._formButtonClicked=E;},_handleFormSubmit:function(H){this.saveHTML();var G=this.get("element").form,E=this._formButtonClicked||false;A.removeListener(G,"submit",this._handleFormSubmit);if(YAHOO.env.ua.ie){if(E&&!E.disabled){E.click();}}else{if(E&&!E.disabled){E.click();}var F=document.createEvent("HTMLEvents");F.initEvent("submit",true,true);G.dispatchEvent(F);if(YAHOO.env.ua.webkit){if(YAHOO.lang.isFunction(G.submit)){G.submit();}}}},_handleFontSize:function(G){var E=this.toolbar.getButtonById(G.button.id);var F=E.get("label")+"px";this.execCommand("fontsize",F);return false;},_handleColorPicker:function(G){var F=G.button;var E="#"+G.color;if((F=="forecolor")||(F=="backcolor")){this.execCommand(F,E);}},_handleAlign:function(H){var G=null;for(var E=0;E<H.button.menu.length;E++){if(H.button.menu[E].value==H.!
 button.value){G=H.button.menu[E].value;}}var F=this._getSelect!
 ion();th
is.execCommand(G,F);return false;},_handleAfterNodeChange:function(){var Q=this._getDomPath(),L=null,H=null,M=null,F=false,J=this.toolbar.getButtonByValue("fontname"),K=this.toolbar.getButtonByValue("fontsize"),E=this.toolbar.getButtonByValue("heading");for(var G=0;G<Q.length;G++){L=Q[G];var P=L.tagName.toLowerCase();if(L.getAttribute("tag")){P=L.getAttribute("tag");}H=L.getAttribute("face");if(C.getStyle(L,"font-family")){H=C.getStyle(L,"font-family");H=H.replace(/'/g,"");}if(P.substring(0,1)=="h"){if(E){for(var I=0;I<E._configs.menu.value.length;I++){if(E._configs.menu.value[I].value.toLowerCase()==P){E.set("label",E._configs.menu.value[I].text);}}this._updateMenuChecked("heading",P);}}}if(J){for(var O=0;O<J._configs.menu.value.length;O++){if(H&&J._configs.menu.value[O].text.toLowerCase()==H.toLowerCase()){F=true;H=J._configs.menu.value[O].text;}}if(!F){H=J._configs.label._initialConfig.value;}var N='<span class="yui-toolbar-fontname-'+this._cleanClassName(H)+'">'+H+"</spa!
 n>";if(J.get("label")!=N){J.set("label",N);this._updateMenuChecked("fontname",H);}}if(K){M=parseInt(C.getStyle(L,"fontSize"),10);if((M===null)||isNaN(M)){M=K._configs.label._initialConfig.value;}K.set("label",""+M);}if(!this._isElement(L,"body")&&!this._isElement(L,"img")){this.toolbar.enableButton(J);this.toolbar.enableButton(K);this.toolbar.enableButton("forecolor");this.toolbar.enableButton("backcolor");}if(this._isElement(L,"img")){if(YAHOO.widget.Overlay){this.toolbar.enableButton("createlink");}}if(this._hasParent(L,"blockquote")){this.toolbar.selectButton("indent");this.toolbar.disableButton("indent");this.toolbar.enableButton("outdent");}if(this._hasParent(L,"ol")||this._hasParent(L,"ul")){this.toolbar.disableButton("indent");}this._lastButton=null;},_handleInsertImageClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("insertimage")){return false;}}this.toolbar.set("disabled",true);
+var E=function(){var F=this.currentElement[0],H="http://";if(!F){F=this._getSelectedElement();}if(F){if(F.getAttribute("src")){H=F.getAttribute("src",2);if(H.indexOf(this.get("blankimage"))!=-1){H=this.STR_IMAGE_HERE;}}}var G=prompt(this.STR_IMAGE_URL+": ",H);if((G!=="")&&(G!==null)){F.setAttribute("src",G);}else{if(G===""){F.parentNode.removeChild(F);this.currentElement=[];this.nodeChange();}else{if((G===null)){H=F.getAttribute("src",2);if(H.indexOf(this.get("blankimage"))!=-1){F.parentNode.removeChild(F);this.currentElement=[];this.nodeChange();}}}}this.closeWindow();this.toolbar.set("disabled",false);this.unsubscribe("afterExecCommand",E,this,true);};this.on("afterExecCommand",E,this,true);},_handleInsertImageWindowClose:function(){this.nodeChange();},_isLocalFile:function(E){if((E)&&(E!=="")&&((E.indexOf("file:/")!=-1)||(E.indexOf(":\\")!=-1))){return true;}return false;},_handleCreateLinkClick:function(){if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue("!
 createlink")){return false;}}this.toolbar.set("disabled",true);var E=function(){var H=this.currentElement[0],G="";if(H){if(H.getAttribute("href",2)!==null){G=H.getAttribute("href",2);}}var J=prompt(this.STR_LINK_URL+": ",G);if((J!=="")&&(J!==null)){var I=J;if((I.indexOf(":/"+"/")==-1)&&(I.substring(0,1)!="/")&&(I.substring(0,6).toLowerCase()!="mailto")){if((I.indexOf("@")!=-1)&&(I.substring(0,6).toLowerCase()!="mailto")){I="mailto:"+I;}else{if(I.substring(0,1)!="#"){}}}H.setAttribute("href",I);}else{if(J!==null){var F=this._getDoc().createElement("span");F.innerHTML=H.innerHTML;C.addClass(F,"yui-non");H.parentNode.replaceChild(F,H);}}this.closeWindow();this.toolbar.set("disabled",false);this.unsubscribe("afterExecCommand",E,this,true);};this.on("afterExecCommand",E,this);},_handleCreateLinkWindowClose:function(){this.nodeChange();this.currentElement=[];},render:function(){if(this._rendered){return false;}if(!this.DOMReady){this._queue[this._queue.length]=["render",arguments!
 ];return false;}if(this.get("element")){if(this.get("element")!
 .tagName
){this._textarea=true;if(this.get("element").tagName.toLowerCase()!=="textarea"){this._textarea=false;}}else{return false;}}else{return false;}this._rendered=true;var E=this;window.setTimeout(function(){E._render.call(E);},4);},_render:function(){var E=this;this.set("textarea",this.get("element"));this.get("element_cont").setStyle("display","none");this.get("element_cont").addClass(this.CLASS_CONTAINER);this.set("iframe",this._createIframe());window.setTimeout(function(){E._setInitialContent.call(E);},10);this.get("editor_wrapper").appendChild(this.get("iframe").get("element"));if(this.get("disabled")){this._disableEditor(true);}var F=this.get("toolbar");if(F instanceof B){this.toolbar=F;this.toolbar.set("disabled",true);}else{F.disabled=true;this.toolbar=new B(this.get("toolbar_cont"),F);}this.fireEvent("toolbarLoaded",{type:"toolbarLoaded",target:this.toolbar});this.toolbar.on("toolbarCollapsed",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar!
 .on("toolbarExpanded",function(){if(this.currentWindow){this.moveWindow();}},this,true);this.toolbar.on("fontsizeClick",this._handleFontSize,this,true);this.toolbar.on("colorPickerClicked",function(G){this._handleColorPicker(G);return false;},this,true);this.toolbar.on("alignClick",this._handleAlign,this,true);this.on("afterNodeChange",this._handleAfterNodeChange,this,true);this.toolbar.on("insertimageClick",this._handleInsertImageClick,this,true);this.on("windowinsertimageClose",this._handleInsertImageWindowClose,this,true);this.toolbar.on("createlinkClick",this._handleCreateLinkClick,this,true);this.on("windowcreatelinkClose",this._handleCreateLinkWindowClose,this,true);this.get("parentNode").replaceChild(this.get("element_cont").get("element"),this.get("element"));this.setStyle("visibility","hidden");this.setStyle("position","absolute");this.setStyle("top","-9999px");this.setStyle("left","-9999px");this.get("element_cont").appendChild(this.get("element"));this.get("eleme!
 nt_cont").setStyle("display","block");C.addClass(this.get("ifr!
 ame").ge
t("parentNode"),this.CLASS_EDITABLE_CONT);this.get("iframe").addClass(this.CLASS_EDITABLE);this.get("element_cont").setStyle("width",this.get("width"));C.setStyle(this.get("iframe").get("parentNode"),"height",this.get("height"));this.get("iframe").setStyle("width","100%");this.get("iframe").setStyle("height","100%");this._setupDD();window.setTimeout(function(){E._setupAfterElement.call(E);},0);this.fireEvent("afterRender",{type:"afterRender",target:this});},execCommand:function(G,F){var J=this.fireEvent("beforeExecCommand",{type:"beforeExecCommand",target:this,args:arguments});if((J===false)||(this.STOP_EXEC_COMMAND)){this.STOP_EXEC_COMMAND=false;return false;}this._lastCommand=G;this._setMarkupType(G);if(this.browser.ie){this._getWindow().focus();}var E=true;if(this.get("limitCommands")){if(!this.toolbar.getButtonByValue(G)){E=false;}}this.editorDirty=true;if((typeof this["cmd_"+G.toLowerCase()]=="function")&&E){var I=this["cmd_"+G.toLowerCase()](F);E=I[0];if(I[1]){G=I[1];}!
 if(I[2]){F=I[2];}}if(E){try{this._getDoc().execCommand(G,false,F);}catch(H){}}else{}this.on("afterExecCommand",function(){this.unsubscribeAll("afterExecCommand");this.nodeChange();},this,true);this.fireEvent("afterExecCommand",{type:"afterExecCommand",target:this});},cmd_bold:function(H){if(!this.browser.webkit){var G=this._getSelectedElement();if(G&&this._isElement(G,"span")&&this._hasSelection()){if(G.style.fontWeight=="bold"){G.style.fontWeight="";var E=this._getDoc().createElement("b"),F=G.parentNode;F.replaceChild(E,G);E.appendChild(G);}}}return[true];},cmd_italic:function(H){if(!this.browser.webkit){var G=this._getSelectedElement();if(G&&this._isElement(G,"span")&&this._hasSelection()){if(G.style.fontStyle=="italic"){G.style.fontStyle="";var E=this._getDoc().createElement("i"),F=G.parentNode;F.replaceChild(E,G);E.appendChild(G);}}}return[true];},cmd_underline:function(F){if(!this.browser.webkit){var E=this._getSelectedElement();
+if(E&&this._isElement(E,"span")){if(E.style.textDecoration=="underline"){E.style.textDecoration="none";}else{E.style.textDecoration="underline";}return[false];}}return[true];},cmd_backcolor:function(H){var E=true,F=this._getSelectedElement(),G="backcolor";if(this.browser.gecko||this.browser.opera){this._setEditorStyle(true);G="hilitecolor";}if(!this._isElement(F,"body")&&!this._hasSelection()){F.style.backgroundColor=H;this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({backgroundColor:H});}else{this._createCurrentElement("span",{backgroundColor:H,color:F.style.color,fontSize:F.style.fontSize,fontFamily:F.style.fontFamily});this._selectNode(this.currentElement[0]);}E=false;}return[E,G];},cmd_forecolor:function(G){var E=true,F=this._getSelectedElement();if(!this._isElement(F,"body")&&!this._hasSelection()){C.setStyle(F,"color",G);this._selectNode(F);E=false;}else{if(this.get("insert")){F=this._createInsertElement({color:G});}else{this._creat!
 eCurrentElement("span",{color:G,fontSize:F.style.fontSize,fontFamily:F.style.fontFamily,backgroundColor:F.style.backgroundColor});this._selectNode(this.currentElement[0]);}E=false;}return[E];},cmd_unlink:function(E){this._swapEl(this.currentElement[0],"span",function(F){F.className="yui-non";});return[false];},cmd_createlink:function(G){var F=this._getSelectedElement(),E=null;if(this._hasParent(F,"a")){this.currentElement[0]=this._hasParent(F,"a");}else{if(this._isElement(F,"li")){E=this._getDoc().createElement("a");E.innerHTML=F.innerHTML;F.innerHTML="";F.appendChild(E);this.currentElement[0]=E;}else{if(!this._isElement(F,"a")){this._createCurrentElement("a");E=this._swapEl(this.currentElement[0],"a");this.currentElement[0]=E;}else{this.currentElement[0]=F;}}}return[false];},cmd_insertimage:function(J){var E=true,F=null,I="insertimage",H=this._getSelectedElement();if(J===""){J=this.get("blankimage");}if(this._isElement(H,"img")){this.currentElement[0]=H;E=false;}else{if(th!
 is._getDoc().queryCommandEnabled(I)){this._getDoc().execComman!
 d("inser
timage",false,J);var K=this._getDoc().getElementsByTagName("img");for(var G=0;G<K.length;G++){if(!YAHOO.util.Dom.hasClass(K[G],"yui-img")){YAHOO.util.Dom.addClass(K[G],"yui-img");this.currentElement[0]=K[G];}}E=false;}else{if(H==this._getDoc().body){F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this._getDoc().body.appendChild(F);}else{this._createCurrentElement("img");F=this._getDoc().createElement("img");F.setAttribute("src",J);YAHOO.util.Dom.addClass(F,"yui-img");this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);}this.currentElement[0]=F;E=false;}}return[E];},cmd_inserthtml:function(H){var E=true,G="inserthtml",F=null,I=null;if(this.browser.webkit&&!this._getDoc().queryCommandEnabled(G)){this._createCurrentElement("img");F=this._getDoc().createElement("span");F.innerHTML=H;this.currentElement[0].parentNode.replaceChild(F,this.currentElement[0]);E=false;}else{if(this.browser.ie){I=this._getRange();i!
 f(I.item){I.item(0).outerHTML=H;}else{I.pasteHTML(H);}E=false;}}return[E];},cmd_list:function(b){var T=true,X=null,M=0,G=null,S="",Z=this._getSelectedElement(),U="insertorderedlist";if(b=="ul"){U="insertunorderedlist";}if(this.browser.webkit){if(this._isElement(Z,"li")&&this._isElement(Z.parentNode,b)){G=Z.parentNode;X=this._getDoc().createElement("span");YAHOO.util.Dom.addClass(X,"yui-non");S="";var F=G.getElementsByTagName("li");for(M=0;M<F.length;M++){S+="<div>"+F[M].innerHTML+"</div>";}X.innerHTML=S;this.currentElement[0]=G;this.currentElement[0].parentNode.replaceChild(X,this.currentElement[0]);}else{this._createCurrentElement(b.toLowerCase());X=this._getDoc().createElement(b);for(M=0;M<this.currentElement.length;M++){var J=this._getDoc().createElement("li");J.innerHTML=this.currentElement[M].innerHTML+'<span class="yui-non"> </span> ';X.appendChild(J);if(M>0){this.currentElement[M].parentNode.removeChild(this.currentElement[M]);}}var R=X.firstChild.innerHTML!
 .split("<br>");if(R.length>0){X.innerHTML="";for(var W=0;W<R.l!
 ength;W+
+){var Y=this._getDoc().createElement("li");Y.innerHTML=R[W];X.appendChild(Y);}}this.currentElement[0].parentNode.replaceChild(X,this.currentElement[0]);this.currentElement[0]=X;var H=this.currentElement[0].firstChild;H=C.getElementsByClassName("yui-non","span",H)[0];this._getSelection().setBaseAndExtent(H,1,H,H.innerText.length);}T=false;}else{G=this._getSelectedElement();if(this._isElement(G,"li")&&this._isElement(G.parentNode,b)||(this.browser.ie&&this._isElement(this._getRange().parentElement,"li"))||(this.browser.ie&&this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){if(this.browser.ie){if((this.browser.ie&&this._isElement(G,"ul"))||(this.browser.ie&&this._isElement(G,"ol"))){G=G.getElementsByTagName("li")[0];}S="";var I=G.parentNode.getElementsByTagName("li");for(var V=0;V<I.length;V++){S+=I[V].innerHTML+"<br>";}var a=this._getDoc().createElement("span");a.innerHTML=S;G.parentNode.parentNode.replaceChild(a,G.parentNode);}else{this.nodeChange();this._!
 getDoc().execCommand(U,"",G.parentNode);this.nodeChange();}T=false;}if(this.browser.opera){var Q=this;window.setTimeout(function(){var c=Q._getDoc().getElementsByTagName("li");for(var d=0;d<c.length;d++){if(c[d].innerHTML.toLowerCase()=="<br>"){c[d].parentNode.parentNode.removeChild(c[d].parentNode);}}},30);}if(this.browser.ie&&T){var K="";if(this._getRange().html){K="<li>"+this._getRange().html+"</li>";}else{var L=this._getRange().text.split("\n");if(L.length>1){K="";for(var P=0;P<L.length;P++){K+="<li>"+L[P]+"</li>";}}else{var O=this._getRange().text;if(O===""){K='<li id="new_list_item">'+O+"</li>";}else{K="<li>"+O+"</li>";}}}this._getRange().pasteHTML("<"+b+">"+K+"</"+b+">");var E=this._getDoc().getElementById("new_list_item");if(E){var N=this._getDoc().body.createTextRange();N.moveToElementText(E);N.collapse(false);N.select();E.id="";}T=false;}}return T;},cmd_insertorderedlist:function(E){return[this.cmd_list("ol")];
+},cmd_insertunorderedlist:function(E){return[this.cmd_list("ul")];},cmd_fontname:function(H){var E=true,G=this._getSelectedElement();this.currentFont=H;if(G&&G.tagName&&!this._hasSelection()&&!this._isElement(G,"body")&&!this.get("insert")){YAHOO.util.Dom.setStyle(G,"font-family",H);E=false;}else{if(this.get("insert")&&!this._hasSelection()){var F=this._createInsertElement({fontFamily:H});E=false;}}return[E];},cmd_fontsize:function(H){var E=null,G=true;E=this._getSelectedElement();if(this.browser.webkit){if(this.currentElement[0]){if(E==this.currentElement[0]){G=false;YAHOO.util.Dom.setStyle(E,"fontSize",H);this._selectNode(E);this.currentElement[0]=E;}}}if(G){if(!this._isElement(this._getSelectedElement(),"body")&&(!this._hasSelection())){E=this._getSelectedElement();YAHOO.util.Dom.setStyle(E,"fontSize",H);if(this.get("insert")&&this.browser.ie){var F=this._getRange();F.collapse(false);F.select();}else{this._selectNode(E);}}else{if(this.currentElement&&(this.currentElement!
 .length>0)&&(!this._hasSelection())&&(!this.get("insert"))){YAHOO.util.Dom.setStyle(this.currentElement,"fontSize",H);}else{if(this.get("insert")&&!this._hasSelection()){E=this._createInsertElement({fontSize:H});this.currentElement[0]=E;this._selectNode(this.currentElement[0]);}else{this._createCurrentElement("span",{"fontSize":H,fontFamily:E.style.fontFamily,color:E.style.color,backgroundColor:E.style.backgroundColor});this._selectNode(this.currentElement[0]);}}}}return[false];},_swapEl:function(F,E,H){var G=this._getDoc().createElement(E);if(F){G.innerHTML=F.innerHTML;}if(typeof H=="function"){H.call(this,G);}if(F){F.parentNode.replaceChild(G,F);}return G;},_createInsertElement:function(E){this._createCurrentElement("span",E);var F=this.currentElement[0];if(this.browser.webkit){F.innerHTML='<span class="yui-non"> </span>';F=F.firstChild;this._getSelection().setBaseAndExtent(F,1,F,F.innerText.length);}else{if(this.browser.ie||this.browser.opera){F.innerHTML=" ";}!
 }this.focus();this._selectNode(F,true);return F;},_createCurre!
 ntElemen
t:function(G,J){G=((G)?G:"a");var R=null,F=[],H=this._getDoc();if(this.currentFont){if(!J){J={};}J.fontFamily=this.currentFont;this.currentFont=null;}this.currentElement=[];var M=function(X,Z){var Y=null;X=((X)?X:"span");X=X.toLowerCase();switch(X){case"h1":case"h2":case"h3":case"h4":case"h5":case"h6":Y=H.createElement(X);break;default:Y=H.createElement(X);if(X==="span"){YAHOO.util.Dom.addClass(Y,"yui-tag-"+X);YAHOO.util.Dom.addClass(Y,"yui-tag");Y.setAttribute("tag",X);}for(var W in Z){if(YAHOO.lang.hasOwnProperty(Z,W)){Y.style[W]=Z[W];}}break;}return Y;};if(!this._hasSelection()){if(this._getDoc().queryCommandEnabled("insertimage")){this._getDoc().execCommand("insertimage",false,"yui-tmp-img");var L=this._getDoc().getElementsByTagName("img");for(var Q=0;Q<L.length;Q++){if(L[Q].getAttribute("src",2)=="yui-tmp-img"){F=M(G,J);L[Q].parentNode.replaceChild(F,L[Q]);this.currentElement[this.currentElement.length]=F;}}}else{if(this.currentEvent){R=YAHOO.util.Event.getTarget(this.c!
 urrentEvent);}else{R=this._getDoc().body;}}if(R){F=M(G,J);if(this._isElement(R,"body")||this._isElement(R,"html")){if(this._isElement(R,"html")){R=this._getDoc().body;}R.appendChild(F);}else{if(R.nextSibling){R.parentNode.insertBefore(F,R.nextSibling);}else{R.parentNode.appendChild(F);}}this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}}}else{this._setEditorStyle(true);this._getDoc().execCommand("fontname",false,"yui-tmp");var E=[],P,V=["font","span","i","b","u"];if(!this._isElement(this._getSelectedElement(),"body")){V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().tagName);V[V.length]=this._getDoc().getElementsByTagName(this._getSelectedElement().parentNode.tagName);}for(var K=0;K<V.length;K++){var I=this._getDoc().getElementsByTagName(V[K]);for(va!
 r U=0;U<I.length;U++){E[E.length]=I[U];}}for(var S=0;S<E.lengt!
 h;S++){i
f((YAHOO.util.Dom.getStyle(E[S],"font-family")=="yui-tmp")||(E[S].face&&(E[S].face=="yui-tmp"))){if(G!=="span"){F=M(G,J);}else{F=M(E[S].tagName,J);}F.innerHTML=E[S].innerHTML;if(this._isElement(E[S],"ol")||(this._isElement(E[S],"ul"))){var N=E[S].getElementsByTagName("li")[0];E[S].style.fontFamily="inherit";N.style.fontFamily="inherit";F.innerHTML=N.innerHTML;N.innerHTML="";N.appendChild(F);this.currentElement[this.currentElement.length]=F;}else{if(this._isElement(E[S],"li")){E[S].innerHTML="";E[S].appendChild(F);E[S].style.fontFamily="inherit";this.currentElement[this.currentElement.length]=F;}else{if(E[S].parentNode){E[S].parentNode.replaceChild(F,E[S]);this.currentElement[this.currentElement.length]=F;this.currentEvent=null;if(this.browser.webkit){this._getSelection().setBaseAndExtent(F,0,F,0);if(this.browser.webkit3){this._getSelection().collapseToStart();}else{this._getSelection().collapse(true);}}if(this.browser.ie&&J&&J.fontSize){this._getSelection().empty();}if(this.!
 browser.gecko){this._getSelection().collapseToStart();}}}}}}var T=this.currentElement.length;for(var O=0;O<T;O++){if((O+1)!=T){if(this.currentElement[O]&&this.currentElement[O].nextSibling){if(this._isElement(this.currentElement[O],"br")){this.currentElement[this.currentElement.length]=this.currentElement[O].nextSibling;}}}}}},saveHTML:function(){var F=this.cleanHTML();if(this._textarea){this.get("element").value=F;}else{this.get("element").innerHTML=F;}if(this.get("saveEl")!==this.get("element")){var E=this.get("saveEl");if(D.isString(E)){E=C.get(E);}if(E){if(E.tagName.toLowerCase()==="textarea"){E.value=F;}else{E.innerHTML=F;}}}return F;},setEditorHTML:function(F){var E=this._cleanIncomingHTML(F);this._getDoc().body.innerHTML=E;this.nodeChange();},getEditorHTML:function(){var E=this._getDoc().body;if(E===null){return null;}return this._getDoc().body.innerHTML;},show:function(){if(this.browser.gecko){this._setDesignMode("on");
+this.focus();}if(this.browser.webkit){var E=this;window.setTimeout(function(){E._setInitialContent.call(E);},10);}if(this.currentWindow){this.closeWindow();}this.get("iframe").setStyle("position","static");this.get("iframe").setStyle("left","");},hide:function(){if(this.currentWindow){this.closeWindow();}if(this._fixNodesTimer){clearTimeout(this._fixNodesTimer);this._fixNodesTimer=null;}if(this._nodeChangeTimer){clearTimeout(this._nodeChangeTimer);this._nodeChangeTimer=null;}this._lastNodeChange=0;this.get("iframe").setStyle("position","absolute");this.get("iframe").setStyle("left","-9999px");},_cleanIncomingHTML:function(E){E=E.replace(/<strong([^>]*)>/gi,"<b$1>");E=E.replace(/<\/strong>/gi,"</b>");E=E.replace(/<embed([^>]*)>/gi,"<YUI_EMBED$1>");E=E.replace(/<\/embed>/gi,"</YUI_EMBED>");E=E.replace(/<em([^>]*)>/gi,"<i$1>");E=E.replace(/<\/em>/gi,"</i>");E=E.replace(/_moz_dirty=""/gi,"");E=E.replace(/<YUI_EMBED([^>]*)>/gi,"<embed$1>");E=E.replace(/<\/YUI_EMBED>/gi,"</embed>!
 ");if(this.get("plainText")){E=E.replace(/\n/g,"<br>").replace(/\r/g,"<br>");E=E.replace(/  /gi,"  ");E=E.replace(/\t/gi,"    ");}E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/<script([^>]*)>/gi,"<bad>");E=E.replace(/<\/script([^>]*)>/gi,"</bad>");E=E.replace(/\r\n/g,"<YUI_LF>").replace(/\n/g,"<YUI_LF>").replace(/\r/g,"<YUI_LF>");E=E.replace(new RegExp("<bad([^>]*)>(.*?)</bad>","gi"),"");E=E.replace(/<YUI_LF>/g,"\n");return E;},cleanHTML:function(H){if(!H){H=this.getEditorHTML();}var F=this.get("markup");H=this.pre_filter_linebreaks(H,F);H=this.filter_msword(H);H=H.replace(/<img([^>]*)\/>/gi,"<YUI_IMG$1>");H=H.replace(/<img([^>]*)>/gi,"<YUI_IMG$1>");H=H.replace(/<input([^>]*)\/>/gi,"<YUI_INPUT$1>");H=H.replace(/<input([^>]*)>/gi,"<YUI_INPUT$1>");H=H.replace(/<ul([^>]*)>/gi,"<YUI_UL$1>");H=H.replace(/<\/ul>/gi,"</YUI_UL>");H=H.replace(/<blockquote([^>]*)>/gi,"<YUI_BQ$1>");H=H.replac!
 e(/<\/blockquote>/gi,"</YUI_BQ>");H=H.replace(/<embed([^>]*)>/!
 gi,"<YUI
_EMBED$1>");H=H.replace(/<\/embed>/gi,"</YUI_EMBED>");if((F=="semantic")||(F=="xhtml")){H=H.replace(/<i(\s+[^>]*)?>/gi,"<em$1>");H=H.replace(/<\/i>/gi,"</em>");H=H.replace(/<b(\s+[^>]*)?>/gi,"<strong$1>");H=H.replace(/<\/b>/gi,"</strong>");}H=H.replace(/_moz_dirty=""/gi,"");H=H.replace(/<strike/gi,'<span style="text-decoration: line-through;"');H=H.replace(/\/strike>/gi,"/span>");if(this.browser.ie){H=H.replace(/text-decoration/gi,"text-decoration");H=H.replace(/font-weight/gi,"font-weight");H=H.replace(/_width="([^>]*)"/gi,"");H=H.replace(/_height="([^>]*)"/gi,"");var G=this._baseHREF.replace(/\//gi,"\\/"),I=new RegExp('src="'+G,"gi");H=H.replace(I,'src="');}H=H.replace(/<font/gi,"<font");H=H.replace(/<\/font>/gi,"</font>");H=H.replace(/<span/gi,"<span");H=H.replace(/<\/span>/gi,"</span>");if((F=="semantic")||(F=="xhtml")||(F=="css")){H=H.replace(new RegExp('<font([^>]*)face="([^>]*)">(.*?)</font>',"gi"),'<span $1 style="font-family: $2;">$3</span>');H=H.replace(/<u/gi,'<sp!
 an style="text-decoration: underline;"');if(this.browser.webkit){H=H.replace(new RegExp('<span class="Apple-style-span" style="font-weight: bold;">([^>]*)</span>',"gi"),"<strong>$1</strong>");H=H.replace(new RegExp('<span class="Apple-style-span" style="font-style: italic;">([^>]*)</span>',"gi"),"<em>$1</em>");}H=H.replace(/\/u>/gi,"/span>");if(F=="css"){H=H.replace(/<em([^>]*)>/gi,"<i$1>");H=H.replace(/<\/em>/gi,"</i>");H=H.replace(/<strong([^>]*)>/gi,"<b$1>");H=H.replace(/<\/strong>/gi,"</b>");H=H.replace(/<b/gi,'<span style="font-weight: bold;"');H=H.replace(/\/b>/gi,"/span>");H=H.replace(/<i/gi,'<span style="font-style: italic;"');H=H.replace(/\/i>/gi,"/span>");}H=H.replace(/  /gi," ");}else{H=H.replace(/<u/gi,"<u");H=H.replace(/\/u>/gi,"/u>");}H=H.replace(/<ol([^>]*)>/gi,"<ol$1>");H=H.replace(/\/ol>/gi,"/ol>");H=H.replace(/<li/gi,"<li");H=H.replace(/\/li>/gi,"/li>");H=this.filter_safari(H);H=this.filter_internals(H);H=this.filter_all_rgb(H);H=this.post_filter_linebreak!
 s(H,F);if(F=="xhtml"){H=H.replace(/<YUI_IMG([^>]*)>/g,"<img $1!
  />");H=
H.replace(/<YUI_INPUT([^>]*)>/g,"<input $1 />");}else{H=H.replace(/<YUI_IMG([^>]*)>/g,"<img $1>");H=H.replace(/<YUI_INPUT([^>]*)>/g,"<input $1>");}H=H.replace(/<YUI_UL([^>]*)>/g,"<ul$1>");H=H.replace(/<\/YUI_UL>/g,"</ul>");H=this.filter_invalid_lists(H);H=H.replace(/<YUI_BQ([^>]*)>/g,"<blockquote$1>");H=H.replace(/<\/YUI_BQ>/g,"</blockquote>");H=H.replace(/<YUI_EMBED([^>]*)>/g,"<embed$1>");H=H.replace(/<\/YUI_EMBED>/g,"</embed>");H=H.replace(/ & /gi,"YUI_AMP");H=H.replace(/&/gi,"&");H=H.replace(/YUI_AMP/gi," & ");H=YAHOO.lang.trim(H);if(this.get("removeLineBreaks")){H=H.replace(/\n/g,"").replace(/\r/g,"");H=H.replace(/  /gi," ");}if(H.substring(0,6).toLowerCase()=="<span>"){H=H.substring(6);if(H.substring(H.length-7,H.length).toLowerCase()=="</span>"){H=H.substring(0,H.length-7);}}for(var E in this.invalidHTML){if(YAHOO.lang.hasOwnProperty(this.invalidHTML,E)){if(D.isObject(E)&&E.keepContents){H=H.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"$1");}else!
 {H=H.replace(new RegExp("<"+E+"([^>]*)>(.*?)</"+E+">","gi"),"");}}}this.fireEvent("cleanHTML",{type:"cleanHTML",target:this,html:H});return H;},filter_msword:function(E){if(!this.get("filterWord")){return E;}E=E.replace(/<o:p>\s*<\/o:p>/g,"");E=E.replace(/<o:p>[\s\S]*?<\/o:p>/g," ");E=E.replace(/<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi,"");E=E.replace(/\s*mso-[^:]+:[^;"]+;?/gi,"");E=E.replace(/\s*MARGIN: 0cm 0cm 0pt\s*;/gi,"");E=E.replace(/\s*MARGIN: 0cm 0cm 0pt\s*"/gi,'"');E=E.replace(/\s*TEXT-INDENT: 0cm\s*;/gi,"");E=E.replace(/\s*TEXT-INDENT: 0cm\s*"/gi,'"');E=E.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi,'"');E=E.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi,'"');E=E.replace(/\s*tab-stops:[^;"]*;?/gi,"");E=E.replace(/\s*tab-stops:[^"]*/gi,"");E=E.replace(/<\\?\?xml[^>]*>/gi,"");E=E.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");E=E.replace(/<(\w[^>]*) language=([^ |>]*)([^>]*)/gi,"<$1$3");E=E.replace(/<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi,"<$1$3");
+E=E.replace(/<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi,"<$1$3");return E;},filter_invalid_lists:function(E){E=E.replace(/<\/li>\n/gi,"</li>");E=E.replace(/<\/li><ol>/gi,"</li><li><ol>");E=E.replace(/<\/ol>/gi,"</ol></li>");E=E.replace(/<\/ol><\/li>\n/gi,"</ol>");E=E.replace(/<\/li><ul>/gi,"</li><li><ul>");E=E.replace(/<\/ul>/gi,"</ul></li>");E=E.replace(/<\/ul><\/li>\n?/gi,"</ul>");E=E.replace(/<\/li>/gi,"</li>");E=E.replace(/<\/ol>/gi,"</ol>");E=E.replace(/<ol>/gi,"<ol>");E=E.replace(/<ul>/gi,"<ul>");return E;},filter_safari:function(E){if(this.browser.webkit){E=E.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi,"    ");E=E.replace(/Apple-style-span/gi,"");E=E.replace(/style="line-height: normal;"/gi,"");E=E.replace(/yui-wk-div/gi,"");E=E.replace(/yui-wk-p/gi,"");E=E.replace(/<li><\/li>/gi,"");E=E.replace(/<li> <\/li>/gi,"");E=E.replace(/<li>  <\/li>/gi,"");if(this.get("ptags")){E=E.replace(/<div([^>]*)>/g,"<p$1>");E=E.re!
 place(/<\/div>/gi,"</p>");}else{E=E.replace(/<div>/gi,"<br>");E=E.replace(/<\/div>/gi,"");}}return E;},filter_internals:function(E){E=E.replace(/\r/g,"");E=E.replace(/<\/?(body|head|html)[^>]*>/gi,"");E=E.replace(/<YUI_BR><\/li>/gi,"</li>");E=E.replace(/yui-tag-span/gi,"");E=E.replace(/yui-tag/gi,"");E=E.replace(/yui-non/gi,"");E=E.replace(/yui-img/gi,"");E=E.replace(/ tag="span"/gi,"");E=E.replace(/ class=""/gi,"");E=E.replace(/ style=""/gi,"");E=E.replace(/ class=" "/gi,"");E=E.replace(/ class="  "/gi,"");E=E.replace(/ target=""/gi,"");E=E.replace(/ title=""/gi,"");if(this.browser.ie){E=E.replace(/ class= /gi,"");E=E.replace(/ class= >/gi,"");}return E;},filter_all_rgb:function(I){var H=new RegExp("rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)","gi");var E=I.match(H);if(D.isArray(E)){for(var G=0;G<E.length;G++){var F=this.filter_rgb(E[G]);I=I.replace(E[G].toString(),F);}}return I;},filter_rgb:function(G){if(G.toLowerCase().indexOf("rgb")!=-1){var J=new !
 RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*!
 ?([0-9]+
).*?\\)(.*?)","gi");var F=G.replace(J,"$1,$2,$3,$4,$5").split(",");if(F.length==5){var I=parseInt(F[1],10).toString(16);var H=parseInt(F[2],10).toString(16);var E=parseInt(F[3],10).toString(16);I=I.length==1?"0"+I:I;H=H.length==1?"0"+H:H;E=E.length==1?"0"+E:E;G="#"+I+H+E;}}return G;},pre_filter_linebreaks:function(F,E){if(this.browser.webkit){F=F.replace(/<br class="khtml-block-placeholder">/gi,"<YUI_BR>");F=F.replace(/<br class="webkit-block-placeholder">/gi,"<YUI_BR>");}F=F.replace(/<br>/gi,"<YUI_BR>");F=F.replace(/<br (.*?)>/gi,"<YUI_BR>");F=F.replace(/<br\/>/gi,"<YUI_BR>");F=F.replace(/<br \/>/gi,"<YUI_BR>");F=F.replace(/<div><YUI_BR><\/div>/gi,"<YUI_BR>");F=F.replace(/<p>( | )<\/p>/g,"<YUI_BR>");F=F.replace(/<p><br> <\/p>/gi,"<YUI_BR>");F=F.replace(/<p> <\/p>/gi,"<YUI_BR>");F=F.replace(/<YUI_BR>$/,"");F=F.replace(/<YUI_BR><\/p>/g,"</p>");if(this.browser.ie){F=F.replace(/    /g,"\t");}return F;},post_filter_linebreaks:function(F,E)!
 {if(E=="xhtml"){F=F.replace(/<YUI_BR>/g,"<br />");}else{F=F.replace(/<YUI_BR>/g,"<br>");}return F;},clearEditorDoc:function(){this._getDoc().body.innerHTML=" ";},openWindow:function(E){},moveWindow:function(){},_closeWindow:function(){},closeWindow:function(){this.toolbar.resetAllButtons();this.focus();},destroy:function(){if(this.resize){this.resize.destroy();}if(this.dd){this.dd.unreg();}if(this.get("panel")){this.get("panel").destroy();}this.saveHTML();this.toolbar.destroy();this.setStyle("visibility","visible");this.setStyle("position","static");this.setStyle("top","");this.setStyle("left","");var E=this.get("element");this.get("element_cont").get("parentNode").replaceChild(E,this.get("element_cont").get("element"));this.get("element_cont").get("element").innerHTML="";this.set("handleSubmit",false);return true;},toString:function(){var E="SimpleEditor";if(this.get&&this.get("element_cont")){E="SimpleEditor (#"+this.get("element_cont").get("id")+")"+((this.get("disa!
 bled")?" Disabled":""));}return E;}});YAHOO.widget.EditorInfo=!
 {_instan
ces:{},blankImage:"",window:{},panel:null,getEditorById:function(E){if(!YAHOO.lang.isString(E)){E=E.id;}if(this._instances[E]){return this._instances[E];}return false;},toString:function(){var E=0;for(var F in this._instances){if(D.hasOwnProperty(this._instances,F)){E++;}}return"Editor Info ("+E+" registered intance"+((E>1)?"s":"")+")";}};})();YAHOO.register("simpleeditor",YAHOO.widget.SimpleEditor,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/editor/simpleeditor.js
===================================================================
--- trunk/root/static/yui/editor/simpleeditor.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/editor/simpleeditor.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
     /**
+     * @module editor    
      * @description <p>Creates a rich custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
      * @class ToolbarButtonAdvanced
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event, container_core, menu, button
-     * @beta
      * 
      * Provides a toolbar button based on the button and menu widgets.
      * @constructor
+     * @class ToolbarButtonAdvanced
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
     */
@@ -55,14 +53,13 @@
 
 
     /**
-     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p>
+     * @description <p>Creates a basic custom Toolbar Button. Primarily used with the Rich Text Editor's Toolbar</p><p>Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.</p>
      * @class ToolbarButton
      * @namespace YAHOO.widget
      * @requires yahoo, dom, element, event
-     * @Extends YAHOO.util.Element
-     * @beta
+     * @extends YAHOO.util.Element
      * 
-     * Provides a toolbar button based on the button and menu widgets, <select> elements are used in place of menu's.
+     * 
      * @constructor
      * @param {String/HTMLElement} el The element to turn into a button.
      * @param {Object} attrs Object liternal containing configuration parameters.
@@ -89,7 +86,8 @@
         oConfig.element.className = 'yui-button yui-' + oConfig.attributes.type + '-button';
         oConfig.element.innerHTML = '<span class="first-child"><a href="#">LABEL</a></span>';
         oConfig.element.firstChild.firstChild.tabIndex = '-1';
-        oConfig.attributes.id = Dom.generateId();
+        oConfig.attributes.id = (oConfig.attributes.id || Dom.generateId());
+        oConfig.element.id = oConfig.attributes.id;
 
         YAHOO.widget.ToolbarButton.superclass.constructor.call(this, oConfig.element, oConfig.attributes);
     };
@@ -145,6 +143,10 @@
 
             this.on('mouseover', this._handleMouseOver, this, true);
             this.on('mouseout', this._handleMouseOut, this, true);
+            this.on('click', function(ev) {
+                Event.stopEvent(ev);
+                return false;
+            }, this, true);
         },
         /**
         * @method initAttributes
@@ -303,9 +305,10 @@
         * @method fireEvent
         * @description Overridden fireEvent method to prevent DOM events from firing if the button is disabled.
         */        
-        fireEvent: function (p_sType , p_aArgs) {
+        fireEvent: function(p_sType, p_aArgs) {
             //  Disabled buttons should not respond to DOM events
             if (this.DOM_EVENTS[p_sType] && this.get('disabled')) {
+                Event.stopEvent(p_aArgs);
                 return;
             }
         
@@ -323,16 +326,13 @@
     });
 })();
 /**
+ * @module editor
  * @description <p>Creates a rich Toolbar widget based on Button. Primarily used with the Rich Text Editor</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbarbutton
  * @optional container_core, dragdrop
- * @beta
  */
 (function() {
-    /**
-    * @private
-    **/
 var Dom = YAHOO.util.Dom,
     Event = YAHOO.util.Event,
     Lang = YAHOO.lang;
@@ -982,11 +982,6 @@
                             } else {
                                 this.get('cont').appendChild(this._dragHandle);
                             }
-                            /**
-                            * @property dd
-                            * @description The DragDrop instance associated with the Toolbar
-                            * @type Object
-                            */
                             this.dd = new YAHOO.util.DD(this.get('id'));
                             this.dd.setHandleElId(this._dragHandle.id);
                             
@@ -2090,11 +2085,11 @@
 */
 })();
 /**
+ * @module editor
  * @description <p>The Rich Text Editor is a UI control that replaces a standard HTML textarea; it allows for the rich formatting of text content, including common structural treatments like lists, formatting treatments like bold and italic text, and drag-and-drop inclusion and sizing of images. The Rich Text Editor's toolbar is extensible via a plugin architecture so that advanced implementations can achieve a high degree of customization.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, toolbar
  * @optional animation, container_core, resize, dragdrop
- * @beta
  */
 
 (function() {
@@ -2217,6 +2212,11 @@
         * @type YAHOO.util.Resize
         */
         resize: null,
+        /**
+        * @private
+        * @method _setupDD
+        * @description Sets up the DD instance used from the 'drag' config option.
+        */
         _setupDD: function() {
             if (!YAHOO.util.DD) { return false; }
             if (this.get('drag')) {
@@ -2301,6 +2301,14 @@
             FOCUS_AFTER: {
                 key: 27
             },
+            FONT_SIZE_UP: {
+                key: 38,
+                mods: ['shift', 'ctrl']
+            },
+            FONT_SIZE_DOWN: {
+                key: 40,
+                mods: ['shift', 'ctrl']
+            },
             CREATE_LINK: {
                 key: 76,
                 mods: ['shift', 'ctrl']
@@ -2371,7 +2379,7 @@
         * @description The default CSS used in the config for 'css'. This way you can add to the config like this: { css: YAHOO.widget.SimpleEditor.prototype._defaultCSS + 'ADD MYY CSS HERE' }
         * @type String
         */
-        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font:13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div { margin: 11px 0; }',
+        _defaultCSS: 'html { height: 95%; } body { padding: 7px; background-color: #fff; font: 13px/1.22 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small; } a, a:visited, a:hover { color: blue !important; text-decoration: underline !important; cursor: text !important; } .warning-localfile { border-bottom: 1px dashed red !important; } .yui-busy { cursor: wait !important; } img.selected { border: 2px dotted #808080; } img { cursor: pointer !important; border: none; } body.ptags.webkit div.yui-wk-p { margin: 11px 0; } body.ptags.webkit div.yui-wk-div { margin: 0; }',
         /**
         * @property _defaultToolbar
         * @private
@@ -2725,38 +2733,20 @@
             return this.get('iframe').get('element').contentWindow;
         },
         /**
+        * @method focus
+        * @description Attempt to set the focus of the iframes window.
+        */
+        focus: function() {
+            this._getWindow().focus();
+        },
+        /**
         * @private
+        * @depreciated - This should not be used, moved to this.focus();
         * @method _focusWindow
         * @description Attempt to set the focus of the iframes window.
-        * @param {Boolean} onLoad Safari needs some special care to set the cursor in the iframe
         */
-        _focusWindow: function(onLoad) {
-            if (this.browser.webkit) {
-                if (onLoad) {
-                    /**
-                    * @knownissue Safari Cursor Position
-                    * @browser Safari 2.x
-                    * @description Can't get Safari to place the cursor at the beginning of the text..
-                    * This workaround at least set's the toolbar into the proper state.
-                    */
-                    this._getSelection().setBaseAndExtent(this._getDoc().body.firstChild, 0, this._getDoc().body.firstChild, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                } else {
-                    this._getSelection().setBaseAndExtent(this._getDoc().body, 1, this._getDoc().body, 1);
-                    if (this.browser.webkit3) {
-                        this._getSelection().collapseToStart();
-                    } else {
-                        this._getSelection().collapse(false);
-                    }
-                }
-                this._getWindow().focus();
-            } else {
-                this._getWindow().focus();
-            }
+        _focusWindow: function() {
+            this.focus();
         },
         /**
         * @private
@@ -2942,12 +2932,45 @@
         },
         /**
         * @private
+        * @property _focused
+        * @description Holder for trapping focus/blur state and prevent double events
+        * @type Boolean
+        */
+        _focused: null,
+        /**
+        * @private
+        * @method _handleFocus
+        * @description Handles the focus of the iframe. Note, this is window focus event, not an Editor focus event.
+        * @param {Event} e The DOM Event
+        */
+        _handleFocus: function(e) {
+            if (!this._focused) {
+                this._focused = true;
+                this.fireEvent('editorWindowFocus', { type: 'editorWindowFocus', target: this });
+            }
+        },
+        /**
+        * @private
+        * @method _handleBlur
+        * @description Handles the blur of the iframe. Note, this is window blur event, not an Editor blur event.
+        * @param {Event} e The DOM Event
+        */
+        _handleBlur: function(e) {
+            if (this._focused) {
+                this._focused = false;
+                this.fireEvent('editorWindowBlur', { type: 'editorWindowBlur', target: this });
+            }
+        },
+        /**
+        * @private
         * @method _initEditorEvents
         * @description This method sets up the listeners on the Editors document.
         */
         _initEditorEvents: function() {
             //Setup Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.on(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.on(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.on(doc, 'click', this._handleClick, this, true);
@@ -2955,6 +2978,14 @@
             Event.on(doc, 'keypress', this._handleKeyPress, this, true);
             Event.on(doc, 'keyup', this._handleKeyUp, this, true);
             Event.on(doc, 'keydown', this._handleKeyDown, this, true);
+            /* TODO -- Everyone but Opera works here..
+            Event.on(doc, 'paste', function() {
+            }, this, true);
+            */
+ 
+            //Focus and blur..
+            Event.on(win, 'focus', this._handleFocus, this, true);
+            Event.on(win, 'blur', this._handleBlur, this, true);
         },
         /**
         * @private
@@ -2963,7 +2994,9 @@
         */
         _removeEditorEvents: function() {
             //Remove Listeners on iFrame
-            var doc = this._getDoc();
+            var doc = this._getDoc(),
+                win = this._getWindow();
+
             Event.removeListener(doc, 'mouseup', this._handleMouseUp, this, true);
             Event.removeListener(doc, 'mousedown', this._handleMouseDown, this, true);
             Event.removeListener(doc, 'click', this._handleClick, this, true);
@@ -2971,7 +3004,17 @@
             Event.removeListener(doc, 'keypress', this._handleKeyPress, this, true);
             Event.removeListener(doc, 'keyup', this._handleKeyUp, this, true);
             Event.removeListener(doc, 'keydown', this._handleKeyDown, this, true);
+
+            //Focus and blur..
+            Event.removeListener(win, 'focus', this._handleFocus, this, true);
+            Event.removeListener(win, 'blur', this._handleBlur, this, true);
         },
+        _fixWebkitDivs: function() {
+            if (this.browser.webkit) {
+                var divs = this._getDoc().body.getElementsByTagName('div');
+                Dom.addClass(divs, 'yui-wk-div');
+            }
+        },
         /**
         * @private
         * @method _initEditor
@@ -3000,6 +3043,7 @@
             }
 
             this.fireEvent('editorContentLoaded', { type: 'editorLoaded', target: this });
+            this._fixWebkitDivs();
             if (this.get('dompath')) {
                 var self = this;
                 setTimeout(function() {
@@ -3069,6 +3113,11 @@
             var value = ((this._textarea) ? this.get('element').value : this.get('element').innerHTML),
                 doc = null;
 
+            if ((value === '') && this.browser.gecko) {
+                //It seems that Gecko doesn't like an empty body so we have to give it something..
+                value = '<br>';
+            }
+
             var html = Lang.substitute(this.get('html'), {
                 TITLE: this.STR_TITLE,
                 CONTENT: this._cleanIncomingHTML(value),
@@ -3193,19 +3242,23 @@
                 if (this.browser.gecko) {
                     //Added in 2.6.0
                     if (range.startContainer) {
-                        check = false;
                         if (range.startContainer.nodeType === 3) {
                             elm = range.startContainer.parentNode;
                         } else if (range.startContainer.nodeType === 1) {
                             elm = range.startContainer;
-                        } else {
-                            check = true;
                         }
-                        if (!check) {
-                            this.currentEvent = null;
+                        //Added in 2.7.0
+                        if (this.currentEvent) {
+                            var tar = Event.getTarget(this.currentEvent);
+                            if (!this._isElement(tar, 'html')) {
+                                if (elm !== tar) {
+                                    elm = tar;
+                                }
+                            }
                         }
                     }
                 }
+                
                 if (check) {
                     if (sel.anchorNode && (sel.anchorNode.nodeType == 3)) {
                         if (sel.anchorNode.parentNode) { //next check parentNode
@@ -3324,6 +3377,7 @@
                 pathArr = [],
                 classPath = '',
                 pathStr = '';
+
             for (var i = 0; i < path.length; i++) {
                 var tag = path[i].tagName.toLowerCase();
                 if ((tag == 'ol') && (path[i].type)) {
@@ -3518,7 +3572,7 @@
             //this._setCurrentEvent(ev);
             var self = this;
             if (this.browser.opera) {
-                /**
+                /*
                 * @knownissue Opera appears to stop the MouseDown, Click and DoubleClick events on an image inside of a document with designMode on..
                 * @browser Opera
                 * @description This work around traps the MouseUp event and sets a timer to check if another MouseUp event fires in so many seconds. If another event is fired, they we internally fire the DoubleClick event.
@@ -3741,6 +3795,7 @@
             }
             var doExec = false,
                 action = null,
+                value = null,
                 exec = false;
 
 
@@ -3795,6 +3850,29 @@
                         doExec = true;
                     }
                     break;
+                case this._keyMap.FONT_SIZE_UP.key:
+                case this._keyMap.FONT_SIZE_DOWN.key:
+                    var uk = false, dk = false;
+                    if (this._checkKey(this._keyMap.FONT_SIZE_UP, ev)) {
+                        uk = true;
+                    }
+                    if (this._checkKey(this._keyMap.FONT_SIZE_DOWN, ev)) {
+                        dk = true;
+                    }
+                    if (uk || dk) {
+                        var fs_button = this.toolbar.getButtonByValue('fontsize'),
+                            label = parseInt(fs_button.get('label'), 10),
+                            newValue = (label + 1);
+
+                        if (dk) {
+                            newValue = (label - 1);
+                        }
+
+                        action = 'fontsize';
+                        value = newValue + 'px';
+                        doExec = true;
+                    }
+                    break;
                 //case 73: //I
                 case this._keyMap.ITALIC.key:
                     if (this._checkKey(this._keyMap.ITALIC, ev)) {
@@ -3840,24 +3918,65 @@
                     }
                     break;
                 case 13:
+                    var p = null, i = 0;
                     if (this.get('ptags') && !ev.shiftKey) {
                         if (this.browser.gecko) {
                             tar = this._getSelectedElement();
-                            if (!this._isElement(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                            if (!this._hasParent(tar, 'li')) {
+                                if (this._hasParent(tar, 'p')) {
+                                    p = this._getDoc().createElement('p');
+                                    p.innerHTML = ' ';
+                                    Dom.insertAfter(p, tar);
+                                    this._selectNode(p.firstChild);
+                                } else if (this._isElement(tar, 'body')) {
+                                    this.execCommand('insertparagraph', null);
+                                    var ps = this._getDoc().body.getElementsByTagName('p');
+                                    for (i = 0; i < ps.length; i++) {
+                                        if (ps[i].getAttribute('_moz_dirty') !== null) {
+                                            p = this._getDoc().createElement('p');
+                                            p.innerHTML = ' ';
+                                            Dom.insertAfter(p, ps[i]);
+                                            this._selectNode(p.firstChild);
+                                            ps[i].removeAttribute('_moz_dirty');
+                                        }
+                                    }
+                                } else {
+                                    doExec = true;
+                                    action = 'insertparagraph';
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                         if (this.browser.webkit) {
                             tar = this._getSelectedElement();
                             if (!this._hasParent(tar, 'li')) {
-                                doExec = true;
-                                action = 'insertparagraph';
+                                this.execCommand('insertparagraph', null);
+                                var divs = this._getDoc().body.getElementsByTagName('div');
+                                for (i = 0; i < divs.length; i++) {
+                                    if (!Dom.hasClass(divs[i], 'yui-wk-div')) {
+                                        Dom.addClass(divs[i], 'yui-wk-p');
+                                    }
+                                }
                                 Event.stopEvent(ev);
                             }
                         }
                     } else {
+                        if (this.browser.webkit) {
+                            tar = this._getSelectedElement();
+                            if (!this._hasParent(tar, 'li')) {
+                                this.execCommand('inserthtml', '<var id="yui-br"></var>');
+                                var holder = this._getDoc().getElementById('yui-br'),
+                                    br = this._getDoc().createElement('br'),
+                                    caret = this._getDoc().createElement('span');
+
+                                holder.parentNode.replaceChild(br, holder);
+                                caret.className = 'yui-non';
+                                caret.innerHTML = ' ';
+                                Dom.insertAfter(caret, br);
+                                this._selectNode(caret);
+                                Event.stopEvent(ev);
+                            }
+                        }
                         if (this.browser.ie) {
                             //Insert a <br> instead of a <p></p> in Internet Explorer
                             _range = this._getRange();
@@ -3878,7 +3997,7 @@
                 this._listFix(ev);
             }
             if (doExec && action) {
-                this.execCommand(action, null);
+                this.execCommand(action, value);
                 Event.stopEvent(ev);
                 this.nodeChange();
             }
@@ -4226,7 +4345,7 @@
                 if (!this.browser.webkit) {
                      var Fself = this;
                      setTimeout(function() {
-                         Fself._focusWindow.call(Fself);
+                         Fself.focus.call(Fself);
                      }, 5);
                  }
             }
@@ -4270,12 +4389,6 @@
                         this.toolbar.set('disabled', true);
                     }
                     this._mask = document.createElement('DIV');
-                    Dom.setStyle(this._mask, 'height', '100%');
-                    Dom.setStyle(this._mask, 'width', '100%');
-                    Dom.setStyle(this._mask, 'position', 'absolute');
-                    Dom.setStyle(this._mask, 'top', '0');
-                    Dom.setStyle(this._mask, 'left', '0');
-                    Dom.setStyle(this._mask, 'opacity', '.5');
                     Dom.addClass(this._mask, 'yui-editor-masked');
                     this.get('iframe').get('parentNode').appendChild(this._mask);
                 }
@@ -4288,7 +4401,7 @@
                         this.toolbar.set('disabled', false);
                     }
                     this._setDesignMode('on');
-                    this._focusWindow();
+                    this.focus();
                     var self = this;
                     window.setTimeout(function() {
                         self.nodeChange.call(self);
@@ -4327,6 +4440,12 @@
         */
         STR_IMAGE_HERE: 'Image URL Here',
         /**
+        * @property STR_IMAGE_URL
+        * @description The label string for Image URL
+        * @type String
+        */
+        STR_IMAGE_URL: 'Image URL',        
+        /**
         * @property STR_LINK_URL
         * @description The label string for the Link URL.
         * @type String
@@ -4507,7 +4626,7 @@
 
             /**
             * @config ptags
-            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
+            * @description If true, the editor uses <P> tags instead of <br> tags. (Use Shift + Enter to get a <br>)
             * @default false
             * @type Boolean
             */
@@ -4580,7 +4699,7 @@
             });
             /**
             * @private
-            * @depreciated
+            * @depreciated - No longer used, should use this.get('element')
             * @config textarea
             * @description Internal config for holding the textarea element (replaced with element).
             * @default null
@@ -4591,17 +4710,6 @@
                 writeOnce: true
             });
             /**
-            * @private
-            * @config container
-            * @description Internal config for holding a reference to the container to append a dynamic editor to.
-            * @default null
-            * @type HTMLElement
-            */
-            this.setAttributeConfig('container', {
-                readOnly: true,
-                value: null
-            });
-            /**
             * @config nodeChangeThreshold
             * @description The number of seconds that need to be in between nodeChange processing
             * @default 3
@@ -4948,7 +5056,7 @@
                         this.on('editorContentLoaded', function() {
                             var self = this;
                             setTimeout(function() {
-                                self._focusWindow.call(self, true);
+                                self.focus.call(self);
                                 self.editorDirty = false;
                             }, 400);
                         }, this, true);
@@ -5028,6 +5136,17 @@
                 writeOnce: true,
                 value: attr.resize || false
             });
+
+            /**
+            * @config filterWord
+            * @description Attempt to filter out MS Word HTML from the Editor's output.
+            * @type Boolean
+            */
+            this.setAttributeConfig('filterWord', {
+                value: attr.filterWord || false,
+                validator: YAHOO.lang.isBoolean
+            });
+
         },
         /**
         * @private
@@ -5085,7 +5204,10 @@
                 newHeight = parseInt(this.get('height'), 10);
             }
             if ((height != newHeight) && (newHeight >= parseInt(this.get('height'), 10))) {   
-                Dom.setStyle(this.get('editor_wrapper'), 'height', newHeight + 'px');
+                var anim = this.get('animate');
+                this.set('animate', false);
+                this.set('height', newHeight + 'px');
+                this.set('animate', anim);
                 if (this.browser.ie) {
                     //Internet Explorer needs this
                     this.get('iframe').setStyle('height', '99%');
@@ -5166,7 +5288,7 @@
             var button = this.toolbar.getButtonById(o.button.id);
             var value = button.get('label') + 'px';
             this.execCommand('fontsize', value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5196,7 +5318,7 @@
             var value = this._getSelection();
 
             this.execCommand(cmd, value);
-            this.STOP_EXEC_COMMAND = true;
+            return false;
         },
         /**
         * @private
@@ -5302,7 +5424,7 @@
             }
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     src = 'http://';
                 if (!el) {
@@ -5316,17 +5438,26 @@
                         }
                     }
                 }
-                var str = prompt(this.STR_LINK_URL + ': ', src);
+                var str = prompt(this.STR_IMAGE_URL + ': ', src);
                 if ((str !== '') && (str !== null)) {
                     el.setAttribute('src', str);
-                } else if (str === null) {
+                } else if (str === '') {
                     el.parentNode.removeChild(el);
                     this.currentElement = [];
                     this.nodeChange();
+                } else if ((str === null)) {
+                    src = el.getAttribute('src', 2);
+                    if (src.indexOf(this.get('blankimage')) != -1) {
+                        el.parentNode.removeChild(el);
+                        this.currentElement = [];
+                        this.nodeChange();
+                    }
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this, true);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this, true);
         },
         /**
         * @private
@@ -5362,7 +5493,7 @@
         
             this.toolbar.set('disabled', true); //Disable the toolbar when the prompt is showing
 
-            this.on('afterExecCommand', function() {
+            var _handleAEC = function() {
                 var el = this.currentElement[0],
                     url = '';
 
@@ -5394,7 +5525,9 @@
                 }
                 this.closeWindow();
                 this.toolbar.set('disabled', false);
-            }, this);
+                this.unsubscribe('afterExecCommand', _handleAEC, this, true);
+            };
+            this.on('afterExecCommand', _handleAEC, this);
 
         },
         /**
@@ -5447,8 +5580,9 @@
 
             this.get('element_cont').setStyle('display', 'none');
             this.get('element_cont').addClass(this.CLASS_CONTAINER);
+            
+            this.set('iframe', this._createIframe());
 
-            this.set('iframe', this._createIframe());
             window.setTimeout(function() {
                 self._setInitialContent.call(self);
             }, 10);
@@ -5582,6 +5716,49 @@
     /* {{{  Command Overrides */
 
         /**
+        * @method cmd_bold
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('bold') is used.
+        */
+        cmd_bold: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontWeight == 'bold') {
+                        el.style.fontWeight = '';
+                        var b = this._getDoc().createElement('b'),
+                        par = el.parentNode;
+                        par.replaceChild(b, el);
+                        b.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+        /**
+        * @method cmd_italic
+        * @param value Value passed from the execCommand method
+        * @description This is an execCommand override method. It is called from execCommand when the execCommand('italic') is used.
+        */
+
+        cmd_italic: function(value) {
+            if (!this.browser.webkit) {
+                var el = this._getSelectedElement();
+                if (el && this._isElement(el, 'span') && this._hasSelection()) {
+                    if (el.style.fontStyle == 'italic') {
+                        el.style.fontStyle = '';
+                        var i = this._getDoc().createElement('i'),
+                        par = el.parentNode;
+                        par.replaceChild(i, el);
+                        i.appendChild(el);
+                    }
+                }
+            }
+            return [true];
+        },
+
+
+        /**
         * @method cmd_underline
         * @param value Value passed from the execCommand method
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('underline') is used.
@@ -5616,18 +5793,14 @@
             }
 
             if (!this._isElement(el, 'body') && !this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
+                el.style.backgroundColor = value;
                 this._selectNode(el);
                 exec = false;
-            } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                Dom.setStyle(el, 'background-color', value);
-                this._selectNode(el);
-                exec = false;
             } else {
                 if (this.get('insert')) {
                     el = this._createInsertElement({ backgroundColor: value });
                 } else {
-                    this._createCurrentElement('span', { backgroundColor: value });
+                    this._createCurrentElement('span', { backgroundColor: value, color: el.style.color, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily });
                     this._selectNode(this.currentElement[0]);
                 }
                 exec = false;
@@ -5644,20 +5817,15 @@
             var exec = true,
                 el = this._getSelectedElement();
                 
-
                 if (!this._isElement(el, 'body') && !this._hasSelection()) {
                     Dom.setStyle(el, 'color', value);
                     this._selectNode(el);
                     exec = false;
-                } else if (!this._isElement(el, 'body') && this._hasSelection()) {
-                    Dom.setStyle(el, 'color', value);
-                    this._selectNode(el);
-                    exec = false;
                 } else {
                     if (this.get('insert')) {
                         el = this._createInsertElement({ color: value });
                     } else {
-                        this._createCurrentElement('span', { color: value });
+                        this._createCurrentElement('span', { color: value, fontSize: el.style.fontSize, fontFamily: el.style.fontFamily, backgroundColor: el.style.backgroundColor });
                         this._selectNode(this.currentElement[0]);
                     }
                     exec = false;
@@ -5684,6 +5852,12 @@
             var el = this._getSelectedElement(), _a = null;
             if (this._hasParent(el, 'a')) {
                 this.currentElement[0] = this._hasParent(el, 'a');
+            } else if (this._isElement(el, 'li')) {
+                _a = this._getDoc().createElement('a');
+                _a.innerHTML = el.innerHTML;
+                el.innerHTML = '';
+                el.appendChild(_a);
+                this.currentElement[0] = _a;
             } else if (!this._isElement(el, 'a')) {
                 this._createCurrentElement('a');
                 _a = this._swapEl(this.currentElement[0], 'a');
@@ -5706,8 +5880,8 @@
                 value = this.get('blankimage');
             }
 
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari Cursor Position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5753,8 +5927,8 @@
         */
         cmd_inserthtml: function(value) {
             var exec = true, action = 'inserthtml', _span = null, _range = null;
-            /**
-            * @knownissue
+            /*
+            * @knownissue Safari cursor position
             * @browser Safari 2.x
             * @description The issue here is that we have no way of knowing where the cursor position is
             * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -5787,7 +5961,7 @@
                 if (tag == 'ul') {
                     action = 'insertunorderedlist';
                 }
-            /**
+            /*
             * @knownissue Safari 2.+ doesn't support ordered and unordered lists
             * @browser Safari 2.x
             * The issue with this workaround is that when applied to a set of text
@@ -5820,6 +5994,17 @@
                             this.currentElement[li].parentNode.removeChild(this.currentElement[li]);
                         }
                     }
+                    
+                    var items = list.firstChild.innerHTML.split('<br>');
+                    if (items.length > 0) {
+                        list.innerHTML = '';
+                        for (var i = 0; i < items.length; i++) {
+                            var item = this._getDoc().createElement('li');
+                            item.innerHTML = items[i];
+                            list.appendChild(item);
+                        }
+                    }
+
                     this.currentElement[0].parentNode.replaceChild(list, this.currentElement[0]);
                     this.currentElement[0] = list;
                     var _h = this.currentElement[0].firstChild;
@@ -5935,27 +6120,40 @@
         * @description This is an execCommand override method. It is called from execCommand when the execCommand('fontsize') is used.
         */
         cmd_fontsize: function(value) {
-            var el = null;
-            if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
-                YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
-            } else if (!this._isElement(this._getSelectedElement(), 'body')) {
-                el = this._getSelectedElement();
-                YAHOO.util.Dom.setStyle(el, 'fontSize', value);
-                if (this.get('insert') && this.browser.ie) {
-                    var r = this._getRange();
-                    r.collapse(false);
-                    r.select();
-                } else {
-                    this._selectNode(el);
+            var el = null, go = true;
+            el = this._getSelectedElement();
+            if (this.browser.webkit) {
+                if (this.currentElement[0]) {
+                    if (el == this.currentElement[0]) {
+                        go = false;
+                        YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                        this._selectNode(el);
+                        this.currentElement[0] = el;
+                    }
                 }
-            } else {
-                if (this.get('insert') && !this._hasSelection()) {
-                    el = this._createInsertElement({ fontSize: value });
-                    this.currentElement[0] = el;
-                    this._selectNode(this.currentElement[0]);
+            }
+            if (go) {
+                if (!this._isElement(this._getSelectedElement(), 'body') && (!this._hasSelection())) {
+                    el = this._getSelectedElement();
+                    YAHOO.util.Dom.setStyle(el, 'fontSize', value);
+                    if (this.get('insert') && this.browser.ie) {
+                        var r = this._getRange();
+                        r.collapse(false);
+                        r.select();
+                    } else {
+                        this._selectNode(el);
+                    }
+                } else if (this.currentElement && (this.currentElement.length > 0) && (!this._hasSelection()) && (!this.get('insert'))) {
+                    YAHOO.util.Dom.setStyle(this.currentElement, 'fontSize', value);
                 } else {
-                    this._createCurrentElement('span', {'fontSize': value });
-                    this._selectNode(this.currentElement[0]);
+                    if (this.get('insert') && !this._hasSelection()) {
+                        el = this._createInsertElement({ fontSize: value });
+                        this.currentElement[0] = el;
+                        this._selectNode(this.currentElement[0]);
+                    } else {
+                        this._createCurrentElement('span', {'fontSize': value, fontFamily: el.style.fontFamily, color: el.style.color, backgroundColor: el.style.backgroundColor });
+                        this._selectNode(this.currentElement[0]);
+                    }
                 }
             }
             return [false];
@@ -5987,7 +6185,7 @@
         * @method _createInsertElement
         * @description Creates a new "currentElement" then adds some text (and other things) to make it selectable and stylable. Then the user can continue typing.
         * @param {Object} css (optional) Object literal containing styles to apply to the new element.
-        * @return
+        * @return {HTMLElement}
         */
         _createInsertElement: function(css) {
             this._createCurrentElement('span', css);
@@ -6000,7 +6198,7 @@
             } else if (this.browser.ie || this.browser.opera) {
                 el.innerHTML = ' ';
             }
-            this._focusWindow();
+            this.focus();
             this._selectNode(el, true);
             return el;
         },
@@ -6079,8 +6277,8 @@
                     }
                 }
                 if (tar) {
-                    /**
-                    * @knownissue
+                    /*
+                    * @knownissue Safari Cursor Position
                     * @browser Safari 2.x
                     * @description The issue here is that we have no way of knowing where the cursor position is
                     * inside of the iframe, so we have to place the newly inserted data in the best place that we can.
@@ -6125,12 +6323,15 @@
                         _tmp[_tmp.length] = _tmp1[e];
                     }
                 }
+
                 
                 for (var i = 0; i < _tmp.length; i++) {
                     if ((YAHOO.util.Dom.getStyle(_tmp[i], 'font-family') == 'yui-tmp') || (_tmp[i].face && (_tmp[i].face == 'yui-tmp'))) {
-                        //TODO Why is this here?!?
-                        //el = _elCreate(_tmp[i].tagName, tagStyle);
-                        el = _elCreate(tagName, tagStyle);
+                        if (tagName !== 'span') {
+                            el = _elCreate(tagName, tagStyle);
+                        } else {
+                            el = _elCreate(_tmp[i].tagName, tagStyle);
+                        }
                         el.innerHTML = _tmp[i].innerHTML;
                         if (this._isElement(_tmp[i], 'ol') || (this._isElement(_tmp[i], 'ul'))) {
                             var fc = _tmp[i].getElementsByTagName('li')[0];
@@ -6236,7 +6437,7 @@
         show: function() {
             if (this.browser.gecko) {
                 this._setDesignMode('on');
-                this._focusWindow();
+                this.focus();
             }
             if (this.browser.webkit) {
                 var self = this;
@@ -6290,6 +6491,7 @@
 
             html = html.replace(/<em([^>]*)>/gi, '<i$1>');
             html = html.replace(/<\/em>/gi, '</i>');
+            html = html.replace(/_moz_dirty=""/gi, '');
             
             //Put embed tags back in..
             html = html.replace(/<YUI_EMBED([^>]*)>/gi, '<embed$1>');
@@ -6305,7 +6507,8 @@
             html = html.replace(/<script([^>]*)>/gi, '<bad>');
             html = html.replace(/<\/script([^>]*)>/gi, '</bad>');
             //Replace the line feeds
-            html = html.replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            html = html.replace(/\r\n/g, '<YUI_LF>').replace(/\n/g, '<YUI_LF>').replace(/\r/g, '<YUI_LF>');
+            
             //Remove Bad HTML elements (used to be script nodes)
             html = html.replace(new RegExp('<bad([^>]*)>(.*?)<\/bad>', 'gi'), '');
             //Replace the lines feeds
@@ -6328,6 +6531,9 @@
             //Make some backups...
             html = this.pre_filter_linebreaks(html, markup);
 
+            //Filter MS Word
+            html = this.filter_msword(html);
+
 		    html = html.replace(/<img([^>]*)\/>/gi, '<YUI_IMG$1>');
 		    html = html.replace(/<img([^>]*)>/gi, '<YUI_IMG$1>');
 
@@ -6349,8 +6555,25 @@
                 html = html.replace(/<b(\s+[^>]*)?>/gi, '<strong$1>');
                 html = html.replace(/<\/b>/gi, '</strong>');
             }
+
+            html = html.replace(/_moz_dirty=""/gi, '');
+
+            //normalize strikethrough
+            html = html.replace(/<strike/gi, '<span style="text-decoration: line-through;"');
+            html = html.replace(/\/strike>/gi, '/span>');
             
+            
             //Case Changing
+            if (this.browser.ie) {
+                html = html.replace(/text-decoration/gi, 'text-decoration');
+                html = html.replace(/font-weight/gi, 'font-weight');
+                html = html.replace(/_width="([^>]*)"/gi, '');
+                html = html.replace(/_height="([^>]*)"/gi, '');
+                //Cleanup Image URL's
+                var url = this._baseHREF.replace(/\//gi, '\\/'),
+                    re = new RegExp('src="' + url, 'gi');
+                html = html.replace(re, 'src="');
+            }
 		    html = html.replace(/<font/gi, '<font');
 		    html = html.replace(/<\/font>/gi, '</font>');
 		    html = html.replace(/<span/gi, '<span');
@@ -6410,9 +6633,9 @@
 		    html = html.replace(/<\/YUI_EMBED>/g, '<\/embed>');
             
             //This should fix &s in URL's
-            html = html.replace(' & ', 'YUI_AMP');
-            html = html.replace('&', '&');
-            html = html.replace('YUI_AMP', '&');
+            html = html.replace(/ & /gi, 'YUI_AMP');
+            html = html.replace(/&/gi, '&');
+            html = html.replace(/YUI_AMP/gi, ' & ');
 
             //Trim the output, removing whitespace from the beginning and end
             html = YAHOO.lang.trim(html);
@@ -6446,6 +6669,50 @@
             return html;
         },
         /**
+        * @method filter_msword
+        * @param String html The HTML string to filter
+        * @description Filters out msword html attributes and other junk. Activate with filterWord: true in config
+        */
+        filter_msword: function(html) {
+            if (!this.get('filterWord')) {
+                return html;
+            }
+            //Remove the ms o: tags
+            html = html.replace(/<o:p>\s*<\/o:p>/g, '');
+            html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, ' ');
+
+            //Remove the ms w: tags
+            html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '');
+
+            //Remove mso-? styles.
+            html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '');
+
+            //Remove more bogus MS styles.
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '');
+            html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"");
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '');
+            html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"");
+            html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"");
+            html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" );
+            html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '');
+            html = html.replace( /\s*tab-stops:[^"]*/gi, '');
+
+            //Remove XML declarations
+            html = html.replace(/<\\?\?xml[^>]*>/gi, '');
+
+            //Remove lang
+            html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove language tags
+            html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3");
+
+            //Remove onmouseover and onmouseout events (from MS Word comments effect)
+            html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3");
+            html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3");
+            
+            return html;
+        },
+        /**
         * @method filter_invalid_lists
         * @param String html The HTML string to filter
         * @description Filters invalid ol and ul list markup, converts this: <li></li><ol>..</ol> to this: <li></li><li><ol>..</ol></li>
@@ -6455,16 +6722,16 @@
 
             html = html.replace(/<\/li><ol>/gi, '</li><li><ol>');
             html = html.replace(/<\/ol>/gi, '</ol></li>');
-            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>\n");
+            html = html.replace(/<\/ol><\/li>\n/gi, "</ol>");
 
             html = html.replace(/<\/li><ul>/gi, '</li><li><ul>');
             html = html.replace(/<\/ul>/gi, '</ul></li>');
-            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>\n");
+            html = html.replace(/<\/ul><\/li>\n?/gi, "</ul>");
 
-            html = html.replace(/<\/li>/gi, "</li>\n");
-            html = html.replace(/<\/ol>/gi, "</ol>\n");
-            html = html.replace(/<ol>/gi, "<ol>\n");
-            html = html.replace(/<ul>/gi, "<ul>\n");
+            html = html.replace(/<\/li>/gi, "</li>");
+            html = html.replace(/<\/ol>/gi, "</ol>");
+            html = html.replace(/<ol>/gi, "<ol>");
+            html = html.replace(/<ul>/gi, "<ul>");
             return html;
         },
         /**
@@ -6479,6 +6746,10 @@
                 html = html.replace(/<span class="Apple-tab-span" style="white-space:pre">([^>])<\/span>/gi, '    ');
                 html = html.replace(/Apple-style-span/gi, '');
                 html = html.replace(/style="line-height: normal;"/gi, '');
+                html = html.replace(/yui-wk-div/gi, '');
+                html = html.replace(/yui-wk-p/gi, '');
+
+
                 //Remove bogus LI's
                 html = html.replace(/<li><\/li>/gi, '');
                 html = html.replace(/<li> <\/li>/gi, '');
@@ -6488,8 +6759,8 @@
 		            html = html.replace(/<div([^>]*)>/g, '<p$1>');
 				    html = html.replace(/<\/div>/gi, '</p>');
                 } else {
-                    html = html.replace(/<div>/gi, '');
-				    html = html.replace(/<\/div>/gi, '<br>');
+                    html = html.replace(/<div>/gi, '<br>');
+				    html = html.replace(/<\/div>/gi, '');
                 }
             }
             return html;
@@ -6522,8 +6793,6 @@
             if (this.browser.ie) {
 		        html = html.replace(/ class= /gi, '');
 		        html = html.replace(/ class= >/gi, '');
-		        html = html.replace(/_height="([^>])"/gi, '');
-		        html = html.replace(/_width="([^>])"/gi, '');
             }
             
             return html;
@@ -6648,7 +6917,7 @@
         closeWindow: function() {
             //this.unsubscribeAll('afterExecCommand');
             this.toolbar.resetAllButtons();
-            this._focusWindow();        
+            this.focus();        
         },
         /**
         * @method destroy
@@ -6816,75 +7085,86 @@
 * @type YAHOO.util.CustomEvent
 */
 
+/**
+* @event editorWindowFocus
+* @description Fires when the iframe is focused. Note, this is window focus event, not an Editor focus event.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event editorWindowBlur
+* @description Fires when the iframe is blurred. Note, this is window blur event, not an Editor blur event.
+* @type YAHOO.util.CustomEvent
+*/
 
+
+/**
+ * @description Singleton object used to track the open window objects and panels across the various open editors
+ * @class EditorInfo
+ * @static
+*/
+YAHOO.widget.EditorInfo = {
     /**
-     * @description Singleton object used to track the open window objects and panels across the various open editors
-     * @class EditorInfo
-     * @static
+    * @private
+    * @property _instances
+    * @description A reference to all editors on the page.
+    * @type Object
     */
-    YAHOO.widget.EditorInfo = {
-        /**
-        * @private
-        * @property _instances
-        * @description A reference to all editors on the page.
-        * @type Object
-        */
-        _instances: {},
-        /**
-        * @private
-        * @property blankImage
-        * @description A reference to the blankImage url
-        * @type String 
-        */
-        blankImage: '',
-        /**
-        * @private
-        * @property window
-        * @description A reference to the currently open window object in any editor on the page.
-        * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
-        */
-        window: {},
-        /**
-        * @private
-        * @property panel
-        * @description A reference to the currently open panel in any editor on the page.
-        * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
-        */
-        panel: null,
-        /**
-        * @method getEditorById
-        * @description Returns a reference to the Editor object associated with the given textarea
-        * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
-        * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
-        */
-        getEditorById: function(id) {
-            if (!YAHOO.lang.isString(id)) {
-                //Not a string, assume a node Reference
-                id = id.id;
+    _instances: {},
+    /**
+    * @private
+    * @property blankImage
+    * @description A reference to the blankImage url
+    * @type String 
+    */
+    blankImage: '',
+    /**
+    * @private
+    * @property window
+    * @description A reference to the currently open window object in any editor on the page.
+    * @type Object <a href="YAHOO.widget.EditorWindow.html">YAHOO.widget.EditorWindow</a>
+    */
+    window: {},
+    /**
+    * @private
+    * @property panel
+    * @description A reference to the currently open panel in any editor on the page.
+    * @type Object <a href="YAHOO.widget.Overlay.html">YAHOO.widget.Overlay</a>
+    */
+    panel: null,
+    /**
+    * @method getEditorById
+    * @description Returns a reference to the Editor object associated with the given textarea
+    * @param {String/HTMLElement} id The id or reference of the textarea to return the Editor instance of
+    * @return Object <a href="YAHOO.widget.Editor.html">YAHOO.widget.Editor</a>
+    */
+    getEditorById: function(id) {
+        if (!YAHOO.lang.isString(id)) {
+            //Not a string, assume a node Reference
+            id = id.id;
+        }
+        if (this._instances[id]) {
+            return this._instances[id];
+        }
+        return false;
+    },
+    /**
+    * @method toString
+    * @description Returns a string representing the EditorInfo.
+    * @return {String}
+    */
+    toString: function() {
+        var len = 0;
+        for (var i in this._instances) {
+            if (Lang.hasOwnProperty(this._instances, i)) {
+                len++;
             }
-            if (this._instances[id]) {
-                return this._instances[id];
-            }
-            return false;
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the EditorInfo.
-        * @return {String}
-        */
-        toString: function() {
-            var len = 0;
-            for (var i in this._instances) {
-                if (Lang.hasOwnProperty(this._instances, i)) {
-                    len++;
-                }
-            }
-            return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
         }
-    };
+        return 'Editor Info (' + len + ' registered intance' + ((len > 1) ? 's' : '') + ')';
+    }
+};
 
 
 
     
 })();
-YAHOO.register("simpleeditor", YAHOO.widget.SimpleEditor, {version: "2.6.0", build: "1321"});
+YAHOO.register("simpleeditor", YAHOO.widget.SimpleEditor, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/element/README
===================================================================
--- trunk/root/static/yui/element/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,34 +0,0 @@
-Element Release Notes
-
-*** version 2.6.0 ***
-* Passing return values from DOM methods (appendChild, insertBefore, etc)
-
-*** version 2.5.2 ***
-no change
-
-*** version 2.5.1 ***
-no change
-
-*** version 2.5.0 ***
-* SetAttributes now correctly handles false values
-
-*** version 2.4.0 ***
-no change
-
-*** version 2.3.1 ***
-no change
-
-*** version 2.3.0 ***
-* setAttributes now sets in order configs were added
-* added subscribe alias for on/addListener
-
-*** version 2.2.2 ***
-* fixed contentReady timing regression
-
-*** version 2.2.1 ***
-* Added support for "dblclick", "focus", "blur", and "submit" event (for elements that support them)
-* Fixed scope correction for addListener/on/subscribe
-
-*** version 2.2.0 ***
-* beta introduction (broken out of TabView for general use)
-* The Element class provides a wrapper for HTMLElements in the DOM and makes simpler common tasks such as adding listeners, manipulating the DOM, and setting and getting attributes.

Deleted: trunk/root/static/yui/element/element-beta-debug.js
===================================================================
--- trunk/root/static/yui/element/element-beta-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element-beta-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1017 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * Provides Attribute configurations.
- * @namespace YAHOO.util
- * @class Attribute
- * @constructor
- * @param hash {Object} The intial Attribute.
- * @param {YAHOO.util.AttributeProvider} The owner of the Attribute instance.
- */
-
-YAHOO.util.Attribute = function(hash, owner) {
-    if (owner) { 
-        this.owner = owner;
-        this.configure(hash, true);
-    }
-};
-
-YAHOO.util.Attribute.prototype = {
-	/**
-     * The name of the attribute.
-	 * @property name
-	 * @type String
-	 */
-    name: undefined,
-    
-	/**
-     * The value of the attribute.
-	 * @property value
-	 * @type String
-	 */
-    value: null,
-    
-	/**
-     * The owner of the attribute.
-	 * @property owner
-	 * @type YAHOO.util.AttributeProvider
-	 */
-    owner: null,
-    
-	/**
-     * Whether or not the attribute is read only.
-	 * @property readOnly
-	 * @type Boolean
-	 */
-    readOnly: false,
-    
-	/**
-     * Whether or not the attribute can only be written once.
-	 * @property writeOnce
-	 * @type Boolean
-	 */
-    writeOnce: false,
-
-	/**
-     * The attribute's initial configuration.
-     * @private
-	 * @property _initialConfig
-	 * @type Object
-	 */
-    _initialConfig: null,
-    
-	/**
-     * Whether or not the attribute's value has been set.
-     * @private
-	 * @property _written
-	 * @type Boolean
-	 */
-    _written: false,
-    
-	/**
-     * The method to use when setting the attribute's value.
-     * The method recieves the new value as the only argument.
-	 * @property method
-	 * @type Function
-	 */
-    method: null,
-    
-	/**
-     * The validator to use when setting the attribute's value.
-	 * @property validator
-	 * @type Function
-     * @return Boolean
-	 */
-    validator: null,
-    
-    /**
-     * Retrieves the current value of the attribute.
-     * @method getValue
-     * @return {any} The current value of the attribute.
-     */
-    getValue: function() {
-        return this.value;
-    },
-    
-    /**
-     * Sets the value of the attribute and fires beforeChange and change events.
-     * @method setValue
-     * @param {Any} value The value to apply to the attribute.
-     * @param {Boolean} silent If true the change events will not be fired.
-     * @return {Boolean} Whether or not the value was set.
-     */
-    setValue: function(value, silent) {
-        var beforeRetVal;
-        var owner = this.owner;
-        var name = this.name;
-        
-        var event = {
-            type: name, 
-            prevValue: this.getValue(),
-            newValue: value
-        };
-        
-        if (this.readOnly || ( this.writeOnce && this._written) ) {
-            YAHOO.log( 'setValue ' + name + ', ' +  value +
-                    ' failed: read only', 'error', 'Attribute');
-            return false; // write not allowed
-        }
-        
-        if (this.validator && !this.validator.call(owner, value) ) {
-            YAHOO.log( 'setValue ' + name + ', ' + value +
-                    ' validation failed', 'error', 'Attribute');
-            return false; // invalid value
-        }
-
-        if (!silent) {
-            beforeRetVal = owner.fireBeforeChangeEvent(event);
-            if (beforeRetVal === false) {
-                YAHOO.log('setValue ' + name + 
-                        ' cancelled by beforeChange event', 'info', 'Attribute');
-                return false;
-            }
-        }
-
-        if (this.method) {
-            this.method.call(owner, value);
-        }
-        
-        this.value = value;
-        this._written = true;
-        
-        event.type = name;
-        
-        if (!silent) {
-            this.owner.fireChangeEvent(event);
-        }
-        
-        return true;
-    },
-    
-    /**
-     * Allows for configuring the Attribute's properties.
-     * @method configure
-     * @param {Object} map A key-value map of Attribute properties.
-     * @param {Boolean} init Whether or not this should become the initial config.
-     */
-    configure: function(map, init) {
-        map = map || {};
-
-        this._written = false; // reset writeOnce
-        this._initialConfig = this._initialConfig || {};
-        
-        for (var key in map) {
-            if ( map.hasOwnProperty(key) ) {
-                this[key] = map[key];
-                if (init) {
-                    this._initialConfig[key] = map[key];
-                }
-            }
-        }
-    },
-    
-    /**
-     * Resets the value to the initial config value.
-     * @method resetValue
-     * @return {Boolean} Whether or not the value was set.
-     */
-    resetValue: function() {
-        return this.setValue(this._initialConfig.value);
-    },
-    
-    /**
-     * Resets the attribute config to the initial config state.
-     * @method resetConfig
-     */
-    resetConfig: function() {
-        this.configure(this._initialConfig);
-    },
-    
-    /**
-     * Resets the value to the current value.
-     * Useful when values may have gotten out of sync with actual properties.
-     * @method refresh
-     * @return {Boolean} Whether or not the value was set.
-     */
-    refresh: function(silent) {
-        this.setValue(this.value, silent);
-    }
-};
-
-(function() {
-    var Lang = YAHOO.util.Lang;
-
-    /*
-    Copyright (c) 2006, Yahoo! Inc. All rights reserved.
-    Code licensed under the BSD License:
-    http://developer.yahoo.net/yui/license.txt
-    */
-    
-    /**
-     * Provides and manages YAHOO.util.Attribute instances
-     * @namespace YAHOO.util
-     * @class AttributeProvider
-     * @uses YAHOO.util.EventProvider
-     */
-    YAHOO.util.AttributeProvider = function() {};
-
-    YAHOO.util.AttributeProvider.prototype = {
-        
-        /**
-         * A key-value map of Attribute configurations
-         * @property _configs
-         * @protected (may be used by subclasses and augmentors)
-         * @private
-         * @type {Object}
-         */
-        _configs: null,
-        /**
-         * Returns the current value of the attribute.
-         * @method get
-         * @param {String} key The attribute whose value will be returned.
-         * @return {Any} The current value of the attribute.
-         */
-        get: function(key){
-            this._configs = this._configs || {};
-            var config = this._configs[key];
-            
-            if (!config || !this._configs.hasOwnProperty(key)) {
-                YAHOO.log(key + ' not found', 'error', 'AttributeProvider');
-                return undefined;
-            }
-            
-            return config.value;
-        },
-        
-        /**
-         * Sets the value of a config.
-         * @method set
-         * @param {String} key The name of the attribute
-         * @param {Any} value The value to apply to the attribute
-         * @param {Boolean} silent Whether or not to suppress change events
-         * @return {Boolean} Whether or not the value was set.
-         */
-        set: function(key, value, silent){
-            this._configs = this._configs || {};
-            var config = this._configs[key];
-            
-            if (!config) {
-                YAHOO.log('set failed: ' + key + ' not found',
-                        'error', 'AttributeProvider');
-                return false;
-            }
-            
-            return config.setValue(value, silent);
-        },
-    
-        /**
-         * Returns an array of attribute names.
-         * @method getAttributeKeys
-         * @return {Array} An array of attribute names.
-         */
-        getAttributeKeys: function(){
-            this._configs = this._configs;
-            var keys = [];
-            var config;
-            for (var key in this._configs) {
-                config = this._configs[key];
-                if ( Lang.hasOwnProperty(this._configs, key) && 
-                        !Lang.isUndefined(config) ) {
-                    keys[keys.length] = key;
-                }
-            }
-            
-            return keys;
-        },
-        
-        /**
-         * Sets multiple attribute values.
-         * @method setAttributes
-         * @param {Object} map  A key-value map of attributes
-         * @param {Boolean} silent Whether or not to suppress change events
-         */
-        setAttributes: function(map, silent){
-            for (var key in map) {
-                if ( Lang.hasOwnProperty(map, key) ) {
-                    this.set(key, map[key], silent);
-                }
-            }
-        },
-    
-        /**
-         * Resets the specified attribute's value to its initial value.
-         * @method resetValue
-         * @param {String} key The name of the attribute
-         * @param {Boolean} silent Whether or not to suppress change events
-         * @return {Boolean} Whether or not the value was set
-         */
-        resetValue: function(key, silent){
-            this._configs = this._configs || {};
-            if (this._configs[key]) {
-                this.set(key, this._configs[key]._initialConfig.value, silent);
-                return true;
-            }
-            return false;
-        },
-    
-        /**
-         * Sets the attribute's value to its current value.
-         * @method refresh
-         * @param {String | Array} key The attribute(s) to refresh
-         * @param {Boolean} silent Whether or not to suppress change events
-         */
-        refresh: function(key, silent) {
-            this._configs = this._configs || {};
-            var configs = this._configs;
-            
-            key = ( ( Lang.isString(key) ) ? [key] : key ) || 
-                    this.getAttributeKeys();
-            
-            for (var i = 0, len = key.length; i < len; ++i) { 
-                if (configs.hasOwnProperty(key[i])) {
-                    this._configs[key[i]].refresh(silent);
-                }
-            }
-        },
-    
-        /**
-         * Adds an Attribute to the AttributeProvider instance. 
-         * @method register
-         * @param {String} key The attribute's name
-         * @param {Object} map A key-value map containing the
-         * attribute's properties.
-         * @deprecated Use setAttributeConfig
-         */
-        register: function(key, map) {
-            this.setAttributeConfig(key, map);
-        },
-        
-        
-        /**
-         * Returns the attribute's properties.
-         * @method getAttributeConfig
-         * @param {String} key The attribute's name
-         * @private
-         * @return {object} A key-value map containing all of the
-         * attribute's properties.
-         */
-        getAttributeConfig: function(key) {
-            this._configs = this._configs || {};
-            var config = this._configs[key] || {};
-            var map = {}; // returning a copy to prevent overrides
-            
-            for (key in config) {
-                if ( Lang.hasOwnProperty(config, key) ) {
-                    map[key] = config[key];
-                }
-            }
-    
-            return map;
-        },
-        
-        /**
-         * Sets or updates an Attribute instance's properties. 
-         * @method setAttributeConfig
-         * @param {String} key The attribute's name.
-         * @param {Object} map A key-value map of attribute properties
-         * @param {Boolean} init Whether or not this should become the intial config.
-         */
-        setAttributeConfig: function(key, map, init) {
-            this._configs = this._configs || {};
-            map = map || {};
-            if (!this._configs[key]) {
-                map.name = key;
-                this._configs[key] = this.createAttribute(map);
-            } else {
-                this._configs[key].configure(map, init);
-            }
-        },
-        
-        /**
-         * Sets or updates an Attribute instance's properties. 
-         * @method configureAttribute
-         * @param {String} key The attribute's name.
-         * @param {Object} map A key-value map of attribute properties
-         * @param {Boolean} init Whether or not this should become the intial config.
-         * @deprecated Use setAttributeConfig
-         */
-        configureAttribute: function(key, map, init) {
-            this.setAttributeConfig(key, map, init);
-        },
-        
-        /**
-         * Resets an attribute to its intial configuration. 
-         * @method resetAttributeConfig
-         * @param {String} key The attribute's name.
-         * @private
-         */
-        resetAttributeConfig: function(key){
-            this._configs = this._configs || {};
-            this._configs[key].resetConfig();
-        },
-        
-        // wrapper for EventProvider.subscribe
-        // to create events on the fly
-        subscribe: function(type, callback) {
-            this._events = this._events || {};
-
-            if ( !(type in this._events) ) {
-                this._events[type] = this.createEvent(type);
-            }
-
-            YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
-        },
-
-        on: function() {
-            this.subscribe.apply(this, arguments);
-        },
-
-        addListener: function() {
-            this.subscribe.apply(this, arguments);
-        },
-
-        /**
-         * Fires the attribute's beforeChange event. 
-         * @method fireBeforeChangeEvent
-         * @param {String} key The attribute's name.
-         * @param {Obj} e The event object to pass to handlers.
-         */
-        fireBeforeChangeEvent: function(e) {
-            var type = 'before';
-            type += e.type.charAt(0).toUpperCase() + e.type.substr(1) + 'Change';
-            e.type = type;
-            return this.fireEvent(e.type, e);
-        },
-        
-        /**
-         * Fires the attribute's change event. 
-         * @method fireChangeEvent
-         * @param {String} key The attribute's name.
-         * @param {Obj} e The event object to pass to the handlers.
-         */
-        fireChangeEvent: function(e) {
-            e.type += 'Change';
-            return this.fireEvent(e.type, e);
-        },
-
-        createAttribute: function(map) {
-            return new YAHOO.util.Attribute(map, this);
-        }
-    };
-    
-    YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
-})();
-
-(function() {
-// internal shorthand
-var Dom = YAHOO.util.Dom,
-    AttributeProvider = YAHOO.util.AttributeProvider;
-
-/**
- * Element provides an wrapper object to simplify adding
- * event listeners, using dom methods, and managing attributes. 
- * @module element
- * @namespace YAHOO.util
- * @requires yahoo, dom, event
- * @beta
- */
-
-/**
- * Element provides an wrapper object to simplify adding
- * event listeners, using dom methods, and managing attributes. 
- * @class Element
- * @uses YAHOO.util.AttributeProvider
- * @constructor
- * @param el {HTMLElement | String} The html element that 
- * represents the Element.
- * @param {Object} map A key-value map of initial config names and values
- */
-YAHOO.util.Element = function(el, map) {
-    if (arguments.length) {
-        this.init(el, map);
-    }
-};
-
-YAHOO.util.Element.prototype = {
-    /**
-     * Dom events supported by the Element instance.
-     * @property DOM_EVENTS
-     * @type Object
-     */
-    DOM_EVENTS: null,
-
-    /**
-     * Wrapper for HTMLElement method.
-     * @method appendChild
-     * @param {YAHOO.util.Element || HTMLElement} child The element to append. 
-     * @return {HTMLElement} The appended DOM element. 
-     */
-    appendChild: function(child) {
-        child = child.get ? child.get('element') : child;
-        return this.get('element').appendChild(child);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method getElementsByTagName
-     * @param {String} tag The tagName to collect
-     * @return {HTMLCollection} A collection of DOM elements. 
-     */
-    getElementsByTagName: function(tag) {
-        return this.get('element').getElementsByTagName(tag);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method hasChildNodes
-     * @return {Boolean} Whether or not the element has childNodes
-     */
-    hasChildNodes: function() {
-        return this.get('element').hasChildNodes();
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method insertBefore
-     * @param {HTMLElement} element The HTMLElement to insert
-     * @param {HTMLElement} before The HTMLElement to insert
-     * the element before.
-     * @return {HTMLElement} The inserted DOM element. 
-     */
-    insertBefore: function(element, before) {
-        element = element.get ? element.get('element') : element;
-        before = (before && before.get) ? before.get('element') : before;
-        
-        return this.get('element').insertBefore(element, before);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method removeChild
-     * @param {HTMLElement} child The HTMLElement to remove
-     * @return {HTMLElement} The removed DOM element. 
-     */
-    removeChild: function(child) {
-        child = child.get ? child.get('element') : child;
-        return this.get('element').removeChild(child);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method replaceChild
-     * @param {HTMLElement} newNode The HTMLElement to insert
-     * @param {HTMLElement} oldNode The HTMLElement to replace
-     * @return {HTMLElement} The replaced DOM element. 
-     */
-    replaceChild: function(newNode, oldNode) {
-        newNode = newNode.get ? newNode.get('element') : newNode;
-        oldNode = oldNode.get ? oldNode.get('element') : oldNode;
-        return this.get('element').replaceChild(newNode, oldNode);
-    },
-
-    
-    /**
-     * Registers Element specific attributes.
-     * @method initAttributes
-     * @param {Object} map A key-value map of initial attribute configs
-     */
-    initAttributes: function(map) {
-    },
-
-    /**
-     * Adds a listener for the given event.  These may be DOM or 
-     * customEvent listeners.  Any event that is fired via fireEvent
-     * can be listened for.  All handlers receive an event object. 
-     * @method addListener
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The handler to call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    addListener: function(type, fn, obj, scope) {
-        var el = this.get('element') || this.get('id');
-        scope = scope || this;
-        
-        var self = this; 
-        if (!this._events[type]) { // create on the fly
-            if (el && this.DOM_EVENTS[type]) {
-                YAHOO.util.Event.addListener(el, type, function(e) {
-                    if (e.srcElement && !e.target) { // supplement IE with target
-                        e.target = e.srcElement;
-                    }
-                    self.fireEvent(type, e);
-                }, obj, scope);
-            }
-            this.createEvent(type, this);
-        }
-        
-        return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments); // notify via customEvent
-    },
-    
-    
-    /**
-     * Alias for addListener
-     * @method on
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    on: function() {
-        return this.addListener.apply(this, arguments);
-    },
-    
-    /**
-     * Alias for addListener
-     * @method subscribe
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    subscribe: function() {
-        return this.addListener.apply(this, arguments);
-    },
-    
-    /**
-     * Remove an event listener
-     * @method removeListener
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     */
-    removeListener: function(type, fn) {
-        return this.unsubscribe.apply(this, arguments);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method addClass
-     * @param {String} className The className to add
-     */
-    addClass: function(className) {
-        Dom.addClass(this.get('element'), className);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method getElementsByClassName
-     * @param {String} className The className to collect
-     * @param {String} tag (optional) The tag to use in
-     * conjunction with class name
-     * @return {Array} Array of HTMLElements
-     */
-    getElementsByClassName: function(className, tag) {
-        return Dom.getElementsByClassName(className, tag,
-                this.get('element') );
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method hasClass
-     * @param {String} className The className to add
-     * @return {Boolean} Whether or not the element has the class name
-     */
-    hasClass: function(className) {
-        return Dom.hasClass(this.get('element'), className); 
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method removeClass
-     * @param {String} className The className to remove
-     */
-    removeClass: function(className) {
-        return Dom.removeClass(this.get('element'), className);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method replaceClass
-     * @param {String} oldClassName The className to replace
-     * @param {String} newClassName The className to add
-     */
-    replaceClass: function(oldClassName, newClassName) {
-        return Dom.replaceClass(this.get('element'), 
-                oldClassName, newClassName);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method setStyle
-     * @param {String} property The style property to set
-     * @param {String} value The value to apply to the style property
-     */
-    setStyle: function(property, value) {
-        var el = this.get('element');
-        if (!el) {
-            return this._queue[this._queue.length] = ['setStyle', arguments];
-        }
-
-        return Dom.setStyle(el,  property, value); // TODO: always queuing?
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method getStyle
-     * @param {String} property The style property to retrieve
-     * @return {String} The current value of the property
-     */
-    getStyle: function(property) {
-        return Dom.getStyle(this.get('element'),  property);
-    },
-    
-    /**
-     * Apply any queued set calls.
-     * @method fireQueue
-     */
-    fireQueue: function() {
-        var queue = this._queue;
-        for (var i = 0, len = queue.length; i < len; ++i) {
-            this[queue[i][0]].apply(this, queue[i][1]);
-        }
-    },
-    
-    /**
-     * Appends the HTMLElement into either the supplied parentNode.
-     * @method appendTo
-     * @param {HTMLElement | Element} parentNode The node to append to
-     * @param {HTMLElement | Element} before An optional node to insert before
-     * @return {HTMLElement} The appended DOM element. 
-     */
-    appendTo: function(parent, before) {
-        parent = (parent.get) ?  parent.get('element') : Dom.get(parent);
-        
-        this.fireEvent('beforeAppendTo', {
-            type: 'beforeAppendTo',
-            target: parent
-        });
-        
-        
-        before = (before && before.get) ? 
-                before.get('element') : Dom.get(before);
-        var element = this.get('element');
-        
-        if (!element) {
-            YAHOO.log('appendTo failed: element not available',
-                    'error', 'Element');
-            return false;
-        }
-        
-        if (!parent) {
-            YAHOO.log('appendTo failed: parent not available',
-                    'error', 'Element');
-            return false;
-        }
-        
-        if (element.parent != parent) {
-            if (before) {
-                parent.insertBefore(element, before);
-            } else {
-                parent.appendChild(element);
-            }
-        }
-        
-        YAHOO.log(element + 'appended to ' + parent);
-        
-        this.fireEvent('appendTo', {
-            type: 'appendTo',
-            target: parent
-        });
-
-        return element;
-    },
-    
-    get: function(key) {
-        var configs = this._configs || {};
-        var el = configs.element; // avoid loop due to 'element'
-        if (el && !configs[key] && !YAHOO.lang.isUndefined(el.value[key]) ) {
-            return el.value[key];
-        }
-
-        return AttributeProvider.prototype.get.call(this, key);
-    },
-
-    setAttributes: function(map, silent){
-        var el = this.get('element');
-        for (var key in map) {
-            // need to configure if setting unconfigured HTMLElement attribute 
-            if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-                this.setAttributeConfig(key);
-            }
-        }
-
-        // set based on configOrder
-        for (var i = 0, len = this._configOrder.length; i < len; ++i) {
-            if (map[this._configOrder[i]] !== undefined) {
-                this.set(this._configOrder[i], map[this._configOrder[i]], silent);
-            }
-        }
-    },
-
-    set: function(key, value, silent) {
-        var el = this.get('element');
-        if (!el) {
-            this._queue[this._queue.length] = ['set', arguments];
-            if (this._configs[key]) {
-                this._configs[key].value = value; // so "get" works while queueing
-            
-            }
-            return;
-        }
-        
-        // set it on the element if not configured and is an HTML attribute
-        if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-            _registerHTMLAttr.call(this, key);
-        }
-
-        return AttributeProvider.prototype.set.apply(this, arguments);
-    },
-    
-    setAttributeConfig: function(key, map, init) {
-        var el = this.get('element');
-
-        if (el && !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-            _registerHTMLAttr.call(this, key, map);
-        } else {
-            AttributeProvider.prototype.setAttributeConfig.apply(this, arguments);
-        }
-        this._configOrder.push(key);
-    },
-    
-    getAttributeKeys: function() {
-        var el = this.get('element');
-        var keys = AttributeProvider.prototype.getAttributeKeys.call(this);
-        
-        //add any unconfigured element keys
-        for (var key in el) {
-            if (!this._configs[key]) {
-                keys[key] = keys[key] || el[key];
-            }
-        }
-        
-        return keys;
-    },
-
-    createEvent: function(type, scope) {
-        this._events[type] = true;
-        AttributeProvider.prototype.createEvent.apply(this, arguments);
-    },
-    
-    init: function(el, attr) {
-        _initElement.apply(this, arguments); 
-    }
-};
-
-var _initElement = function(el, attr) {
-    this._queue = this._queue || [];
-    this._events = this._events || {};
-    this._configs = this._configs || {};
-    this._configOrder = []; 
-    attr = attr || {};
-    attr.element = attr.element || el || null;
-
-    this.DOM_EVENTS = {
-        'click': true,
-        'dblclick': true,
-        'keydown': true,
-        'keypress': true,
-        'keyup': true,
-        'mousedown': true,
-        'mousemove': true,
-        'mouseout': true, 
-        'mouseover': true, 
-        'mouseup': true,
-        'focus': true,
-        'blur': true,
-        'submit': true
-    };
-
-    var isReady = false;  // to determine when to init HTMLElement and content
-
-    if (typeof attr.element === 'string') { // register ID for get() access
-        _registerHTMLAttr.call(this, 'id', { value: attr.element });
-    }
-
-    if (Dom.get(attr.element)) {
-        isReady = true;
-        _initHTMLElement.call(this, attr);
-        _initContent.call(this, attr);
-    }
-
-    YAHOO.util.Event.onAvailable(attr.element, function() {
-        if (!isReady) { // otherwise already done
-            _initHTMLElement.call(this, attr);
-        }
-
-        this.fireEvent('available', { type: 'available', target: Dom.get(attr.element) });  
-    }, this, true);
-    
-    YAHOO.util.Event.onContentReady(attr.element, function() {
-        if (!isReady) { // otherwise already done
-            _initContent.call(this, attr);
-        }
-        this.fireEvent('contentReady', { type: 'contentReady', target: Dom.get(attr.element) });  
-    }, this, true);
-};
-
-var _initHTMLElement = function(attr) {
-    /**
-     * The HTMLElement the Element instance refers to.
-     * @attribute element
-     * @type HTMLElement
-     */
-    this.setAttributeConfig('element', {
-        value: Dom.get(attr.element),
-        readOnly: true
-     });
-};
-
-var _initContent = function(attr) {
-    this.initAttributes(attr);
-    this.setAttributes(attr, true);
-    this.fireQueue();
-
-};
-
-/**
- * Sets the value of the property and fires beforeChange and change events.
- * @private
- * @method _registerHTMLAttr
- * @param {YAHOO.util.Element} element The Element instance to
- * register the config to.
- * @param {String} key The name of the config to register
- * @param {Object} map A key-value map of the config's params
- */
-var _registerHTMLAttr = function(key, map) {
-    var el = this.get('element');
-    map = map || {};
-    map.name = key;
-    map.method = map.method || function(value) {
-        if (el) {
-            el[key] = value;
-        }
-    };
-    map.value = map.value || el[key];
-    this._configs[key] = new YAHOO.util.Attribute(map, this);
-};
-
-/**
- * Fires when the Element's HTMLElement can be retrieved by Id.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> available<br>
- * <code><HTMLElement>
- * target</code> the HTMLElement bound to this Element instance<br>
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('available', handler);</code></p>
- * @event available
- */
- 
-/**
- * Fires when the Element's HTMLElement subtree is rendered.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> contentReady<br>
- * <code><HTMLElement>
- * target</code> the HTMLElement bound to this Element instance<br>
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('contentReady', handler);</code></p>
- * @event contentReady
- */
-
-/**
- * Fires before the Element is appended to another Element.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> beforeAppendTo<br>
- * <code><HTMLElement/Element>
- * target</code> the HTMLElement/Element being appended to 
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('beforeAppendTo', handler);</code></p>
- * @event beforeAppendTo
- */
-
-/**
- * Fires after the Element is appended to another Element.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> appendTo<br>
- * <code><HTMLElement/Element>
- * target</code> the HTMLElement/Element being appended to 
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('appendTo', handler);</code></p>
- * @event appendTo
- */
-
-YAHOO.augment(YAHOO.util.Element, AttributeProvider);
-})();
-
-YAHOO.register("element", YAHOO.util.Element, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/element/element-beta-min.js
===================================================================
--- trunk/root/static/yui/element/element-beta-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element-beta-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,validator:null,getValue:function(){return this.value;},setValue:function(F,B){var E;var A=this.owner;var C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.method){this.method.call(A,F);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};this._written=false;this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfi!
 g:function(){this.configure(this._initialConfig);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return undefined;}return B.value;},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var D=[];var B;for(var C in this._configs){B=this._configs[C];if(A.hasOwnProperty(this._configs,C)&&!A.isUndefined(B)){D[D.length]=C;}}return D;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs!
 =this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:!
 E)||this
.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBef!
 oreChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var D=YAHOO.util.Dom,F=YAHOO.util.AttributeProvider;YAHOO.util.Element=function(G,H){if(arguments.length){this.init(G,H);}};YAHOO.util.Element.prototype={DOM_EVENTS:null,appendChild:function(G){G=G.get?G.get("element"):G;return this.get("element").appendChild(G);},getElementsByTagName:function(G){return this.get("element").getElementsByTagName(G);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(G,H){G=G.get?G.get("element"):G;H=(H&&H.get)?H.get("element"):H;return this.get("element").insertBefore(G,H);},removeChild:function(G){G=G.get?G.get("element"):G;re!
 turn this.get("element").removeChild(G);},replaceChild:functio!
 n(G,H){G
=G.get?G.get("element"):G;H=H.get?H.get("element"):H;return this.get("element").replaceChild(G,H);},initAttributes:function(G){},addListener:function(K,J,L,I){var H=this.get("element")||this.get("id");I=I||this;var G=this;if(!this._events[K]){if(H&&this.DOM_EVENTS[K]){YAHOO.util.Event.addListener(H,K,function(M){if(M.srcElement&&!M.target){M.target=M.srcElement;}G.fireEvent(K,M);},L,I);}this.createEvent(K,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(H,G){return this.unsubscribe.apply(this,arguments);},addClass:function(G){D.addClass(this.get("element"),G);},getElementsByClassName:function(H,G){return D.getElementsByClassName(H,G,this.get("element"));},hasClass:function(G){return D.hasClass(this.get("element"),G);},removeClass:function(G){return D.removeClass(this.get("element"),G);},re!
 placeClass:function(H,G){return D.replaceClass(this.get("element"),H,G);},setStyle:function(I,H){var G=this.get("element");if(!G){return this._queue[this._queue.length]=["setStyle",arguments];}return D.setStyle(G,I,H);},getStyle:function(G){return D.getStyle(this.get("element"),G);},fireQueue:function(){var H=this._queue;for(var I=0,G=H.length;I<G;++I){this[H[I][0]].apply(this,H[I][1]);}},appendTo:function(H,I){H=(H.get)?H.get("element"):D.get(H);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:H});I=(I&&I.get)?I.get("element"):D.get(I);var G=this.get("element");if(!G){return false;}if(!H){return false;}if(G.parent!=H){if(I){H.insertBefore(G,I);}else{H.appendChild(G);}}this.fireEvent("appendTo",{type:"appendTo",target:H});return G;},get:function(G){var I=this._configs||{};var H=I.element;if(H&&!I[G]&&!YAHOO.lang.isUndefined(H.value[G])){return H.value[G];}return F.prototype.get.call(this,G);},setAttributes:function(L,H){var K=this.get("element");
-for(var J in L){if(!this._configs[J]&&!YAHOO.lang.isUndefined(K[J])){this.setAttributeConfig(J);}}for(var I=0,G=this._configOrder.length;I<G;++I){if(L[this._configOrder[I]]!==undefined){this.set(this._configOrder[I],L[this._configOrder[I]],H);}}},set:function(H,J,G){var I=this.get("element");if(!I){this._queue[this._queue.length]=["set",arguments];if(this._configs[H]){this._configs[H].value=J;}return ;}if(!this._configs[H]&&!YAHOO.lang.isUndefined(I[H])){C.call(this,H);}return F.prototype.set.apply(this,arguments);},setAttributeConfig:function(G,I,J){var H=this.get("element");if(H&&!this._configs[G]&&!YAHOO.lang.isUndefined(H[G])){C.call(this,G,I);}else{F.prototype.setAttributeConfig.apply(this,arguments);}this._configOrder.push(G);},getAttributeKeys:function(){var H=this.get("element");var I=F.prototype.getAttributeKeys.call(this);for(var G in H){if(!this._configs[G]){I[G]=I[G]||H[G];}}return I;},createEvent:function(H,G){this._events[H]=true;F.prototype.createEvent.apply(!
 this,arguments);},init:function(H,G){A.apply(this,arguments);}};var A=function(H,G){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];G=G||{};G.element=G.element||H||null;this.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true};var I=false;if(typeof G.element==="string"){C.call(this,"id",{value:G.element});}if(D.get(G.element)){I=true;E.call(this,G);B.call(this,G);}YAHOO.util.Event.onAvailable(G.element,function(){if(!I){E.call(this,G);}this.fireEvent("available",{type:"available",target:D.get(G.element)});},this,true);YAHOO.util.Event.onContentReady(G.element,function(){if(!I){B.call(this,G);}this.fireEvent("contentReady",{type:"contentReady",target:D.get(G.element)});},this,true);};var E=function(G){this.setAttributeConfig("element",{value:D.get(G.element),rea!
 dOnly:true});};var B=function(G){this.initAttributes(G);this.s!
 etAttrib
utes(G,true);this.fireQueue();};var C=function(G,I){var H=this.get("element");I=I||{};I.name=G;I.method=I.method||function(J){if(H){H[G]=J;}};I.value=I.value||H[G];this._configs[G]=new YAHOO.util.Attribute(I,this);};YAHOO.augment(YAHOO.util.Element,F);})();YAHOO.register("element",YAHOO.util.Element,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/element/element-beta.js
===================================================================
--- trunk/root/static/yui/element/element-beta.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element-beta.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1003 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * Provides Attribute configurations.
- * @namespace YAHOO.util
- * @class Attribute
- * @constructor
- * @param hash {Object} The intial Attribute.
- * @param {YAHOO.util.AttributeProvider} The owner of the Attribute instance.
- */
-
-YAHOO.util.Attribute = function(hash, owner) {
-    if (owner) { 
-        this.owner = owner;
-        this.configure(hash, true);
-    }
-};
-
-YAHOO.util.Attribute.prototype = {
-	/**
-     * The name of the attribute.
-	 * @property name
-	 * @type String
-	 */
-    name: undefined,
-    
-	/**
-     * The value of the attribute.
-	 * @property value
-	 * @type String
-	 */
-    value: null,
-    
-	/**
-     * The owner of the attribute.
-	 * @property owner
-	 * @type YAHOO.util.AttributeProvider
-	 */
-    owner: null,
-    
-	/**
-     * Whether or not the attribute is read only.
-	 * @property readOnly
-	 * @type Boolean
-	 */
-    readOnly: false,
-    
-	/**
-     * Whether or not the attribute can only be written once.
-	 * @property writeOnce
-	 * @type Boolean
-	 */
-    writeOnce: false,
-
-	/**
-     * The attribute's initial configuration.
-     * @private
-	 * @property _initialConfig
-	 * @type Object
-	 */
-    _initialConfig: null,
-    
-	/**
-     * Whether or not the attribute's value has been set.
-     * @private
-	 * @property _written
-	 * @type Boolean
-	 */
-    _written: false,
-    
-	/**
-     * The method to use when setting the attribute's value.
-     * The method recieves the new value as the only argument.
-	 * @property method
-	 * @type Function
-	 */
-    method: null,
-    
-	/**
-     * The validator to use when setting the attribute's value.
-	 * @property validator
-	 * @type Function
-     * @return Boolean
-	 */
-    validator: null,
-    
-    /**
-     * Retrieves the current value of the attribute.
-     * @method getValue
-     * @return {any} The current value of the attribute.
-     */
-    getValue: function() {
-        return this.value;
-    },
-    
-    /**
-     * Sets the value of the attribute and fires beforeChange and change events.
-     * @method setValue
-     * @param {Any} value The value to apply to the attribute.
-     * @param {Boolean} silent If true the change events will not be fired.
-     * @return {Boolean} Whether or not the value was set.
-     */
-    setValue: function(value, silent) {
-        var beforeRetVal;
-        var owner = this.owner;
-        var name = this.name;
-        
-        var event = {
-            type: name, 
-            prevValue: this.getValue(),
-            newValue: value
-        };
-        
-        if (this.readOnly || ( this.writeOnce && this._written) ) {
-            return false; // write not allowed
-        }
-        
-        if (this.validator && !this.validator.call(owner, value) ) {
-            return false; // invalid value
-        }
-
-        if (!silent) {
-            beforeRetVal = owner.fireBeforeChangeEvent(event);
-            if (beforeRetVal === false) {
-                return false;
-            }
-        }
-
-        if (this.method) {
-            this.method.call(owner, value);
-        }
-        
-        this.value = value;
-        this._written = true;
-        
-        event.type = name;
-        
-        if (!silent) {
-            this.owner.fireChangeEvent(event);
-        }
-        
-        return true;
-    },
-    
-    /**
-     * Allows for configuring the Attribute's properties.
-     * @method configure
-     * @param {Object} map A key-value map of Attribute properties.
-     * @param {Boolean} init Whether or not this should become the initial config.
-     */
-    configure: function(map, init) {
-        map = map || {};
-
-        this._written = false; // reset writeOnce
-        this._initialConfig = this._initialConfig || {};
-        
-        for (var key in map) {
-            if ( map.hasOwnProperty(key) ) {
-                this[key] = map[key];
-                if (init) {
-                    this._initialConfig[key] = map[key];
-                }
-            }
-        }
-    },
-    
-    /**
-     * Resets the value to the initial config value.
-     * @method resetValue
-     * @return {Boolean} Whether or not the value was set.
-     */
-    resetValue: function() {
-        return this.setValue(this._initialConfig.value);
-    },
-    
-    /**
-     * Resets the attribute config to the initial config state.
-     * @method resetConfig
-     */
-    resetConfig: function() {
-        this.configure(this._initialConfig);
-    },
-    
-    /**
-     * Resets the value to the current value.
-     * Useful when values may have gotten out of sync with actual properties.
-     * @method refresh
-     * @return {Boolean} Whether or not the value was set.
-     */
-    refresh: function(silent) {
-        this.setValue(this.value, silent);
-    }
-};
-
-(function() {
-    var Lang = YAHOO.util.Lang;
-
-    /*
-    Copyright (c) 2006, Yahoo! Inc. All rights reserved.
-    Code licensed under the BSD License:
-    http://developer.yahoo.net/yui/license.txt
-    */
-    
-    /**
-     * Provides and manages YAHOO.util.Attribute instances
-     * @namespace YAHOO.util
-     * @class AttributeProvider
-     * @uses YAHOO.util.EventProvider
-     */
-    YAHOO.util.AttributeProvider = function() {};
-
-    YAHOO.util.AttributeProvider.prototype = {
-        
-        /**
-         * A key-value map of Attribute configurations
-         * @property _configs
-         * @protected (may be used by subclasses and augmentors)
-         * @private
-         * @type {Object}
-         */
-        _configs: null,
-        /**
-         * Returns the current value of the attribute.
-         * @method get
-         * @param {String} key The attribute whose value will be returned.
-         * @return {Any} The current value of the attribute.
-         */
-        get: function(key){
-            this._configs = this._configs || {};
-            var config = this._configs[key];
-            
-            if (!config || !this._configs.hasOwnProperty(key)) {
-                return undefined;
-            }
-            
-            return config.value;
-        },
-        
-        /**
-         * Sets the value of a config.
-         * @method set
-         * @param {String} key The name of the attribute
-         * @param {Any} value The value to apply to the attribute
-         * @param {Boolean} silent Whether or not to suppress change events
-         * @return {Boolean} Whether or not the value was set.
-         */
-        set: function(key, value, silent){
-            this._configs = this._configs || {};
-            var config = this._configs[key];
-            
-            if (!config) {
-                return false;
-            }
-            
-            return config.setValue(value, silent);
-        },
-    
-        /**
-         * Returns an array of attribute names.
-         * @method getAttributeKeys
-         * @return {Array} An array of attribute names.
-         */
-        getAttributeKeys: function(){
-            this._configs = this._configs;
-            var keys = [];
-            var config;
-            for (var key in this._configs) {
-                config = this._configs[key];
-                if ( Lang.hasOwnProperty(this._configs, key) && 
-                        !Lang.isUndefined(config) ) {
-                    keys[keys.length] = key;
-                }
-            }
-            
-            return keys;
-        },
-        
-        /**
-         * Sets multiple attribute values.
-         * @method setAttributes
-         * @param {Object} map  A key-value map of attributes
-         * @param {Boolean} silent Whether or not to suppress change events
-         */
-        setAttributes: function(map, silent){
-            for (var key in map) {
-                if ( Lang.hasOwnProperty(map, key) ) {
-                    this.set(key, map[key], silent);
-                }
-            }
-        },
-    
-        /**
-         * Resets the specified attribute's value to its initial value.
-         * @method resetValue
-         * @param {String} key The name of the attribute
-         * @param {Boolean} silent Whether or not to suppress change events
-         * @return {Boolean} Whether or not the value was set
-         */
-        resetValue: function(key, silent){
-            this._configs = this._configs || {};
-            if (this._configs[key]) {
-                this.set(key, this._configs[key]._initialConfig.value, silent);
-                return true;
-            }
-            return false;
-        },
-    
-        /**
-         * Sets the attribute's value to its current value.
-         * @method refresh
-         * @param {String | Array} key The attribute(s) to refresh
-         * @param {Boolean} silent Whether or not to suppress change events
-         */
-        refresh: function(key, silent) {
-            this._configs = this._configs || {};
-            var configs = this._configs;
-            
-            key = ( ( Lang.isString(key) ) ? [key] : key ) || 
-                    this.getAttributeKeys();
-            
-            for (var i = 0, len = key.length; i < len; ++i) { 
-                if (configs.hasOwnProperty(key[i])) {
-                    this._configs[key[i]].refresh(silent);
-                }
-            }
-        },
-    
-        /**
-         * Adds an Attribute to the AttributeProvider instance. 
-         * @method register
-         * @param {String} key The attribute's name
-         * @param {Object} map A key-value map containing the
-         * attribute's properties.
-         * @deprecated Use setAttributeConfig
-         */
-        register: function(key, map) {
-            this.setAttributeConfig(key, map);
-        },
-        
-        
-        /**
-         * Returns the attribute's properties.
-         * @method getAttributeConfig
-         * @param {String} key The attribute's name
-         * @private
-         * @return {object} A key-value map containing all of the
-         * attribute's properties.
-         */
-        getAttributeConfig: function(key) {
-            this._configs = this._configs || {};
-            var config = this._configs[key] || {};
-            var map = {}; // returning a copy to prevent overrides
-            
-            for (key in config) {
-                if ( Lang.hasOwnProperty(config, key) ) {
-                    map[key] = config[key];
-                }
-            }
-    
-            return map;
-        },
-        
-        /**
-         * Sets or updates an Attribute instance's properties. 
-         * @method setAttributeConfig
-         * @param {String} key The attribute's name.
-         * @param {Object} map A key-value map of attribute properties
-         * @param {Boolean} init Whether or not this should become the intial config.
-         */
-        setAttributeConfig: function(key, map, init) {
-            this._configs = this._configs || {};
-            map = map || {};
-            if (!this._configs[key]) {
-                map.name = key;
-                this._configs[key] = this.createAttribute(map);
-            } else {
-                this._configs[key].configure(map, init);
-            }
-        },
-        
-        /**
-         * Sets or updates an Attribute instance's properties. 
-         * @method configureAttribute
-         * @param {String} key The attribute's name.
-         * @param {Object} map A key-value map of attribute properties
-         * @param {Boolean} init Whether or not this should become the intial config.
-         * @deprecated Use setAttributeConfig
-         */
-        configureAttribute: function(key, map, init) {
-            this.setAttributeConfig(key, map, init);
-        },
-        
-        /**
-         * Resets an attribute to its intial configuration. 
-         * @method resetAttributeConfig
-         * @param {String} key The attribute's name.
-         * @private
-         */
-        resetAttributeConfig: function(key){
-            this._configs = this._configs || {};
-            this._configs[key].resetConfig();
-        },
-        
-        // wrapper for EventProvider.subscribe
-        // to create events on the fly
-        subscribe: function(type, callback) {
-            this._events = this._events || {};
-
-            if ( !(type in this._events) ) {
-                this._events[type] = this.createEvent(type);
-            }
-
-            YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
-        },
-
-        on: function() {
-            this.subscribe.apply(this, arguments);
-        },
-
-        addListener: function() {
-            this.subscribe.apply(this, arguments);
-        },
-
-        /**
-         * Fires the attribute's beforeChange event. 
-         * @method fireBeforeChangeEvent
-         * @param {String} key The attribute's name.
-         * @param {Obj} e The event object to pass to handlers.
-         */
-        fireBeforeChangeEvent: function(e) {
-            var type = 'before';
-            type += e.type.charAt(0).toUpperCase() + e.type.substr(1) + 'Change';
-            e.type = type;
-            return this.fireEvent(e.type, e);
-        },
-        
-        /**
-         * Fires the attribute's change event. 
-         * @method fireChangeEvent
-         * @param {String} key The attribute's name.
-         * @param {Obj} e The event object to pass to the handlers.
-         */
-        fireChangeEvent: function(e) {
-            e.type += 'Change';
-            return this.fireEvent(e.type, e);
-        },
-
-        createAttribute: function(map) {
-            return new YAHOO.util.Attribute(map, this);
-        }
-    };
-    
-    YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
-})();
-
-(function() {
-// internal shorthand
-var Dom = YAHOO.util.Dom,
-    AttributeProvider = YAHOO.util.AttributeProvider;
-
-/**
- * Element provides an wrapper object to simplify adding
- * event listeners, using dom methods, and managing attributes. 
- * @module element
- * @namespace YAHOO.util
- * @requires yahoo, dom, event
- * @beta
- */
-
-/**
- * Element provides an wrapper object to simplify adding
- * event listeners, using dom methods, and managing attributes. 
- * @class Element
- * @uses YAHOO.util.AttributeProvider
- * @constructor
- * @param el {HTMLElement | String} The html element that 
- * represents the Element.
- * @param {Object} map A key-value map of initial config names and values
- */
-YAHOO.util.Element = function(el, map) {
-    if (arguments.length) {
-        this.init(el, map);
-    }
-};
-
-YAHOO.util.Element.prototype = {
-    /**
-     * Dom events supported by the Element instance.
-     * @property DOM_EVENTS
-     * @type Object
-     */
-    DOM_EVENTS: null,
-
-    /**
-     * Wrapper for HTMLElement method.
-     * @method appendChild
-     * @param {YAHOO.util.Element || HTMLElement} child The element to append. 
-     * @return {HTMLElement} The appended DOM element. 
-     */
-    appendChild: function(child) {
-        child = child.get ? child.get('element') : child;
-        return this.get('element').appendChild(child);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method getElementsByTagName
-     * @param {String} tag The tagName to collect
-     * @return {HTMLCollection} A collection of DOM elements. 
-     */
-    getElementsByTagName: function(tag) {
-        return this.get('element').getElementsByTagName(tag);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method hasChildNodes
-     * @return {Boolean} Whether or not the element has childNodes
-     */
-    hasChildNodes: function() {
-        return this.get('element').hasChildNodes();
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method insertBefore
-     * @param {HTMLElement} element The HTMLElement to insert
-     * @param {HTMLElement} before The HTMLElement to insert
-     * the element before.
-     * @return {HTMLElement} The inserted DOM element. 
-     */
-    insertBefore: function(element, before) {
-        element = element.get ? element.get('element') : element;
-        before = (before && before.get) ? before.get('element') : before;
-        
-        return this.get('element').insertBefore(element, before);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method removeChild
-     * @param {HTMLElement} child The HTMLElement to remove
-     * @return {HTMLElement} The removed DOM element. 
-     */
-    removeChild: function(child) {
-        child = child.get ? child.get('element') : child;
-        return this.get('element').removeChild(child);
-    },
-    
-    /**
-     * Wrapper for HTMLElement method.
-     * @method replaceChild
-     * @param {HTMLElement} newNode The HTMLElement to insert
-     * @param {HTMLElement} oldNode The HTMLElement to replace
-     * @return {HTMLElement} The replaced DOM element. 
-     */
-    replaceChild: function(newNode, oldNode) {
-        newNode = newNode.get ? newNode.get('element') : newNode;
-        oldNode = oldNode.get ? oldNode.get('element') : oldNode;
-        return this.get('element').replaceChild(newNode, oldNode);
-    },
-
-    
-    /**
-     * Registers Element specific attributes.
-     * @method initAttributes
-     * @param {Object} map A key-value map of initial attribute configs
-     */
-    initAttributes: function(map) {
-    },
-
-    /**
-     * Adds a listener for the given event.  These may be DOM or 
-     * customEvent listeners.  Any event that is fired via fireEvent
-     * can be listened for.  All handlers receive an event object. 
-     * @method addListener
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The handler to call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    addListener: function(type, fn, obj, scope) {
-        var el = this.get('element') || this.get('id');
-        scope = scope || this;
-        
-        var self = this; 
-        if (!this._events[type]) { // create on the fly
-            if (el && this.DOM_EVENTS[type]) {
-                YAHOO.util.Event.addListener(el, type, function(e) {
-                    if (e.srcElement && !e.target) { // supplement IE with target
-                        e.target = e.srcElement;
-                    }
-                    self.fireEvent(type, e);
-                }, obj, scope);
-            }
-            this.createEvent(type, this);
-        }
-        
-        return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments); // notify via customEvent
-    },
-    
-    
-    /**
-     * Alias for addListener
-     * @method on
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    on: function() {
-        return this.addListener.apply(this, arguments);
-    },
-    
-    /**
-     * Alias for addListener
-     * @method subscribe
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     * @param {Any} obj A variable to pass to the handler
-     * @param {Object} scope The object to use for the scope of the handler 
-     */
-    subscribe: function() {
-        return this.addListener.apply(this, arguments);
-    },
-    
-    /**
-     * Remove an event listener
-     * @method removeListener
-     * @param {String} type The name of the event to listen for
-     * @param {Function} fn The function call when the event fires
-     */
-    removeListener: function(type, fn) {
-        return this.unsubscribe.apply(this, arguments);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method addClass
-     * @param {String} className The className to add
-     */
-    addClass: function(className) {
-        Dom.addClass(this.get('element'), className);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method getElementsByClassName
-     * @param {String} className The className to collect
-     * @param {String} tag (optional) The tag to use in
-     * conjunction with class name
-     * @return {Array} Array of HTMLElements
-     */
-    getElementsByClassName: function(className, tag) {
-        return Dom.getElementsByClassName(className, tag,
-                this.get('element') );
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method hasClass
-     * @param {String} className The className to add
-     * @return {Boolean} Whether or not the element has the class name
-     */
-    hasClass: function(className) {
-        return Dom.hasClass(this.get('element'), className); 
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method removeClass
-     * @param {String} className The className to remove
-     */
-    removeClass: function(className) {
-        return Dom.removeClass(this.get('element'), className);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method replaceClass
-     * @param {String} oldClassName The className to replace
-     * @param {String} newClassName The className to add
-     */
-    replaceClass: function(oldClassName, newClassName) {
-        return Dom.replaceClass(this.get('element'), 
-                oldClassName, newClassName);
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method setStyle
-     * @param {String} property The style property to set
-     * @param {String} value The value to apply to the style property
-     */
-    setStyle: function(property, value) {
-        var el = this.get('element');
-        if (!el) {
-            return this._queue[this._queue.length] = ['setStyle', arguments];
-        }
-
-        return Dom.setStyle(el,  property, value); // TODO: always queuing?
-    },
-    
-    /**
-     * Wrapper for Dom method.
-     * @method getStyle
-     * @param {String} property The style property to retrieve
-     * @return {String} The current value of the property
-     */
-    getStyle: function(property) {
-        return Dom.getStyle(this.get('element'),  property);
-    },
-    
-    /**
-     * Apply any queued set calls.
-     * @method fireQueue
-     */
-    fireQueue: function() {
-        var queue = this._queue;
-        for (var i = 0, len = queue.length; i < len; ++i) {
-            this[queue[i][0]].apply(this, queue[i][1]);
-        }
-    },
-    
-    /**
-     * Appends the HTMLElement into either the supplied parentNode.
-     * @method appendTo
-     * @param {HTMLElement | Element} parentNode The node to append to
-     * @param {HTMLElement | Element} before An optional node to insert before
-     * @return {HTMLElement} The appended DOM element. 
-     */
-    appendTo: function(parent, before) {
-        parent = (parent.get) ?  parent.get('element') : Dom.get(parent);
-        
-        this.fireEvent('beforeAppendTo', {
-            type: 'beforeAppendTo',
-            target: parent
-        });
-        
-        
-        before = (before && before.get) ? 
-                before.get('element') : Dom.get(before);
-        var element = this.get('element');
-        
-        if (!element) {
-            return false;
-        }
-        
-        if (!parent) {
-            return false;
-        }
-        
-        if (element.parent != parent) {
-            if (before) {
-                parent.insertBefore(element, before);
-            } else {
-                parent.appendChild(element);
-            }
-        }
-        
-        
-        this.fireEvent('appendTo', {
-            type: 'appendTo',
-            target: parent
-        });
-
-        return element;
-    },
-    
-    get: function(key) {
-        var configs = this._configs || {};
-        var el = configs.element; // avoid loop due to 'element'
-        if (el && !configs[key] && !YAHOO.lang.isUndefined(el.value[key]) ) {
-            return el.value[key];
-        }
-
-        return AttributeProvider.prototype.get.call(this, key);
-    },
-
-    setAttributes: function(map, silent){
-        var el = this.get('element');
-        for (var key in map) {
-            // need to configure if setting unconfigured HTMLElement attribute 
-            if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-                this.setAttributeConfig(key);
-            }
-        }
-
-        // set based on configOrder
-        for (var i = 0, len = this._configOrder.length; i < len; ++i) {
-            if (map[this._configOrder[i]] !== undefined) {
-                this.set(this._configOrder[i], map[this._configOrder[i]], silent);
-            }
-        }
-    },
-
-    set: function(key, value, silent) {
-        var el = this.get('element');
-        if (!el) {
-            this._queue[this._queue.length] = ['set', arguments];
-            if (this._configs[key]) {
-                this._configs[key].value = value; // so "get" works while queueing
-            
-            }
-            return;
-        }
-        
-        // set it on the element if not configured and is an HTML attribute
-        if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-            _registerHTMLAttr.call(this, key);
-        }
-
-        return AttributeProvider.prototype.set.apply(this, arguments);
-    },
-    
-    setAttributeConfig: function(key, map, init) {
-        var el = this.get('element');
-
-        if (el && !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
-            _registerHTMLAttr.call(this, key, map);
-        } else {
-            AttributeProvider.prototype.setAttributeConfig.apply(this, arguments);
-        }
-        this._configOrder.push(key);
-    },
-    
-    getAttributeKeys: function() {
-        var el = this.get('element');
-        var keys = AttributeProvider.prototype.getAttributeKeys.call(this);
-        
-        //add any unconfigured element keys
-        for (var key in el) {
-            if (!this._configs[key]) {
-                keys[key] = keys[key] || el[key];
-            }
-        }
-        
-        return keys;
-    },
-
-    createEvent: function(type, scope) {
-        this._events[type] = true;
-        AttributeProvider.prototype.createEvent.apply(this, arguments);
-    },
-    
-    init: function(el, attr) {
-        _initElement.apply(this, arguments); 
-    }
-};
-
-var _initElement = function(el, attr) {
-    this._queue = this._queue || [];
-    this._events = this._events || {};
-    this._configs = this._configs || {};
-    this._configOrder = []; 
-    attr = attr || {};
-    attr.element = attr.element || el || null;
-
-    this.DOM_EVENTS = {
-        'click': true,
-        'dblclick': true,
-        'keydown': true,
-        'keypress': true,
-        'keyup': true,
-        'mousedown': true,
-        'mousemove': true,
-        'mouseout': true, 
-        'mouseover': true, 
-        'mouseup': true,
-        'focus': true,
-        'blur': true,
-        'submit': true
-    };
-
-    var isReady = false;  // to determine when to init HTMLElement and content
-
-    if (typeof attr.element === 'string') { // register ID for get() access
-        _registerHTMLAttr.call(this, 'id', { value: attr.element });
-    }
-
-    if (Dom.get(attr.element)) {
-        isReady = true;
-        _initHTMLElement.call(this, attr);
-        _initContent.call(this, attr);
-    }
-
-    YAHOO.util.Event.onAvailable(attr.element, function() {
-        if (!isReady) { // otherwise already done
-            _initHTMLElement.call(this, attr);
-        }
-
-        this.fireEvent('available', { type: 'available', target: Dom.get(attr.element) });  
-    }, this, true);
-    
-    YAHOO.util.Event.onContentReady(attr.element, function() {
-        if (!isReady) { // otherwise already done
-            _initContent.call(this, attr);
-        }
-        this.fireEvent('contentReady', { type: 'contentReady', target: Dom.get(attr.element) });  
-    }, this, true);
-};
-
-var _initHTMLElement = function(attr) {
-    /**
-     * The HTMLElement the Element instance refers to.
-     * @attribute element
-     * @type HTMLElement
-     */
-    this.setAttributeConfig('element', {
-        value: Dom.get(attr.element),
-        readOnly: true
-     });
-};
-
-var _initContent = function(attr) {
-    this.initAttributes(attr);
-    this.setAttributes(attr, true);
-    this.fireQueue();
-
-};
-
-/**
- * Sets the value of the property and fires beforeChange and change events.
- * @private
- * @method _registerHTMLAttr
- * @param {YAHOO.util.Element} element The Element instance to
- * register the config to.
- * @param {String} key The name of the config to register
- * @param {Object} map A key-value map of the config's params
- */
-var _registerHTMLAttr = function(key, map) {
-    var el = this.get('element');
-    map = map || {};
-    map.name = key;
-    map.method = map.method || function(value) {
-        if (el) {
-            el[key] = value;
-        }
-    };
-    map.value = map.value || el[key];
-    this._configs[key] = new YAHOO.util.Attribute(map, this);
-};
-
-/**
- * Fires when the Element's HTMLElement can be retrieved by Id.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> available<br>
- * <code><HTMLElement>
- * target</code> the HTMLElement bound to this Element instance<br>
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('available', handler);</code></p>
- * @event available
- */
- 
-/**
- * Fires when the Element's HTMLElement subtree is rendered.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> contentReady<br>
- * <code><HTMLElement>
- * target</code> the HTMLElement bound to this Element instance<br>
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('contentReady', handler);</code></p>
- * @event contentReady
- */
-
-/**
- * Fires before the Element is appended to another Element.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> beforeAppendTo<br>
- * <code><HTMLElement/Element>
- * target</code> the HTMLElement/Element being appended to 
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('beforeAppendTo', handler);</code></p>
- * @event beforeAppendTo
- */
-
-/**
- * Fires after the Element is appended to another Element.
- * <p>See: <a href="#addListener">Element.addListener</a></p>
- * <p><strong>Event fields:</strong><br>
- * <code><String> type</code> appendTo<br>
- * <code><HTMLElement/Element>
- * target</code> the HTMLElement/Element being appended to 
- * <p><strong>Usage:</strong><br>
- * <code>var handler = function(e) {var target = e.target};<br>
- * myTabs.addListener('appendTo', handler);</code></p>
- * @event appendTo
- */
-
-YAHOO.augment(YAHOO.util.Element, AttributeProvider);
-})();
-
-YAHOO.register("element", YAHOO.util.Element, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/element/element-debug.js
===================================================================
--- trunk/root/static/yui/element/element-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1072 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * Provides Attribute configurations.
+ * @namespace YAHOO.util
+ * @class Attribute
+ * @constructor
+ * @param hash {Object} The intial Attribute.
+ * @param {YAHOO.util.AttributeProvider} The owner of the Attribute instance.
+ */
+
+YAHOO.util.Attribute = function(hash, owner) {
+    if (owner) { 
+        this.owner = owner;
+        this.configure(hash, true);
+    }
+};
+
+YAHOO.util.Attribute.prototype = {
+    /**
+     * The name of the attribute.
+     * @property name
+     * @type String
+     */
+    name: undefined,
+    
+    /**
+     * The value of the attribute.
+     * @property value
+     * @type String
+     */
+    value: null,
+    
+    /**
+     * The owner of the attribute.
+     * @property owner
+     * @type YAHOO.util.AttributeProvider
+     */
+    owner: null,
+    
+    /**
+     * Whether or not the attribute is read only.
+     * @property readOnly
+     * @type Boolean
+     */
+    readOnly: false,
+    
+    /**
+     * Whether or not the attribute can only be written once.
+     * @property writeOnce
+     * @type Boolean
+     */
+    writeOnce: false,
+
+    /**
+     * The attribute's initial configuration.
+     * @private
+     * @property _initialConfig
+     * @type Object
+     */
+    _initialConfig: null,
+    
+    /**
+     * Whether or not the attribute's value has been set.
+     * @private
+     * @property _written
+     * @type Boolean
+     */
+    _written: false,
+    
+    /**
+     * A function to call when setting the attribute's value.
+     * The method receives the new value as the first arg and the attribute name as the 2nd
+     * @property method
+     * @type Function
+     */
+    method: null,
+    
+    /**
+     * The function to use when setting the attribute's value.
+     * The setter receives the new value as the first arg and the attribute name as the 2nd
+     * The return value of the setter replaces the value passed to set(). 
+     * @property setter
+     * @type Function
+     */
+    setter: null,
+    
+    /**
+     * The function to use when getting the attribute's value.
+     * The getter receives the new value as the first arg and the attribute name as the 2nd
+     * The return value of the getter will be used as the return from get().
+     * @property getter
+     * @type Function
+     */
+    getter: null,
+
+    /**
+     * The validator to use when setting the attribute's value.
+     * @property validator
+     * @type Function
+     * @return Boolean
+     */
+    validator: null,
+    
+    /**
+     * Retrieves the current value of the attribute.
+     * @method getValue
+     * @return {any} The current value of the attribute.
+     */
+    getValue: function() {
+        var val = this.value;
+
+        if (this.getter) {
+            val = this.getter.call(this.owner, this.name);
+        }
+
+        return val;
+    },
+    
+    /**
+     * Sets the value of the attribute and fires beforeChange and change events.
+     * @method setValue
+     * @param {Any} value The value to apply to the attribute.
+     * @param {Boolean} silent If true the change events will not be fired.
+     * @return {Boolean} Whether or not the value was set.
+     */
+    setValue: function(value, silent) {
+        var beforeRetVal,
+            owner = this.owner,
+            name = this.name;
+        
+        var event = {
+            type: name, 
+            prevValue: this.getValue(),
+            newValue: value
+        };
+        
+        if (this.readOnly || ( this.writeOnce && this._written) ) {
+            YAHOO.log( 'setValue ' + name + ', ' +  value +
+                    ' failed: read only', 'error', 'Attribute');
+            return false; // write not allowed
+        }
+        
+        if (this.validator && !this.validator.call(owner, value) ) {
+            YAHOO.log( 'setValue ' + name + ', ' + value +
+                    ' validation failed', 'error', 'Attribute');
+            return false; // invalid value
+        }
+
+        if (!silent) {
+            beforeRetVal = owner.fireBeforeChangeEvent(event);
+            if (beforeRetVal === false) {
+                YAHOO.log('setValue ' + name + 
+                        ' cancelled by beforeChange event', 'info', 'Attribute');
+                return false;
+            }
+        }
+
+        if (this.setter) {
+            value = this.setter.call(owner, value, this.name);
+            if (value === undefined) {
+                YAHOO.log('setter for ' + this.name + ' returned undefined', 'warn', 'Attribute');
+            }
+        }
+        
+        if (this.method) {
+            this.method.call(owner, value, this.name);
+        }
+        
+        this.value = value; // TODO: set before calling setter/method?
+        this._written = true;
+        
+        event.type = name;
+        
+        if (!silent) {
+            this.owner.fireChangeEvent(event);
+        }
+        
+        return true;
+    },
+    
+    /**
+     * Allows for configuring the Attribute's properties.
+     * @method configure
+     * @param {Object} map A key-value map of Attribute properties.
+     * @param {Boolean} init Whether or not this should become the initial config.
+     */
+    configure: function(map, init) {
+        map = map || {};
+
+        if (init) {
+            this._written = false; // reset writeOnce
+        }
+
+        this._initialConfig = this._initialConfig || {};
+        
+        for (var key in map) {
+            if ( map.hasOwnProperty(key) ) {
+                this[key] = map[key];
+                if (init) {
+                    this._initialConfig[key] = map[key];
+                }
+            }
+        }
+    },
+    
+    /**
+     * Resets the value to the initial config value.
+     * @method resetValue
+     * @return {Boolean} Whether or not the value was set.
+     */
+    resetValue: function() {
+        return this.setValue(this._initialConfig.value);
+    },
+    
+    /**
+     * Resets the attribute config to the initial config state.
+     * @method resetConfig
+     */
+    resetConfig: function() {
+        this.configure(this._initialConfig, true);
+    },
+    
+    /**
+     * Resets the value to the current value.
+     * Useful when values may have gotten out of sync with actual properties.
+     * @method refresh
+     * @return {Boolean} Whether or not the value was set.
+     */
+    refresh: function(silent) {
+        this.setValue(this.value, silent);
+    }
+};
+
+(function() {
+    var Lang = YAHOO.util.Lang;
+
+    /*
+    Copyright (c) 2006, Yahoo! Inc. All rights reserved.
+    Code licensed under the BSD License:
+    http://developer.yahoo.net/yui/license.txt
+    */
+    
+    /**
+     * Provides and manages YAHOO.util.Attribute instances
+     * @namespace YAHOO.util
+     * @class AttributeProvider
+     * @uses YAHOO.util.EventProvider
+     */
+    YAHOO.util.AttributeProvider = function() {};
+
+    YAHOO.util.AttributeProvider.prototype = {
+        
+        /**
+         * A key-value map of Attribute configurations
+         * @property _configs
+         * @protected (may be used by subclasses and augmentors)
+         * @private
+         * @type {Object}
+         */
+        _configs: null,
+        /**
+         * Returns the current value of the attribute.
+         * @method get
+         * @param {String} key The attribute whose value will be returned.
+         * @return {Any} The current value of the attribute.
+         */
+        get: function(key){
+            this._configs = this._configs || {};
+            var config = this._configs[key];
+            
+            if (!config || !this._configs.hasOwnProperty(key)) {
+                YAHOO.log(key + ' not found', 'error', 'AttributeProvider');
+                return null;
+            }
+            
+            return config.getValue();
+        },
+        
+        /**
+         * Sets the value of a config.
+         * @method set
+         * @param {String} key The name of the attribute
+         * @param {Any} value The value to apply to the attribute
+         * @param {Boolean} silent Whether or not to suppress change events
+         * @return {Boolean} Whether or not the value was set.
+         */
+        set: function(key, value, silent){
+            this._configs = this._configs || {};
+            var config = this._configs[key];
+            
+            if (!config) {
+                YAHOO.log('set failed: ' + key + ' not found',
+                        'error', 'AttributeProvider');
+                return false;
+            }
+            
+            return config.setValue(value, silent);
+        },
+    
+        /**
+         * Returns an array of attribute names.
+         * @method getAttributeKeys
+         * @return {Array} An array of attribute names.
+         */
+        getAttributeKeys: function(){
+            this._configs = this._configs;
+            var keys = [], key;
+
+            for (key in this._configs) {
+                if ( Lang.hasOwnProperty(this._configs, key) && 
+                        !Lang.isUndefined(this._configs[key]) ) {
+                    keys[keys.length] = key;
+                }
+            }
+            
+            return keys;
+        },
+        
+        /**
+         * Sets multiple attribute values.
+         * @method setAttributes
+         * @param {Object} map  A key-value map of attributes
+         * @param {Boolean} silent Whether or not to suppress change events
+         */
+        setAttributes: function(map, silent){
+            for (var key in map) {
+                if ( Lang.hasOwnProperty(map, key) ) {
+                    this.set(key, map[key], silent);
+                }
+            }
+        },
+    
+        /**
+         * Resets the specified attribute's value to its initial value.
+         * @method resetValue
+         * @param {String} key The name of the attribute
+         * @param {Boolean} silent Whether or not to suppress change events
+         * @return {Boolean} Whether or not the value was set
+         */
+        resetValue: function(key, silent){
+            this._configs = this._configs || {};
+            if (this._configs[key]) {
+                this.set(key, this._configs[key]._initialConfig.value, silent);
+                return true;
+            }
+            return false;
+        },
+    
+        /**
+         * Sets the attribute's value to its current value.
+         * @method refresh
+         * @param {String | Array} key The attribute(s) to refresh
+         * @param {Boolean} silent Whether or not to suppress change events
+         */
+        refresh: function(key, silent) {
+            this._configs = this._configs || {};
+            var configs = this._configs;
+            
+            key = ( ( Lang.isString(key) ) ? [key] : key ) || 
+                    this.getAttributeKeys();
+            
+            for (var i = 0, len = key.length; i < len; ++i) { 
+                if (configs.hasOwnProperty(key[i])) {
+                    this._configs[key[i]].refresh(silent);
+                }
+            }
+        },
+    
+        /**
+         * Adds an Attribute to the AttributeProvider instance. 
+         * @method register
+         * @param {String} key The attribute's name
+         * @param {Object} map A key-value map containing the
+         * attribute's properties.
+         * @deprecated Use setAttributeConfig
+         */
+        register: function(key, map) {
+            this.setAttributeConfig(key, map);
+        },
+        
+        
+        /**
+         * Returns the attribute's properties.
+         * @method getAttributeConfig
+         * @param {String} key The attribute's name
+         * @private
+         * @return {object} A key-value map containing all of the
+         * attribute's properties.
+         */
+        getAttributeConfig: function(key) {
+            this._configs = this._configs || {};
+            var config = this._configs[key] || {};
+            var map = {}; // returning a copy to prevent overrides
+            
+            for (key in config) {
+                if ( Lang.hasOwnProperty(config, key) ) {
+                    map[key] = config[key];
+                }
+            }
+    
+            return map;
+        },
+        
+        /**
+         * Sets or updates an Attribute instance's properties. 
+         * @method setAttributeConfig
+         * @param {String} key The attribute's name.
+         * @param {Object} map A key-value map of attribute properties
+         * @param {Boolean} init Whether or not this should become the intial config.
+         */
+        setAttributeConfig: function(key, map, init) {
+            this._configs = this._configs || {};
+            map = map || {};
+            if (!this._configs[key]) {
+                map.name = key;
+                this._configs[key] = this.createAttribute(map);
+            } else {
+                this._configs[key].configure(map, init);
+            }
+        },
+        
+        /**
+         * Sets or updates an Attribute instance's properties. 
+         * @method configureAttribute
+         * @param {String} key The attribute's name.
+         * @param {Object} map A key-value map of attribute properties
+         * @param {Boolean} init Whether or not this should become the intial config.
+         * @deprecated Use setAttributeConfig
+         */
+        configureAttribute: function(key, map, init) {
+            this.setAttributeConfig(key, map, init);
+        },
+        
+        /**
+         * Resets an attribute to its intial configuration. 
+         * @method resetAttributeConfig
+         * @param {String} key The attribute's name.
+         * @private
+         */
+        resetAttributeConfig: function(key){
+            this._configs = this._configs || {};
+            this._configs[key].resetConfig();
+        },
+        
+        // wrapper for EventProvider.subscribe
+        // to create events on the fly
+        subscribe: function(type, callback) {
+            this._events = this._events || {};
+
+            if ( !(type in this._events) ) {
+                this._events[type] = this.createEvent(type);
+            }
+
+            YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
+        },
+
+        on: function() {
+            this.subscribe.apply(this, arguments);
+        },
+
+        addListener: function() {
+            this.subscribe.apply(this, arguments);
+        },
+
+        /**
+         * Fires the attribute's beforeChange event. 
+         * @method fireBeforeChangeEvent
+         * @param {String} key The attribute's name.
+         * @param {Obj} e The event object to pass to handlers.
+         */
+        fireBeforeChangeEvent: function(e) {
+            var type = 'before';
+            type += e.type.charAt(0).toUpperCase() + e.type.substr(1) + 'Change';
+            e.type = type;
+            return this.fireEvent(e.type, e);
+        },
+        
+        /**
+         * Fires the attribute's change event. 
+         * @method fireChangeEvent
+         * @param {String} key The attribute's name.
+         * @param {Obj} e The event object to pass to the handlers.
+         */
+        fireChangeEvent: function(e) {
+            e.type += 'Change';
+            return this.fireEvent(e.type, e);
+        },
+
+        createAttribute: function(map) {
+            return new YAHOO.util.Attribute(map, this);
+        }
+    };
+    
+    YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
+})();
+
+(function() {
+// internal shorthand
+var Dom = YAHOO.util.Dom,
+    AttributeProvider = YAHOO.util.AttributeProvider;
+
+/**
+ * Element provides an wrapper object to simplify adding
+ * event listeners, using dom methods, and managing attributes. 
+ * @module element
+ * @namespace YAHOO.util
+ * @requires yahoo, dom, event
+ */
+
+/**
+ * Element provides an wrapper object to simplify adding
+ * event listeners, using dom methods, and managing attributes. 
+ * @class Element
+ * @uses YAHOO.util.AttributeProvider
+ * @constructor
+ * @param el {HTMLElement | String} The html element that 
+ * represents the Element.
+ * @param {Object} map A key-value map of initial config names and values
+ */
+var Element = function(el, map) {
+    this.init.apply(this, arguments);
+};
+
+Element.DOM_EVENTS = {
+    'click': true,
+    'dblclick': true,
+    'keydown': true,
+    'keypress': true,
+    'keyup': true,
+    'mousedown': true,
+    'mousemove': true,
+    'mouseout': true, 
+    'mouseover': true, 
+    'mouseup': true,
+    'focus': true,
+    'blur': true,
+    'submit': true,
+    'change': true
+};
+
+Element.prototype = {
+    /**
+     * Dom events supported by the Element instance.
+     * @property DOM_EVENTS
+     * @type Object
+     */
+    DOM_EVENTS: null,
+
+    DEFAULT_HTML_SETTER: function(value, key) {
+        var el = this.get('element');
+        
+        if (el) {
+            el[key] = value;
+        }
+    },
+
+    DEFAULT_HTML_GETTER: function(key) {
+        var el = this.get('element'),
+            val;
+
+        if (el) {
+            val = el[key];
+        }
+
+        return val;
+    },
+
+    /**
+     * Wrapper for HTMLElement method.
+     * @method appendChild
+     * @param {YAHOO.util.Element || HTMLElement} child The element to append. 
+     * @return {HTMLElement} The appended DOM element. 
+     */
+    appendChild: function(child) {
+        child = child.get ? child.get('element') : child;
+        return this.get('element').appendChild(child);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method getElementsByTagName
+     * @param {String} tag The tagName to collect
+     * @return {HTMLCollection} A collection of DOM elements. 
+     */
+    getElementsByTagName: function(tag) {
+        return this.get('element').getElementsByTagName(tag);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method hasChildNodes
+     * @return {Boolean} Whether or not the element has childNodes
+     */
+    hasChildNodes: function() {
+        return this.get('element').hasChildNodes();
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method insertBefore
+     * @param {HTMLElement} element The HTMLElement to insert
+     * @param {HTMLElement} before The HTMLElement to insert
+     * the element before.
+     * @return {HTMLElement} The inserted DOM element. 
+     */
+    insertBefore: function(element, before) {
+        element = element.get ? element.get('element') : element;
+        before = (before && before.get) ? before.get('element') : before;
+        
+        return this.get('element').insertBefore(element, before);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method removeChild
+     * @param {HTMLElement} child The HTMLElement to remove
+     * @return {HTMLElement} The removed DOM element. 
+     */
+    removeChild: function(child) {
+        child = child.get ? child.get('element') : child;
+        return this.get('element').removeChild(child);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method replaceChild
+     * @param {HTMLElement} newNode The HTMLElement to insert
+     * @param {HTMLElement} oldNode The HTMLElement to replace
+     * @return {HTMLElement} The replaced DOM element. 
+     */
+    replaceChild: function(newNode, oldNode) {
+        newNode = newNode.get ? newNode.get('element') : newNode;
+        oldNode = oldNode.get ? oldNode.get('element') : oldNode;
+        return this.get('element').replaceChild(newNode, oldNode);
+    },
+
+    
+    /**
+     * Registers Element specific attributes.
+     * @method initAttributes
+     * @param {Object} map A key-value map of initial attribute configs
+     */
+    initAttributes: function(map) {
+    },
+
+    /**
+     * Adds a listener for the given event.  These may be DOM or 
+     * customEvent listeners.  Any event that is fired via fireEvent
+     * can be listened for.  All handlers receive an event object. 
+     * @method addListener
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The handler to call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    addListener: function(type, fn, obj, scope) {
+        var el = this.get('element') || this.get('id');
+        scope = scope || this;
+        
+        var self = this; 
+        if (!this._events[type]) { // create on the fly
+            if (el && this.DOM_EVENTS[type]) {
+                YAHOO.util.Event.addListener(el, type, function(e) {
+                    if (e.srcElement && !e.target) { // supplement IE with target
+                        e.target = e.srcElement;
+                    }
+                    self.fireEvent(type, e);
+                }, obj, scope);
+            }
+            this.createEvent(type, this);
+        }
+        
+        return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments); // notify via customEvent
+    },
+    
+    
+    /**
+     * Alias for addListener
+     * @method on
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    on: function() {
+        return this.addListener.apply(this, arguments);
+    },
+    
+    /**
+     * Alias for addListener
+     * @method subscribe
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    subscribe: function() {
+        return this.addListener.apply(this, arguments);
+    },
+    
+    /**
+     * Remove an event listener
+     * @method removeListener
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     */
+    removeListener: function(type, fn) {
+        return this.unsubscribe.apply(this, arguments);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method addClass
+     * @param {String} className The className to add
+     */
+    addClass: function(className) {
+        Dom.addClass(this.get('element'), className);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method getElementsByClassName
+     * @param {String} className The className to collect
+     * @param {String} tag (optional) The tag to use in
+     * conjunction with class name
+     * @return {Array} Array of HTMLElements
+     */
+    getElementsByClassName: function(className, tag) {
+        return Dom.getElementsByClassName(className, tag,
+                this.get('element') );
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method hasClass
+     * @param {String} className The className to add
+     * @return {Boolean} Whether or not the element has the class name
+     */
+    hasClass: function(className) {
+        return Dom.hasClass(this.get('element'), className); 
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method removeClass
+     * @param {String} className The className to remove
+     */
+    removeClass: function(className) {
+        return Dom.removeClass(this.get('element'), className);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method replaceClass
+     * @param {String} oldClassName The className to replace
+     * @param {String} newClassName The className to add
+     */
+    replaceClass: function(oldClassName, newClassName) {
+        return Dom.replaceClass(this.get('element'), 
+                oldClassName, newClassName);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method setStyle
+     * @param {String} property The style property to set
+     * @param {String} value The value to apply to the style property
+     */
+    setStyle: function(property, value) {
+        return Dom.setStyle(this.get('element'),  property, value); // TODO: always queuing?
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method getStyle
+     * @param {String} property The style property to retrieve
+     * @return {String} The current value of the property
+     */
+    getStyle: function(property) {
+        return Dom.getStyle(this.get('element'),  property);
+    },
+    
+    /**
+     * Apply any queued set calls.
+     * @method fireQueue
+     */
+    fireQueue: function() {
+        var queue = this._queue;
+        for (var i = 0, len = queue.length; i < len; ++i) {
+            this[queue[i][0]].apply(this, queue[i][1]);
+        }
+    },
+    
+    /**
+     * Appends the HTMLElement into either the supplied parentNode.
+     * @method appendTo
+     * @param {HTMLElement | Element} parentNode The node to append to
+     * @param {HTMLElement | Element} before An optional node to insert before
+     * @return {HTMLElement} The appended DOM element. 
+     */
+    appendTo: function(parent, before) {
+        parent = (parent.get) ?  parent.get('element') : Dom.get(parent);
+        
+        this.fireEvent('beforeAppendTo', {
+            type: 'beforeAppendTo',
+            target: parent
+        });
+        
+        
+        before = (before && before.get) ? 
+                before.get('element') : Dom.get(before);
+        var element = this.get('element');
+        
+        if (!element) {
+            YAHOO.log('appendTo failed: element not available',
+                    'error', 'Element');
+            return false;
+        }
+        
+        if (!parent) {
+            YAHOO.log('appendTo failed: parent not available',
+                    'error', 'Element');
+            return false;
+        }
+        
+        if (element.parent != parent) {
+            if (before) {
+                parent.insertBefore(element, before);
+            } else {
+                parent.appendChild(element);
+            }
+        }
+        
+        YAHOO.log(element + 'appended to ' + parent);
+        
+        this.fireEvent('appendTo', {
+            type: 'appendTo',
+            target: parent
+        });
+
+        return element;
+    },
+    
+    get: function(key) {
+        var configs = this._configs || {},
+            el = configs.element; // avoid loop due to 'element'
+
+        if (el && !configs[key] && !YAHOO.lang.isUndefined(el.value[key]) ) {
+            this._setHTMLAttrConfig(key);
+        }
+
+        return AttributeProvider.prototype.get.call(this, key);
+    },
+
+    setAttributes: function(map, silent) {
+        // set based on configOrder
+        var done = {},
+            configOrder = this._configOrder;
+
+        // set based on configOrder
+        for (var i = 0, len = configOrder.length; i < len; ++i) {
+            if (map[configOrder[i]] !== undefined) {
+                done[configOrder[i]] = true;
+                this.set(configOrder[i], map[configOrder[i]], silent);
+            }
+        }
+
+        // unconfigured (e.g. Dom attributes)
+        for (var att in map) {
+            if (map.hasOwnProperty(att) && !done[att]) {
+                this.set(att, map[att], silent);
+            }
+        }
+    },
+
+    set: function(key, value, silent) {
+        var el = this.get('element');
+        if (!el) {
+            this._queue[this._queue.length] = ['set', arguments];
+            if (this._configs[key]) {
+                this._configs[key].value = value; // so "get" works while queueing
+            
+            }
+            return;
+        }
+        
+        // set it on the element if not configured and is an HTML attribute
+        if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
+            this._setHTMLAttrConfig(key);
+        }
+
+        return AttributeProvider.prototype.set.apply(this, arguments);
+    },
+    
+    setAttributeConfig: function(key, map, init) {
+        this._configOrder.push(key);
+        AttributeProvider.prototype.setAttributeConfig.apply(this, arguments);
+    },
+
+    createEvent: function(type, scope) {
+        this._events[type] = true;
+        return AttributeProvider.prototype.createEvent.apply(this, arguments);
+    },
+    
+    init: function(el, attr) {
+        this._initElement(el, attr); 
+    },
+
+    destroy: function() {
+        var el = this.get('element');
+        YAHOO.util.Event.purgeElement(el, true); // purge DOM listeners recursively
+        this.unsubscribeAll(); // unsubscribe all custom events
+
+        if (el && el.parentNode) {
+            el.parentNode.removeChild(el); // pull from the DOM
+        }
+
+        // revert initial configs
+        this._queue = [];
+        this._events = {};
+        this._configs = {};
+        this._configOrder = []; 
+    },
+
+    _initElement: function(el, attr) {
+        this._queue = this._queue || [];
+        this._events = this._events || {};
+        this._configs = this._configs || {};
+        this._configOrder = []; 
+        attr = attr || {};
+        attr.element = attr.element || el || null;
+
+        var isReady = false;  // to determine when to init HTMLElement and content
+
+        var DOM_EVENTS = Element.DOM_EVENTS;
+        this.DOM_EVENTS = this.DOM_EVENTS || {};
+
+        for (var event in DOM_EVENTS) {
+            if (DOM_EVENTS.hasOwnProperty(event)) {
+                this.DOM_EVENTS[event] = DOM_EVENTS[event];
+            }
+        }
+
+        if (typeof attr.element === 'string') { // register ID for get() access
+            this._setHTMLAttrConfig('id', { value: attr.element });
+        }
+
+        if (Dom.get(attr.element)) {
+            isReady = true;
+            this._initHTMLElement(attr);
+            this._initContent(attr);
+        }
+
+        YAHOO.util.Event.onAvailable(attr.element, function() {
+            if (!isReady) { // otherwise already done
+                this._initHTMLElement(attr);
+            }
+
+            this.fireEvent('available', { type: 'available', target: Dom.get(attr.element) });  
+        }, this, true);
+        
+        YAHOO.util.Event.onContentReady(attr.element, function() {
+            if (!isReady) { // otherwise already done
+                this._initContent(attr);
+            }
+            this.fireEvent('contentReady', { type: 'contentReady', target: Dom.get(attr.element) });  
+        }, this, true);
+    },
+
+    _initHTMLElement: function(attr) {
+        /**
+         * The HTMLElement the Element instance refers to.
+         * @attribute element
+         * @type HTMLElement
+         */
+        this.setAttributeConfig('element', {
+            value: Dom.get(attr.element),
+            readOnly: true
+         });
+    },
+
+    _initContent: function(attr) {
+        this.initAttributes(attr);
+        this.setAttributes(attr, true);
+        this.fireQueue();
+
+    },
+
+    /**
+     * Sets the value of the property and fires beforeChange and change events.
+     * @private
+     * @method _setHTMLAttrConfig
+     * @param {YAHOO.util.Element} element The Element instance to
+     * register the config to.
+     * @param {String} key The name of the config to register
+     * @param {Object} map A key-value map of the config's params
+     */
+    _setHTMLAttrConfig: function(key, map) {
+        var el = this.get('element');
+        map = map || {};
+        map.name = key;
+
+        map.setter = map.setter || this.DEFAULT_HTML_SETTER;
+        map.getter = map.getter || this.DEFAULT_HTML_GETTER;
+
+        map.value = map.value || el[key];
+        this._configs[key] = new YAHOO.util.Attribute(map, this);
+    }
+};
+
+/**
+ * Fires when the Element's HTMLElement can be retrieved by Id.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> available<br>
+ * <code><HTMLElement>
+ * target</code> the HTMLElement bound to this Element instance<br>
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('available', handler);</code></p>
+ * @event available
+ */
+ 
+/**
+ * Fires when the Element's HTMLElement subtree is rendered.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> contentReady<br>
+ * <code><HTMLElement>
+ * target</code> the HTMLElement bound to this Element instance<br>
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('contentReady', handler);</code></p>
+ * @event contentReady
+ */
+
+/**
+ * Fires before the Element is appended to another Element.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> beforeAppendTo<br>
+ * <code><HTMLElement/Element>
+ * target</code> the HTMLElement/Element being appended to 
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('beforeAppendTo', handler);</code></p>
+ * @event beforeAppendTo
+ */
+
+/**
+ * Fires after the Element is appended to another Element.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> appendTo<br>
+ * <code><HTMLElement/Element>
+ * target</code> the HTMLElement/Element being appended to 
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('appendTo', handler);</code></p>
+ * @event appendTo
+ */
+
+YAHOO.augment(Element, AttributeProvider);
+YAHOO.util.Element = Element;
+})();
+
+YAHOO.register("element", YAHOO.util.Element, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/element/element-min.js
===================================================================
--- trunk/root/static/yui/element/element-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined){}}if(this.method){this.method.call(A,F,this.name);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(v!
 ar A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._!
 configs=this._configs||{};if(this._configs[C]){this.set(C,this!
 ._config
s[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prot!
 otype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTM!
 L_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];!
 }return 
F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.addListener(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this!
 ,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].apply(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E});
+F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype!
 .setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available"!
 ,{type:"available",target:B.get(E.element)});},this,true);YAHO!
 O.util.E
vent.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/element/element.js
===================================================================
--- trunk/root/static/yui/element/element.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/element/element.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1057 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * Provides Attribute configurations.
+ * @namespace YAHOO.util
+ * @class Attribute
+ * @constructor
+ * @param hash {Object} The intial Attribute.
+ * @param {YAHOO.util.AttributeProvider} The owner of the Attribute instance.
+ */
+
+YAHOO.util.Attribute = function(hash, owner) {
+    if (owner) { 
+        this.owner = owner;
+        this.configure(hash, true);
+    }
+};
+
+YAHOO.util.Attribute.prototype = {
+    /**
+     * The name of the attribute.
+     * @property name
+     * @type String
+     */
+    name: undefined,
+    
+    /**
+     * The value of the attribute.
+     * @property value
+     * @type String
+     */
+    value: null,
+    
+    /**
+     * The owner of the attribute.
+     * @property owner
+     * @type YAHOO.util.AttributeProvider
+     */
+    owner: null,
+    
+    /**
+     * Whether or not the attribute is read only.
+     * @property readOnly
+     * @type Boolean
+     */
+    readOnly: false,
+    
+    /**
+     * Whether or not the attribute can only be written once.
+     * @property writeOnce
+     * @type Boolean
+     */
+    writeOnce: false,
+
+    /**
+     * The attribute's initial configuration.
+     * @private
+     * @property _initialConfig
+     * @type Object
+     */
+    _initialConfig: null,
+    
+    /**
+     * Whether or not the attribute's value has been set.
+     * @private
+     * @property _written
+     * @type Boolean
+     */
+    _written: false,
+    
+    /**
+     * A function to call when setting the attribute's value.
+     * The method receives the new value as the first arg and the attribute name as the 2nd
+     * @property method
+     * @type Function
+     */
+    method: null,
+    
+    /**
+     * The function to use when setting the attribute's value.
+     * The setter receives the new value as the first arg and the attribute name as the 2nd
+     * The return value of the setter replaces the value passed to set(). 
+     * @property setter
+     * @type Function
+     */
+    setter: null,
+    
+    /**
+     * The function to use when getting the attribute's value.
+     * The getter receives the new value as the first arg and the attribute name as the 2nd
+     * The return value of the getter will be used as the return from get().
+     * @property getter
+     * @type Function
+     */
+    getter: null,
+
+    /**
+     * The validator to use when setting the attribute's value.
+     * @property validator
+     * @type Function
+     * @return Boolean
+     */
+    validator: null,
+    
+    /**
+     * Retrieves the current value of the attribute.
+     * @method getValue
+     * @return {any} The current value of the attribute.
+     */
+    getValue: function() {
+        var val = this.value;
+
+        if (this.getter) {
+            val = this.getter.call(this.owner, this.name);
+        }
+
+        return val;
+    },
+    
+    /**
+     * Sets the value of the attribute and fires beforeChange and change events.
+     * @method setValue
+     * @param {Any} value The value to apply to the attribute.
+     * @param {Boolean} silent If true the change events will not be fired.
+     * @return {Boolean} Whether or not the value was set.
+     */
+    setValue: function(value, silent) {
+        var beforeRetVal,
+            owner = this.owner,
+            name = this.name;
+        
+        var event = {
+            type: name, 
+            prevValue: this.getValue(),
+            newValue: value
+        };
+        
+        if (this.readOnly || ( this.writeOnce && this._written) ) {
+            return false; // write not allowed
+        }
+        
+        if (this.validator && !this.validator.call(owner, value) ) {
+            return false; // invalid value
+        }
+
+        if (!silent) {
+            beforeRetVal = owner.fireBeforeChangeEvent(event);
+            if (beforeRetVal === false) {
+                return false;
+            }
+        }
+
+        if (this.setter) {
+            value = this.setter.call(owner, value, this.name);
+            if (value === undefined) {
+            }
+        }
+        
+        if (this.method) {
+            this.method.call(owner, value, this.name);
+        }
+        
+        this.value = value; // TODO: set before calling setter/method?
+        this._written = true;
+        
+        event.type = name;
+        
+        if (!silent) {
+            this.owner.fireChangeEvent(event);
+        }
+        
+        return true;
+    },
+    
+    /**
+     * Allows for configuring the Attribute's properties.
+     * @method configure
+     * @param {Object} map A key-value map of Attribute properties.
+     * @param {Boolean} init Whether or not this should become the initial config.
+     */
+    configure: function(map, init) {
+        map = map || {};
+
+        if (init) {
+            this._written = false; // reset writeOnce
+        }
+
+        this._initialConfig = this._initialConfig || {};
+        
+        for (var key in map) {
+            if ( map.hasOwnProperty(key) ) {
+                this[key] = map[key];
+                if (init) {
+                    this._initialConfig[key] = map[key];
+                }
+            }
+        }
+    },
+    
+    /**
+     * Resets the value to the initial config value.
+     * @method resetValue
+     * @return {Boolean} Whether or not the value was set.
+     */
+    resetValue: function() {
+        return this.setValue(this._initialConfig.value);
+    },
+    
+    /**
+     * Resets the attribute config to the initial config state.
+     * @method resetConfig
+     */
+    resetConfig: function() {
+        this.configure(this._initialConfig, true);
+    },
+    
+    /**
+     * Resets the value to the current value.
+     * Useful when values may have gotten out of sync with actual properties.
+     * @method refresh
+     * @return {Boolean} Whether or not the value was set.
+     */
+    refresh: function(silent) {
+        this.setValue(this.value, silent);
+    }
+};
+
+(function() {
+    var Lang = YAHOO.util.Lang;
+
+    /*
+    Copyright (c) 2006, Yahoo! Inc. All rights reserved.
+    Code licensed under the BSD License:
+    http://developer.yahoo.net/yui/license.txt
+    */
+    
+    /**
+     * Provides and manages YAHOO.util.Attribute instances
+     * @namespace YAHOO.util
+     * @class AttributeProvider
+     * @uses YAHOO.util.EventProvider
+     */
+    YAHOO.util.AttributeProvider = function() {};
+
+    YAHOO.util.AttributeProvider.prototype = {
+        
+        /**
+         * A key-value map of Attribute configurations
+         * @property _configs
+         * @protected (may be used by subclasses and augmentors)
+         * @private
+         * @type {Object}
+         */
+        _configs: null,
+        /**
+         * Returns the current value of the attribute.
+         * @method get
+         * @param {String} key The attribute whose value will be returned.
+         * @return {Any} The current value of the attribute.
+         */
+        get: function(key){
+            this._configs = this._configs || {};
+            var config = this._configs[key];
+            
+            if (!config || !this._configs.hasOwnProperty(key)) {
+                return null;
+            }
+            
+            return config.getValue();
+        },
+        
+        /**
+         * Sets the value of a config.
+         * @method set
+         * @param {String} key The name of the attribute
+         * @param {Any} value The value to apply to the attribute
+         * @param {Boolean} silent Whether or not to suppress change events
+         * @return {Boolean} Whether or not the value was set.
+         */
+        set: function(key, value, silent){
+            this._configs = this._configs || {};
+            var config = this._configs[key];
+            
+            if (!config) {
+                return false;
+            }
+            
+            return config.setValue(value, silent);
+        },
+    
+        /**
+         * Returns an array of attribute names.
+         * @method getAttributeKeys
+         * @return {Array} An array of attribute names.
+         */
+        getAttributeKeys: function(){
+            this._configs = this._configs;
+            var keys = [], key;
+
+            for (key in this._configs) {
+                if ( Lang.hasOwnProperty(this._configs, key) && 
+                        !Lang.isUndefined(this._configs[key]) ) {
+                    keys[keys.length] = key;
+                }
+            }
+            
+            return keys;
+        },
+        
+        /**
+         * Sets multiple attribute values.
+         * @method setAttributes
+         * @param {Object} map  A key-value map of attributes
+         * @param {Boolean} silent Whether or not to suppress change events
+         */
+        setAttributes: function(map, silent){
+            for (var key in map) {
+                if ( Lang.hasOwnProperty(map, key) ) {
+                    this.set(key, map[key], silent);
+                }
+            }
+        },
+    
+        /**
+         * Resets the specified attribute's value to its initial value.
+         * @method resetValue
+         * @param {String} key The name of the attribute
+         * @param {Boolean} silent Whether or not to suppress change events
+         * @return {Boolean} Whether or not the value was set
+         */
+        resetValue: function(key, silent){
+            this._configs = this._configs || {};
+            if (this._configs[key]) {
+                this.set(key, this._configs[key]._initialConfig.value, silent);
+                return true;
+            }
+            return false;
+        },
+    
+        /**
+         * Sets the attribute's value to its current value.
+         * @method refresh
+         * @param {String | Array} key The attribute(s) to refresh
+         * @param {Boolean} silent Whether or not to suppress change events
+         */
+        refresh: function(key, silent) {
+            this._configs = this._configs || {};
+            var configs = this._configs;
+            
+            key = ( ( Lang.isString(key) ) ? [key] : key ) || 
+                    this.getAttributeKeys();
+            
+            for (var i = 0, len = key.length; i < len; ++i) { 
+                if (configs.hasOwnProperty(key[i])) {
+                    this._configs[key[i]].refresh(silent);
+                }
+            }
+        },
+    
+        /**
+         * Adds an Attribute to the AttributeProvider instance. 
+         * @method register
+         * @param {String} key The attribute's name
+         * @param {Object} map A key-value map containing the
+         * attribute's properties.
+         * @deprecated Use setAttributeConfig
+         */
+        register: function(key, map) {
+            this.setAttributeConfig(key, map);
+        },
+        
+        
+        /**
+         * Returns the attribute's properties.
+         * @method getAttributeConfig
+         * @param {String} key The attribute's name
+         * @private
+         * @return {object} A key-value map containing all of the
+         * attribute's properties.
+         */
+        getAttributeConfig: function(key) {
+            this._configs = this._configs || {};
+            var config = this._configs[key] || {};
+            var map = {}; // returning a copy to prevent overrides
+            
+            for (key in config) {
+                if ( Lang.hasOwnProperty(config, key) ) {
+                    map[key] = config[key];
+                }
+            }
+    
+            return map;
+        },
+        
+        /**
+         * Sets or updates an Attribute instance's properties. 
+         * @method setAttributeConfig
+         * @param {String} key The attribute's name.
+         * @param {Object} map A key-value map of attribute properties
+         * @param {Boolean} init Whether or not this should become the intial config.
+         */
+        setAttributeConfig: function(key, map, init) {
+            this._configs = this._configs || {};
+            map = map || {};
+            if (!this._configs[key]) {
+                map.name = key;
+                this._configs[key] = this.createAttribute(map);
+            } else {
+                this._configs[key].configure(map, init);
+            }
+        },
+        
+        /**
+         * Sets or updates an Attribute instance's properties. 
+         * @method configureAttribute
+         * @param {String} key The attribute's name.
+         * @param {Object} map A key-value map of attribute properties
+         * @param {Boolean} init Whether or not this should become the intial config.
+         * @deprecated Use setAttributeConfig
+         */
+        configureAttribute: function(key, map, init) {
+            this.setAttributeConfig(key, map, init);
+        },
+        
+        /**
+         * Resets an attribute to its intial configuration. 
+         * @method resetAttributeConfig
+         * @param {String} key The attribute's name.
+         * @private
+         */
+        resetAttributeConfig: function(key){
+            this._configs = this._configs || {};
+            this._configs[key].resetConfig();
+        },
+        
+        // wrapper for EventProvider.subscribe
+        // to create events on the fly
+        subscribe: function(type, callback) {
+            this._events = this._events || {};
+
+            if ( !(type in this._events) ) {
+                this._events[type] = this.createEvent(type);
+            }
+
+            YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments);
+        },
+
+        on: function() {
+            this.subscribe.apply(this, arguments);
+        },
+
+        addListener: function() {
+            this.subscribe.apply(this, arguments);
+        },
+
+        /**
+         * Fires the attribute's beforeChange event. 
+         * @method fireBeforeChangeEvent
+         * @param {String} key The attribute's name.
+         * @param {Obj} e The event object to pass to handlers.
+         */
+        fireBeforeChangeEvent: function(e) {
+            var type = 'before';
+            type += e.type.charAt(0).toUpperCase() + e.type.substr(1) + 'Change';
+            e.type = type;
+            return this.fireEvent(e.type, e);
+        },
+        
+        /**
+         * Fires the attribute's change event. 
+         * @method fireChangeEvent
+         * @param {String} key The attribute's name.
+         * @param {Obj} e The event object to pass to the handlers.
+         */
+        fireChangeEvent: function(e) {
+            e.type += 'Change';
+            return this.fireEvent(e.type, e);
+        },
+
+        createAttribute: function(map) {
+            return new YAHOO.util.Attribute(map, this);
+        }
+    };
+    
+    YAHOO.augment(YAHOO.util.AttributeProvider, YAHOO.util.EventProvider);
+})();
+
+(function() {
+// internal shorthand
+var Dom = YAHOO.util.Dom,
+    AttributeProvider = YAHOO.util.AttributeProvider;
+
+/**
+ * Element provides an wrapper object to simplify adding
+ * event listeners, using dom methods, and managing attributes. 
+ * @module element
+ * @namespace YAHOO.util
+ * @requires yahoo, dom, event
+ */
+
+/**
+ * Element provides an wrapper object to simplify adding
+ * event listeners, using dom methods, and managing attributes. 
+ * @class Element
+ * @uses YAHOO.util.AttributeProvider
+ * @constructor
+ * @param el {HTMLElement | String} The html element that 
+ * represents the Element.
+ * @param {Object} map A key-value map of initial config names and values
+ */
+var Element = function(el, map) {
+    this.init.apply(this, arguments);
+};
+
+Element.DOM_EVENTS = {
+    'click': true,
+    'dblclick': true,
+    'keydown': true,
+    'keypress': true,
+    'keyup': true,
+    'mousedown': true,
+    'mousemove': true,
+    'mouseout': true, 
+    'mouseover': true, 
+    'mouseup': true,
+    'focus': true,
+    'blur': true,
+    'submit': true,
+    'change': true
+};
+
+Element.prototype = {
+    /**
+     * Dom events supported by the Element instance.
+     * @property DOM_EVENTS
+     * @type Object
+     */
+    DOM_EVENTS: null,
+
+    DEFAULT_HTML_SETTER: function(value, key) {
+        var el = this.get('element');
+        
+        if (el) {
+            el[key] = value;
+        }
+    },
+
+    DEFAULT_HTML_GETTER: function(key) {
+        var el = this.get('element'),
+            val;
+
+        if (el) {
+            val = el[key];
+        }
+
+        return val;
+    },
+
+    /**
+     * Wrapper for HTMLElement method.
+     * @method appendChild
+     * @param {YAHOO.util.Element || HTMLElement} child The element to append. 
+     * @return {HTMLElement} The appended DOM element. 
+     */
+    appendChild: function(child) {
+        child = child.get ? child.get('element') : child;
+        return this.get('element').appendChild(child);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method getElementsByTagName
+     * @param {String} tag The tagName to collect
+     * @return {HTMLCollection} A collection of DOM elements. 
+     */
+    getElementsByTagName: function(tag) {
+        return this.get('element').getElementsByTagName(tag);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method hasChildNodes
+     * @return {Boolean} Whether or not the element has childNodes
+     */
+    hasChildNodes: function() {
+        return this.get('element').hasChildNodes();
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method insertBefore
+     * @param {HTMLElement} element The HTMLElement to insert
+     * @param {HTMLElement} before The HTMLElement to insert
+     * the element before.
+     * @return {HTMLElement} The inserted DOM element. 
+     */
+    insertBefore: function(element, before) {
+        element = element.get ? element.get('element') : element;
+        before = (before && before.get) ? before.get('element') : before;
+        
+        return this.get('element').insertBefore(element, before);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method removeChild
+     * @param {HTMLElement} child The HTMLElement to remove
+     * @return {HTMLElement} The removed DOM element. 
+     */
+    removeChild: function(child) {
+        child = child.get ? child.get('element') : child;
+        return this.get('element').removeChild(child);
+    },
+    
+    /**
+     * Wrapper for HTMLElement method.
+     * @method replaceChild
+     * @param {HTMLElement} newNode The HTMLElement to insert
+     * @param {HTMLElement} oldNode The HTMLElement to replace
+     * @return {HTMLElement} The replaced DOM element. 
+     */
+    replaceChild: function(newNode, oldNode) {
+        newNode = newNode.get ? newNode.get('element') : newNode;
+        oldNode = oldNode.get ? oldNode.get('element') : oldNode;
+        return this.get('element').replaceChild(newNode, oldNode);
+    },
+
+    
+    /**
+     * Registers Element specific attributes.
+     * @method initAttributes
+     * @param {Object} map A key-value map of initial attribute configs
+     */
+    initAttributes: function(map) {
+    },
+
+    /**
+     * Adds a listener for the given event.  These may be DOM or 
+     * customEvent listeners.  Any event that is fired via fireEvent
+     * can be listened for.  All handlers receive an event object. 
+     * @method addListener
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The handler to call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    addListener: function(type, fn, obj, scope) {
+        var el = this.get('element') || this.get('id');
+        scope = scope || this;
+        
+        var self = this; 
+        if (!this._events[type]) { // create on the fly
+            if (el && this.DOM_EVENTS[type]) {
+                YAHOO.util.Event.addListener(el, type, function(e) {
+                    if (e.srcElement && !e.target) { // supplement IE with target
+                        e.target = e.srcElement;
+                    }
+                    self.fireEvent(type, e);
+                }, obj, scope);
+            }
+            this.createEvent(type, this);
+        }
+        
+        return YAHOO.util.EventProvider.prototype.subscribe.apply(this, arguments); // notify via customEvent
+    },
+    
+    
+    /**
+     * Alias for addListener
+     * @method on
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    on: function() {
+        return this.addListener.apply(this, arguments);
+    },
+    
+    /**
+     * Alias for addListener
+     * @method subscribe
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     * @param {Any} obj A variable to pass to the handler
+     * @param {Object} scope The object to use for the scope of the handler 
+     */
+    subscribe: function() {
+        return this.addListener.apply(this, arguments);
+    },
+    
+    /**
+     * Remove an event listener
+     * @method removeListener
+     * @param {String} type The name of the event to listen for
+     * @param {Function} fn The function call when the event fires
+     */
+    removeListener: function(type, fn) {
+        return this.unsubscribe.apply(this, arguments);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method addClass
+     * @param {String} className The className to add
+     */
+    addClass: function(className) {
+        Dom.addClass(this.get('element'), className);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method getElementsByClassName
+     * @param {String} className The className to collect
+     * @param {String} tag (optional) The tag to use in
+     * conjunction with class name
+     * @return {Array} Array of HTMLElements
+     */
+    getElementsByClassName: function(className, tag) {
+        return Dom.getElementsByClassName(className, tag,
+                this.get('element') );
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method hasClass
+     * @param {String} className The className to add
+     * @return {Boolean} Whether or not the element has the class name
+     */
+    hasClass: function(className) {
+        return Dom.hasClass(this.get('element'), className); 
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method removeClass
+     * @param {String} className The className to remove
+     */
+    removeClass: function(className) {
+        return Dom.removeClass(this.get('element'), className);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method replaceClass
+     * @param {String} oldClassName The className to replace
+     * @param {String} newClassName The className to add
+     */
+    replaceClass: function(oldClassName, newClassName) {
+        return Dom.replaceClass(this.get('element'), 
+                oldClassName, newClassName);
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method setStyle
+     * @param {String} property The style property to set
+     * @param {String} value The value to apply to the style property
+     */
+    setStyle: function(property, value) {
+        return Dom.setStyle(this.get('element'),  property, value); // TODO: always queuing?
+    },
+    
+    /**
+     * Wrapper for Dom method.
+     * @method getStyle
+     * @param {String} property The style property to retrieve
+     * @return {String} The current value of the property
+     */
+    getStyle: function(property) {
+        return Dom.getStyle(this.get('element'),  property);
+    },
+    
+    /**
+     * Apply any queued set calls.
+     * @method fireQueue
+     */
+    fireQueue: function() {
+        var queue = this._queue;
+        for (var i = 0, len = queue.length; i < len; ++i) {
+            this[queue[i][0]].apply(this, queue[i][1]);
+        }
+    },
+    
+    /**
+     * Appends the HTMLElement into either the supplied parentNode.
+     * @method appendTo
+     * @param {HTMLElement | Element} parentNode The node to append to
+     * @param {HTMLElement | Element} before An optional node to insert before
+     * @return {HTMLElement} The appended DOM element. 
+     */
+    appendTo: function(parent, before) {
+        parent = (parent.get) ?  parent.get('element') : Dom.get(parent);
+        
+        this.fireEvent('beforeAppendTo', {
+            type: 'beforeAppendTo',
+            target: parent
+        });
+        
+        
+        before = (before && before.get) ? 
+                before.get('element') : Dom.get(before);
+        var element = this.get('element');
+        
+        if (!element) {
+            return false;
+        }
+        
+        if (!parent) {
+            return false;
+        }
+        
+        if (element.parent != parent) {
+            if (before) {
+                parent.insertBefore(element, before);
+            } else {
+                parent.appendChild(element);
+            }
+        }
+        
+        
+        this.fireEvent('appendTo', {
+            type: 'appendTo',
+            target: parent
+        });
+
+        return element;
+    },
+    
+    get: function(key) {
+        var configs = this._configs || {},
+            el = configs.element; // avoid loop due to 'element'
+
+        if (el && !configs[key] && !YAHOO.lang.isUndefined(el.value[key]) ) {
+            this._setHTMLAttrConfig(key);
+        }
+
+        return AttributeProvider.prototype.get.call(this, key);
+    },
+
+    setAttributes: function(map, silent) {
+        // set based on configOrder
+        var done = {},
+            configOrder = this._configOrder;
+
+        // set based on configOrder
+        for (var i = 0, len = configOrder.length; i < len; ++i) {
+            if (map[configOrder[i]] !== undefined) {
+                done[configOrder[i]] = true;
+                this.set(configOrder[i], map[configOrder[i]], silent);
+            }
+        }
+
+        // unconfigured (e.g. Dom attributes)
+        for (var att in map) {
+            if (map.hasOwnProperty(att) && !done[att]) {
+                this.set(att, map[att], silent);
+            }
+        }
+    },
+
+    set: function(key, value, silent) {
+        var el = this.get('element');
+        if (!el) {
+            this._queue[this._queue.length] = ['set', arguments];
+            if (this._configs[key]) {
+                this._configs[key].value = value; // so "get" works while queueing
+            
+            }
+            return;
+        }
+        
+        // set it on the element if not configured and is an HTML attribute
+        if ( !this._configs[key] && !YAHOO.lang.isUndefined(el[key]) ) {
+            this._setHTMLAttrConfig(key);
+        }
+
+        return AttributeProvider.prototype.set.apply(this, arguments);
+    },
+    
+    setAttributeConfig: function(key, map, init) {
+        this._configOrder.push(key);
+        AttributeProvider.prototype.setAttributeConfig.apply(this, arguments);
+    },
+
+    createEvent: function(type, scope) {
+        this._events[type] = true;
+        return AttributeProvider.prototype.createEvent.apply(this, arguments);
+    },
+    
+    init: function(el, attr) {
+        this._initElement(el, attr); 
+    },
+
+    destroy: function() {
+        var el = this.get('element');
+        YAHOO.util.Event.purgeElement(el, true); // purge DOM listeners recursively
+        this.unsubscribeAll(); // unsubscribe all custom events
+
+        if (el && el.parentNode) {
+            el.parentNode.removeChild(el); // pull from the DOM
+        }
+
+        // revert initial configs
+        this._queue = [];
+        this._events = {};
+        this._configs = {};
+        this._configOrder = []; 
+    },
+
+    _initElement: function(el, attr) {
+        this._queue = this._queue || [];
+        this._events = this._events || {};
+        this._configs = this._configs || {};
+        this._configOrder = []; 
+        attr = attr || {};
+        attr.element = attr.element || el || null;
+
+        var isReady = false;  // to determine when to init HTMLElement and content
+
+        var DOM_EVENTS = Element.DOM_EVENTS;
+        this.DOM_EVENTS = this.DOM_EVENTS || {};
+
+        for (var event in DOM_EVENTS) {
+            if (DOM_EVENTS.hasOwnProperty(event)) {
+                this.DOM_EVENTS[event] = DOM_EVENTS[event];
+            }
+        }
+
+        if (typeof attr.element === 'string') { // register ID for get() access
+            this._setHTMLAttrConfig('id', { value: attr.element });
+        }
+
+        if (Dom.get(attr.element)) {
+            isReady = true;
+            this._initHTMLElement(attr);
+            this._initContent(attr);
+        }
+
+        YAHOO.util.Event.onAvailable(attr.element, function() {
+            if (!isReady) { // otherwise already done
+                this._initHTMLElement(attr);
+            }
+
+            this.fireEvent('available', { type: 'available', target: Dom.get(attr.element) });  
+        }, this, true);
+        
+        YAHOO.util.Event.onContentReady(attr.element, function() {
+            if (!isReady) { // otherwise already done
+                this._initContent(attr);
+            }
+            this.fireEvent('contentReady', { type: 'contentReady', target: Dom.get(attr.element) });  
+        }, this, true);
+    },
+
+    _initHTMLElement: function(attr) {
+        /**
+         * The HTMLElement the Element instance refers to.
+         * @attribute element
+         * @type HTMLElement
+         */
+        this.setAttributeConfig('element', {
+            value: Dom.get(attr.element),
+            readOnly: true
+         });
+    },
+
+    _initContent: function(attr) {
+        this.initAttributes(attr);
+        this.setAttributes(attr, true);
+        this.fireQueue();
+
+    },
+
+    /**
+     * Sets the value of the property and fires beforeChange and change events.
+     * @private
+     * @method _setHTMLAttrConfig
+     * @param {YAHOO.util.Element} element The Element instance to
+     * register the config to.
+     * @param {String} key The name of the config to register
+     * @param {Object} map A key-value map of the config's params
+     */
+    _setHTMLAttrConfig: function(key, map) {
+        var el = this.get('element');
+        map = map || {};
+        map.name = key;
+
+        map.setter = map.setter || this.DEFAULT_HTML_SETTER;
+        map.getter = map.getter || this.DEFAULT_HTML_GETTER;
+
+        map.value = map.value || el[key];
+        this._configs[key] = new YAHOO.util.Attribute(map, this);
+    }
+};
+
+/**
+ * Fires when the Element's HTMLElement can be retrieved by Id.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> available<br>
+ * <code><HTMLElement>
+ * target</code> the HTMLElement bound to this Element instance<br>
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('available', handler);</code></p>
+ * @event available
+ */
+ 
+/**
+ * Fires when the Element's HTMLElement subtree is rendered.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> contentReady<br>
+ * <code><HTMLElement>
+ * target</code> the HTMLElement bound to this Element instance<br>
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('contentReady', handler);</code></p>
+ * @event contentReady
+ */
+
+/**
+ * Fires before the Element is appended to another Element.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> beforeAppendTo<br>
+ * <code><HTMLElement/Element>
+ * target</code> the HTMLElement/Element being appended to 
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('beforeAppendTo', handler);</code></p>
+ * @event beforeAppendTo
+ */
+
+/**
+ * Fires after the Element is appended to another Element.
+ * <p>See: <a href="#addListener">Element.addListener</a></p>
+ * <p><strong>Event fields:</strong><br>
+ * <code><String> type</code> appendTo<br>
+ * <code><HTMLElement/Element>
+ * target</code> the HTMLElement/Element being appended to 
+ * <p><strong>Usage:</strong><br>
+ * <code>var handler = function(e) {var target = e.target};<br>
+ * myTabs.addListener('appendTo', handler);</code></p>
+ * @event appendTo
+ */
+
+YAHOO.augment(Element, AttributeProvider);
+YAHOO.util.Element = Element;
+})();
+
+YAHOO.register("element", YAHOO.util.Element, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/event/README
===================================================================
--- trunk/root/static/yui/event/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/event/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,252 +0,0 @@
-
-YUI Library - Event - Release Notes
-
-2.6.0
-  * Legacy event check for Webkit increased to capture Safari 2.0.3.
-  * Added add/removeFocusListener, add/removeBlurListener
-
-2.5.2
-
-  * Custom Event fire() now throws caught exceptions if YAHOO.util.throwErrors =
-    true.  In either case, a message is written to the logger console.
-
-2.5.1
-  * Arrays are once again resized when a listener is removed.
-  * onAvailable/onContentReady stop polling when there is nothing to look for.
-
-2.5.0
-  * Added try/catch to getTarget to suppress errors when targeting
-    ActiveX controls.
-  * Increased the default poll interval to 20ms, and decreased poll
-    retries to 2000 to reduce IE CPU usage.
-  * onDOMReady now uses the native DOMContentLoaded event for the
-    latest releases of WebKit since it support for it was added.
-  * Restored the code that removes all listeners during the unload event to
-    address issues caused by the way FireFox persists listeners through 
-    page refreshes.
-
-2.4.1
-  * Reverted clearAttributes() change to fix IE memory leak on iframes/windows
-
-2.4.0
-  * getListeners/purgeElement accepts either an element reference or an element id
-  * onAvailable/onContentReady accepts a single id or an array of ids
-  * No longer removing listeners during the unload event for non-IE browsers
-  * IE unload strategy for cross page memory leaks changed from removing each listener
-    to calling clearAttributes()
-  * the DOMReady property is now public
-  * Changed IE onDOMReady approach from the defered script node hack to the doScroll('left') hack
-  * getCharChode now Remaps SHIFT-TAB key code (25) to TAB (9) in Safari
-  * getCharCode provides the proper key codes for page up and page down in Safari
-  * Restored object check to _isValidCollection.
-  * In KeyListener, added keycode constants for some of the special keys.
-  * Rolled back the change added for hacking around IE errors from bubbled 
-    events that originally targeted an ActiveX control.
-
-2.3.1
-  * CustomEvent fire() now catches exceptions thrown by the subscribers so
-    that the rest of the subscribers execute.  The exception is logged and
-    stored in the "lastError" property.
-  * Performance tweak: _isValidCollection fails strings first.
-  * onAvailable/onContentReady will work if an element ref rather than an
-    id is provided.
-  * getListeners: fixed the values for the obj and adjust properties.
-    Added scope property.
-  * Added IE hack for when the event target is something that can't be
-    inspected (like a VML canvas).  In this case the target is set to
-    the element the listener is bound to.
-
-2.3.0
-  * addListener now produces a logger warning if the supplied callback is 
-    undefined.
-  * Reduced the likelihood that window onload listeners fire before
-    onAvailable listeners when the two happen near the same moment.
-  * Fixed an IE error that could occur when the library was injected into 
-    the page after window onload.
-  * The onDOMReady listener will be executed immediately if the
-    DOMReady event had already fired prior to the call.
-  * Unsubscribing custom events within a handler for the event now works 
-    properly.
-  * EventProvider unsubscribeAll will unsubscribe all listeners from
-    all hosted custom events if the type is not specified.
-  * Event.getKeyCode now checks keyCode before charCode for Safari normalization.  
-    Safari arrow key codes are normalized as well.
-  * Broke up the </script> in Event to allow it to be included inline
-
-2.2.2
-  * No change
-
-2.2.1
-  * onAvailable listeners are processed before onContentReady listeners so
-    they fire in the logical order when an element is found to be available 
-    and ready in the same pass.
-  * Added onDOMReady for receiving notification when the DOM is first usable.
-  * In Internet Explorer, onAvailable/onContentReady checks now start when
-    DOMReady fires to reduce the possibility of receiving an "operation
-    aborted" errors when inserting DOM nodes during in the onAvailable/
-    onContentReady listener execution.
-  * CustomEvent subscribers supplying undefined callbacks will be notified
-    when subscribing rather than having an ambiguous error thrown when the
-    event is fired.
-  * Fixed missing html tags in the examples.
-  * POLL_INTERVAL is 10 ms.
-  * YAHOO.util.CustomEvent is now declared before YAHOO.util.Event.
-
-2.2.0
-
-  * YAHOO.util.KeyListener was moved from the container package into event.
-  
-  * The Safari bug that made it so preventDefault would not work with click
-    and double-click listeners on anchor tags was resolved in version 2.0.4.
-    The workaround (using DOM0 events for these instead of the normal DOM2
-    events) is now only used for releases prior to 2.0.4.
-    
-  * getListeners/purgeElement now work correctly with unload listeners
-
-  * When legacyEvents are used (Safari<2.0.4 click events), if there was an
-    existing DOM0 event that the utility replaced, it is executed along with
-    the listeners that were added with the utility.
-
-  * Restored Event.regCE for compatibility with a beta release of the library
-    that in use in an external API.
-
-  * unsubscribe in CustomEvent and EventProvider will remove all listeners
-    if the listener is omitted.
-
-  * Added unsubscribeAll to EventProvider
-
-  * Added Event.lastError which stores the most recent error object if
-    a browser-specific add/remove listener call throws an exception.
-
-0.12.2
-
-  * Fixed a bug introduced in 0.12.1 release caused nested onAvailable
-    calls to fail.
-
-0.12.1
-
-  * If an error is thrown during the browser-specific add/remove lister call,
-    addListener/removeListener will catch the error and return false.
-
-  * onAvailable array items are nulled out instead of deleted when completed to
-    get around an Opera issue introduced in a recent version of the browser.
-
-0.12.0
-
-   * If the function argument is not provided to Event.removeListener, all
-     all listeners for the specified event type on the element will be removed.
-
-   * CustomEvent now has an optional parameter that defines the signature of
-     the listeners for this event.  Two signatures are supported:
-
-       YAHOO.util.CustomEvent.LIST:
-         param1: event name
-         param2: array of arguments provided to fire()
-         param3: <optional> the custom object supplied to subscribe()
-
-       YAHOO.util.CustomEvent.FLAT:
-         param1: the first argument provided to fire()
-         param2: <optional> the custom object supplied to subscribe()
-
-     The new flat signature makes it possible to provide a better API 
-     when using custom events, and it makes it possible to transparently 
-     wrap DOM events.
-   
-   * The parameters for overriding scope in both Event.addListener, and
-     CustomEvent.subscribe have been augmented.  In addition to the 
-     previous behavior where a true value would make the previous parameter
-     the execution scope, an object can be supplied instead.  If an object
-     is provided, that object becomes the scope obj.  This makes it possible 
-     to pass a both a custom object and adjust the scope to a different object.
-
-   * Added EventProvider, which is a wrapper for CustomEvent that makes it
-     possible to subscribe to events by name, whether or not the event has
-     been created.  This class was designed to be used with YAHOO.augment.
-     EventProvider custom events are created with the new FLAT listener
-     signature.
-
-   * CustomEvent subscribers can return false to stop the propagation of
-     the event.
-
-   * CustomEvents now have an onSubscribe custom event that can used to the
-     case where a subscriber subscribes to an one-time event that has already
-     happened.  Also provides a way for the implementer to defer initialization
-     logic until after the first subscription.
-
-   * Event.getCharCode now always returns keyCode if charCode is not available.
-
-   * Added Event.onContentReady, which is similar to onAvailable, but it also
-     checks simblings to try to determine when the element's children are
-     available.
-
-0.11.4
-
-   * Fixed a memory leak in IE6 that occurred when the utility was hosted in 
-     an iframe.
-
-   * Fixed an issue with Safari click listeners when listeners were removed.
-
-0.11.3
-
-   * The listener cache is now pruned when events are removed.  This fixes
-     a performance issue when adding many listeners, removing them, and
-     adding them again repeatedly.
-
-   * Safari click listeners will work correctly if a bound element is removed
-     from the DOM and a new element with the same ID is added.
-
-   * Removed the code that automatically unsubscribed custom event listeners.
-
-0.11.0
-
-   * Added Event.purgeElement which will remove all listeners added via 
-     addListener from the supplied element.  If an optional "type" parameter
-     is supplied, only events of that type will be removed.  Optionally, the
-     purge can be performed recursively on the element's children as well.
-
-   * Added Event.getListeners which will return all listeners attached to 
-     a given element.. either all listeners or listeners of a specific type.
-
-   * getTarget now automatically resolves text nodes.  The optional parameter
-     for this feature is now deprecated.
-
-   * getRelatedTarget now resolves text nodes for the browsers that return the
-     text node rather than its host HTML element.
-
-   * CustomEvent now logs the custom event activity if the logger widget is available
-
-0.10.0
-
-   * Added Safari dblclick to the list of legacy events.
-
-   * When multiple identical event handlers are defined, multiple calls
-     to removeListener can now remove all of them.
-
-   * removeListener works properly for unload events
-
-   * Legacy event bookkeeping is more efficient, improving the performance for
-     adding Safari click events.
-
-   * _unload() is more efficient, improving the page transition experience in 
-     Safari in particular.
-
-   * addListener, removeListener now return false if the function argument is
-     not valid.
-
-   * Fixed an operator precedence issue in getCharCode.
-
-   * Added Event.getXY, which returns [Event.getPageX(e), Event.getPageY(e)]
-
-   * Added Event.onAvailable, which will execute the callback when the element
-     with the supplied id is found.  Currently searches periodically until the
-     window load event or for up to 10 seconds after the onAvailable method 
-     was executed.
-
-   * The lazy listener attachment process now will poll beyond the window load
-     event in order to better handle the case when a listener is defined
-     late in the page but before the element is in the dom.
-
-   * Fixed browser detection for Opera installations reporting as IE.
-
-   * It is now possible to remove and re-add legacy events (Safari click event).
-

Modified: trunk/root/static/yui/event/event-debug.js
===================================================================
--- trunk/root/static/yui/event/event-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/event/event-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 
 /**
@@ -11,7 +11,7 @@
  *
  * @param {String}  type The type of event, which is passed to the callback
  *                  when the event fires
- * @param {Object}  oScope The context the event will fire from.  "this" will
+ * @param {Object}  context The context the event will fire from.  "this" will
  *                  refer to this object in the callback.  Default value: 
  *                  the window object.  The listener can override this.
  * @param {boolean} silent pass true to prevent the event from writing to
@@ -24,7 +24,7 @@
  * @class CustomEvent
  * @constructor
  */
-YAHOO.util.CustomEvent = function(type, oScope, silent, signature) {
+YAHOO.util.CustomEvent = function(type, context, silent, signature) {
 
     /**
      * The type of event, returned to subscribers when the event fires
@@ -34,12 +34,12 @@
     this.type = type;
 
     /**
-     * The scope the the event will fire from by default.  Defaults to the window 
+     * The context the the event will fire from by default.  Defaults to the window 
      * obj
      * @property scope
      * @type object
      */
-    this.scope = oScope || window;
+    this.scope = context || window;
 
     /**
      * By default all custom events are logged in the debug build, set silent
@@ -100,11 +100,12 @@
          * @type YAHOO.util.CustomEvent
          * @param {Function} fn The function to execute
          * @param {Object}   obj An object to be passed along when the event 
-         *                       fires
+         *                       fires defaults to the custom event
          * @param {boolean|Object}  override If true, the obj passed in becomes 
-         *                                   the execution scope of the listener.
+         *                                   the execution context of the listener.
          *                                   if an object, that object becomes the
-         *                                   the execution scope.
+         *                                   the execution context. defaults to
+         *                                   the custom event
          */
         this.subscribeEvent = 
                 new YAHOO.util.CustomEvent(onsubscribeType, this, true);
@@ -150,22 +151,22 @@
      * @param {Function} fn        The function to execute
      * @param {Object}   obj       An object to be passed along when the event 
      *                             fires
-     * @param {boolean|Object}  override If true, the obj passed in becomes 
-     *                                   the execution scope of the listener.
+     * @param {boolean|Object}  overrideContext If true, the obj passed in becomes 
+     *                                   the execution context of the listener.
      *                                   if an object, that object becomes the
-     *                                   the execution scope.
+     *                                   the execution context.
      */
-    subscribe: function(fn, obj, override) {
+    subscribe: function(fn, obj, overrideContext) {
 
         if (!fn) {
 throw new Error("Invalid callback for subscriber to '" + this.type + "'");
         }
 
         if (this.subscribeEvent) {
-            this.subscribeEvent.fire(fn, obj, override);
+            this.subscribeEvent.fire(fn, obj, overrideContext);
         }
 
-        this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, override) );
+        this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, overrideContext) );
     },
 
     /**
@@ -200,7 +201,7 @@
 
     /**
      * Notifies the subscribers.  The callback functions will be executed
-     * from the scope specified when the event was created, and with the 
+     * from the context specified when the event was created, and with the 
      * following parameters:
      *   <ul>
      *   <li>The type of event</li>
@@ -299,13 +300,14 @@
      * @return {int} The number of listeners unsubscribed
      */
     unsubscribeAll: function() {
-        for (var i=this.subscribers.length-1; i>-1; i--) {
+        var l = this.subscribers.length, i;
+        for (i=l-1; i>-1; i--) {
             this._delete(i);
         }
 
         this.subscribers=[];
 
-        return i;
+        return l;
     },
 
     /**
@@ -328,7 +330,7 @@
      */
     toString: function() {
          return "CustomEvent: " + "'" + this.type  + "', " + 
-             "scope: " + this.scope;
+             "context: " + this.scope;
 
     }
 };
@@ -339,12 +341,12 @@
  * Stores the subscriber information to be used when the event fires.
  * @param {Function} fn       The function to execute
  * @param {Object}   obj      An object to be passed along when the event fires
- * @param {boolean}  override If true, the obj passed in becomes the execution
- *                            scope of the listener
+ * @param {boolean}  overrideContext If true, the obj passed in becomes the execution
+ *                            context of the listener
  * @class Subscriber
  * @constructor
  */
-YAHOO.util.Subscriber = function(fn, obj, override) {
+YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
 
     /**
      * The callback that will be execute when the event fires
@@ -362,32 +364,32 @@
     this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
 
     /**
-     * The default execution scope for the event listener is defined when the
+     * The default execution context for the event listener is defined when the
      * event is created (usually the object which contains the event).
-     * By setting override to true, the execution scope becomes the custom
-     * object passed in by the subscriber.  If override is an object, that 
-     * object becomes the scope.
-     * @property override
+     * By setting overrideContext to true, the execution context becomes the custom
+     * object passed in by the subscriber.  If overrideContext is an object, that 
+     * object becomes the context.
+     * @property overrideContext
      * @type boolean|object
      */
-    this.override = override;
+    this.overrideContext = overrideContext;
 
 };
 
 /**
- * Returns the execution scope for this listener.  If override was set to true
- * the custom obj will be the scope.  If override is an object, that is the
- * scope, otherwise the default scope will be used.
+ * Returns the execution context for this listener.  If overrideContext was set to true
+ * the custom obj will be the context.  If overrideContext is an object, that is the
+ * context, otherwise the default context will be used.
  * @method getScope
- * @param {Object} defaultScope the scope to use if this listener does not
+ * @param {Object} defaultScope the context to use if this listener does not
  *                              override it.
  */
 YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
-    if (this.override) {
-        if (this.override === true) {
+    if (this.overrideContext) {
+        if (this.overrideContext === true) {
             return this.obj;
         } else {
-            return this.override;
+            return this.overrideContext;
         }
     }
     return defaultScope;
@@ -416,7 +418,7 @@
  */
 YAHOO.util.Subscriber.prototype.toString = function() {
     return "Subscriber { obj: " + this.obj  + 
-           ", override: " +  (this.override || "no") + " }";
+           ", overrideContext: " +  (this.overrideContext || "no") + " }";
 };
 
 /**
@@ -599,7 +601,7 @@
             FN: 2,
 
             /**
-             * Function wrapped for scope correction and cleanup, int constant
+             * Function wrapped for context correction and cleanup, int constant
              * @property WFN
              * @type int
              * @static
@@ -619,7 +621,7 @@
             UNLOAD_OBJ: 3,
 
             /**
-             * Adjusted scope, either the element we are registering the event
+             * Adjusted context, either the element we are registering the event
              * on or the custom object passed in by the listener, int constant
              * @property ADJ_SCOPE
              * @type int
@@ -638,7 +640,7 @@
             OBJ: 5,
 
             /**
-             * The original scope parameter passed into addListener
+             * The original context parameter passed into addListener
              * @property OVERRIDE
              * @type int
              * @static
@@ -647,16 +649,6 @@
             OVERRIDE: 6,
 
             /**
-             * The original capture parameter passed into _addListener
-             * @property CAPTURE
-             * @type int
-             * @static
-             * @final
-             */
-            CAPTURE: 7,
-
-
-            /**
              * addListener/removeListener can throw errors in unexpected scenarios.
              * These errors are suppressed, the method returns false, and this property
              * is set
@@ -755,26 +747,26 @@
              *
              * @method onAvailable
              *
-             * @param {string||string[]}   p_id the id of the element, or an array
+             * @param {string||string[]}   id the id of the element, or an array
              * of ids to look for.
-             * @param {function} p_fn what to execute when the element is found.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_override If set to true, p_fn will execute
-             *                   in the scope of p_obj, if set to an object it
-             *                   will execute in the scope of that object
+             * @param {function} fn what to execute when the element is found.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
              * @param checkContent {boolean} check child node readiness (onContentReady)
              * @static
              */
-            onAvailable: function(p_id, p_fn, p_obj, p_override, checkContent) {
+            onAvailable: function(id, fn, obj, overrideContext, checkContent) {
 
-                var a = (YAHOO.lang.isString(p_id)) ? [p_id] : p_id;
+                var a = (YAHOO.lang.isString(id)) ? [id] : id;
 
                 for (var i=0; i<a.length; i=i+1) {
                     onAvailStack.push({id:         a[i], 
-                                       fn:         p_fn, 
-                                       obj:        p_obj, 
-                                       override:   p_override, 
+                                       fn:         fn, 
+                                       obj:        obj, 
+                                       overrideContext:   overrideContext, 
                                        checkReady: checkContent });
                 }
 
@@ -793,18 +785,18 @@
              *
              * @method onContentReady
              *
-             * @param {string}   p_id the id of the element to look for.
-             * @param {function} p_fn what to execute when the element is ready.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_override If set to true, p_fn will execute
-             *                   in the scope of p_obj.  If an object, p_fn will
-             *                   exectute in the scope of that object
+             * @param {string}   id the id of the element to look for.
+             * @param {function} fn what to execute when the element is ready.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj.  If an object, fn will
+             *                   exectute in the context of that object
              *
              * @static
              */
-            onContentReady: function(p_id, p_fn, p_obj, p_override) {
-                this.onAvailable(p_id, p_fn, p_obj, p_override, true);
+            onContentReady: function(id, fn, obj, overrideContext) {
+                this.onAvailable(id, fn, obj, overrideContext, true);
             },
 
             /**
@@ -830,30 +822,30 @@
              *
              * @method onDOMReady
              *
-             * @param {function} p_fn what to execute when the element is found.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_scope If set to true, p_fn will execute
-             *                   in the scope of p_obj, if set to an object it
-             *                   will execute in the scope of that object
+             * @param {function} fn what to execute when the element is found.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
              *
              * @static
              */
-            onDOMReady: function(p_fn, p_obj, p_override) {
+            onDOMReady: function(fn, obj, overrideContext) {
                 if (this.DOMReady) {
                     setTimeout(function() {
                         var s = window;
-                        if (p_override) {
-                            if (p_override === true) {
-                                s = p_obj;
+                        if (overrideContext) {
+                            if (overrideContext === true) {
+                                s = obj;
                             } else {
-                                s = p_override;
+                                s = overrideContext;
                             }
                         }
-                        p_fn.call(s, "DOMReady", [], p_obj);
+                        fn.call(s, "DOMReady", [], obj);
                     }, 0);
                 } else {
-                    this.DOMReadyEvent.subscribe(p_fn, p_obj, p_override);
+                    this.DOMReadyEvent.subscribe(fn, obj, overrideContext);
                 }
             },
 
@@ -870,10 +862,10 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @param {boolen}      capture capture or bubble phase
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
@@ -882,7 +874,7 @@
              * @private
              * @static
              */
-            _addListener: function(el, sType, fn, obj, override, capture) {
+            _addListener: function(el, sType, fn, obj, overrideContext, bCapture) {
 
                 if (!fn || !fn.call) {
                     YAHOO.log(sType + " addListener failed, invalid callback", "error", "Event");
@@ -893,12 +885,11 @@
                 if ( this._isValidCollection(el)) {
                     var ok = true;
                     for (var i=0,len=el.length; i<len; ++i) {
-                        ok = this._addListener(el[i], 
+                        ok = this.on(el[i], 
                                        sType, 
                                        fn, 
                                        obj, 
-                                       override, 
-                                       capture) && ok;
+                                       overrideContext) && ok;
                     }
                     return ok;
 
@@ -916,7 +907,7 @@
                     } else {
                         // defer adding the event until the element is available
                         this.onAvailable(el, function() {
-                           YAHOO.util.Event._addListener(el, sType, fn, obj, override, capture);
+                           YAHOO.util.Event.on(el, sType, fn, obj, overrideContext);
                         });
 
                         return true;
@@ -936,32 +927,32 @@
                 // handles explicitly during our one unload event.
                 if ("unload" == sType && obj !== this) {
                     unloadListeners[unloadListeners.length] =
-                            [el, sType, fn, obj, override, capture];
+                            [el, sType, fn, obj, overrideContext];
                     return true;
                 }
 
                 // this.logger.debug("Adding handler: " + el + ", " + sType);
 
-                // if the user chooses to override the scope, we use the custom
-                // object passed in, otherwise the executing scope will be the
+                // if the user chooses to override the context, we use the custom
+                // object passed in, otherwise the executing context will be the
                 // HTML element that the event is registered on
-                var scope = el;
-                if (override) {
-                    if (override === true) {
-                        scope = obj;
+                var context = el;
+                if (overrideContext) {
+                    if (overrideContext === true) {
+                        context = obj;
                     } else {
-                        scope = override;
+                        context = overrideContext;
                     }
                 }
 
                 // wrap the function so we can return the obj object when
                 // the event fires;
                 var wrappedFn = function(e) {
-                        return fn.call(scope, YAHOO.util.Event.getEvent(e, el), 
+                        return fn.call(context, YAHOO.util.Event.getEvent(e, el), 
                                 obj);
                     };
 
-                var li = [el, sType, fn, wrappedFn, scope, obj, override, capture];
+                var li = [el, sType, fn, wrappedFn, context, obj, overrideContext];
                 var index = listeners.length;
                 // cache the listener so we can try to automatically unload
                 listeners[index] = li;
@@ -997,12 +988,12 @@
 
                 } else {
                     try {
-                        this._simpleAdd(el, sType, wrappedFn, capture);
+                        this._simpleAdd(el, sType, wrappedFn, bCapture);
                     } catch(ex) {
                         // handle an error trying to attach an event.  If it fails
                         // we need to clean up the cache
                         this.lastError = ex;
-                        this._removeListener(el, sType, fn, capture);
+                        this.removeListener(el, sType, fn);
                         return false;
                     }
                 }
@@ -1024,23 +1015,23 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addListener: function (el, sType, fn, obj, override) {
-                return this._addListener(el, sType, fn, obj, override, false);
+            addListener: function (el, sType, fn, obj, overrideContext) {
+                return this._addListener(el, sType, fn, obj, overrideContext, false);
             },
 
             /**
              * Appends a focus event handler.  (The focusin event is used for Internet Explorer, 
-             * the focus, capture-event for Opera, WebKit, and Gecko.)
+             * the focus, capture-event for Opera, WebKit.)
              *
              * @method addFocusListener
              *
@@ -1050,25 +1041,25 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addFocusListener: function (el, fn, obj, override) {
-                return this._addListener(el, _FOCUS, fn, obj, override, true);
+            addFocusListener: function (el, fn, obj, overrideContext) {
+                return this._addListener(el, _FOCUS, fn, obj, overrideContext, true);
             },          
 
 
             /**
              * Removes a focus event listener
              *
-             * @method removeFocusListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1081,12 +1072,12 @@
              * @static
              */
             removeFocusListener: function (el, fn) { 
-                return this._removeListener(el, _FOCUS, fn, true);
+                return this.removeListener(el, _FOCUS, fn);
             },
 
             /**
              * Appends a blur event handler.  (The focusout event is used for Internet Explorer, 
-             * the focusout, capture-event for Opera, WebKit, and Gecko.)
+             * the focusout, capture-event for Opera, WebKit.)
              *
              * @method addBlurListener
              *
@@ -1096,24 +1087,24 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addBlurListener: function (el, fn, obj, override) {
-                return this._addListener(el, _BLUR, fn, obj, override, true);
+            addBlurListener: function (el, fn, obj, overrideContext) {
+                return this._addListener(el, _BLUR, fn, obj, overrideContext, true);
             },          
 
             /**
              * Removes a blur event listener
              *
-             * @method removeBlurListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1127,7 +1118,7 @@
              */
             removeBlurListener: function (el, fn) { 
             
-                return this._removeListener(el, _BLUR, fn, true);
+                return this.removeListener(el, _BLUR, fn);
             
             },
 
@@ -1140,15 +1131,15 @@
              */
             fireLegacyEvent: function(e, legacyIndex) {
                 // this.logger.debug("fireLegacyEvent " + legacyIndex);
-                var ok=true, le, lh, li, scope, ret;
+                var ok=true, le, lh, li, context, ret;
                 
                 lh = legacyHandlers[legacyIndex].slice();
                 for (var i=0, len=lh.length; i<len; ++i) {
                 // for (var i in lh.length) {
                     li = lh[i];
                     if ( li && li[this.WFN] ) {
-                        scope = li[this.ADJ_SCOPE];
-                        ret = li[this.WFN].call(scope, e);
+                        context = li[this.ADJ_SCOPE];
+                        ret = li[this.WFN].call(context, e);
                         ok = (ok && ret);
                     }
                 }
@@ -1196,7 +1187,7 @@
             /**
              * Removes an event listener
              *
-             * @method _removeListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1205,13 +1196,11 @@
              * @param {Function} fn the method the event invokes.  If fn is
              *  undefined, then all event handlers for the type of event are 
              *  removed.
-             * @param {boolen}      capture capture or bubble phase             
              * @return {boolean} true if the unbind was successful, false 
              *  otherwise.
              * @static
-             * @private
              */
-            _removeListener: function(el, sType, fn, capture) {
+            removeListener: function(el, sType, fn) {
                 var i, len, li;
 
                 // The el argument can be a string
@@ -1221,7 +1210,7 @@
                 } else if ( this._isValidCollection(el)) {
                     var ok = true;
                     for (i=el.length-1; i>-1; i--) {
-                        ok = ( this._removeListener(el[i], sType, fn, capture) && ok );
+                        ok = ( this.removeListener(el[i], sType, fn) && ok );
                     }
                     return ok;
                 }
@@ -1254,7 +1243,7 @@
                 // The index is a hidden parameter; needed to remove it from
                 // the method signature because it was tempting users to
                 // try and take advantage of it, which is not possible.
-                var index = arguments[4];
+                var index = arguments[3];
   
                 if ("undefined" === typeof index) {
                     index = this._getCacheIndex(el, sType, fn);
@@ -1291,7 +1280,7 @@
 
                 } else {
                     try {
-                        this._simpleRemove(el, sType, cacheItem[this.WFN], capture);
+                        this._simpleRemove(el, sType, cacheItem[this.WFN], false);
                     } catch(ex) {
                         this.lastError = ex;
                         return false;
@@ -1308,31 +1297,7 @@
 
             },
 
-
             /**
-             * Removes an event listener
-             *
-             * @method removeListener
-             *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to remove
-             *  the listener from.
-             * @param {String} sType the type of event to remove.
-             * @param {Function} fn the method the event invokes.  If fn is
-             *  undefined, then all event handlers for the type of event are 
-             *  removed.
-             * @return {boolean} true if the unbind was successful, false 
-             *  otherwise.
-             * @static
-             */
-            removeListener: function(el, sType, fn) {
-
-				return this._removeListener(el, sType, fn, false);
-
-            },
-
-
-            /**
              * Returns the event's target element.  Safari sometimes provides
              * a text node, and this is automatically resolved to the text
              * node's parent so that it behaves like other browsers.
@@ -1710,8 +1675,10 @@
 
                 if (onAvailStack.length === 0) {
                     retryCount = 0;
-                    clearInterval(this._interval);
-                    this._interval = null;
+                    if (this._interval) {
+                        clearInterval(this._interval);
+                        this._interval = null;
+                    } 
                     return;
                 }
 
@@ -1746,15 +1713,15 @@
                 var notAvail = [];
 
                 var executeItem = function (el, item) {
-                    var scope = el;
-                    if (item.override) {
-                        if (item.override === true) {
-                            scope = item.obj;
+                    var context = el;
+                    if (item.overrideContext) {
+                        if (item.overrideContext === true) {
+                            context = item.obj;
                         } else {
-                            scope = item.override;
+                            context = item.overrideContext;
                         }
                     }
-                    item.fn.call(scope, item.obj);
+                    item.fn.call(context, item.obj);
                 };
 
                 var i, len, item, el, ready=[];
@@ -1799,8 +1766,10 @@
 
                     this.startInterval();
                 } else {
-                    clearInterval(this._interval);
-                    this._interval = null;
+                    if (this._interval) {
+                        clearInterval(this._interval);
+                        this._interval = null;
+                    }
                 }
 
                 this.locked = false;
@@ -1825,7 +1794,7 @@
                 if (elListeners) {
                     for (i=elListeners.length-1; i>-1; i--) {
                         var l = elListeners[i];
-                        this._removeListener(oEl, l.type, l.fn, l.capture);
+                        this.removeListener(oEl, l.type, l.fn);
                     }
                 }
 
@@ -1847,9 +1816,8 @@
              *   type:   (string)   the type of event
              *   fn:     (function) the callback supplied to addListener
              *   obj:    (object)   the custom object supplied to addListener
-             *   adjust: (boolean|object)  whether or not to adjust the default scope
-             *   scope: (boolean)  the derived scope based on the adjust parameter
-             *   scope: (capture)  the capture parameter supplied to addListener
+             *   adjust: (boolean|object)  whether or not to adjust the default context
+             *   scope: (boolean)  the derived context based on the adjust parameter
              *   index:  (int)      its position in the Event util listener cache
              * @static
              */           
@@ -1878,7 +1846,6 @@
                                     obj:    l[this.OBJ],
                                     adjust: l[this.OVERRIDE],
                                     scope:  l[this.ADJ_SCOPE],
-                                    capture:  l[this.CAPTURE],                                    
                                     index:  i
                                 });
                             }
@@ -1899,27 +1866,27 @@
             _unload: function(e) {
 
                 var EU = YAHOO.util.Event, i, j, l, len, index,
-                         ul = unloadListeners.slice();
+                         ul = unloadListeners.slice(), context;
 
                 // execute and clear stored unload listeners
-                for (i=0,len=unloadListeners.length; i<len; ++i) {
+                for (i=0, len=unloadListeners.length; i<len; ++i) {
                     l = ul[i];
                     if (l) {
-                        var scope = window;
+                        context = window;
                         if (l[EU.ADJ_SCOPE]) {
                             if (l[EU.ADJ_SCOPE] === true) {
-                                scope = l[EU.UNLOAD_OBJ];
+                                context = l[EU.UNLOAD_OBJ];
                             } else {
-                                scope = l[EU.ADJ_SCOPE];
+                                context = l[EU.ADJ_SCOPE];
                             }
                         }
-                        l[EU.FN].call(scope, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                        l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
                         ul[i] = null;
-                        l=null;
-                        scope=null;
                     }
                 }
 
+                l = null;
+                context = null;
                 unloadListeners = null;
 
                 // Remove listeners to handle IE memory leaks
@@ -1933,7 +1900,7 @@
                     for (j=listeners.length-1; j>-1; j--) {
                         l = listeners[j];
                         if (l) {
-                            EU._removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], l[EU.CAPTURE], j);
+                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
                         } 
                     }
                     l=null;
@@ -1996,7 +1963,7 @@
             },
 
             /**
-             * Adds a DOM event directly without the caching, cleanup, scope adj, etc
+             * Adds a DOM event directly without the caching, cleanup, context adj, etc
              *
              * @method _simpleAdd
              * @param {HTMLElement} el      the element to bind the handler to
@@ -2171,16 +2138,16 @@
      * @param p_fn       {function} the function to exectute when the event fires
      * @param p_obj      {Object}   An object to be passed along when the event 
      *                              fires
-     * @param p_override {boolean}  If true, the obj passed in becomes the 
+     * @param overrideContext {boolean}  If true, the obj passed in becomes the 
      *                              execution scope of the listener
      */
-    subscribe: function(p_type, p_fn, p_obj, p_override) {
+    subscribe: function(p_type, p_fn, p_obj, overrideContext) {
 
         this.__yui_events = this.__yui_events || {};
         var ce = this.__yui_events[p_type];
 
         if (ce) {
-            ce.subscribe(p_fn, p_obj, p_override);
+            ce.subscribe(p_fn, p_obj, overrideContext);
         } else {
             this.__yui_subscribers = this.__yui_subscribers || {};
             var subs = this.__yui_subscribers;
@@ -2188,7 +2155,7 @@
                 subs[p_type] = [];
             }
             subs[p_type].push(
-                { fn: p_fn, obj: p_obj, override: p_override } );
+                { fn: p_fn, obj: p_obj, overrideContext: overrideContext } );
         }
     },
 
@@ -2295,7 +2262,7 @@
 
             if (qs) {
                 for (var i=0; i<qs.length; ++i) {
-                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].override);
+                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].overrideContext);
                 }
             }
         }
@@ -2354,10 +2321,10 @@
 
 };
 
-//@TODO optimize
-//@TODO use event utility, lang abstractions
-//@TODO replace
+(function() {
 
+    var Event = YAHOO.util.Event, Lang = YAHOO.lang;
+
 /**
 * KeyListener is a utility that provides an easy interface for listening for
 * keydown/keyup events fired against DOM elements.
@@ -2434,11 +2401,11 @@
     */
     this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
 
-    if (typeof attachTo == 'string') {
-        attachTo = document.getElementById(attachTo);
+    if (Lang.isString(attachTo)) {
+        attachTo = document.getElementById(attachTo); // No Dom util
     }
 
-    if (typeof handler == 'function') {
+    if (Lang.isFunction(handler)) {
         keyEvent.subscribe(handler);
     } else {
         keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
@@ -2467,26 +2434,22 @@
             e.altKey   == keyData.alt &&
             e.ctrlKey  == keyData.ctrl) { // if we pass this, all modifiers match
             
-            var dataItem;
+            var dataItem, keys = keyData.keys, key;
 
-            if (keyData.keys instanceof Array) {
-                for (var i=0;i<keyData.keys.length;i++) {
-                    dataItem = keyData.keys[i];
+            if (YAHOO.lang.isArray(keys)) {
+                for (var i=0;i<keys.length;i++) {
+                    dataItem = keys[i];
+                    key = Event.getCharCode(e);
 
-                    if (dataItem == e.charCode ) {
-                        keyEvent.fire(e.charCode, e);
+                    if (dataItem == key) {
+                        keyEvent.fire(key, e);
                         break;
-                    } else if (dataItem == e.keyCode) {
-                        keyEvent.fire(e.keyCode, e);
-                        break;
                     }
                 }
             } else {
-                dataItem = keyData.keys;
-                if (dataItem == e.charCode ) {
-                    keyEvent.fire(e.charCode, e);
-                } else if (dataItem == e.keyCode) {
-                    keyEvent.fire(e.keyCode, e);
+                key = Event.getCharCode(e);
+                if (keys == key ) {
+                    keyEvent.fire(key, e);
                 }
             }
         }
@@ -2499,7 +2462,7 @@
     */
     this.enable = function() {
         if (! this.enabled) {
-            YAHOO.util.Event.addListener(attachTo, event, handleKeyPress);
+            Event.on(attachTo, event, handleKeyPress);
             this.enabledEvent.fire(keyData);
         }
         /**
@@ -2517,7 +2480,7 @@
     */
     this.disable = function() {
         if (this.enabled) {
-            YAHOO.util.Event.removeListener(attachTo, event, handleKeyPress);
+            Event.removeListener(attachTo, event, handleKeyPress);
             this.disabledEvent.fire(keyData);
         }
         this.enabled = false;
@@ -2535,6 +2498,8 @@
 
 };
 
+var KeyListener = YAHOO.util.KeyListener;
+
 /**
  * Constant representing the DOM "keydown" event.
  * @property YAHOO.util.KeyListener.KEYDOWN
@@ -2542,7 +2507,7 @@
  * @final
  * @type String
  */
-YAHOO.util.KeyListener.KEYDOWN = "keydown";
+KeyListener.KEYDOWN = "keydown";
 
 /**
  * Constant representing the DOM "keyup" event.
@@ -2551,7 +2516,7 @@
  * @final
  * @type String
  */
-YAHOO.util.KeyListener.KEYUP = "keyup";
+KeyListener.KEYUP = "keyup";
 
 /**
  * keycode constants for a subset of the special keys
@@ -2559,7 +2524,7 @@
  * @static
  * @final
  */
-YAHOO.util.KeyListener.KEY = {
+KeyListener.KEY = {
     ALT          : 18,
     BACK_SPACE   : 8,
     CAPS_LOCK    : 20,
@@ -2584,4 +2549,6 @@
     TAB          : 9,
     UP           : 38
 };
-YAHOO.register("event", YAHOO.util.Event, {version: "2.6.0", build: "1321"});
+
+})();
+YAHOO.register("event", YAHOO.util.Event, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/event/event-min.js
===================================================================
--- trunk/root/static/yui/event/event-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/event/event-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C!
 =this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}!
 else{return this.override;}}return A;};YAHOO.util.Subscriber.p!
 rototype
.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(R,O,S,Q,P){var M=(YAHOO.lang.isString(R))?[R]:R;for(!
 var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:S,override:Q,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(O,M,P,N){this.onAvailable(O,M,P,N,true);},onDOMReady:function(M,O,N){if(this.DOMReady){setTimeout(function(){var P=window;if(N){if(N===true){P=O;}else{P=N;}}M.call(P,"DOMReady",[],O);},0);}else{this.DOMReadyEvent.subscribe(M,O,N);}},_addListener:function(O,M,X,S,N,a){if(!X||!X.call){return false;}if(this._isValidCollection(O)){var Y=true;for(var T=0,V=O.length;T<V;++T){Y=this._addListener(O[T],M,X,S,N,a)&&Y;}return Y;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event._addListener(O,M,X,S,N,a);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,X,S,N,a];return true;}var b=O;if(N){if(N===true){b=S;}else{b=N;}}var P=function(c){return X.call(b,YAHOO.util.Event.getEvent(c,O),S);};var Z=[O,M,X,P,b,S,N,a];var U=I.length;I[U]=Z;if(this.useLegac!
 yEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][!
 0]){Q=G.
length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(Z);}else{try{this._simpleAdd(O,M,P,a);}catch(W){this.lastError=W;this._removeListener(O,M,X,a);return false;}}return true;},addListener:function(O,Q,N,P,M){return this._addListener(O,Q,N,P,M,false);},addFocusListener:function(O,N,P,M){return this._addListener(O,K,N,P,M,true);},removeFocusListener:function(N,M){return this._removeListener(N,K,M,true);},addBlurListener:function(O,N,P,M){return this._addListener(O,L,N,P,M,true);},removeBlurListener:function(N,M){return this._removeListener(N,L,M,true);},fireLegacyEvent:function(Q,O){var S=true,M,U,T,V,R;U=E[O].slice();for(var N=0,P=U.length;N<P;++N){T=U[N];if(T&&T[this.WFN]){V=T[this.ADJ_SCOPE];R=T[this.WFN].call(V,Q);S=(S&&R);}}M=G[O];if(M&&M[2]){M[2](Q);}return S;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},u!
 seLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},_removeListener:function(N,M,V,Y){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this._removeListener(N[Q],M,V,Y)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[4];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],Y);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
-I.splice(S,1);return true;},removeListener:function(N,O,M){return this._removeListener(N,O,M,false);},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stop!
 Propagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_!
 load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready!
 ();M._tr
yPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.override){if(W.override===true){U=W.obj;}else{U=W.override;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:fun!
 ction(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this._removeListener(O,N.type,N.fn,N.capture);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],capture:P[this.CAPTURE],index:S});}}}}return(R.length)?R:null;},_unload:function(S){var M=YAHOO.util.Event,P,O,N,R,Q,T=J.slice();for(P=0,R=J.length;P<R;++P){N=T[P];if(N){var U=window;if(N[M.ADJ_SCOPE]){if(N[M.ADJ_SCOPE]===true){U=N[M.UNLOAD_OBJ];}else{U=N[M.ADJ_SCOPE];}}N[M.FN].call(U,M.getEvent(S,N[M.EL]),N[M.UNL!
 OAD_OBJ]);T[P]=null;N=null;U=null;}}J=null;if(I){for(O=I.lengt!
 h-1;O>-1
;O--){N=I[O];if(N){M._removeListener(N[M.EL],N[M.TYPE],N[M.FN],N[M.CAPTURE],O);}}N=null;}G=null;M._simpleRemove(window,"unload",M._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=!
 EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C!
 =this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideCont!
 ext===true){return this.obj;}else{return this.overrideContext;!
 }}return
 A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){v!
 ar M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:function(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]!
 =a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M)!
 ;if(Q==-
1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{try{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.removeListener(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];!
 }},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
+I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefau!
 lt:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPre!
 loadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!!
 M.DOMRea
dy){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var!
  O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(!
 P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O!
 [N.TYPE]
,O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
 /* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
-if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};
-var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}retur!
 n I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D!
 .fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyC!
 ode,J);b
reak;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){t!
 his.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);i!
 f(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){!
 G.fire(L
,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/event/event.js
===================================================================
--- trunk/root/static/yui/event/event.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/event/event.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 
 /**
@@ -11,7 +11,7 @@
  *
  * @param {String}  type The type of event, which is passed to the callback
  *                  when the event fires
- * @param {Object}  oScope The context the event will fire from.  "this" will
+ * @param {Object}  context The context the event will fire from.  "this" will
  *                  refer to this object in the callback.  Default value: 
  *                  the window object.  The listener can override this.
  * @param {boolean} silent pass true to prevent the event from writing to
@@ -24,7 +24,7 @@
  * @class CustomEvent
  * @constructor
  */
-YAHOO.util.CustomEvent = function(type, oScope, silent, signature) {
+YAHOO.util.CustomEvent = function(type, context, silent, signature) {
 
     /**
      * The type of event, returned to subscribers when the event fires
@@ -34,12 +34,12 @@
     this.type = type;
 
     /**
-     * The scope the the event will fire from by default.  Defaults to the window 
+     * The context the the event will fire from by default.  Defaults to the window 
      * obj
      * @property scope
      * @type object
      */
-    this.scope = oScope || window;
+    this.scope = context || window;
 
     /**
      * By default all custom events are logged in the debug build, set silent
@@ -99,11 +99,12 @@
          * @type YAHOO.util.CustomEvent
          * @param {Function} fn The function to execute
          * @param {Object}   obj An object to be passed along when the event 
-         *                       fires
+         *                       fires defaults to the custom event
          * @param {boolean|Object}  override If true, the obj passed in becomes 
-         *                                   the execution scope of the listener.
+         *                                   the execution context of the listener.
          *                                   if an object, that object becomes the
-         *                                   the execution scope.
+         *                                   the execution context. defaults to
+         *                                   the custom event
          */
         this.subscribeEvent = 
                 new YAHOO.util.CustomEvent(onsubscribeType, this, true);
@@ -149,22 +150,22 @@
      * @param {Function} fn        The function to execute
      * @param {Object}   obj       An object to be passed along when the event 
      *                             fires
-     * @param {boolean|Object}  override If true, the obj passed in becomes 
-     *                                   the execution scope of the listener.
+     * @param {boolean|Object}  overrideContext If true, the obj passed in becomes 
+     *                                   the execution context of the listener.
      *                                   if an object, that object becomes the
-     *                                   the execution scope.
+     *                                   the execution context.
      */
-    subscribe: function(fn, obj, override) {
+    subscribe: function(fn, obj, overrideContext) {
 
         if (!fn) {
 throw new Error("Invalid callback for subscriber to '" + this.type + "'");
         }
 
         if (this.subscribeEvent) {
-            this.subscribeEvent.fire(fn, obj, override);
+            this.subscribeEvent.fire(fn, obj, overrideContext);
         }
 
-        this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, override) );
+        this.subscribers.push( new YAHOO.util.Subscriber(fn, obj, overrideContext) );
     },
 
     /**
@@ -199,7 +200,7 @@
 
     /**
      * Notifies the subscribers.  The callback functions will be executed
-     * from the scope specified when the event was created, and with the 
+     * from the context specified when the event was created, and with the 
      * following parameters:
      *   <ul>
      *   <li>The type of event</li>
@@ -288,13 +289,14 @@
      * @return {int} The number of listeners unsubscribed
      */
     unsubscribeAll: function() {
-        for (var i=this.subscribers.length-1; i>-1; i--) {
+        var l = this.subscribers.length, i;
+        for (i=l-1; i>-1; i--) {
             this._delete(i);
         }
 
         this.subscribers=[];
 
-        return i;
+        return l;
     },
 
     /**
@@ -317,7 +319,7 @@
      */
     toString: function() {
          return "CustomEvent: " + "'" + this.type  + "', " + 
-             "scope: " + this.scope;
+             "context: " + this.scope;
 
     }
 };
@@ -328,12 +330,12 @@
  * Stores the subscriber information to be used when the event fires.
  * @param {Function} fn       The function to execute
  * @param {Object}   obj      An object to be passed along when the event fires
- * @param {boolean}  override If true, the obj passed in becomes the execution
- *                            scope of the listener
+ * @param {boolean}  overrideContext If true, the obj passed in becomes the execution
+ *                            context of the listener
  * @class Subscriber
  * @constructor
  */
-YAHOO.util.Subscriber = function(fn, obj, override) {
+YAHOO.util.Subscriber = function(fn, obj, overrideContext) {
 
     /**
      * The callback that will be execute when the event fires
@@ -351,32 +353,32 @@
     this.obj = YAHOO.lang.isUndefined(obj) ? null : obj;
 
     /**
-     * The default execution scope for the event listener is defined when the
+     * The default execution context for the event listener is defined when the
      * event is created (usually the object which contains the event).
-     * By setting override to true, the execution scope becomes the custom
-     * object passed in by the subscriber.  If override is an object, that 
-     * object becomes the scope.
-     * @property override
+     * By setting overrideContext to true, the execution context becomes the custom
+     * object passed in by the subscriber.  If overrideContext is an object, that 
+     * object becomes the context.
+     * @property overrideContext
      * @type boolean|object
      */
-    this.override = override;
+    this.overrideContext = overrideContext;
 
 };
 
 /**
- * Returns the execution scope for this listener.  If override was set to true
- * the custom obj will be the scope.  If override is an object, that is the
- * scope, otherwise the default scope will be used.
+ * Returns the execution context for this listener.  If overrideContext was set to true
+ * the custom obj will be the context.  If overrideContext is an object, that is the
+ * context, otherwise the default context will be used.
  * @method getScope
- * @param {Object} defaultScope the scope to use if this listener does not
+ * @param {Object} defaultScope the context to use if this listener does not
  *                              override it.
  */
 YAHOO.util.Subscriber.prototype.getScope = function(defaultScope) {
-    if (this.override) {
-        if (this.override === true) {
+    if (this.overrideContext) {
+        if (this.overrideContext === true) {
             return this.obj;
         } else {
-            return this.override;
+            return this.overrideContext;
         }
     }
     return defaultScope;
@@ -405,7 +407,7 @@
  */
 YAHOO.util.Subscriber.prototype.toString = function() {
     return "Subscriber { obj: " + this.obj  + 
-           ", override: " +  (this.override || "no") + " }";
+           ", overrideContext: " +  (this.overrideContext || "no") + " }";
 };
 
 /**
@@ -588,7 +590,7 @@
             FN: 2,
 
             /**
-             * Function wrapped for scope correction and cleanup, int constant
+             * Function wrapped for context correction and cleanup, int constant
              * @property WFN
              * @type int
              * @static
@@ -608,7 +610,7 @@
             UNLOAD_OBJ: 3,
 
             /**
-             * Adjusted scope, either the element we are registering the event
+             * Adjusted context, either the element we are registering the event
              * on or the custom object passed in by the listener, int constant
              * @property ADJ_SCOPE
              * @type int
@@ -627,7 +629,7 @@
             OBJ: 5,
 
             /**
-             * The original scope parameter passed into addListener
+             * The original context parameter passed into addListener
              * @property OVERRIDE
              * @type int
              * @static
@@ -636,16 +638,6 @@
             OVERRIDE: 6,
 
             /**
-             * The original capture parameter passed into _addListener
-             * @property CAPTURE
-             * @type int
-             * @static
-             * @final
-             */
-            CAPTURE: 7,
-
-
-            /**
              * addListener/removeListener can throw errors in unexpected scenarios.
              * These errors are suppressed, the method returns false, and this property
              * is set
@@ -744,26 +736,26 @@
              *
              * @method onAvailable
              *
-             * @param {string||string[]}   p_id the id of the element, or an array
+             * @param {string||string[]}   id the id of the element, or an array
              * of ids to look for.
-             * @param {function} p_fn what to execute when the element is found.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_override If set to true, p_fn will execute
-             *                   in the scope of p_obj, if set to an object it
-             *                   will execute in the scope of that object
+             * @param {function} fn what to execute when the element is found.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
              * @param checkContent {boolean} check child node readiness (onContentReady)
              * @static
              */
-            onAvailable: function(p_id, p_fn, p_obj, p_override, checkContent) {
+            onAvailable: function(id, fn, obj, overrideContext, checkContent) {
 
-                var a = (YAHOO.lang.isString(p_id)) ? [p_id] : p_id;
+                var a = (YAHOO.lang.isString(id)) ? [id] : id;
 
                 for (var i=0; i<a.length; i=i+1) {
                     onAvailStack.push({id:         a[i], 
-                                       fn:         p_fn, 
-                                       obj:        p_obj, 
-                                       override:   p_override, 
+                                       fn:         fn, 
+                                       obj:        obj, 
+                                       overrideContext:   overrideContext, 
                                        checkReady: checkContent });
                 }
 
@@ -782,18 +774,18 @@
              *
              * @method onContentReady
              *
-             * @param {string}   p_id the id of the element to look for.
-             * @param {function} p_fn what to execute when the element is ready.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_override If set to true, p_fn will execute
-             *                   in the scope of p_obj.  If an object, p_fn will
-             *                   exectute in the scope of that object
+             * @param {string}   id the id of the element to look for.
+             * @param {function} fn what to execute when the element is ready.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj.  If an object, fn will
+             *                   exectute in the context of that object
              *
              * @static
              */
-            onContentReady: function(p_id, p_fn, p_obj, p_override) {
-                this.onAvailable(p_id, p_fn, p_obj, p_override, true);
+            onContentReady: function(id, fn, obj, overrideContext) {
+                this.onAvailable(id, fn, obj, overrideContext, true);
             },
 
             /**
@@ -819,30 +811,30 @@
              *
              * @method onDOMReady
              *
-             * @param {function} p_fn what to execute when the element is found.
-             * @param {object}   p_obj an optional object to be passed back as
-             *                   a parameter to p_fn.
-             * @param {boolean|object}  p_scope If set to true, p_fn will execute
-             *                   in the scope of p_obj, if set to an object it
-             *                   will execute in the scope of that object
+             * @param {function} fn what to execute when the element is found.
+             * @param {object}   obj an optional object to be passed back as
+             *                   a parameter to fn.
+             * @param {boolean|object}  overrideContext If set to true, fn will execute
+             *                   in the context of obj, if set to an object it
+             *                   will execute in the context of that object
              *
              * @static
              */
-            onDOMReady: function(p_fn, p_obj, p_override) {
+            onDOMReady: function(fn, obj, overrideContext) {
                 if (this.DOMReady) {
                     setTimeout(function() {
                         var s = window;
-                        if (p_override) {
-                            if (p_override === true) {
-                                s = p_obj;
+                        if (overrideContext) {
+                            if (overrideContext === true) {
+                                s = obj;
                             } else {
-                                s = p_override;
+                                s = overrideContext;
                             }
                         }
-                        p_fn.call(s, "DOMReady", [], p_obj);
+                        fn.call(s, "DOMReady", [], obj);
                     }, 0);
                 } else {
-                    this.DOMReadyEvent.subscribe(p_fn, p_obj, p_override);
+                    this.DOMReadyEvent.subscribe(fn, obj, overrideContext);
                 }
             },
 
@@ -859,10 +851,10 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @param {boolen}      capture capture or bubble phase
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
@@ -871,7 +863,7 @@
              * @private
              * @static
              */
-            _addListener: function(el, sType, fn, obj, override, capture) {
+            _addListener: function(el, sType, fn, obj, overrideContext, bCapture) {
 
                 if (!fn || !fn.call) {
                     return false;
@@ -881,12 +873,11 @@
                 if ( this._isValidCollection(el)) {
                     var ok = true;
                     for (var i=0,len=el.length; i<len; ++i) {
-                        ok = this._addListener(el[i], 
+                        ok = this.on(el[i], 
                                        sType, 
                                        fn, 
                                        obj, 
-                                       override, 
-                                       capture) && ok;
+                                       overrideContext) && ok;
                     }
                     return ok;
 
@@ -904,7 +895,7 @@
                     } else {
                         // defer adding the event until the element is available
                         this.onAvailable(el, function() {
-                           YAHOO.util.Event._addListener(el, sType, fn, obj, override, capture);
+                           YAHOO.util.Event.on(el, sType, fn, obj, overrideContext);
                         });
 
                         return true;
@@ -923,31 +914,31 @@
                 // handles explicitly during our one unload event.
                 if ("unload" == sType && obj !== this) {
                     unloadListeners[unloadListeners.length] =
-                            [el, sType, fn, obj, override, capture];
+                            [el, sType, fn, obj, overrideContext];
                     return true;
                 }
 
 
-                // if the user chooses to override the scope, we use the custom
-                // object passed in, otherwise the executing scope will be the
+                // if the user chooses to override the context, we use the custom
+                // object passed in, otherwise the executing context will be the
                 // HTML element that the event is registered on
-                var scope = el;
-                if (override) {
-                    if (override === true) {
-                        scope = obj;
+                var context = el;
+                if (overrideContext) {
+                    if (overrideContext === true) {
+                        context = obj;
                     } else {
-                        scope = override;
+                        context = overrideContext;
                     }
                 }
 
                 // wrap the function so we can return the obj object when
                 // the event fires;
                 var wrappedFn = function(e) {
-                        return fn.call(scope, YAHOO.util.Event.getEvent(e, el), 
+                        return fn.call(context, YAHOO.util.Event.getEvent(e, el), 
                                 obj);
                     };
 
-                var li = [el, sType, fn, wrappedFn, scope, obj, override, capture];
+                var li = [el, sType, fn, wrappedFn, context, obj, overrideContext];
                 var index = listeners.length;
                 // cache the listener so we can try to automatically unload
                 listeners[index] = li;
@@ -983,12 +974,12 @@
 
                 } else {
                     try {
-                        this._simpleAdd(el, sType, wrappedFn, capture);
+                        this._simpleAdd(el, sType, wrappedFn, bCapture);
                     } catch(ex) {
                         // handle an error trying to attach an event.  If it fails
                         // we need to clean up the cache
                         this.lastError = ex;
-                        this._removeListener(el, sType, fn, capture);
+                        this.removeListener(el, sType, fn);
                         return false;
                     }
                 }
@@ -1010,23 +1001,23 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addListener: function (el, sType, fn, obj, override) {
-                return this._addListener(el, sType, fn, obj, override, false);
+            addListener: function (el, sType, fn, obj, overrideContext) {
+                return this._addListener(el, sType, fn, obj, overrideContext, false);
             },
 
             /**
              * Appends a focus event handler.  (The focusin event is used for Internet Explorer, 
-             * the focus, capture-event for Opera, WebKit, and Gecko.)
+             * the focus, capture-event for Opera, WebKit.)
              *
              * @method addFocusListener
              *
@@ -1036,25 +1027,25 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addFocusListener: function (el, fn, obj, override) {
-                return this._addListener(el, _FOCUS, fn, obj, override, true);
+            addFocusListener: function (el, fn, obj, overrideContext) {
+                return this._addListener(el, _FOCUS, fn, obj, overrideContext, true);
             },          
 
 
             /**
              * Removes a focus event listener
              *
-             * @method removeFocusListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1067,12 +1058,12 @@
              * @static
              */
             removeFocusListener: function (el, fn) { 
-                return this._removeListener(el, _FOCUS, fn, true);
+                return this.removeListener(el, _FOCUS, fn);
             },
 
             /**
              * Appends a blur event handler.  (The focusout event is used for Internet Explorer, 
-             * the focusout, capture-event for Opera, WebKit, and Gecko.)
+             * the focusout, capture-event for Opera, WebKit.)
              *
              * @method addBlurListener
              *
@@ -1082,24 +1073,24 @@
              * @param {Function} fn        The method the event invokes
              * @param {Object}   obj    An arbitrary object that will be 
              *                             passed as a parameter to the handler
-             * @param {Boolean|object}  override  If true, the obj passed in becomes
-             *                             the execution scope of the listener. If an
+             * @param {Boolean|object}  overrideContext  If true, the obj passed in becomes
+             *                             the execution context of the listener. If an
              *                             object, this object becomes the execution
-             *                             scope.
+             *                             context.
              * @return {Boolean} True if the action was successful or defered,
              *                        false if one or more of the elements 
              *                        could not have the listener attached,
              *                        or if the operation throws an exception.
              * @static
              */
-            addBlurListener: function (el, fn, obj, override) {
-                return this._addListener(el, _BLUR, fn, obj, override, true);
+            addBlurListener: function (el, fn, obj, overrideContext) {
+                return this._addListener(el, _BLUR, fn, obj, overrideContext, true);
             },          
 
             /**
              * Removes a blur event listener
              *
-             * @method removeBlurListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1113,7 +1104,7 @@
              */
             removeBlurListener: function (el, fn) { 
             
-                return this._removeListener(el, _BLUR, fn, true);
+                return this.removeListener(el, _BLUR, fn);
             
             },
 
@@ -1125,15 +1116,15 @@
              * @private
              */
             fireLegacyEvent: function(e, legacyIndex) {
-                var ok=true, le, lh, li, scope, ret;
+                var ok=true, le, lh, li, context, ret;
                 
                 lh = legacyHandlers[legacyIndex].slice();
                 for (var i=0, len=lh.length; i<len; ++i) {
                 // for (var i in lh.length) {
                     li = lh[i];
                     if ( li && li[this.WFN] ) {
-                        scope = li[this.ADJ_SCOPE];
-                        ret = li[this.WFN].call(scope, e);
+                        context = li[this.ADJ_SCOPE];
+                        ret = li[this.WFN].call(context, e);
                         ok = (ok && ret);
                     }
                 }
@@ -1181,7 +1172,7 @@
             /**
              * Removes an event listener
              *
-             * @method _removeListener
+             * @method removeListener
              *
              * @param {String|HTMLElement|Array|NodeList} el An id, an element 
              *  reference, or a collection of ids and/or elements to remove
@@ -1190,13 +1181,11 @@
              * @param {Function} fn the method the event invokes.  If fn is
              *  undefined, then all event handlers for the type of event are 
              *  removed.
-             * @param {boolen}      capture capture or bubble phase             
              * @return {boolean} true if the unbind was successful, false 
              *  otherwise.
              * @static
-             * @private
              */
-            _removeListener: function(el, sType, fn, capture) {
+            removeListener: function(el, sType, fn) {
                 var i, len, li;
 
                 // The el argument can be a string
@@ -1206,7 +1195,7 @@
                 } else if ( this._isValidCollection(el)) {
                     var ok = true;
                     for (i=el.length-1; i>-1; i--) {
-                        ok = ( this._removeListener(el[i], sType, fn, capture) && ok );
+                        ok = ( this.removeListener(el[i], sType, fn) && ok );
                     }
                     return ok;
                 }
@@ -1238,7 +1227,7 @@
                 // The index is a hidden parameter; needed to remove it from
                 // the method signature because it was tempting users to
                 // try and take advantage of it, which is not possible.
-                var index = arguments[4];
+                var index = arguments[3];
   
                 if ("undefined" === typeof index) {
                     index = this._getCacheIndex(el, sType, fn);
@@ -1273,7 +1262,7 @@
 
                 } else {
                     try {
-                        this._simpleRemove(el, sType, cacheItem[this.WFN], capture);
+                        this._simpleRemove(el, sType, cacheItem[this.WFN], false);
                     } catch(ex) {
                         this.lastError = ex;
                         return false;
@@ -1290,31 +1279,7 @@
 
             },
 
-
             /**
-             * Removes an event listener
-             *
-             * @method removeListener
-             *
-             * @param {String|HTMLElement|Array|NodeList} el An id, an element 
-             *  reference, or a collection of ids and/or elements to remove
-             *  the listener from.
-             * @param {String} sType the type of event to remove.
-             * @param {Function} fn the method the event invokes.  If fn is
-             *  undefined, then all event handlers for the type of event are 
-             *  removed.
-             * @return {boolean} true if the unbind was successful, false 
-             *  otherwise.
-             * @static
-             */
-            removeListener: function(el, sType, fn) {
-
-				return this._removeListener(el, sType, fn, false);
-
-            },
-
-
-            /**
              * Returns the event's target element.  Safari sometimes provides
              * a text node, and this is automatically resolved to the text
              * node's parent so that it behaves like other browsers.
@@ -1691,8 +1656,10 @@
 
                 if (onAvailStack.length === 0) {
                     retryCount = 0;
-                    clearInterval(this._interval);
-                    this._interval = null;
+                    if (this._interval) {
+                        clearInterval(this._interval);
+                        this._interval = null;
+                    } 
                     return;
                 }
 
@@ -1726,15 +1693,15 @@
                 var notAvail = [];
 
                 var executeItem = function (el, item) {
-                    var scope = el;
-                    if (item.override) {
-                        if (item.override === true) {
-                            scope = item.obj;
+                    var context = el;
+                    if (item.overrideContext) {
+                        if (item.overrideContext === true) {
+                            context = item.obj;
                         } else {
-                            scope = item.override;
+                            context = item.overrideContext;
                         }
                     }
-                    item.fn.call(scope, item.obj);
+                    item.fn.call(context, item.obj);
                 };
 
                 var i, len, item, el, ready=[];
@@ -1779,8 +1746,10 @@
 
                     this.startInterval();
                 } else {
-                    clearInterval(this._interval);
-                    this._interval = null;
+                    if (this._interval) {
+                        clearInterval(this._interval);
+                        this._interval = null;
+                    }
                 }
 
                 this.locked = false;
@@ -1805,7 +1774,7 @@
                 if (elListeners) {
                     for (i=elListeners.length-1; i>-1; i--) {
                         var l = elListeners[i];
-                        this._removeListener(oEl, l.type, l.fn, l.capture);
+                        this.removeListener(oEl, l.type, l.fn);
                     }
                 }
 
@@ -1827,9 +1796,8 @@
              *   type:   (string)   the type of event
              *   fn:     (function) the callback supplied to addListener
              *   obj:    (object)   the custom object supplied to addListener
-             *   adjust: (boolean|object)  whether or not to adjust the default scope
-             *   scope: (boolean)  the derived scope based on the adjust parameter
-             *   scope: (capture)  the capture parameter supplied to addListener
+             *   adjust: (boolean|object)  whether or not to adjust the default context
+             *   scope: (boolean)  the derived context based on the adjust parameter
              *   index:  (int)      its position in the Event util listener cache
              * @static
              */           
@@ -1858,7 +1826,6 @@
                                     obj:    l[this.OBJ],
                                     adjust: l[this.OVERRIDE],
                                     scope:  l[this.ADJ_SCOPE],
-                                    capture:  l[this.CAPTURE],                                    
                                     index:  i
                                 });
                             }
@@ -1879,27 +1846,27 @@
             _unload: function(e) {
 
                 var EU = YAHOO.util.Event, i, j, l, len, index,
-                         ul = unloadListeners.slice();
+                         ul = unloadListeners.slice(), context;
 
                 // execute and clear stored unload listeners
-                for (i=0,len=unloadListeners.length; i<len; ++i) {
+                for (i=0, len=unloadListeners.length; i<len; ++i) {
                     l = ul[i];
                     if (l) {
-                        var scope = window;
+                        context = window;
                         if (l[EU.ADJ_SCOPE]) {
                             if (l[EU.ADJ_SCOPE] === true) {
-                                scope = l[EU.UNLOAD_OBJ];
+                                context = l[EU.UNLOAD_OBJ];
                             } else {
-                                scope = l[EU.ADJ_SCOPE];
+                                context = l[EU.ADJ_SCOPE];
                             }
                         }
-                        l[EU.FN].call(scope, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
+                        l[EU.FN].call(context, EU.getEvent(e, l[EU.EL]), l[EU.UNLOAD_OBJ] );
                         ul[i] = null;
-                        l=null;
-                        scope=null;
                     }
                 }
 
+                l = null;
+                context = null;
                 unloadListeners = null;
 
                 // Remove listeners to handle IE memory leaks
@@ -1913,7 +1880,7 @@
                     for (j=listeners.length-1; j>-1; j--) {
                         l = listeners[j];
                         if (l) {
-                            EU._removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], l[EU.CAPTURE], j);
+                            EU.removeListener(l[EU.EL], l[EU.TYPE], l[EU.FN], j);
                         } 
                     }
                     l=null;
@@ -1976,7 +1943,7 @@
             },
 
             /**
-             * Adds a DOM event directly without the caching, cleanup, scope adj, etc
+             * Adds a DOM event directly without the caching, cleanup, context adj, etc
              *
              * @method _simpleAdd
              * @param {HTMLElement} el      the element to bind the handler to
@@ -2151,16 +2118,16 @@
      * @param p_fn       {function} the function to exectute when the event fires
      * @param p_obj      {Object}   An object to be passed along when the event 
      *                              fires
-     * @param p_override {boolean}  If true, the obj passed in becomes the 
+     * @param overrideContext {boolean}  If true, the obj passed in becomes the 
      *                              execution scope of the listener
      */
-    subscribe: function(p_type, p_fn, p_obj, p_override) {
+    subscribe: function(p_type, p_fn, p_obj, overrideContext) {
 
         this.__yui_events = this.__yui_events || {};
         var ce = this.__yui_events[p_type];
 
         if (ce) {
-            ce.subscribe(p_fn, p_obj, p_override);
+            ce.subscribe(p_fn, p_obj, overrideContext);
         } else {
             this.__yui_subscribers = this.__yui_subscribers || {};
             var subs = this.__yui_subscribers;
@@ -2168,7 +2135,7 @@
                 subs[p_type] = [];
             }
             subs[p_type].push(
-                { fn: p_fn, obj: p_obj, override: p_override } );
+                { fn: p_fn, obj: p_obj, overrideContext: overrideContext } );
         }
     },
 
@@ -2274,7 +2241,7 @@
 
             if (qs) {
                 for (var i=0; i<qs.length; ++i) {
-                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].override);
+                    ce.subscribe(qs[i].fn, qs[i].obj, qs[i].overrideContext);
                 }
             }
         }
@@ -2332,10 +2299,10 @@
 
 };
 
-//@TODO optimize
-//@TODO use event utility, lang abstractions
-//@TODO replace
+(function() {
 
+    var Event = YAHOO.util.Event, Lang = YAHOO.lang;
+
 /**
 * KeyListener is a utility that provides an easy interface for listening for
 * keydown/keyup events fired against DOM elements.
@@ -2409,11 +2376,11 @@
     */
     this.disabledEvent = new YAHOO.util.CustomEvent("disabled");
 
-    if (typeof attachTo == 'string') {
-        attachTo = document.getElementById(attachTo);
+    if (Lang.isString(attachTo)) {
+        attachTo = document.getElementById(attachTo); // No Dom util
     }
 
-    if (typeof handler == 'function') {
+    if (Lang.isFunction(handler)) {
         keyEvent.subscribe(handler);
     } else {
         keyEvent.subscribe(handler.fn, handler.scope, handler.correctScope);
@@ -2442,26 +2409,22 @@
             e.altKey   == keyData.alt &&
             e.ctrlKey  == keyData.ctrl) { // if we pass this, all modifiers match
             
-            var dataItem;
+            var dataItem, keys = keyData.keys, key;
 
-            if (keyData.keys instanceof Array) {
-                for (var i=0;i<keyData.keys.length;i++) {
-                    dataItem = keyData.keys[i];
+            if (YAHOO.lang.isArray(keys)) {
+                for (var i=0;i<keys.length;i++) {
+                    dataItem = keys[i];
+                    key = Event.getCharCode(e);
 
-                    if (dataItem == e.charCode ) {
-                        keyEvent.fire(e.charCode, e);
+                    if (dataItem == key) {
+                        keyEvent.fire(key, e);
                         break;
-                    } else if (dataItem == e.keyCode) {
-                        keyEvent.fire(e.keyCode, e);
-                        break;
                     }
                 }
             } else {
-                dataItem = keyData.keys;
-                if (dataItem == e.charCode ) {
-                    keyEvent.fire(e.charCode, e);
-                } else if (dataItem == e.keyCode) {
-                    keyEvent.fire(e.keyCode, e);
+                key = Event.getCharCode(e);
+                if (keys == key ) {
+                    keyEvent.fire(key, e);
                 }
             }
         }
@@ -2474,7 +2437,7 @@
     */
     this.enable = function() {
         if (! this.enabled) {
-            YAHOO.util.Event.addListener(attachTo, event, handleKeyPress);
+            Event.on(attachTo, event, handleKeyPress);
             this.enabledEvent.fire(keyData);
         }
         /**
@@ -2492,7 +2455,7 @@
     */
     this.disable = function() {
         if (this.enabled) {
-            YAHOO.util.Event.removeListener(attachTo, event, handleKeyPress);
+            Event.removeListener(attachTo, event, handleKeyPress);
             this.disabledEvent.fire(keyData);
         }
         this.enabled = false;
@@ -2510,6 +2473,8 @@
 
 };
 
+var KeyListener = YAHOO.util.KeyListener;
+
 /**
  * Constant representing the DOM "keydown" event.
  * @property YAHOO.util.KeyListener.KEYDOWN
@@ -2517,7 +2482,7 @@
  * @final
  * @type String
  */
-YAHOO.util.KeyListener.KEYDOWN = "keydown";
+KeyListener.KEYDOWN = "keydown";
 
 /**
  * Constant representing the DOM "keyup" event.
@@ -2526,7 +2491,7 @@
  * @final
  * @type String
  */
-YAHOO.util.KeyListener.KEYUP = "keyup";
+KeyListener.KEYUP = "keyup";
 
 /**
  * keycode constants for a subset of the special keys
@@ -2534,7 +2499,7 @@
  * @static
  * @final
  */
-YAHOO.util.KeyListener.KEY = {
+KeyListener.KEY = {
     ALT          : 18,
     BACK_SPACE   : 8,
     CAPS_LOCK    : 20,
@@ -2559,4 +2524,6 @@
     TAB          : 9,
     UP           : 38
 };
-YAHOO.register("event", YAHOO.util.Event, {version: "2.6.0", build: "1321"});
+
+})();
+YAHOO.register("event", YAHOO.util.Event, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/fonts/README
===================================================================
--- trunk/root/static/yui/fonts/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/fonts/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,50 +0,0 @@
-YUI Library - Fonts - Release Notes
-
-Version 2.6.0
-
-   * Added font reduction and face restatement for select, input, button, and textarea
-   * Comments and formatting updates.
-   * KNOWN ISSUE: 
-     In IE8 Beta 2, user-initiated Text Size adjustment does not work because our keyword
-     filters to IE do not reach IE8. Note that Zoom works, providing users a resize option.
-
-Version 2.5.2
-
-  * Added comments regarding font shorthand filter for IE in Quirks Mode.
-
-Version 2.5.1
-
-  * No changes.
-
-Version 2.5.0
-
-  * No changes.
-
-Version 2.4.0
-
-  * Rechanged core line-height from 1.22 to 1.231, sans units.
-  * Updated line-height value for monospcaed elements. 
-
-Version 2.3.0
-
-  * Updated %-to-px conversion charted for increased accuracy
-    across browsers
-  * Move body line-height away from * wildcard selector. Now it is
-    part of the initial BODY rule set.
-  * Changed core lineheight from 1.22em to 1.231 (no units)
-  * Changed code,pre to not use font-property shorthand syntax
-  * Tweaked the sizing fix for monospace font size (pre,code...)
-  * Added "kbd,samp,tt" as new selectors for monospaced font stuff
-  * Added line-height:99% to keep monospaced font the right height
-
-Version 2.2.0 - 2.2.2
-
-  * No changes.
-
-Version 0.10.1 - 0.12.2
-
-  * No changes.
-
-Version 0.10.0
-
-  * Initial release.

Modified: trunk/root/static/yui/fonts/fonts-min.css
===================================================================
--- trunk/root/static/yui/fonts/fonts-min.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/fonts/fonts-min.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
\ No newline at end of file
+body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
\ No newline at end of file

Modified: trunk/root/static/yui/fonts/fonts.css
===================================================================
--- trunk/root/static/yui/fonts/fonts.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/fonts/fonts.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,17 +1,26 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
+ * YUI Fonts
+ * @module fonts
+ * @namespace yui-
+ * @requires 
+ */
+
+/**
  * Percents could work for IE, but for backCompat purposes, we are using keywords.
  * x-small is for IE6/7 quirks mode.
  */
 body {
 	font:13px/1.231 arial,helvetica,clean,sans-serif;
-	*font-size:small; /* for IE */
-	*font:x-small; /* for IE in quirks mode */
+	/* for IE6/7 */ 
+	*font-size:small; 
+	/* for IE Quirks Mode */
+	*font:x-small; 
 }
 
 /**
@@ -20,7 +29,8 @@
 select,
 input,
 button,
-textarea {
+textarea,
+button {
 	font:99% arial,helvetica,clean,sans-serif;
 }
 
@@ -43,4 +53,4 @@
 	font-family:monospace;
 	*font-size:108%;
 	line-height:100%;
-}
\ No newline at end of file
+}

Deleted: trunk/root/static/yui/get/README
===================================================================
--- trunk/root/static/yui/get/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/get/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +0,0 @@
-get - Release Notes
-
-2.6.0
-    * Fixed IE memory leak
-    * Added timeout support
-
-2.5.2
-    * No change
-
-2.5.1
-    * onFailure callback receives a second parameter containing an error message.
-    * Added 'charset' configuration option for inserted nodes.  Default is utf-8.
-    * Added 'insertBefore' configuration to specify a node or node id to insert before.
-      This can be used to position CSS nodes before any overriding styles.
-
-2.5.0
-    * autopurge no longer attempts to remove nodes that have been
-      removed previously.
-    * Fixed Safari 2.x external script insert.
-
-2.4.1
-   * No change
-
-2.4.0
-   * Inital release

Modified: trunk/root/static/yui/get/get-debug.js
===================================================================
--- trunk/root/static/yui/get/get-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/get/get-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides a mechanism to fetch remote resources and
@@ -196,7 +196,7 @@
         YAHOO.log("Timeout " + id, "info", "get");
         var q = queues[id];
         if (q.onTimeout) {
-            var sc=q.context || q;
+            var sc=q.scope || q;
             q.onTimeout.call(sc, _returnData(q));
         }
     };
@@ -739,4 +739,4 @@
     };
 }();
 
-YAHOO.register("get", YAHOO.util.Get, {version: "2.6.0", build: "1321"});
+YAHOO.register("get", YAHOO.util.Get, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/get/get-min.js
===================================================================
--- trunk/root/static/yui/get/get-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/get/get-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return ;}if(T.onSu!
 ccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.context||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return ;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return ;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefor!
 e,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild!
 (W);}if(
(N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return ;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.removeChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",fun!
 ction(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}else{}return ;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuc!
 cess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);!
 if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}!
 if((N.we
bkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.removeChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(!
 ){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}else{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/get/get.js
===================================================================
--- trunk/root/static/yui/get/get.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/get/get.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides a mechanism to fetch remote resources and
@@ -193,7 +193,7 @@
     var _timeout = function(id) {
         var q = queues[id];
         if (q.onTimeout) {
-            var sc=q.context || q;
+            var sc=q.scope || q;
             q.onTimeout.call(sc, _returnData(q));
         }
     };
@@ -721,4 +721,4 @@
     };
 }();
 
-YAHOO.register("get", YAHOO.util.Get, {version: "2.6.0", build: "1321"});
+YAHOO.register("get", YAHOO.util.Get, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/grids/README
===================================================================
--- trunk/root/static/yui/grids/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/grids/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,86 +0,0 @@
-YUI Library - Grids - Release Notes
-
-Version 2.6.0
-
-  * Removed extraneous "s" typo per Bugzilla #1826435 and SF #1921958
-  * Added .yui-g .yui-u .yui-g {width:100%;} so nested grids work 
-    more consistently; BZ:2156128, SF:2060556
-  * Added provision for better g>g>u gutters per SF:1927599
-
-Version 2.5.1
-
-  * Added more specific selectors to allow nesting on "yui-gd" grids 
-    within "yui-ge" for Bugzilla #1779582, Sourceforge #1897741 
-  * Modified Page Width and Template Preset values for IE
-  * Reordered several rules; formatted file and added more comments
-  * Modified width and margin values for "thirds" nesting grid
-  * Combined and optimized several selectors and rules
-
-Version 2.5.0
-
-  * Tweaked em widths for "template presets" .yui-t1-6
-  * Pruned two redundant lines
-
-Version 2.4.0
-
-  * No changes.
-
-Version 2.3.1
-
-  * Fixed bug in 2.3.0 that transposed the columns in deeply-
-    nested grids. Sourceforge #1765553, Bugzilla #1419885    
-  * Improved precision and consistency of margins in nested grids.
-
-Version 2.3.0
-
-  * Added more specific selectors to allow deeper nesting of both 
-    grids inside special grids, special grids within special 
-	grids, and special grids within grids.
-  * Added #doc4 which provides a 974px page width
-
-Version 2.2.0 - 2.2.2
-
-  * No changes.
-
-Version 0.12.1 - 0.12.2
-
-  * No changes.
-
-Version 0.12.0
-
-  * Removed redundant "text-align:left" from nodes below #doc.
-
-  * Removed small-font treatment on #ft.
-
-  * Removed margin-bottom from #hd,#bd.
-
-  * Added two new #doc definitions (#doc2 and #doc3) that provide 
-    950px centered and 100% page width presets to supplement the 
-    original 750px centered page width.
-
-  * Made ".first" selectors more precise by binding to divs, to 
-    make it less likely that our .first definitions will impact 
-    nested content elements wishing to use this nomenclature.
-
-  * Fixed "nested yui-gc" bug.
-
-  * Fixed build-process whitespace bug with .yui-t2 and .yui-t5.
-
-  * Migrated .yui-t's technique to "negative margins" technique 
-    from "floated ems".
-
-  * The "negative margins" technique caused z-index issues, so 
-    position:relative was added to the secondary yui-b to enable 
-	correct z-index.
-
-  * Make optimization benefits from inheritence wins via code 
-    reorganizations.
-
-Version 0.11.0
-
-  * Removed line #43 because it set an already-set value.
-    Was: ".yui-t7  #main .yui-b{min-width:750px;}"
-  
-Version 0.10.0
-
-  * Initial release.
\ No newline at end of file

Modified: trunk/root/static/yui/grids/grids-min.css
===================================================================
--- trunk/root/static/yui/grids/grids-min.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/grids/grids-min.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:2!
 3.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui!
 -ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-!
 g .yui-g
e div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc !
 div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;} .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui!
 -gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.y!
 ui-gb .y
ui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file
+body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:right;width:13.8!
 456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-g!
 c div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.fir!
 st{float
:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .!
 yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.firs!
 t{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first!
 {*width:
24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file

Modified: trunk/root/static/yui/grids/grids.css
===================================================================
--- trunk/root/static/yui/grids/grids.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/grids/grids.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,285 +1,467 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-/*
-	Note: Throughout this file, the *property (star-property) filter is used 
-    to give a value to IE that other browsers do not see. _property is only seen 
-    by IE7, so the combo of *prop and _prop can target between IE6 and IE7.
-*/
+/**
+ * YUI Grids
+ * @module grids
+ * @namespace yui-
+ * @requires reset, fonts
+ */
 
-/*
-	Section: General Rules
-*/
+/**  
+ * Note: Throughout this file, the *property (star-property) filter is used 
+ * to give a value to IE that other browsers do not see. _property is only seen 
+ * by IE7, so the combo of *prop and _prop can target between IE6 and IE7.
+ * 
+ * More information on these filters and related validation errors:
+ * http://tech.groups.yahoo.com/group/ydn-javascript/message/40059
+ */
 
-	body {
-		text-align:center;
-	}
-	
-	#ft {
-		clear:both;
-	}
+/**
+ * Section: General Rules
+ */
 
-/*
-	Section: Page Width Rules (#doc, #doc2, #doc3, #doc4)
-*/
+body {
+	text-align: center;
+}
 
-	/* 
-		Subsection: General 
-	*/ 	
+/**
+ * Section: Page Width Rules (#doc, #doc2, #doc3, #doc4)
+ */
 
-	#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7 {
-		margin:auto;
-		text-align:left;
-		width:57.69em;*width:56.25em;
-		min-width:750px;
-	}
-	/* 
-		Subsection: 950 Centered (doc2) 
-	*/
-	#doc2 {
-		width:73.076em;*width:71.25em;
-	}
+#doc,#doc2,#doc3,#doc4,
+.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7 {
+	margin: auto;
+	text-align: left;
+	width: 57.69em;
+	*width: 56.25em;
+}
 
-	/* 
-		Subsection: 100% (doc3) 
-	*/
-	#doc3 {
-		/* Left and Right margins are not a structural part of Grids. Without them Grids
-		   works fine, but content bleeds to the very edge of the document, which often
-		   impairs readability and usability. They are 
-		   provided because they prevent the content from "bleeding" into the browser's chrome.*/
-		margin:auto 10px; 
-		width:auto;
-	}
-	
-	/* 
-		Subsection: 974 Centered (doc4) 
-	*/
-	#doc4 {
-		width:74.923em;*width:73.05em;
-	}	
-	
-/*
-	Section: Preset Template Rules (.yui-t[1-6])
-*/
-	
-	/* 
-		Subsection: General
-	*/
+/* 950 Centered (doc2) */
+#doc2 {
+	width: 73.076em;
+	*width: 71.25em;
+}
 
+/* 100% (doc3) */
+#doc3 {
+/**
+ * Left and Right margins are not a structural part of Grids. Without them 
+ * Grids works fine, but content bleeds to the very edge of the document, which
+ * often impairs readability and usability. They are provided because they 
+ * prevent the content from "bleeding" into the browser's chrome. 
+ */
+	margin: auto 10px;
+	width: auto;
+}
+
+/* 974 Centered (doc4) */
+#doc4 {
+	width: 74.923em;
+	*width: 73.05em;
+}
+
+/**
+ * Section: Preset Template Rules (.yui-t[1-6])
+ */
+
+
+.yui-b {
 	/* to preserve source-order independence for Gecko */
-	.yui-b{position:relative;}
-	.yui-b{_position:static;}
-	#yui-main .yui-b{position:static;}
+	position: relative;
+}
 
-	#yui-main,
-	.yui-g .yui-u .yui-g {width:100%;}
-		
-	.yui-t1 #yui-main,
-	.yui-t2 #yui-main,
-	.yui-t3 #yui-main{float:right;margin-left:-25em;/* IE: preserve layout at narrow widths */}
+.yui-b {
+	/* to preserve source-order independence for IE */
+	_position: static;
+}
 
-	.yui-t4 #yui-main,
-	.yui-t5 #yui-main,
-	.yui-t6 #yui-main{float:left;margin-right:-25em;/* IE: preserve layout at narrow widths */}
+#yui-main .yui-b {
+	/* to preserve source-order independence for Gecko */
+	position: static;
+}
 
-	/* 
-		Subsection: For Specific Template Presets
-	*/
+#yui-main,
+.yui-g .yui-u .yui-g {
+	width: 100%;
+}
 
-	.yui-t1 .yui-b {float:left;width:12.30769em;*width:12.00em;}
-	.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}
+.yui-t1 #yui-main,
+.yui-t2 #yui-main,
+.yui-t3 #yui-main {
+	float: right;
+	/* IE: preserve layout at narrow widths */
+	margin-left: -25em;
+}
 
-	.yui-t2 .yui-b {float:left;width:13.8461em;*width:13.50em;}
-	.yui-t2 #yui-main .yui-b {margin-left:14.8461em;*margin-left:14.55em;}
+.yui-t4 #yui-main,
+.yui-t5 #yui-main,
+.yui-t6 #yui-main {
+	float: left;
+	/* IE: preserve layout at narrow widths */
+	margin-right: -25em;
+}
 
-	.yui-t3 .yui-b {float:left;width:23.0769em;*width:22.50em;}
-	.yui-t3 #yui-main .yui-b {margin-left:24.0769em;*margin-left:23.62em;}
+/** 
+ * For Specific Template Presets
+ */
 
-	.yui-t4 .yui-b {float:right;width:13.8456em;*width:13.50em;}
-	.yui-t4 #yui-main .yui-b {margin-right:14.8456em;*margin-right:14.55em;}
+.yui-t1 .yui-b {
+	float: left;
+	width: 12.30769em;
+	*width: 12.00em;
+}
 
-	.yui-t5 .yui-b {float:right;width:18.4615em;*width:18.00em;}
-	.yui-t5 #yui-main .yui-b {margin-right:19.4615em;*margin-right:19.125em;}
+.yui-t1 #yui-main .yui-b {
+	margin-left: 13.30769em;
+	*margin-left: 13.05em;
+}
 
-	.yui-t6 .yui-b {float:right;width:23.0769em;*width:22.50em;}
-	.yui-t6 #yui-main .yui-b {margin-right:24.0769em;*margin-right:23.62em;}
+.yui-t2 .yui-b {
+	float: left;
+	width: 13.8461em;
+	*width: 13.50em;
+}
 
-	.yui-t7 #yui-main .yui-b {display:block;margin:0 0 1em 0;}
-	
-	#yui-main .yui-b {float:none;width:auto;}
+.yui-t2 #yui-main .yui-b {
+	margin-left: 14.8461em;
+	*margin-left: 14.55em;
+}
 
-/*
-	Section: Grids and Nesting Grids
-*/
+.yui-t3 .yui-b {
+	float: left;
+	width: 23.0769em;
+	*width: 22.50em;
+}
 
-	/*
-		Subsection: Children generally take half the available space
-	*/
+.yui-t3 #yui-main .yui-b {
+	margin-left: 24.0769em;
+	*margin-left: 23.62em;
+}
 
-	.yui-gb .yui-u,
-	.yui-g .yui-gb .yui-u,
-	.yui-gb .yui-g,
-	.yui-gb .yui-gb,
-	.yui-gb .yui-gc,
-	.yui-gb .yui-gd,
-	.yui-gb .yui-ge,
-	.yui-gb .yui-gf,
-	.yui-gc .yui-u, 
-	.yui-gc .yui-g,
-	.yui-gd .yui-u {float:left;}
+.yui-t4 .yui-b {
+	float: right;
+	width: 13.8456em;
+	*width: 13.50em;
+}
 
-	/*Float units (and sub grids) to the right */
-	.yui-g .yui-u,
-	.yui-g .yui-g,
-	.yui-g .yui-gb, 
-	.yui-g .yui-gc, 
-	.yui-g .yui-gd, 
-	.yui-g .yui-ge, 
-	.yui-g .yui-gf, 
-	.yui-gc .yui-u, 
-	.yui-gd .yui-g,
-	.yui-g .yui-gc .yui-u,
-	.yui-ge .yui-u, 
-	.yui-ge .yui-g, 
-	.yui-gf .yui-g,
-	.yui-gf .yui-u{float:right;}
+.yui-t4 #yui-main .yui-b {
+	margin-right: 14.8456em;
+	*margin-right: 14.55em;
+}
 
-	/*Float units (and sub grids) to the left */
-	.yui-g div.first, 
-	.yui-gb div.first,
-	.yui-gc div.first,
-	.yui-gd div.first, 
-	.yui-ge div.first, 
-	.yui-gf div.first,
-	.yui-g .yui-gc div.first,
-	.yui-g .yui-ge div.first,
-	.yui-gc div.first div.first {float:left;}
+.yui-t5 .yui-b {
+	float: right;
+	width: 18.4615em;
+	*width: 18.00em;
+}
 
-	.yui-g .yui-u,
-	.yui-g .yui-g,
-	.yui-g .yui-gb,
-	.yui-g .yui-gc,
-	.yui-g .yui-gd,
-	.yui-g .yui-ge,
-	.yui-g .yui-gf {width:49.1%;}
+.yui-t5 #yui-main .yui-b {
+	margin-right: 19.4615em;
+	*margin-right: 19.125em;
+}
 
-	.yui-gb .yui-u,
-	.yui-g .yui-gb .yui-u,
-	.yui-gb .yui-g,
-	.yui-gb .yui-gb,
-	.yui-gb .yui-gc,
-	.yui-gb .yui-gd,
-	.yui-gb .yui-ge,
-	.yui-gb .yui-gf,
-	.yui-gc .yui-u, 
-	.yui-gc .yui-g,
-	.yui-gd .yui-u {width:32%;margin-left:1.99%;}
+.yui-t6 .yui-b {
+	float: right;
+	width: 23.0769em;
+	*width: 22.50em;
+}
 
-		/* Give IE some extra breathing room for 1/3-based rounding issues */
-		.yui-gb .yui-u {*margin-left:1.9%;*width:31.9%;}
+.yui-t6 #yui-main .yui-b {
+	margin-right: 24.0769em;
+	*margin-right: 23.62em;
+}
 
-	.yui-gc div.first, 
-	.yui-gd .yui-u {width:66%;}
-	.yui-gd div.first {width:32%;}
+.yui-t7 #yui-main .yui-b {
+	display: block;
+	margin: 0 0 1em 0;
+}
 
-	.yui-ge div.first, 
-	.yui-gf .yui-u{width:74.2%;}
+#yui-main .yui-b {
+	float: none;
+	width: auto;
+}
 
-	.yui-ge .yui-u,
-	.yui-gf div.first {width:24%;}
+/**
+ * Section: Grids and Nesting Grids
+ */
 
-	.yui-g .yui-gb div.first,
-	.yui-gb div.first, 
-	.yui-gc div.first, 
-	.yui-gd div.first {margin-left:0;}
-	   
-	/*
-		Section: Deep Nesting 
-	*/
-	.yui-g .yui-g .yui-u,
-	.yui-gb .yui-g .yui-u,
-	.yui-gc .yui-g .yui-u,
-	.yui-gd .yui-g .yui-u,
-	.yui-ge .yui-g .yui-u,
-	.yui-gf .yui-g .yui-u {width:49%;*width:48.1%;*margin-left:0;}
-	
-	.yui-g .yui-g .yui-u {width:48.1%;}/*SF 1927599 from 1.14 to 2.6.0*/
-	.yui-g .yui-gb div.first,
-	.yui-gb .yui-gb div.first {*margin-right:0;*width:32%;_width:31.7%;}
+/* Children generally take half the available space */
+.yui-gb .yui-u,
+.yui-g .yui-gb .yui-u,
+.yui-gb .yui-g,
+.yui-gb .yui-gb,
+.yui-gb .yui-gc,
+.yui-gb .yui-gd,
+.yui-gb .yui-ge,
+.yui-gb .yui-gf,
+.yui-gc .yui-u, 
+.yui-gc .yui-g,
+.yui-gd .yui-u {
+	float: left;
+}
 
-	.yui-g .yui-gc div.first, 
-	.yui-gd .yui-g  {width:66%;}
+/* Float units (and sub grids) to the right */
+.yui-g .yui-u,
+.yui-g .yui-g,
+.yui-g .yui-gb, 
+.yui-g .yui-gc, 
+.yui-g .yui-gd, 
+.yui-g .yui-ge, 
+.yui-g .yui-gf, 
+.yui-gc .yui-u, 
+.yui-gd .yui-g,
+.yui-g .yui-gc .yui-u,
+.yui-ge .yui-u, 
+.yui-ge .yui-g, 
+.yui-gf .yui-g,
+.yui-gf .yui-u {
+	float: right;
+}
 
-	.yui-gb .yui-g div.first {*margin-right:4%;_margin-right:1.3%;}
+/*Float units (and sub grids) to the left */
+.yui-g div.first, 
+.yui-gb div.first,
+.yui-gc div.first,
+.yui-gd div.first, 
+.yui-ge div.first, 
+.yui-gf div.first,
+.yui-g .yui-gc div.first,
+.yui-g .yui-ge div.first,
+.yui-gc div.first div.first {
+	float: left;
+}
 
-	.yui-gb .yui-gc div.first, 
-	.yui-gb .yui-gd div.first  {*margin-right:0;}
+.yui-g .yui-u,
+.yui-g .yui-g,
+.yui-g .yui-gb,
+.yui-g .yui-gc,
+.yui-g .yui-gd,
+.yui-g .yui-ge,
+.yui-g .yui-gf {
+	width: 49.1%;
+}
 
-	.yui-gb .yui-gb .yui-u,
-	.yui-gb .yui-gc .yui-u {*margin-left:1.8%;_margin-left:4%;}
+.yui-gb .yui-u,
+.yui-g .yui-gb .yui-u,
+.yui-gb .yui-g,
+.yui-gb .yui-gb,
+.yui-gb .yui-gc,
+.yui-gb .yui-gd,
+.yui-gb .yui-ge,
+.yui-gb .yui-gf,
+.yui-gc .yui-u, 
+.yui-gc .yui-g,
+.yui-gd .yui-u {
+	width: 32%;
+	margin-left: 1.99%;
+}
 
-	.yui-g .yui-gb .yui-u {_margin-left:1.0%;}
+/* Give IE some extra breathing room for 1/3-based rounding issues */
+.yui-gb .yui-u {
+	*margin-left: 1.9%;
+	*width: 31.9%;
+}
 
-	.yui-gb .yui-gd .yui-u {*width:66%;_width:61.2%;} 
-	.yui-gb .yui-gd div.first {*width:31%;_width:29.5%;}
+.yui-gc div.first, 
+	.yui-gd .yui-u {
+	width: 66%;
+}
 
-	.yui-g .yui-gc .yui-u, 
-	.yui-gb .yui-gc .yui-u {width:32%;_float:right;margin-right:0;_margin-left:0;}
-	.yui-gb .yui-gc div.first {width:66%;*float:left;*margin-left:0;}
+.yui-gd div.first {
+	width: 32%;
+}
 
-	.yui-gb .yui-ge .yui-u, 
-	.yui-gb .yui-gf .yui-u {margin:0;}
+.yui-ge div.first, 
+	.yui-gf .yui-u {
+	width: 74.2%;
+}
 
-	.yui-gb .yui-gb .yui-u {_margin-left:.7%;}
+.yui-ge .yui-u,
+	.yui-gf div.first {
+	width: 24%;
+}
 
-	.yui-gb .yui-g div.first, 
-	.yui-gb .yui-gb div.first {*margin-left:0;}
+.yui-g .yui-gb div.first,
+.yui-gb div.first, 
+.yui-gc div.first, 
+.yui-gd div.first {
+	margin-left: 0;
+}
 
-	.yui-gc .yui-g .yui-u,
-	.yui-gd .yui-g .yui-u {*width:48.1%;*margin-left:0;}
+/**
+ * Section: Deep Nesting 
+ */
 
-	.yui-gb .yui-gd div.first {width:32%;}
-	.yui-g .yui-gd div.first {_width:29.9%;}
+.yui-g .yui-g .yui-u,
+.yui-gb .yui-g .yui-u,
+.yui-gc .yui-g .yui-u,
+.yui-gd .yui-g .yui-u,
+.yui-ge .yui-g .yui-u,
+.yui-gf .yui-g .yui-u {
+	width: 49%;
+	*width: 48.1%;
+	*margin-left: 0;
+}
 
-	.yui-ge .yui-g {width:24%;}
-	.yui-gf .yui-g {width:74.2%;}
+.yui-g .yui-g .yui-u {
+	width: 48.1%;
+}
 
-	.yui-gb .yui-ge div.yui-u,
-	.yui-gb .yui-gf div.yui-u {float:right;}
-	.yui-gb .yui-ge div.first,
-	.yui-gb .yui-gf div.first  {float:left;}
+/*SF 1927599 from 1.14 to 2.6.0*/
+.yui-g .yui-gb div.first,
+	.yui-gb .yui-gb div.first {
+	*margin-right: 0;
+	*width: 32%;
+	_width: 31.7%;
+}
 
-	/* Width Accommodation for Nested Contexts */
-	.yui-gb .yui-ge .yui-u,
-	.yui-gb .yui-gf div.first {*width:24%;_width:20%;}
+.yui-g .yui-gc div.first, 
+	.yui-gd .yui-g {
+	width: 66%;
+}
 
-	/* Width Accommodation for Nested Contexts */
-	.yui-gb .yui-ge div.first, 
-	.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}
+.yui-gb .yui-g div.first {
+	*margin-right: 4%;
+	_margin-right: 1.3%;
+}
 
-	/* Patch for GD within GE */
-	.yui-ge div.first .yui-gd .yui-u {width:65%;}
-	.yui-ge div.first .yui-gd div.first {width:32%;}
+.yui-gb .yui-gc div.first, 
+	.yui-gb .yui-gd div.first {
+	*margin-right: 0;
+}
 
-/*
-	Section: Clearing 
-*/
+.yui-gb .yui-gb .yui-u,
+	.yui-gb .yui-gc .yui-u {
+	*margin-left: 1.8%;
+	_margin-left: 4%;
+}
 
+.yui-g .yui-gb .yui-u {
+	_margin-left: 1.0%;
+}
+
+.yui-gb .yui-gd .yui-u {
+	*width: 66%;
+	_width: 61.2%;
+}
+
+.yui-gb .yui-gd div.first {
+	*width: 31%;
+	_width: 29.5%;
+}
+
+.yui-g .yui-gc .yui-u, 
+	.yui-gb .yui-gc .yui-u {
+	width: 32%;
+	_float: right;
+	margin-right: 0;
+	_margin-left: 0;
+}
+
+.yui-gb .yui-gc div.first {
+	width: 66%;
+	*float: left;
+	*margin-left: 0;
+}
+
+.yui-gb .yui-ge .yui-u, 
+	.yui-gb .yui-gf .yui-u {
+	margin: 0;
+}
+
+.yui-gb .yui-gb .yui-u {
+	_margin-left: .7%;
+}
+
+.yui-gb .yui-g div.first, 
+	.yui-gb .yui-gb div.first {
+	*margin-left: 0;
+}
+
+.yui-gc .yui-g .yui-u,
+	.yui-gd .yui-g .yui-u {
+	*width: 48.1%;
+	*margin-left: 0;
+}
+
+.yui-gb .yui-gd div.first {
+	width: 32%;
+}
+
+.yui-g .yui-gd div.first {
+	_width: 29.9%;
+}
+
+.yui-ge .yui-g {
+	width: 24%;
+}
+
+.yui-gf .yui-g {
+	width: 74.2%;
+}
+
+.yui-gb .yui-ge div.yui-u,
+	.yui-gb .yui-gf div.yui-u {
+	float: right;
+}
+
+.yui-gb .yui-ge div.first,
+	.yui-gb .yui-gf div.first {
+	float: left;
+}
+
+/* Width Accommodation for Nested Contexts */
+.yui-gb .yui-ge .yui-u,
+	.yui-gb .yui-gf div.first {
+	*width: 24%;
+	_width: 20%;
+}
+
+/* Width Accommodation for Nested Contexts */
+.yui-gb .yui-ge div.first, 
+	.yui-gb .yui-gf .yui-u {
+	*width: 73.5%;
+	_width: 65.5%;
+}
+
+/* Patch for GD within GE */
+.yui-ge div.first .yui-gd .yui-u {
+	width: 65%;
+}
+
+.yui-ge div.first .yui-gd div.first {
+	width: 32%;
+}
+
+/* @group Clearing */
+#hd:after,
 #bd:after,
+#ft:after,
 .yui-g:after, 
 .yui-gb:after, 
 .yui-gc:after, 
 .yui-gd:after, 
 .yui-ge:after, 
-.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}
+.yui-gf:after {
+	content: ".";
+	display: block;
+	height: 0;
+	clear: both;
+	visibility: hidden;
+}
+
+#hd,
 #bd,
+#ft,
 .yui-g, 
 .yui-gb, 
 .yui-gc, 
 .yui-gd, 
 .yui-ge, 
-.yui-gf{zoom:1;}
+.yui-gf {
+	zoom: 1;
+}

Deleted: trunk/root/static/yui/history/README
===================================================================
--- trunk/root/static/yui/history/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/history/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,62 +0,0 @@
-YUI Library - History - Release Notes
-
-2.6.0
-  * No changes.
-
-2.5.2
-  * No changes.
-
-2.5.1
-  * While BHM still does not work with current versions of Opera, we
-    are no longer throwing an exception in Opera -- which, if uncaught,
-    causes execution to stop.  Instead, we're messaging the unsupported
-    browser issue via YAHOO.log.  This will allow other aspects of a BHM-
-    managed script to continue executing in Opera.
-  * Fixed issue with case-sensitive tagName comparisons
-    (SourceForge bug 1868730).
-
-2.5.0
-  * No changes.
-
-2.4.0
-  * Added onReady method (similar to the Event utility's DOMReady method)
-  * Fixed SourceForge bugs 1794347, 1490803, 1490818 and 1420015.
-  * Starting with YUI 2.4.0, the necessary markup (see documentation) must be
-    statically created in the HTML document, and passed to the Browser History
-    Manager initialize method. This has two major benefits over older versions:
-      - The Browser History Manager may be initialized much later than before,
-        allowing for the corresponding <script> tag to be embedded at the
-        bottom of the page (which is good for performance)
-      - IE had a tendency to "forget" part or all of the history when returning
-        to a page.
-
-2.3.0
-  * The Browser History Manager now works on IE if used inside an IFrame
-    (See SourceForge Bug #1729569)
-  * Added multiNavigate method, which allows changing the state of several
-    modules at once, without introducing intermediate history entries
-    (See SourceForge Bug #1713236)
-  * Do not raise an exception when re-registering a module
-    (See SourceForge Bug #1708840)
-
-2.2.1
-  * Use YAHOO.lang.hasOwnProperty when iterating over the _modules associative
-    array. This way, the browser history manager will play nice with the
-    libraries that add methods to the prototype of the Array object.
-  * Fixed bug related to escaping / unescaping some values.
-  * Added parameters to the register method to look like the addListener method
-    of the Event utility (you can now pass an object that becomes the scope of
-    the onStateChange handler, or is simply passed in to that handler)
-  * Upgraded code presentation to work with Crockford's latest recommendations
-    (which the latest version of JSLint online implements)
-  * Integrated David Bloom's findings to not have to use an external asset
-    (blank.html) on IE (when not going through HTTPS)
-
-2.2.0
-  * This is the initial release of the browser history manager.
-    This component is considered experimental.  Experimental components
-    are released for community experimentation and feedback; they
-    are not considered appropriate for implementation in mission-
-    critical applications. Please see the YUI FAQ at
-    http://developer.yahoo.com/yui/articles/faq/#experimental
-    for more information about the "experimental" designation.
\ No newline at end of file

Modified: trunk/root/static/yui/history/history-debug.js
===================================================================
--- trunk/root/static/yui/history/history-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/history/history-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Browser History Manager provides the ability to use the back/forward
@@ -345,8 +345,26 @@
 
         if (YAHOO.env.ua.ie) {
 
-            _checkIframeLoaded();
+            if (typeof document.documentMode === "undefined" || document.documentMode < 8) {
 
+                // IE < 8 or IE8 in quirks mode or IE7 standards mode
+                _checkIframeLoaded();
+
+            } else {
+
+                // IE8 in IE8 standards mode
+                YAHOO.util.Event.on(top, "hashchange",
+                    function () {
+                        var hash = _getHash();
+                        _handleFQStateChange(hash);
+                        _storeStates();
+                    });
+
+                _initialized = true;
+                YAHOO.util.History.onLoadEvent.fire();
+
+            }
+
         } else {
 
             // Start the thread that will have the responsibility to
@@ -526,19 +544,13 @@
                 return;
             }
 
-            if (YAHOO.env.ua.opera) {
-                // Opera cannot be supported because of several problems that
-                // have been reported to the Opera team, but never addressed:
-                //   1) Hash changes are not detected (started happening with
-                //      recent versions of Opera)
-                //   2) The entire DOM gets cached, so when you come back to
-                //      a page, the window's onload event does not get fired,
-                //      which prevents us from initializing the browser history
-                //      manager.
-                // As a consequence, the best thing we can do is to throw an
-                // exception. The application should catch it, and degrade
-                // gracefully. This is the sad state of history management.
-                YAHOO.log("Unsupported browser.", "error", this.toString());
+            if (YAHOO.env.ua.opera && typeof history.navigationMode !== "undefined") {
+                // Disable Opera's fast back/forward navigation mode and puts
+                // it in compatible mode. This makes anchor-based history
+                // navigation work after the page has been navigated away
+                // from and re-activated, at the cost of slowing down
+                // back/forward navigation to and from that page.
+                history.navigationMode = "compatible";
             }
 
             if (typeof stateField === "string") {
@@ -555,7 +567,8 @@
 
             _stateField = stateField;
 
-            if (YAHOO.env.ua.ie) {
+            // IE < 8 or IE8 in quirks mode or IE7 standards mode
+            if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) {
 
                 if (typeof histFrame === "string") {
                     histFrame = document.getElementById(histFrame);
@@ -646,7 +659,7 @@
 
             fqstate = currentStates.join("&");
 
-            if (YAHOO.env.ua.ie) {
+            if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) {
 
                 return _updateIFrame(fqstate);
 
@@ -726,15 +739,16 @@
             // URL-decoded, which creates problems if the state value
             // contained special characters...
             idx = top.location.href.indexOf("#");
-            hash = idx >= 0 ? top.location.href.substr(idx + 1) : top.location.href;
-
-            states = hash.split("&");
-            for (i = 0, len = states.length; i < len; i++) {
-                tokens = states[i].split("=");
-                if (tokens.length === 2) {
-                    moduleName = tokens[0];
-                    if (moduleName === module) {
-                        return unescape(tokens[1]);
+            if (idx >= 0) {
+                hash = top.location.href.substr(idx + 1);
+                states = hash.split("&");
+                for (i = 0, len = states.length; i < len; i++) {
+                    tokens = states[i].split("=");
+                    if (tokens.length === 2) {
+                        moduleName = tokens[0];
+                        if (moduleName === module) {
+                            return unescape(tokens[1]);
+                        }
                     }
                 }
             }
@@ -786,4 +800,4 @@
     };
 
 })();
-YAHOO.register("history", YAHOO.util.History, {version: "2.6.0", build: "1321"});
+YAHOO.register("history", YAHOO.util.History, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/history/history-min.js
===================================================================
--- trunk/root/static/yui/history/history-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/history/history-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.util.History=(function(){var C=null;var K=null;var F=false;var D=[];var B=[];function I(){var M,L;L=top.location.href;M=L.indexOf("#");return M>=0?L.substr(M+1):null;}function A(){var M,N,O=[],L=[];for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){N=D[M];O.push(M+"="+N.initialState);L.push(M+"="+N.currentState);}}K.value=O.join("&")+"|"+L.join("&");if(YAHOO.env.ua.webkit){K.value+="|"+B.join(",");}}function H(L){var Q,R,M,O,P,T,S,N;if(!L){for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){O=D[M];O.currentState=O.initialState;O.onStateChange(unescape(O.currentState));}}return ;}P=[];T=L.split("&");for(Q=0,R=T.length;Q<R;Q++){S=T[Q].split("=");if(S.length===2){M=S[0];N=S[1];P[M]=N;}}for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){O=D[M];N=P[M];if(!N||O.currentState!==N){O.currentState=N||O.initialState;O.onStateChange(unescape(O.currentState));}}}}function J(O){var L,N;L='<html><body><div id="state">'+O+"</div></body></html>";try{N=C.contentWindow.document;N.open();N.write(L);N!
 .close();return true;}catch(M){return false;}}function G(){var O,L,N,M;if(!C.contentWindow||!C.contentWindow.document){setTimeout(G,10);return ;}O=C.contentWindow.document;L=O.getElementById("state");N=L?L.innerText:null;M=I();setInterval(function(){var U,Q,R,S,T,P;O=C.contentWindow.document;L=O.getElementById("state");U=L?L.innerText:null;T=I();if(U!==N){N=U;H(N);if(!N){Q=[];for(R in D){if(YAHOO.lang.hasOwnProperty(D,R)){S=D[R];Q.push(R+"="+S.initialState);}}T=Q.join("&");}else{T=N;}top.location.hash=T;M=T;A();}else{if(T!==M){M=T;J(T);}}},50);F=true;YAHOO.util.History.onLoadEvent.fire();}function E(){var S,U,Q,W,M,O,V,P,T,N,L,R;Q=K.value.split("|");if(Q.length>1){V=Q[0].split("&");for(S=0,U=V.length;S<U;S++){W=V[S].split("=");if(W.length===2){M=W[0];P=W[1];O=D[M];if(O){O.initialState=P;}}}T=Q[1].split("&");for(S=0,U=T.length;S<U;S++){W=T[S].split("=");if(W.length>=2){M=W[0];N=W[1];O=D[M];if(O){O.currentState=N;}}}}if(Q.length>2){B=Q[2].split(",");}if(YAHOO.env.ua.ie){G();}!
 else{L=history.length;R=I();setInterval(function(){var Z,X,Y;X!
 =I();Y=h
istory.length;if(X!==R){R=X;L=Y;H(R);A();}else{if(Y!==L&&YAHOO.env.ua.webkit){R=X;L=Y;Z=B[L-1];H(Z);A();}}},50);F=true;YAHOO.util.History.onLoadEvent.fire();}}return{onLoadEvent:new YAHOO.util.CustomEvent("onLoad"),onReady:function(M,N,L){if(F){setTimeout(function(){var O=window;if(L){if(L===true){O=N;}else{O=L;}}M.call(O,"onLoad",[],N);},0);}else{YAHOO.util.History.onLoadEvent.subscribe(M,N,L);}},register:function(O,L,Q,R,N){var P,M;if(typeof O!=="string"||YAHOO.lang.trim(O)===""||typeof L!=="string"||typeof Q!=="function"){throw new Error("Missing or invalid argument");}if(D[O]){return ;}if(F){throw new Error("All modules must be registered before calling YAHOO.util.History.initialize");}O=escape(O);L=escape(L);P=null;if(N===true){P=R;}else{P=N;}M=function(S){return Q.call(P,S,R);};D[O]={name:O,initialState:L,currentState:L,onStateChange:M};},initialize:function(L,M){if(F){return ;}if(YAHOO.env.ua.opera){}if(typeof L==="string"){L=document.getElementById(L);}if(!L||L.tagNa!
 me.toUpperCase()!=="TEXTAREA"&&(L.tagName.toUpperCase()!=="INPUT"||L.type!=="hidden"&&L.type!=="text")){throw new Error("Missing or invalid argument");}K=L;if(YAHOO.env.ua.ie){if(typeof M==="string"){M=document.getElementById(M);}if(!M||M.tagName.toUpperCase()!=="IFRAME"){throw new Error("Missing or invalid argument");}C=M;}YAHOO.util.Event.onDOMReady(E);},navigate:function(M,N){var L;if(typeof M!=="string"||typeof N!=="string"){throw new Error("Missing or invalid argument");}L={};L[M]=N;return YAHOO.util.History.multiNavigate(L);},multiNavigate:function(M){var L,N,P,O,Q;if(typeof M!=="object"){throw new Error("Missing or invalid argument");}if(!F){throw new Error("The Browser History Manager is not initialized");}for(N in M){if(!D[N]){throw new Error("The following module has not been registered: "+N);}}L=[];for(N in D){if(YAHOO.lang.hasOwnProperty(D,N)){P=D[N];if(YAHOO.lang.hasOwnProperty(M,N)){O=M[unescape(N)];}else{O=unescape(P.currentState);}N=escape(N);O=escape(O);L.p!
 ush(N+"="+O);}}Q=L.join("&");if(YAHOO.env.ua.ie){return J(Q);}!
 else{top
.location.hash=Q;if(YAHOO.env.ua.webkit){B[history.length]=Q;A();}return true;}},getCurrentState:function(L){var M;if(typeof L!=="string"){throw new Error("Missing or invalid argument");}if(!F){throw new Error("The Browser History Manager is not initialized");}M=D[L];if(!M){throw new Error("No such registered module: "+L);}return unescape(M.currentState);},getBookmarkedState:function(Q){var P,M,L,S,N,R,O;if(typeof Q!=="string"){throw new Error("Missing or invalid argument");}L=top.location.href.indexOf("#");S=L>=0?top.location.href.substr(L+1):top.location.href;N=S.split("&");for(P=0,M=N.length;P<M;P++){R=N[P].split("=");if(R.length===2){O=R[0];if(O===Q){return unescape(R[1]);}}}return null;},getQueryStringParameter:function(Q,N){var O,M,L,S,R,P;N=N||top.location.href;L=N.indexOf("?");S=L>=0?N.substr(L+1):N;L=S.lastIndexOf("#");S=L>=0?S.substr(0,L):S;R=S.split("&");for(O=0,M=R.length;O<M;O++){P=R[O].split("=");if(P.length>=2){if(P[0]===Q){return unescape(P[1]);}}}return null!
 ;}};})();YAHOO.register("history",YAHOO.util.History,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.util.History=(function(){var C=null;var K=null;var F=false;var D=[];var B=[];function I(){var M,L;L=top.location.href;M=L.indexOf("#");return M>=0?L.substr(M+1):null;}function A(){var M,N,O=[],L=[];for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){N=D[M];O.push(M+"="+N.initialState);L.push(M+"="+N.currentState);}}K.value=O.join("&")+"|"+L.join("&");if(YAHOO.env.ua.webkit){K.value+="|"+B.join(",");}}function H(L){var Q,R,M,O,P,T,S,N;if(!L){for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){O=D[M];O.currentState=O.initialState;O.onStateChange(unescape(O.currentState));}}return;}P=[];T=L.split("&");for(Q=0,R=T.length;Q<R;Q++){S=T[Q].split("=");if(S.length===2){M=S[0];N=S[1];P[M]=N;}}for(M in D){if(YAHOO.lang.hasOwnProperty(D,M)){O=D[M];N=P[M];if(!N||O.currentState!==N){O.currentState=N||O.initialState;O.onStateChange(unescape(O.currentState));}}}}function J(O){var L,N;L='<html><body><div id="state">'+O+"</div></body></html>";try{N=C.contentWindow.document;N.open();N.write(L);N.!
 close();return true;}catch(M){return false;}}function G(){var O,L,N,M;if(!C.contentWindow||!C.contentWindow.document){setTimeout(G,10);return;}O=C.contentWindow.document;L=O.getElementById("state");N=L?L.innerText:null;M=I();setInterval(function(){var U,Q,R,S,T,P;O=C.contentWindow.document;L=O.getElementById("state");U=L?L.innerText:null;T=I();if(U!==N){N=U;H(N);if(!N){Q=[];for(R in D){if(YAHOO.lang.hasOwnProperty(D,R)){S=D[R];Q.push(R+"="+S.initialState);}}T=Q.join("&");}else{T=N;}top.location.hash=T;M=T;A();}else{if(T!==M){M=T;J(T);}}},50);F=true;YAHOO.util.History.onLoadEvent.fire();}function E(){var S,U,Q,W,M,O,V,P,T,N,L,R;Q=K.value.split("|");if(Q.length>1){V=Q[0].split("&");for(S=0,U=V.length;S<U;S++){W=V[S].split("=");if(W.length===2){M=W[0];P=W[1];O=D[M];if(O){O.initialState=P;}}}T=Q[1].split("&");for(S=0,U=T.length;S<U;S++){W=T[S].split("=");if(W.length>=2){M=W[0];N=W[1];O=D[M];if(O){O.currentState=N;}}}}if(Q.length>2){B=Q[2].split(",");}if(YAHOO.env.ua.ie){if(type!
 of document.documentMode==="undefined"||document.documentMode<!
 8){G();}
else{YAHOO.util.Event.on(top,"hashchange",function(){var X=I();H(X);A();});F=true;YAHOO.util.History.onLoadEvent.fire();}}else{L=history.length;R=I();setInterval(function(){var Z,X,Y;X=I();Y=history.length;if(X!==R){R=X;L=Y;H(R);A();}else{if(Y!==L&&YAHOO.env.ua.webkit){R=X;L=Y;Z=B[L-1];H(Z);A();}}},50);F=true;YAHOO.util.History.onLoadEvent.fire();}}return{onLoadEvent:new YAHOO.util.CustomEvent("onLoad"),onReady:function(M,N,L){if(F){setTimeout(function(){var O=window;if(L){if(L===true){O=N;}else{O=L;}}M.call(O,"onLoad",[],N);},0);}else{YAHOO.util.History.onLoadEvent.subscribe(M,N,L);}},register:function(O,L,Q,R,N){var P,M;if(typeof O!=="string"||YAHOO.lang.trim(O)===""||typeof L!=="string"||typeof Q!=="function"){throw new Error("Missing or invalid argument");}if(D[O]){return;}if(F){throw new Error("All modules must be registered before calling YAHOO.util.History.initialize");}O=escape(O);L=escape(L);P=null;if(N===true){P=R;}else{P=N;}M=function(S){return Q.call(P,S,R);};D[O!
 ]={name:O,initialState:L,currentState:L,onStateChange:M};},initialize:function(L,M){if(F){return;}if(YAHOO.env.ua.opera&&typeof history.navigationMode!=="undefined"){history.navigationMode="compatible";}if(typeof L==="string"){L=document.getElementById(L);}if(!L||L.tagName.toUpperCase()!=="TEXTAREA"&&(L.tagName.toUpperCase()!=="INPUT"||L.type!=="hidden"&&L.type!=="text")){throw new Error("Missing or invalid argument");}K=L;if(YAHOO.env.ua.ie&&(typeof document.documentMode==="undefined"||document.documentMode<8)){if(typeof M==="string"){M=document.getElementById(M);}if(!M||M.tagName.toUpperCase()!=="IFRAME"){throw new Error("Missing or invalid argument");}C=M;}YAHOO.util.Event.onDOMReady(E);},navigate:function(M,N){var L;if(typeof M!=="string"||typeof N!=="string"){throw new Error("Missing or invalid argument");}L={};L[M]=N;return YAHOO.util.History.multiNavigate(L);},multiNavigate:function(M){var L,N,P,O,Q;if(typeof M!=="object"){throw new Error("Missing or invalid argument!
 ");}if(!F){throw new Error("The Browser History Manager is not!
  initial
ized");}for(N in M){if(!D[N]){throw new Error("The following module has not been registered: "+N);}}L=[];for(N in D){if(YAHOO.lang.hasOwnProperty(D,N)){P=D[N];if(YAHOO.lang.hasOwnProperty(M,N)){O=M[unescape(N)];}else{O=unescape(P.currentState);}N=escape(N);O=escape(O);L.push(N+"="+O);}}Q=L.join("&");if(YAHOO.env.ua.ie&&(typeof document.documentMode==="undefined"||document.documentMode<8)){return J(Q);}else{top.location.hash=Q;if(YAHOO.env.ua.webkit){B[history.length]=Q;A();}return true;}},getCurrentState:function(L){var M;if(typeof L!=="string"){throw new Error("Missing or invalid argument");}if(!F){throw new Error("The Browser History Manager is not initialized");}M=D[L];if(!M){throw new Error("No such registered module: "+L);}return unescape(M.currentState);},getBookmarkedState:function(Q){var P,M,L,S,N,R,O;if(typeof Q!=="string"){throw new Error("Missing or invalid argument");}L=top.location.href.indexOf("#");if(L>=0){S=top.location.href.substr(L+1);N=S.split("&");for(P=0!
 ,M=N.length;P<M;P++){R=N[P].split("=");if(R.length===2){O=R[0];if(O===Q){return unescape(R[1]);}}}}return null;},getQueryStringParameter:function(Q,N){var O,M,L,S,R,P;N=N||top.location.href;L=N.indexOf("?");S=L>=0?N.substr(L+1):N;L=S.lastIndexOf("#");S=L>=0?S.substr(0,L):S;R=S.split("&");for(O=0,M=R.length;O<M;O++){P=R[O].split("=");if(P.length>=2){if(P[0]===Q){return unescape(P[1]);}}}return null;}};})();YAHOO.register("history",YAHOO.util.History,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/history/history.js
===================================================================
--- trunk/root/static/yui/history/history.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/history/history.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Browser History Manager provides the ability to use the back/forward
@@ -345,8 +345,26 @@
 
         if (YAHOO.env.ua.ie) {
 
-            _checkIframeLoaded();
+            if (typeof document.documentMode === "undefined" || document.documentMode < 8) {
 
+                // IE < 8 or IE8 in quirks mode or IE7 standards mode
+                _checkIframeLoaded();
+
+            } else {
+
+                // IE8 in IE8 standards mode
+                YAHOO.util.Event.on(top, "hashchange",
+                    function () {
+                        var hash = _getHash();
+                        _handleFQStateChange(hash);
+                        _storeStates();
+                    });
+
+                _initialized = true;
+                YAHOO.util.History.onLoadEvent.fire();
+
+            }
+
         } else {
 
             // Start the thread that will have the responsibility to
@@ -526,18 +544,13 @@
                 return;
             }
 
-            if (YAHOO.env.ua.opera) {
-                // Opera cannot be supported because of several problems that
-                // have been reported to the Opera team, but never addressed:
-                //   1) Hash changes are not detected (started happening with
-                //      recent versions of Opera)
-                //   2) The entire DOM gets cached, so when you come back to
-                //      a page, the window's onload event does not get fired,
-                //      which prevents us from initializing the browser history
-                //      manager.
-                // As a consequence, the best thing we can do is to throw an
-                // exception. The application should catch it, and degrade
-                // gracefully. This is the sad state of history management.
+            if (YAHOO.env.ua.opera && typeof history.navigationMode !== "undefined") {
+                // Disable Opera's fast back/forward navigation mode and puts
+                // it in compatible mode. This makes anchor-based history
+                // navigation work after the page has been navigated away
+                // from and re-activated, at the cost of slowing down
+                // back/forward navigation to and from that page.
+                history.navigationMode = "compatible";
             }
 
             if (typeof stateField === "string") {
@@ -554,7 +567,8 @@
 
             _stateField = stateField;
 
-            if (YAHOO.env.ua.ie) {
+            // IE < 8 or IE8 in quirks mode or IE7 standards mode
+            if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) {
 
                 if (typeof histFrame === "string") {
                     histFrame = document.getElementById(histFrame);
@@ -645,7 +659,7 @@
 
             fqstate = currentStates.join("&");
 
-            if (YAHOO.env.ua.ie) {
+            if (YAHOO.env.ua.ie && (typeof document.documentMode === "undefined" || document.documentMode < 8)) {
 
                 return _updateIFrame(fqstate);
 
@@ -725,15 +739,16 @@
             // URL-decoded, which creates problems if the state value
             // contained special characters...
             idx = top.location.href.indexOf("#");
-            hash = idx >= 0 ? top.location.href.substr(idx + 1) : top.location.href;
-
-            states = hash.split("&");
-            for (i = 0, len = states.length; i < len; i++) {
-                tokens = states[i].split("=");
-                if (tokens.length === 2) {
-                    moduleName = tokens[0];
-                    if (moduleName === module) {
-                        return unescape(tokens[1]);
+            if (idx >= 0) {
+                hash = top.location.href.substr(idx + 1);
+                states = hash.split("&");
+                for (i = 0, len = states.length; i < len; i++) {
+                    tokens = states[i].split("=");
+                    if (tokens.length === 2) {
+                        moduleName = tokens[0];
+                        if (moduleName === module) {
+                            return unescape(tokens[1]);
+                        }
                     }
                 }
             }
@@ -785,4 +800,4 @@
     };
 
 })();
-YAHOO.register("history", YAHOO.util.History, {version: "2.6.0", build: "1321"});
+YAHOO.register("history", YAHOO.util.History, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/imagecropper/README
===================================================================
--- trunk/root/static/yui/imagecropper/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,22 +0,0 @@
-**** version 2.6.0 ***
-    Bug Fix:
-        * 2216246 - Reset fails to reset Constraints
-
-**** version 2.5.2 ***
-
-    Bug Fixes:
-        * 1839205 - [SF 1927495 ] crop area moves outside of the image
-
-
-**** version 2.5.1 ***
-    Fixed Issues dealing with mask resize and keeping crop interface inside of crop region
-
-    Bug Fixes:
-        * 1770394 - [SF 1900953 ] Ratio doesn't work
-        * 1776164 - [SF 1903193 ] Several issues with the crop window
-        * 1779430 - [SF 1904258 ] Initial CSS size isn't checked
-    
-
-**** version 2.5.0 ***
-
-Initial Release

Modified: trunk/root/static/yui/imagecropper/assets/imagecropper-core.css
===================================================================
--- trunk/root/static/yui/imagecropper/assets/imagecropper-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/assets/imagecropper-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-crop {
     position: relative;

Modified: trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper-skin.css
===================================================================
--- trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-crop .yui-crop-mask {
     background-color: #000;

Modified: trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper.css
===================================================================
--- trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/assets/skins/sam/imagecropper.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-crop{position:relative;}.yui-crop .yui-crop-mask{position:absolute;top:0;left:0;height:100%;width:100%;}.yui-crop .yui-resize{position:absolute;top:10px;left:10px;border:0;}.yui-crop .yui-crop-resize-mask{position:absolute;top:0;left:0;height:100%;width:100%;background-position:-10px -10px;overflow:hidden;}.yui-skin-sam .yui-crop .yui-crop-mask{background-color:#000;opacity:.5;filter:alpha(opacity=50);}.yui-skin-sam .yui-crop .yui-resize{border:1px dashed #fff;}

Deleted: trunk/root/static/yui/imagecropper/imagecropper-beta-debug.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper-beta-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper-beta-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,907 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * @description <p>Creates a Image Cropper control.</p>
- * @namespace YAHOO.widget
- * @requires yahoo, dom, dragdrop, element, event, resize
- * @module imagecropper
- * @beta
- */
-(function() {
-var Dom = YAHOO.util.Dom,
-    Event = YAHOO.util.Event,
-    Lang = YAHOO.lang;
-
-    /**
-     * @constructor
-     * @class ImageCropper
-     * @description <p>Creates a Image Cropper control.</p>
-     * @extends YAHOO.util.Element
-     * @param {String/HTMLElement} el The image element to make croppable.
-     * @param {Object} attrs Object liternal containing configuration parameters.
-    */
-    var Crop = function(el, config) {
-        YAHOO.log('Initializing', 'log', 'ImageCropper');
-        var oConfig = {
-            element: el,
-            attributes: config || {}
-        };
-
-        Crop.superclass.constructor.call(this, oConfig.element, oConfig.attributes);    
-    };
-
-    /**
-    * @private
-    * @static
-    * @property _instances
-    * @description Internal hash table for all ImageCropper instances
-    * @type Object
-    */ 
-    Crop._instances = {};
-    /**
-    * @static
-    * @method getCropperById 
-    * @description Get's an ImageCropper object by the HTML id of the image associated with the ImageCropper object.
-    * @return {Object} The ImageCropper Object
-    */ 
-    Crop.getCropperById = function(id) {
-        if (Crop._instances[id]) {
-            return Crop._instances[id];
-        }
-        return false;
-    };
-
-    YAHOO.extend(Crop, YAHOO.util.Element, {
-        /**
-        * @private
-        * @property CSS_MAIN
-        * @description The CSS class used to wrap the element 
-        * @type String
-        */
-        CSS_MAIN: 'yui-crop',
-        /**
-        * @private
-        * @property CSS_MASK
-        * @description The CSS class for the mask element
-        * @type String
-        */
-        CSS_MASK: 'yui-crop-mask',
-        /**
-        * @private
-        * @property CSS_RESIZE_MASK
-        * @description The CSS class for the mask inside the resize element
-        * @type String
-        */
-        CSS_RESIZE_MASK: 'yui-crop-resize-mask',
-
-        /**
-        * @private
-        * @property _image
-        * @description The url of the image we are cropping
-        * @type String
-        */
-        _image: null,
-        /**
-        * @private
-        * @property _active
-        * @description Flag to determine if the crop region is active
-        * @type Boolean
-        */
-        _active: null,
-        /**
-        * @private
-        * @property _resize
-        * @description A reference to the Resize Utility used in this Cropper Instance
-        * @type Object
-        */
-        _resize: null,
-        /**
-        * @private
-        * @property _resizeEl
-        * @description The HTML Element used to create the Resize Oject
-        * @type HTMLElement
-        */
-        _resizeEl: null,
-        /**
-        * @private
-        * @property _resizeMaskEl
-        * @description The HTML Element used to create the Resize mask
-        * @type HTMLElement
-        */
-        _resizeMaskEl: null,
-        /**
-        * @private
-        * @property _wrap
-        * @description The HTML Element created to wrap the image
-        * @type HTMLElement
-        */
-        _wrap: null,
-        /**
-        * @private
-        * @property _mask
-        * @description The HTML Element created to "mask" the image being cropped
-        * @type HTMLElement
-        */
-        _mask: null,
-        /**
-        * @private
-        * @method _createWrap
-        * @description Creates the wrapper element used to wrap the image
-        */
-        _createWrap: function() {
-            YAHOO.log('Creating the wrap element', 'log', 'ImageCropper');
-            this._wrap = document.createElement('div');
-            this._wrap.id = this.get('element').id + '_wrap';
-            this._wrap.className = this.CSS_MAIN;
-            var el = this.get('element');
-            this._wrap.style.width = el.width ? el.width + 'px' : Dom.getStyle(el, 'width');
-            this._wrap.style.height = el.height ? el.height + 'px' : Dom.getStyle(el, 'height');
-            
-            var par = this.get('element').parentNode;
-            par.replaceChild(this._wrap, this.get('element'));
-            this._wrap.appendChild(this.get('element'));
-
-            Event.on(this._wrap, 'mouseover', this._handleMouseOver, this, true);
-            Event.on(this._wrap, 'mouseout', this._handleMouseOut, this, true);
-
-            Event.on(this._wrap, 'click', function(ev) { Event.stopEvent(ev); }, this, true);
-        },
-
-        /**
-        * @private
-        * @method _createMask
-        * @description Creates the mask element used to mask the image
-        */
-        _createMask: function() {
-            YAHOO.log('Creating the Mask', 'log', 'ImageCropper');
-            this._mask = document.createElement('div');
-            this._mask.className = this.CSS_MASK;
-            this._wrap.appendChild(this._mask);
-        },
-
-        /**
-        * @private
-        * @method _createResize
-        * @description Creates the resize element and the instance of the Resize Utility
-        */
-        _createResize: function() {
-            YAHOO.log('Creating the Resize element', 'log', 'ImageCropper');
-            this._resizeEl = document.createElement('div');
-            this._resizeEl.className = YAHOO.util.Resize.prototype.CSS_RESIZE;
-            this._resizeEl.style.position = 'absolute';
-            
-            this._resizeEl.innerHTML = '<div class="' + this.CSS_RESIZE_MASK + '"></div>';
-            this._resizeMaskEl = this._resizeEl.firstChild;
-            this._wrap.appendChild(this._resizeEl);
-            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
-            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
-            this._resizeMaskEl.style.height = Math.floor(this.get('initHeight')) + 'px';
-            this._resizeMaskEl.style.width = Math.floor(this.get('initWidth')) + 'px';
-
-            this._resize = new YAHOO.util.Resize(this._resizeEl, {
-                knobHandles: true,
-                handles: 'all',
-                draggable: true,
-                status: this.get('status'),
-                minWidth: this.get('minWidth'),
-                minHeight: this.get('minHeight'),
-                ratio: this.get('ratio'),
-                autoRatio: this.get('autoRatio'),
-                height: this.get('initHeight'),
-                width: this.get('initWidth')
-            });
-
-            this._setBackgroundImage(this.get('element').getAttribute('src', 2));
-            this._setBackgroundPosition(-(this.get('initialXY')[0]),  -(this.get('initialXY')[1]));
-
-            this._resize.on('startResize', this._handleStartResizeEvent, this, true);
-            this._resize.on('endResize', this._handleEndResizeEvent, this, true);
-            this._resize.on('dragEvent', this._handleDragEvent, this, true);
-            this._resize.on('beforeResize', this._handleBeforeResizeEvent, this, true);
-            this._resize.on('resize', this._handleResizeEvent, this, true);
-            this._resize.dd.on('b4StartDragEvent', this._handleB4DragEvent, this, true);
-        },
-
-        /**
-        * @private
-        * @method _handleMouseOver
-        * @description Handles the mouseover event
-        */
-        _handleMouseOver: function(ev) {
-            var evType = 'keydown';
-            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
-                evType = 'keypress';
-            }
-            if (!this._active) {
-                this._active = true;
-                if (this.get('useKeys')) {
-                    Event.on(document, evType, this._handleKeyPress, this, true);
-                }
-            }
-        },
-        /**
-        * @private
-        * @method _handleMouseOut
-        * @description Handles the mouseout event
-        */
-        _handleMouseOut: function(ev) {
-            var evType = 'keydown';
-            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
-                evType = 'keypress';
-            }
-            this._active = false;
-            if (this.get('useKeys')) {
-                Event.removeListener(document, evType, this._handleKeyPress);
-            }
-        },
-
-        /**
-        * @private
-        * @method _moveEl
-        * @description Moves the resize element based on the arrow keys
-        */
-        _moveEl: function(dir, inc) {
-            YAHOO.log('Moving the element', 'log', 'ImageCropper');
-            var t = 0, l = 0,
-                region = this._setConstraints(),
-                resize = true;
-
-            switch (dir) {
-                case 'down':
-                    t = -(inc);
-                    if ((region.bottom - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.top = (region.top + region.bottom) + 'px';
-                    }
-                    break;
-                case 'up':
-                    t = (inc);
-                    if ((region.top - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.top = '0px';
-                    }
-                    break;
-                case 'right':
-                    l = -(inc);
-                    if ((region.right - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.left = (region.left + region.right) + 'px';
-                    }
-                    break;
-                case 'left':
-                    l = inc;
-                    if ((region.left - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.left = '0px';
-                    }
-                    break;
-            }
-
-            if (resize) {
-                YAHOO.log('Moving via Key Listener: ' + dir, 'log', 'ImageCropper');
-                this._resizeEl.style.left = (parseInt(this._resizeEl.style.left, 10) - l) + 'px';
-                this._resizeEl.style.top = (parseInt(this._resizeEl.style.top, 10) - t) + 'px';
-                this.fireEvent('moveEvent', { target: 'keypress' });
-            } else {
-                this._setConstraints();
-            }
-            this._syncBackgroundPosition();
-        },
-
-        /**
-        * @private
-        * @method _handleKeyPress
-        * @description Handles the keypress event
-        */
-        _handleKeyPress: function(ev) {
-            var kc = Event.getCharCode(ev),
-                stopEvent = false,
-                inc = ((ev.shiftKey) ? this.get('shiftKeyTick') : this.get('keyTick'));
-
-            switch (kc) {
-                case 0x25: // left
-                    this._moveEl('left', inc);
-                    stopEvent = true;
-                    break;
-                case 0x26: // up
-                    this._moveEl('up', inc);
-                    stopEvent = true;
-                    break;
-                case 0x27: // right
-                    this._moveEl('right', inc);
-                    stopEvent = true;
-                    break;
-                case 0x28: // down
-                    this._moveEl('down', inc);
-                    stopEvent = true;
-                    break;
-                default:
-            }
-            if (stopEvent) {
-                Event.preventDefault(ev);
-            }
-        },
-
-        /**
-        * @private
-        * @method _handleB4DragEvent
-        * @description Handles the DragDrop b4DragEvent event
-        */
-        _handleB4DragEvent: function() {
-            this._setConstraints();
-        },
-
-        /**
-        * @private
-        * @method _handleDragEvent
-        * @description Handles the DragDrop DragEvent event
-        */
-        _handleDragEvent: function() {
-            this._syncBackgroundPosition();
-            this.fireEvent('dragEvent', arguments);
-            this.fireEvent('moveEvent', { target: 'dragevent' });
-        },
-
-        /**
-        * @private
-        * @method _handleBeforeResizeEvent
-        * @description Handles the Resize Utilitys beforeResize event
-        */
-        _handleBeforeResizeEvent: function(args) {
-            var region = Dom.getRegion(this.get('element')),
-                c = this._resize._cache,
-                ch = this._resize._currentHandle, h = 0, w = 0;
-
-            if (args.top && (args.top < region.top)) {
-                h = (c.height + c.top) - region.top;
-                Dom.setY(this._resize.getWrapEl(), region.top);
-                this._resize.getWrapEl().style.height = h + 'px';
-                this._resize._cache.height = h;
-                this._resize._cache.top = region.top;
-                this._syncBackgroundPosition();
-                return false;
-            }
-            if (args.left && (args.left < region.left)) {
-                w = (c.width + c.left) - region.left;
-                Dom.setX(this._resize.getWrapEl(), region.left);
-                this._resize._cache.left = region.left;
-                this._resize.getWrapEl().style.width = w + 'px';
-                this._resize._cache.width = w;
-                this._syncBackgroundPosition();
-                return false;
-            }
-            if (ch != 'tl' && ch != 'l' && ch != 'bl') {
-                if (c.left && args.width && ((c.left + args.width) > region.right)) {
-                    w = (region.right - c.left);
-                    Dom.setX(this._resize.getWrapEl(), (region.right - w));
-                    this._resize.getWrapEl().style.width = w + 'px';
-                    this._resize._cache.left = (region.right - w);
-                    this._resize._cache.width = w;
-                    this._syncBackgroundPosition();
-                    return false;
-                }
-            }
-            if (ch != 't' && ch != 'tr' && ch != 'tl') {
-                if (c.top && args.height && ((c.top + args.height) > region.bottom)) {
-                    h = (region.bottom - c.top);
-                    Dom.setY(this._resize.getWrapEl(), (region.bottom - h));
-                    this._resize.getWrapEl().style.height = h + 'px';
-                    this._resize._cache.height = h;
-                    this._resize._cache.top = (region.bottom - h);
-                    this._syncBackgroundPosition();
-                    return false;
-                }
-            }
-        },
-        /**
-        * @private
-        * @method _handleResizeMaskEl
-        * @description Resizes the inner mask element
-        */
-        _handleResizeMaskEl: function() {
-            var a = this._resize._cache;
-            this._resizeMaskEl.style.height = Math.floor(a.height) + 'px';
-            this._resizeMaskEl.style.width = Math.floor(a.width) + 'px';
-        },
-        /**
-        * @private
-        * @method _handleResizeEvent
-        * @param Event ev The Resize Utilitys resize event.
-        * @description Handles the Resize Utilitys Resize event
-        */
-        _handleResizeEvent: function(ev) {
-            this._setConstraints(true);
-            this._syncBackgroundPosition();
-            this.fireEvent('resizeEvent', arguments);
-            this.fireEvent('moveEvent', { target: 'resizeevent' });
-        },
-
-        /**
-        * @private
-        * @method _syncBackgroundPosition
-        * @description Syncs the packground position of the resize element with the resize elements top and left style position
-        */
-        _syncBackgroundPosition: function() {
-            this._handleResizeMaskEl();
-            this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left, 10)), -(parseInt(this._resizeEl.style.top, 10)));
-        },
-
-        /**
-        * @private
-        * @method _setBackgroundPosition
-        * @param Number l The left position
-        * @param Number t The top position
-        * @description Sets the background image position to the top and left position
-        */
-        _setBackgroundPosition: function(l, t) {
-            //YAHOO.log('Setting the image background position of the mask to: (' + l + ', ' + t + ')', 'log', 'ImageCropper');
-            var bl = parseInt(Dom.getStyle(this._resize.get('element'), 'borderLeftWidth'), 10);
-            var bt = parseInt(Dom.getStyle(this._resize.get('element'), 'borderTopWidth'), 10);
-            if (isNaN(bl)) {
-                bl = 0;
-            }
-            if (isNaN(bt)) {
-                bt = 0;
-            }
-            var mask = this._resize.getWrapEl().firstChild;
-            var pos = (l - bl) + 'px ' + (t - bt) + 'px';
-            this._resizeMaskEl.style.backgroundPosition = pos;
-        },
-
-        /**
-        * @private
-        * @method _setBackgroundImage
-        * @param String url The url of the image
-        * @description Sets the background image of the resize element
-        */
-        _setBackgroundImage: function(url) {
-            YAHOO.log('Setting the background image', 'log', 'ImageCropper');
-            var mask = this._resize.getWrapEl().firstChild;
-            this._image = url;
-            mask.style.backgroundImage = 'url(' + url + '#)';
-        },
-        
-        /**
-        * @private
-        * @method _handleEndResizeEvent
-        * @description Handles the Resize Utilitys endResize event
-        */
-        _handleEndResizeEvent: function() {
-            this._setConstraints(true);
-        },
-        /**
-        * @private
-        * @method _handleStartResizeEvent
-        * @description Handles the Resize Utilitys startResize event
-        */
-        _handleStartResizeEvent: function() {
-            this._setConstraints(true);
-
-            var h = this._resize._cache.height,
-                 w = this._resize._cache.width,
-                 t = parseInt(this._resize.getWrapEl().style.top, 10),
-                 l = parseInt(this._resize.getWrapEl().style.left, 10),
-                 maxH = 0, maxW = 0;
- 
-            switch (this._resize._currentHandle) {
-                case 'b':
-                    maxH = (h + this._resize.dd.bottomConstraint);
-                    break;
-                case 'l':
-                    maxW = (w + this._resize.dd.leftConstraint);
-                    break;
-                case 'r':
-                    maxH = (h + t);
-                    maxW = (w + this._resize.dd.rightConstraint);
-                    break;
-                 case 'br':
-                     maxH = (h + this._resize.dd.bottomConstraint);
-                     maxW = (w + this._resize.dd.rightConstraint);
-                     break;
-                 case 'tr':
-                     maxH = (h + t);
-                     maxW = (w + this._resize.dd.rightConstraint);
-                     break;
-
-             }
-            
-             if (maxH) {
-                YAHOO.log('Setting the maxHeight on the resize object to: ' + maxH, 'log', 'ImageCropper');
-                 //this._resize.set('maxHeight', maxH);
-             }
-             if (maxW) {
-                YAHOO.log('Setting the maxWidth on the resize object to: ' + maxW, 'log', 'ImageCropper');
-                 //this._resize.set('maxWidth', maxW);
-             }
-
-            this.fireEvent('startResizeEvent', arguments);
-        },
-        
-        /**
-        * @private
-        * @method _setConstraints
-        * @param Boolean inside Used when called from inside a resize event, false by default (dragging)
-        * @description Set the DragDrop constraints to keep the element inside the crop area.
-        * @return {Object} Object containing Top, Right, Bottom and Left constraints
-        */
-        _setConstraints: function(inside) {
-            YAHOO.log('Setting Contraints', 'log', 'ImageCropper');
-            var resize = this._resize;
-            resize.dd.resetConstraints();
-            var height = parseInt(resize.get('height'), 10),
-                width = parseInt(resize.get('width'), 10);
-            if (inside) {
-                //Called from inside the resize callback
-                height = resize._cache.height;
-                width = resize._cache.width;
-            }
-
-            //Get the top, right, bottom and left positions
-            var region = Dom.getRegion(this.get('element'));
-            //Get the element we are working on
-            var el = resize.getWrapEl();
-
-            //Get the xy position of it
-            var xy = Dom.getXY(el);
-
-            //Set left to x minus left
-            var left = xy[0] - region.left;
-
-            //Set right to right minus x minus width
-            var right = region.right - xy[0] - width;
-
-            //Set top to y minus top
-            var top = xy[1] - region.top;
-
-            //Set bottom to bottom minus y minus height
-            var bottom = region.bottom - xy[1] - height;
-
-            if (top < 0) {
-                top = 0;
-            }
-            
-            resize.dd.setXConstraint(left, right); 
-            resize.dd.setYConstraint(top, bottom);
-            YAHOO.log('Constraints: ' + top + ',' + right + ',' + bottom + ',' + left, 'log', 'ImageCropper');
-
-            return {
-                top: top,
-                right: right,
-                bottom: bottom,
-                left: left
-            };
-
-            
-            
-        },
-        /**
-        * @method getCropCoords
-        * @description Returns the coordinates needed to crop the image
-        * @return {Object} The top, left, height, width and image url of the image being cropped
-        */
-        getCropCoords: function() {
-            var coords = {
-                top: parseInt(this._resize.getWrapEl().style.top, 10),
-                left: parseInt(this._resize.getWrapEl().style.left, 10),
-                height: this._resize._cache.height,
-                width: this._resize._cache.width,
-                image: this._image
-            };
-            YAHOO.log('Getting the crop coordinates: ' + Lang.dump(coords), 'log', 'ImageCropper');
-            return coords;
-        },
-        /**
-        * @method reset
-        * @description Resets the crop element back to it's original position
-        * @return {<a href="YAHOO.widget.ImageCropper.html">YAHOO.widget.ImageCropper</a>} The ImageCropper instance
-        */
-        reset: function() {
-            YAHOO.log('Resetting the control', 'log', 'ImageCropper');
-            this._resize.destroy();
-            this._resizeEl.parentNode.removeChild(this._resizeEl);
-            this._createResize();
-            this._setConstraints();
-            return this;
-        },
-
-        /**
-        * @method getEl
-        * @description Get the HTML reference for the image element.
-        * @return {HTMLElement} The image element
-        */      
-        getEl: function() {
-            return this.get('element');
-        },
-        /**
-        * @method getResizeEl
-        * @description Get the HTML reference for the resize element.
-        * @return {HTMLElement} The resize element
-        */      
-        getResizeEl: function() {
-            return this._resizeEl;
-        },
-        /**
-        * @method getWrapEl
-        * @description Get the HTML reference for the wrap element.
-        * @return {HTMLElement} The wrap element
-        */      
-        getWrapEl: function() {
-            return this._wrap;
-        },
-
-        /**
-        * @method getMaskEl
-        * @description Get the HTML reference for the mask element.
-        * @return {HTMLElement} The mask element
-        */      
-        getMaskEl: function() {
-            return this._mask;
-        },
-
-        /**
-        * @method getResizeMaskEl
-        * @description Get the HTML reference for the resizable object's mask element.
-        * @return {HTMLElement} The resize objects mask element.
-        */      
-        getResizeMaskEl: function() {
-            return this._resizeMaskEl;
-        },
-
-        /**
-        * @method getResizeObject
-        * @description Get the Resize Utility object.
-        * @return {<a href="YAHOO.util.Resize.html">YAHOO.util.Resize</a>} The Resize instance
-        */      
-        getResizeObject: function() {
-            return this._resize;
-        },
-
-        /** 
-        * @private
-        * @method init
-        * @description The ImageCropper class's initialization method
-        */        
-        init: function(p_oElement, p_oAttributes) {
-            YAHOO.log('init', 'info', 'ImageCropper');
-            Crop.superclass.init.call(this, p_oElement, p_oAttributes);
-
-            var id = p_oElement;
-
-            if (!Lang.isString(id)) {
-                if (id.tagName && (id.tagName.toLowerCase() == 'img')) {
-                    id = Dom.generateId(id);                    
-                } else {
-                    YAHOO.log('Element is not an image.', 'error', 'ImageCropper');
-                    return false;
-                }
-            } else {
-                var el = Dom.get(id);
-                if (el.tagName && el.tagName.toLowerCase() == 'img') {
-                    //All good
-                } else {
-                    YAHOO.log('Element is not an image.', 'error', 'ImageCropper');
-                    return false;
-                }
-            }
-            
-
-
-            Crop._instances[id] = this;
-            this._createWrap();
-            this._createMask();
-            this._createResize();
-            this._setConstraints();
-
-        },
-        /**
-        * @private
-        * @method initAttributes
-        * @description Initializes all of the configuration attributes used to create a croppable element.
-        * @param {Object} attr Object literal specifying a set of 
-        * configuration attributes used to create the widget.
-        */      
-
-        initAttributes: function(attr) {
-            Crop.superclass.initAttributes.call(this, attr);
-
-            /**
-            * @attribute initialXY
-            * @description Array of the XY position that we need to set the crop element to when we build it. Defaults to [10, 10]
-            * @type Array
-            */
-            this.setAttributeConfig('initialXY', {
-                writeOnce: true,
-                validator: YAHOO.lang.isArray,
-                value: attr.initialXY || [10, 10]
-            });
-            /**
-            * @attribute keyTick
-            * @description The pixel tick for the arrow keys, defaults to 1
-            * @type Number
-            */
-            this.setAttributeConfig('keyTick', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.keyTick || 1
-            });
-
-            /**
-            * @attribute shiftKeyTick
-            * @description The pixel tick for shift + the arrow keys, defaults to 10
-            * @type Number
-            */
-            this.setAttributeConfig('shiftKeyTick', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.shiftKeyTick || 10
-            });
-
-            /**
-            * @attribute useKeys
-            * @description Should we use the Arrow keys to position the crop element, defaults to true
-            * @type Boolean
-            */
-            this.setAttributeConfig('useKeys', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.useKeys === false) ? false : true)
-            });
-
-            /**
-            * @attribute status
-            * @description Show the Resize Utility status, defaults to true
-            * @type Boolean
-            */
-            this.setAttributeConfig('status', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.status === false) ? false : true),
-                method: function(status) {
-                    if (this._resize) {
-                        this._resize.set('status', status);
-                    }
-                }
-            });
-
-            /**
-            * @attribute minHeight
-            * @description MinHeight of the crop area, default 50
-            * @type Number
-            */
-            this.setAttributeConfig('minHeight', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.minHeight || 50,
-                method: function(h) {
-                    if (this._resize) {
-                        this._resize.set('minHeight', h);
-                    }
-                }
-            });
-
-            /**
-            * @attribute minWidth
-            * @description MinWidth of the crop area, default 50.
-            * @type Number
-            */
-            this.setAttributeConfig('minWidth', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.minWidth || 50,
-                method: function(w) {
-                    if (this._resize) {
-                        this._resize.set('minWidth', w);
-                    }
-                }
-            });
-
-            /**
-            * @attribute ratio
-            * @description Set the ratio config option of the Resize Utlility, default false
-            * @type Boolean
-            */
-            this.setAttributeConfig('ratio', {
-                validator: YAHOO.lang.isBoolean,
-                value: attr.ratio || false,
-                method: function(r) {
-                    if (this._resize) {
-                        this._resize.set('ratio', r);
-                    }
-                }
-            });
-
-            /**
-            * @attribute ratio
-            * @description Set the autoRatio config option of the Resize Utlility, default true
-            * @type Boolean
-            */
-            this.setAttributeConfig('autoRatio', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.autoRatio === false) ? false : true),
-                method: function(a) {
-                    if (this._resize) {
-                        this._resize.set('autoRatio', a);
-                    }
-                }
-            });
-
-            /**
-            * @attribute initHeight
-            * @description Set the initlal height of the crop area, defaults to 1/4 of the image height
-            * @type Number
-            */
-            this.setAttributeConfig('initHeight', {
-                writeOnce: true,
-                validator: YAHOO.lang.isNumber,
-                value: attr.initHeight || (this.get('element').height / 4)
-            });
-
-            /**
-            * @attribute initWidth
-            * @description Set the initlal width of the crop area, defaults to 1/4 of the image width
-            * @type Number
-            */
-            this.setAttributeConfig('initWidth', {
-                validator: YAHOO.lang.isNumber,
-                writeOnce: true,
-                value: attr.initWidth || (this.get('element').width / 4)
-            });
-
-        },
-        /**
-        * @method destroy
-        * @description Destroys the ImageCropper object and all of it's elements & listeners.
-        */        
-        destroy: function() {
-            YAHOO.log('Destroying the ImageCropper', 'info', 'ImageCropper');
-            this._resize.destroy();
-            this._resizeEl.parentNode.removeChild(this._resizeEl);
-            this._mask.parentNode.removeChild(this._mask);
-            Event.purgeElement(this._wrap);
-            this._wrap.parentNode.replaceChild(this.get('element'), this._wrap);
-            
-            //Brutal Object Destroy
-            for (var i in this) {
-                if (Lang.hasOwnProperty(this, i)) {
-                    this[i] = null;
-                }
-            }
-                       
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the ImageCropper Object.
-        * @return {String}
-        */        
-        toString: function() {
-            if (this.get) {
-                return 'ImageCropper (#' + this.get('id') + ')';
-            }
-            return 'Image Cropper';
-        }
-    });
-
-    YAHOO.widget.ImageCropper = Crop;
-
-/**
-* @event dragEvent
-* @description Fires when the DragDrop dragEvent
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event startResizeEvent
-* @description Fires when when a resize action is started.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event resizeEvent
-* @description Fires on every element resize.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event moveEvent
-* @description Fires on every element move. Inside these methods: _handleKeyPress, _handleDragEvent, _handleResizeEvent
-* @type YAHOO.util.CustomEvent
-*/
-
-})();
-
-YAHOO.register("imagecropper", YAHOO.widget.ImageCropper, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/imagecropper/imagecropper-beta-min.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper-beta-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper-beta-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F,E){var G={element:F,attributes:E||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getCropperById=function(E){if(B._instances[E]){return B._instances[E];}return false;};YAHOO.extend(B,YAHOO.util.Element,{CSS_MAIN:"yui-crop",CSS_MASK:"yui-crop-mask",CSS_RESIZE_MASK:"yui-crop-resize-mask",_image:null,_active:null,_resize:null,_resizeEl:null,_resizeMaskEl:null,_wrap:null,_mask:null,_createWrap:function(){this._wrap=document.createElement("div");this._wrap.id=this.get("element").id+"_wrap";this._wrap.className=this.CSS_MAIN;var F=this.get("element");this._wrap.style.width=F.width?F.width+"px":C.getStyle(F,"width");this._wrap.style.height=F.height?F.height+"px":C.getStyle(F,"height");var E=this.get("element").parentNode;E.replaceChild(this._wrap,this.get("element"));this._wrap.appendChild(this.get("element"));A.on(this._wrap,"mouseover",this._handleMouseOver,this,t!
 rue);A.on(this._wrap,"mouseout",this._handleMouseOut,this,true);A.on(this._wrap,"click",function(G){A.stopEvent(G);},this,true);},_createMask:function(){this._mask=document.createElement("div");this._mask.className=this.CSS_MASK;this._wrap.appendChild(this._mask);},_createResize:function(){this._resizeEl=document.createElement("div");this._resizeEl.className=YAHOO.util.Resize.prototype.CSS_RESIZE;this._resizeEl.style.position="absolute";this._resizeEl.innerHTML='<div class="'+this.CSS_RESIZE_MASK+'"></div>';this._resizeMaskEl=this._resizeEl.firstChild;this._wrap.appendChild(this._resizeEl);this._resizeEl.style.top=this.get("initialXY")[1]+"px";this._resizeEl.style.left=this.get("initialXY")[0]+"px";this._resizeMaskEl.style.height=Math.floor(this.get("initHeight"))+"px";this._resizeMaskEl.style.width=Math.floor(this.get("initWidth"))+"px";this._resize=new YAHOO.util.Resize(this._resizeEl,{knobHandles:true,handles:"all",draggable:true,status:this.get("status"),minWidth:this.g!
 et("minWidth"),minHeight:this.get("minHeight"),ratio:this.get(!
 "ratio")
,autoRatio:this.get("autoRatio"),height:this.get("initHeight"),width:this.get("initWidth")});this._setBackgroundImage(this.get("element").getAttribute("src",2));this._setBackgroundPosition(-(this.get("initialXY")[0]),-(this.get("initialXY")[1]));this._resize.on("startResize",this._handleStartResizeEvent,this,true);this._resize.on("endResize",this._handleEndResizeEvent,this,true);this._resize.on("dragEvent",this._handleDragEvent,this,true);this._resize.on("beforeResize",this._handleBeforeResizeEvent,this,true);this._resize.on("resize",this._handleResizeEvent,this,true);this._resize.dd.on("b4StartDragEvent",this._handleB4DragEvent,this,true);},_handleMouseOver:function(F){var E="keydown";if(YAHOO.env.ua.gecko||YAHOO.env.ua.opera){E="keypress";}if(!this._active){this._active=true;if(this.get("useKeys")){A.on(document,E,this._handleKeyPress,this,true);}}},_handleMouseOut:function(F){var E="keydown";if(YAHOO.env.ua.gecko||YAHOO.env.ua.opera){E="keypress";}this._active=false;if(th!
 is.get("useKeys")){A.removeListener(document,E,this._handleKeyPress);}},_moveEl:function(G,J){var H=0,E=0,I=this._setConstraints(),F=true;switch(G){case"down":H=-(J);if((I.bottom-J)<0){F=false;this._resizeEl.style.top=(I.top+I.bottom)+"px";}break;case"up":H=(J);if((I.top-J)<0){F=false;this._resizeEl.style.top="0px";}break;case"right":E=-(J);if((I.right-J)<0){F=false;this._resizeEl.style.left=(I.left+I.right)+"px";}break;case"left":E=J;if((I.left-J)<0){F=false;this._resizeEl.style.left="0px";}break;}if(F){this._resizeEl.style.left=(parseInt(this._resizeEl.style.left,10)-E)+"px";this._resizeEl.style.top=(parseInt(this._resizeEl.style.top,10)-H)+"px";this.fireEvent("moveEvent",{target:"keypress"});}else{this._setConstraints();}this._syncBackgroundPosition();},_handleKeyPress:function(G){var E=A.getCharCode(G),F=false,H=((G.shiftKey)?this.get("shiftKeyTick"):this.get("keyTick"));switch(E){case 37:this._moveEl("left",H);F=true;break;case 38:this._moveEl("up",H);F=true;break;case!
  39:this._moveEl("right",H);F=true;break;case 40:this._moveEl(!
 "down",H
);F=true;break;default:}if(F){A.preventDefault(G);}},_handleB4DragEvent:function(){this._setConstraints();},_handleDragEvent:function(){this._syncBackgroundPosition();this.fireEvent("dragEvent",arguments);this.fireEvent("moveEvent",{target:"dragevent"});},_handleBeforeResizeEvent:function(F){var I=C.getRegion(this.get("element")),J=this._resize._cache,H=this._resize._currentHandle,G=0,E=0;if(F.top&&(F.top<I.top)){G=(J.height+J.top)-I.top;C.setY(this._resize.getWrapEl(),I.top);this._resize.getWrapEl().style.height=G+"px";this._resize._cache.height=G;this._resize._cache.top=I.top;this._syncBackgroundPosition();return false;}if(F.left&&(F.left<I.left)){E=(J.width+J.left)-I.left;C.setX(this._resize.getWrapEl(),I.left);this._resize._cache.left=I.left;this._resize.getWrapEl().style.width=E+"px";this._resize._cache.width=E;this._syncBackgroundPosition();return false;}if(H!="tl"&&H!="l"&&H!="bl"){if(J.left&&F.width&&((J.left+F.width)>I.right)){E=(I.right-J.left);C.setX(this._resize.!
 getWrapEl(),(I.right-E));this._resize.getWrapEl().style.width=E+"px";this._resize._cache.left=(I.right-E);this._resize._cache.width=E;this._syncBackgroundPosition();return false;}}if(H!="t"&&H!="tr"&&H!="tl"){if(J.top&&F.height&&((J.top+F.height)>I.bottom)){G=(I.bottom-J.top);C.setY(this._resize.getWrapEl(),(I.bottom-G));this._resize.getWrapEl().style.height=G+"px";this._resize._cache.height=G;this._resize._cache.top=(I.bottom-G);this._syncBackgroundPosition();return false;}}},_handleResizeMaskEl:function(){var E=this._resize._cache;this._resizeMaskEl.style.height=Math.floor(E.height)+"px";this._resizeMaskEl.style.width=Math.floor(E.width)+"px";},_handleResizeEvent:function(E){this._setConstraints(true);this._syncBackgroundPosition();this.fireEvent("resizeEvent",arguments);this.fireEvent("moveEvent",{target:"resizeevent"});},_syncBackgroundPosition:function(){this._handleResizeMaskEl();this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left,10)),-(parseInt(this._re!
 sizeEl.style.top,10)));
-},_setBackgroundPosition:function(F,H){var J=parseInt(C.getStyle(this._resize.get("element"),"borderLeftWidth"),10);var G=parseInt(C.getStyle(this._resize.get("element"),"borderTopWidth"),10);if(isNaN(J)){J=0;}if(isNaN(G)){G=0;}var E=this._resize.getWrapEl().firstChild;var I=(F-J)+"px "+(H-G)+"px";this._resizeMaskEl.style.backgroundPosition=I;},_setBackgroundImage:function(F){var E=this._resize.getWrapEl().firstChild;this._image=F;E.style.backgroundImage="url("+F+"#)";},_handleEndResizeEvent:function(){this._setConstraints(true);},_handleStartResizeEvent:function(){this._setConstraints(true);var I=this._resize._cache.height,F=this._resize._cache.width,H=parseInt(this._resize.getWrapEl().style.top,10),E=parseInt(this._resize.getWrapEl().style.left,10),G=0,J=0;switch(this._resize._currentHandle){case"b":G=(I+this._resize.dd.bottomConstraint);break;case"l":J=(F+this._resize.dd.leftConstraint);break;case"r":G=(I+H);J=(F+this._resize.dd.rightConstraint);break;case"br":G=(I+this.!
 _resize.dd.bottomConstraint);J=(F+this._resize.dd.rightConstraint);break;case"tr":G=(I+H);J=(F+this._resize.dd.rightConstraint);break;}if(G){}if(J){}this.fireEvent("startResizeEvent",arguments);},_setConstraints:function(J){var H=this._resize;H.dd.resetConstraints();var N=parseInt(H.get("height"),10),F=parseInt(H.get("width"),10);if(J){N=H._cache.height;F=H._cache.width;}var L=C.getRegion(this.get("element"));var G=H.getWrapEl();var O=C.getXY(G);var I=O[0]-L.left;var M=L.right-O[0]-F;var K=O[1]-L.top;var E=L.bottom-O[1]-N;if(K<0){K=0;}H.dd.setXConstraint(I,M);H.dd.setYConstraint(K,E);return{top:K,right:M,bottom:E,left:I};},getCropCoords:function(){var E={top:parseInt(this._resize.getWrapEl().style.top,10),left:parseInt(this._resize.getWrapEl().style.left,10),height:this._resize._cache.height,width:this._resize._cache.width,image:this._image};return E;},reset:function(){this._resize.destroy();this._resizeEl.parentNode.removeChild(this._resizeEl);this._createResize();this._se!
 tConstraints();return this;},getEl:function(){return this.get(!
 "element
");},getResizeEl:function(){return this._resizeEl;},getWrapEl:function(){return this._wrap;},getMaskEl:function(){return this._mask;},getResizeMaskEl:function(){return this._resizeMaskEl;},getResizeObject:function(){return this._resize;},init:function(G,E){B.superclass.init.call(this,G,E);var H=G;if(!D.isString(H)){if(H.tagName&&(H.tagName.toLowerCase()=="img")){H=C.generateId(H);}else{return false;}}else{var F=C.get(H);if(F.tagName&&F.tagName.toLowerCase()=="img"){}else{return false;}}B._instances[H]=this;this._createWrap();this._createMask();this._createResize();this._setConstraints();},initAttributes:function(E){B.superclass.initAttributes.call(this,E);this.setAttributeConfig("initialXY",{writeOnce:true,validator:YAHOO.lang.isArray,value:E.initialXY||[10,10]});this.setAttributeConfig("keyTick",{validator:YAHOO.lang.isNumber,value:E.keyTick||1});this.setAttributeConfig("shiftKeyTick",{validator:YAHOO.lang.isNumber,value:E.shiftKeyTick||10});this.setAttributeConfig("useKeys!
 ",{validator:YAHOO.lang.isBoolean,value:((E.useKeys===false)?false:true)});this.setAttributeConfig("status",{validator:YAHOO.lang.isBoolean,value:((E.status===false)?false:true),method:function(F){if(this._resize){this._resize.set("status",F);}}});this.setAttributeConfig("minHeight",{validator:YAHOO.lang.isNumber,value:E.minHeight||50,method:function(F){if(this._resize){this._resize.set("minHeight",F);}}});this.setAttributeConfig("minWidth",{validator:YAHOO.lang.isNumber,value:E.minWidth||50,method:function(F){if(this._resize){this._resize.set("minWidth",F);}}});this.setAttributeConfig("ratio",{validator:YAHOO.lang.isBoolean,value:E.ratio||false,method:function(F){if(this._resize){this._resize.set("ratio",F);}}});this.setAttributeConfig("autoRatio",{validator:YAHOO.lang.isBoolean,value:((E.autoRatio===false)?false:true),method:function(F){if(this._resize){this._resize.set("autoRatio",F);}}});this.setAttributeConfig("initHeight",{writeOnce:true,validator:YAHOO.lang.isNumber,!
 value:E.initHeight||(this.get("element").height/4)});this.setA!
 ttribute
Config("initWidth",{validator:YAHOO.lang.isNumber,writeOnce:true,value:E.initWidth||(this.get("element").width/4)});},destroy:function(){this._resize.destroy();this._resizeEl.parentNode.removeChild(this._resizeEl);this._mask.parentNode.removeChild(this._mask);A.purgeElement(this._wrap);this._wrap.parentNode.replaceChild(this.get("element"),this._wrap);for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}},toString:function(){if(this.get){return"ImageCropper (#"+this.get("id")+")";}return"Image Cropper";}});YAHOO.widget.ImageCropper=B;})();YAHOO.register("imagecropper",YAHOO.widget.ImageCropper,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/imagecropper/imagecropper-beta.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper-beta.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper-beta.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,889 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * @description <p>Creates a Image Cropper control.</p>
- * @namespace YAHOO.widget
- * @requires yahoo, dom, dragdrop, element, event, resize
- * @module imagecropper
- * @beta
- */
-(function() {
-var Dom = YAHOO.util.Dom,
-    Event = YAHOO.util.Event,
-    Lang = YAHOO.lang;
-
-    /**
-     * @constructor
-     * @class ImageCropper
-     * @description <p>Creates a Image Cropper control.</p>
-     * @extends YAHOO.util.Element
-     * @param {String/HTMLElement} el The image element to make croppable.
-     * @param {Object} attrs Object liternal containing configuration parameters.
-    */
-    var Crop = function(el, config) {
-        var oConfig = {
-            element: el,
-            attributes: config || {}
-        };
-
-        Crop.superclass.constructor.call(this, oConfig.element, oConfig.attributes);    
-    };
-
-    /**
-    * @private
-    * @static
-    * @property _instances
-    * @description Internal hash table for all ImageCropper instances
-    * @type Object
-    */ 
-    Crop._instances = {};
-    /**
-    * @static
-    * @method getCropperById 
-    * @description Get's an ImageCropper object by the HTML id of the image associated with the ImageCropper object.
-    * @return {Object} The ImageCropper Object
-    */ 
-    Crop.getCropperById = function(id) {
-        if (Crop._instances[id]) {
-            return Crop._instances[id];
-        }
-        return false;
-    };
-
-    YAHOO.extend(Crop, YAHOO.util.Element, {
-        /**
-        * @private
-        * @property CSS_MAIN
-        * @description The CSS class used to wrap the element 
-        * @type String
-        */
-        CSS_MAIN: 'yui-crop',
-        /**
-        * @private
-        * @property CSS_MASK
-        * @description The CSS class for the mask element
-        * @type String
-        */
-        CSS_MASK: 'yui-crop-mask',
-        /**
-        * @private
-        * @property CSS_RESIZE_MASK
-        * @description The CSS class for the mask inside the resize element
-        * @type String
-        */
-        CSS_RESIZE_MASK: 'yui-crop-resize-mask',
-
-        /**
-        * @private
-        * @property _image
-        * @description The url of the image we are cropping
-        * @type String
-        */
-        _image: null,
-        /**
-        * @private
-        * @property _active
-        * @description Flag to determine if the crop region is active
-        * @type Boolean
-        */
-        _active: null,
-        /**
-        * @private
-        * @property _resize
-        * @description A reference to the Resize Utility used in this Cropper Instance
-        * @type Object
-        */
-        _resize: null,
-        /**
-        * @private
-        * @property _resizeEl
-        * @description The HTML Element used to create the Resize Oject
-        * @type HTMLElement
-        */
-        _resizeEl: null,
-        /**
-        * @private
-        * @property _resizeMaskEl
-        * @description The HTML Element used to create the Resize mask
-        * @type HTMLElement
-        */
-        _resizeMaskEl: null,
-        /**
-        * @private
-        * @property _wrap
-        * @description The HTML Element created to wrap the image
-        * @type HTMLElement
-        */
-        _wrap: null,
-        /**
-        * @private
-        * @property _mask
-        * @description The HTML Element created to "mask" the image being cropped
-        * @type HTMLElement
-        */
-        _mask: null,
-        /**
-        * @private
-        * @method _createWrap
-        * @description Creates the wrapper element used to wrap the image
-        */
-        _createWrap: function() {
-            this._wrap = document.createElement('div');
-            this._wrap.id = this.get('element').id + '_wrap';
-            this._wrap.className = this.CSS_MAIN;
-            var el = this.get('element');
-            this._wrap.style.width = el.width ? el.width + 'px' : Dom.getStyle(el, 'width');
-            this._wrap.style.height = el.height ? el.height + 'px' : Dom.getStyle(el, 'height');
-            
-            var par = this.get('element').parentNode;
-            par.replaceChild(this._wrap, this.get('element'));
-            this._wrap.appendChild(this.get('element'));
-
-            Event.on(this._wrap, 'mouseover', this._handleMouseOver, this, true);
-            Event.on(this._wrap, 'mouseout', this._handleMouseOut, this, true);
-
-            Event.on(this._wrap, 'click', function(ev) { Event.stopEvent(ev); }, this, true);
-        },
-
-        /**
-        * @private
-        * @method _createMask
-        * @description Creates the mask element used to mask the image
-        */
-        _createMask: function() {
-            this._mask = document.createElement('div');
-            this._mask.className = this.CSS_MASK;
-            this._wrap.appendChild(this._mask);
-        },
-
-        /**
-        * @private
-        * @method _createResize
-        * @description Creates the resize element and the instance of the Resize Utility
-        */
-        _createResize: function() {
-            this._resizeEl = document.createElement('div');
-            this._resizeEl.className = YAHOO.util.Resize.prototype.CSS_RESIZE;
-            this._resizeEl.style.position = 'absolute';
-            
-            this._resizeEl.innerHTML = '<div class="' + this.CSS_RESIZE_MASK + '"></div>';
-            this._resizeMaskEl = this._resizeEl.firstChild;
-            this._wrap.appendChild(this._resizeEl);
-            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
-            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
-            this._resizeMaskEl.style.height = Math.floor(this.get('initHeight')) + 'px';
-            this._resizeMaskEl.style.width = Math.floor(this.get('initWidth')) + 'px';
-
-            this._resize = new YAHOO.util.Resize(this._resizeEl, {
-                knobHandles: true,
-                handles: 'all',
-                draggable: true,
-                status: this.get('status'),
-                minWidth: this.get('minWidth'),
-                minHeight: this.get('minHeight'),
-                ratio: this.get('ratio'),
-                autoRatio: this.get('autoRatio'),
-                height: this.get('initHeight'),
-                width: this.get('initWidth')
-            });
-
-            this._setBackgroundImage(this.get('element').getAttribute('src', 2));
-            this._setBackgroundPosition(-(this.get('initialXY')[0]),  -(this.get('initialXY')[1]));
-
-            this._resize.on('startResize', this._handleStartResizeEvent, this, true);
-            this._resize.on('endResize', this._handleEndResizeEvent, this, true);
-            this._resize.on('dragEvent', this._handleDragEvent, this, true);
-            this._resize.on('beforeResize', this._handleBeforeResizeEvent, this, true);
-            this._resize.on('resize', this._handleResizeEvent, this, true);
-            this._resize.dd.on('b4StartDragEvent', this._handleB4DragEvent, this, true);
-        },
-
-        /**
-        * @private
-        * @method _handleMouseOver
-        * @description Handles the mouseover event
-        */
-        _handleMouseOver: function(ev) {
-            var evType = 'keydown';
-            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
-                evType = 'keypress';
-            }
-            if (!this._active) {
-                this._active = true;
-                if (this.get('useKeys')) {
-                    Event.on(document, evType, this._handleKeyPress, this, true);
-                }
-            }
-        },
-        /**
-        * @private
-        * @method _handleMouseOut
-        * @description Handles the mouseout event
-        */
-        _handleMouseOut: function(ev) {
-            var evType = 'keydown';
-            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
-                evType = 'keypress';
-            }
-            this._active = false;
-            if (this.get('useKeys')) {
-                Event.removeListener(document, evType, this._handleKeyPress);
-            }
-        },
-
-        /**
-        * @private
-        * @method _moveEl
-        * @description Moves the resize element based on the arrow keys
-        */
-        _moveEl: function(dir, inc) {
-            var t = 0, l = 0,
-                region = this._setConstraints(),
-                resize = true;
-
-            switch (dir) {
-                case 'down':
-                    t = -(inc);
-                    if ((region.bottom - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.top = (region.top + region.bottom) + 'px';
-                    }
-                    break;
-                case 'up':
-                    t = (inc);
-                    if ((region.top - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.top = '0px';
-                    }
-                    break;
-                case 'right':
-                    l = -(inc);
-                    if ((region.right - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.left = (region.left + region.right) + 'px';
-                    }
-                    break;
-                case 'left':
-                    l = inc;
-                    if ((region.left - inc) < 0) {
-                        resize = false;
-                        this._resizeEl.style.left = '0px';
-                    }
-                    break;
-            }
-
-            if (resize) {
-                this._resizeEl.style.left = (parseInt(this._resizeEl.style.left, 10) - l) + 'px';
-                this._resizeEl.style.top = (parseInt(this._resizeEl.style.top, 10) - t) + 'px';
-                this.fireEvent('moveEvent', { target: 'keypress' });
-            } else {
-                this._setConstraints();
-            }
-            this._syncBackgroundPosition();
-        },
-
-        /**
-        * @private
-        * @method _handleKeyPress
-        * @description Handles the keypress event
-        */
-        _handleKeyPress: function(ev) {
-            var kc = Event.getCharCode(ev),
-                stopEvent = false,
-                inc = ((ev.shiftKey) ? this.get('shiftKeyTick') : this.get('keyTick'));
-
-            switch (kc) {
-                case 0x25: // left
-                    this._moveEl('left', inc);
-                    stopEvent = true;
-                    break;
-                case 0x26: // up
-                    this._moveEl('up', inc);
-                    stopEvent = true;
-                    break;
-                case 0x27: // right
-                    this._moveEl('right', inc);
-                    stopEvent = true;
-                    break;
-                case 0x28: // down
-                    this._moveEl('down', inc);
-                    stopEvent = true;
-                    break;
-                default:
-            }
-            if (stopEvent) {
-                Event.preventDefault(ev);
-            }
-        },
-
-        /**
-        * @private
-        * @method _handleB4DragEvent
-        * @description Handles the DragDrop b4DragEvent event
-        */
-        _handleB4DragEvent: function() {
-            this._setConstraints();
-        },
-
-        /**
-        * @private
-        * @method _handleDragEvent
-        * @description Handles the DragDrop DragEvent event
-        */
-        _handleDragEvent: function() {
-            this._syncBackgroundPosition();
-            this.fireEvent('dragEvent', arguments);
-            this.fireEvent('moveEvent', { target: 'dragevent' });
-        },
-
-        /**
-        * @private
-        * @method _handleBeforeResizeEvent
-        * @description Handles the Resize Utilitys beforeResize event
-        */
-        _handleBeforeResizeEvent: function(args) {
-            var region = Dom.getRegion(this.get('element')),
-                c = this._resize._cache,
-                ch = this._resize._currentHandle, h = 0, w = 0;
-
-            if (args.top && (args.top < region.top)) {
-                h = (c.height + c.top) - region.top;
-                Dom.setY(this._resize.getWrapEl(), region.top);
-                this._resize.getWrapEl().style.height = h + 'px';
-                this._resize._cache.height = h;
-                this._resize._cache.top = region.top;
-                this._syncBackgroundPosition();
-                return false;
-            }
-            if (args.left && (args.left < region.left)) {
-                w = (c.width + c.left) - region.left;
-                Dom.setX(this._resize.getWrapEl(), region.left);
-                this._resize._cache.left = region.left;
-                this._resize.getWrapEl().style.width = w + 'px';
-                this._resize._cache.width = w;
-                this._syncBackgroundPosition();
-                return false;
-            }
-            if (ch != 'tl' && ch != 'l' && ch != 'bl') {
-                if (c.left && args.width && ((c.left + args.width) > region.right)) {
-                    w = (region.right - c.left);
-                    Dom.setX(this._resize.getWrapEl(), (region.right - w));
-                    this._resize.getWrapEl().style.width = w + 'px';
-                    this._resize._cache.left = (region.right - w);
-                    this._resize._cache.width = w;
-                    this._syncBackgroundPosition();
-                    return false;
-                }
-            }
-            if (ch != 't' && ch != 'tr' && ch != 'tl') {
-                if (c.top && args.height && ((c.top + args.height) > region.bottom)) {
-                    h = (region.bottom - c.top);
-                    Dom.setY(this._resize.getWrapEl(), (region.bottom - h));
-                    this._resize.getWrapEl().style.height = h + 'px';
-                    this._resize._cache.height = h;
-                    this._resize._cache.top = (region.bottom - h);
-                    this._syncBackgroundPosition();
-                    return false;
-                }
-            }
-        },
-        /**
-        * @private
-        * @method _handleResizeMaskEl
-        * @description Resizes the inner mask element
-        */
-        _handleResizeMaskEl: function() {
-            var a = this._resize._cache;
-            this._resizeMaskEl.style.height = Math.floor(a.height) + 'px';
-            this._resizeMaskEl.style.width = Math.floor(a.width) + 'px';
-        },
-        /**
-        * @private
-        * @method _handleResizeEvent
-        * @param Event ev The Resize Utilitys resize event.
-        * @description Handles the Resize Utilitys Resize event
-        */
-        _handleResizeEvent: function(ev) {
-            this._setConstraints(true);
-            this._syncBackgroundPosition();
-            this.fireEvent('resizeEvent', arguments);
-            this.fireEvent('moveEvent', { target: 'resizeevent' });
-        },
-
-        /**
-        * @private
-        * @method _syncBackgroundPosition
-        * @description Syncs the packground position of the resize element with the resize elements top and left style position
-        */
-        _syncBackgroundPosition: function() {
-            this._handleResizeMaskEl();
-            this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left, 10)), -(parseInt(this._resizeEl.style.top, 10)));
-        },
-
-        /**
-        * @private
-        * @method _setBackgroundPosition
-        * @param Number l The left position
-        * @param Number t The top position
-        * @description Sets the background image position to the top and left position
-        */
-        _setBackgroundPosition: function(l, t) {
-            var bl = parseInt(Dom.getStyle(this._resize.get('element'), 'borderLeftWidth'), 10);
-            var bt = parseInt(Dom.getStyle(this._resize.get('element'), 'borderTopWidth'), 10);
-            if (isNaN(bl)) {
-                bl = 0;
-            }
-            if (isNaN(bt)) {
-                bt = 0;
-            }
-            var mask = this._resize.getWrapEl().firstChild;
-            var pos = (l - bl) + 'px ' + (t - bt) + 'px';
-            this._resizeMaskEl.style.backgroundPosition = pos;
-        },
-
-        /**
-        * @private
-        * @method _setBackgroundImage
-        * @param String url The url of the image
-        * @description Sets the background image of the resize element
-        */
-        _setBackgroundImage: function(url) {
-            var mask = this._resize.getWrapEl().firstChild;
-            this._image = url;
-            mask.style.backgroundImage = 'url(' + url + '#)';
-        },
-        
-        /**
-        * @private
-        * @method _handleEndResizeEvent
-        * @description Handles the Resize Utilitys endResize event
-        */
-        _handleEndResizeEvent: function() {
-            this._setConstraints(true);
-        },
-        /**
-        * @private
-        * @method _handleStartResizeEvent
-        * @description Handles the Resize Utilitys startResize event
-        */
-        _handleStartResizeEvent: function() {
-            this._setConstraints(true);
-
-            var h = this._resize._cache.height,
-                 w = this._resize._cache.width,
-                 t = parseInt(this._resize.getWrapEl().style.top, 10),
-                 l = parseInt(this._resize.getWrapEl().style.left, 10),
-                 maxH = 0, maxW = 0;
- 
-            switch (this._resize._currentHandle) {
-                case 'b':
-                    maxH = (h + this._resize.dd.bottomConstraint);
-                    break;
-                case 'l':
-                    maxW = (w + this._resize.dd.leftConstraint);
-                    break;
-                case 'r':
-                    maxH = (h + t);
-                    maxW = (w + this._resize.dd.rightConstraint);
-                    break;
-                 case 'br':
-                     maxH = (h + this._resize.dd.bottomConstraint);
-                     maxW = (w + this._resize.dd.rightConstraint);
-                     break;
-                 case 'tr':
-                     maxH = (h + t);
-                     maxW = (w + this._resize.dd.rightConstraint);
-                     break;
-
-             }
-            
-             if (maxH) {
-                 //this._resize.set('maxHeight', maxH);
-             }
-             if (maxW) {
-                 //this._resize.set('maxWidth', maxW);
-             }
-
-            this.fireEvent('startResizeEvent', arguments);
-        },
-        
-        /**
-        * @private
-        * @method _setConstraints
-        * @param Boolean inside Used when called from inside a resize event, false by default (dragging)
-        * @description Set the DragDrop constraints to keep the element inside the crop area.
-        * @return {Object} Object containing Top, Right, Bottom and Left constraints
-        */
-        _setConstraints: function(inside) {
-            var resize = this._resize;
-            resize.dd.resetConstraints();
-            var height = parseInt(resize.get('height'), 10),
-                width = parseInt(resize.get('width'), 10);
-            if (inside) {
-                //Called from inside the resize callback
-                height = resize._cache.height;
-                width = resize._cache.width;
-            }
-
-            //Get the top, right, bottom and left positions
-            var region = Dom.getRegion(this.get('element'));
-            //Get the element we are working on
-            var el = resize.getWrapEl();
-
-            //Get the xy position of it
-            var xy = Dom.getXY(el);
-
-            //Set left to x minus left
-            var left = xy[0] - region.left;
-
-            //Set right to right minus x minus width
-            var right = region.right - xy[0] - width;
-
-            //Set top to y minus top
-            var top = xy[1] - region.top;
-
-            //Set bottom to bottom minus y minus height
-            var bottom = region.bottom - xy[1] - height;
-
-            if (top < 0) {
-                top = 0;
-            }
-            
-            resize.dd.setXConstraint(left, right); 
-            resize.dd.setYConstraint(top, bottom);
-
-            return {
-                top: top,
-                right: right,
-                bottom: bottom,
-                left: left
-            };
-
-            
-            
-        },
-        /**
-        * @method getCropCoords
-        * @description Returns the coordinates needed to crop the image
-        * @return {Object} The top, left, height, width and image url of the image being cropped
-        */
-        getCropCoords: function() {
-            var coords = {
-                top: parseInt(this._resize.getWrapEl().style.top, 10),
-                left: parseInt(this._resize.getWrapEl().style.left, 10),
-                height: this._resize._cache.height,
-                width: this._resize._cache.width,
-                image: this._image
-            };
-            return coords;
-        },
-        /**
-        * @method reset
-        * @description Resets the crop element back to it's original position
-        * @return {<a href="YAHOO.widget.ImageCropper.html">YAHOO.widget.ImageCropper</a>} The ImageCropper instance
-        */
-        reset: function() {
-            this._resize.destroy();
-            this._resizeEl.parentNode.removeChild(this._resizeEl);
-            this._createResize();
-            this._setConstraints();
-            return this;
-        },
-
-        /**
-        * @method getEl
-        * @description Get the HTML reference for the image element.
-        * @return {HTMLElement} The image element
-        */      
-        getEl: function() {
-            return this.get('element');
-        },
-        /**
-        * @method getResizeEl
-        * @description Get the HTML reference for the resize element.
-        * @return {HTMLElement} The resize element
-        */      
-        getResizeEl: function() {
-            return this._resizeEl;
-        },
-        /**
-        * @method getWrapEl
-        * @description Get the HTML reference for the wrap element.
-        * @return {HTMLElement} The wrap element
-        */      
-        getWrapEl: function() {
-            return this._wrap;
-        },
-
-        /**
-        * @method getMaskEl
-        * @description Get the HTML reference for the mask element.
-        * @return {HTMLElement} The mask element
-        */      
-        getMaskEl: function() {
-            return this._mask;
-        },
-
-        /**
-        * @method getResizeMaskEl
-        * @description Get the HTML reference for the resizable object's mask element.
-        * @return {HTMLElement} The resize objects mask element.
-        */      
-        getResizeMaskEl: function() {
-            return this._resizeMaskEl;
-        },
-
-        /**
-        * @method getResizeObject
-        * @description Get the Resize Utility object.
-        * @return {<a href="YAHOO.util.Resize.html">YAHOO.util.Resize</a>} The Resize instance
-        */      
-        getResizeObject: function() {
-            return this._resize;
-        },
-
-        /** 
-        * @private
-        * @method init
-        * @description The ImageCropper class's initialization method
-        */        
-        init: function(p_oElement, p_oAttributes) {
-            Crop.superclass.init.call(this, p_oElement, p_oAttributes);
-
-            var id = p_oElement;
-
-            if (!Lang.isString(id)) {
-                if (id.tagName && (id.tagName.toLowerCase() == 'img')) {
-                    id = Dom.generateId(id);                    
-                } else {
-                    return false;
-                }
-            } else {
-                var el = Dom.get(id);
-                if (el.tagName && el.tagName.toLowerCase() == 'img') {
-                    //All good
-                } else {
-                    return false;
-                }
-            }
-            
-
-
-            Crop._instances[id] = this;
-            this._createWrap();
-            this._createMask();
-            this._createResize();
-            this._setConstraints();
-
-        },
-        /**
-        * @private
-        * @method initAttributes
-        * @description Initializes all of the configuration attributes used to create a croppable element.
-        * @param {Object} attr Object literal specifying a set of 
-        * configuration attributes used to create the widget.
-        */      
-
-        initAttributes: function(attr) {
-            Crop.superclass.initAttributes.call(this, attr);
-
-            /**
-            * @attribute initialXY
-            * @description Array of the XY position that we need to set the crop element to when we build it. Defaults to [10, 10]
-            * @type Array
-            */
-            this.setAttributeConfig('initialXY', {
-                writeOnce: true,
-                validator: YAHOO.lang.isArray,
-                value: attr.initialXY || [10, 10]
-            });
-            /**
-            * @attribute keyTick
-            * @description The pixel tick for the arrow keys, defaults to 1
-            * @type Number
-            */
-            this.setAttributeConfig('keyTick', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.keyTick || 1
-            });
-
-            /**
-            * @attribute shiftKeyTick
-            * @description The pixel tick for shift + the arrow keys, defaults to 10
-            * @type Number
-            */
-            this.setAttributeConfig('shiftKeyTick', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.shiftKeyTick || 10
-            });
-
-            /**
-            * @attribute useKeys
-            * @description Should we use the Arrow keys to position the crop element, defaults to true
-            * @type Boolean
-            */
-            this.setAttributeConfig('useKeys', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.useKeys === false) ? false : true)
-            });
-
-            /**
-            * @attribute status
-            * @description Show the Resize Utility status, defaults to true
-            * @type Boolean
-            */
-            this.setAttributeConfig('status', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.status === false) ? false : true),
-                method: function(status) {
-                    if (this._resize) {
-                        this._resize.set('status', status);
-                    }
-                }
-            });
-
-            /**
-            * @attribute minHeight
-            * @description MinHeight of the crop area, default 50
-            * @type Number
-            */
-            this.setAttributeConfig('minHeight', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.minHeight || 50,
-                method: function(h) {
-                    if (this._resize) {
-                        this._resize.set('minHeight', h);
-                    }
-                }
-            });
-
-            /**
-            * @attribute minWidth
-            * @description MinWidth of the crop area, default 50.
-            * @type Number
-            */
-            this.setAttributeConfig('minWidth', {
-                validator: YAHOO.lang.isNumber,
-                value: attr.minWidth || 50,
-                method: function(w) {
-                    if (this._resize) {
-                        this._resize.set('minWidth', w);
-                    }
-                }
-            });
-
-            /**
-            * @attribute ratio
-            * @description Set the ratio config option of the Resize Utlility, default false
-            * @type Boolean
-            */
-            this.setAttributeConfig('ratio', {
-                validator: YAHOO.lang.isBoolean,
-                value: attr.ratio || false,
-                method: function(r) {
-                    if (this._resize) {
-                        this._resize.set('ratio', r);
-                    }
-                }
-            });
-
-            /**
-            * @attribute ratio
-            * @description Set the autoRatio config option of the Resize Utlility, default true
-            * @type Boolean
-            */
-            this.setAttributeConfig('autoRatio', {
-                validator: YAHOO.lang.isBoolean,
-                value: ((attr.autoRatio === false) ? false : true),
-                method: function(a) {
-                    if (this._resize) {
-                        this._resize.set('autoRatio', a);
-                    }
-                }
-            });
-
-            /**
-            * @attribute initHeight
-            * @description Set the initlal height of the crop area, defaults to 1/4 of the image height
-            * @type Number
-            */
-            this.setAttributeConfig('initHeight', {
-                writeOnce: true,
-                validator: YAHOO.lang.isNumber,
-                value: attr.initHeight || (this.get('element').height / 4)
-            });
-
-            /**
-            * @attribute initWidth
-            * @description Set the initlal width of the crop area, defaults to 1/4 of the image width
-            * @type Number
-            */
-            this.setAttributeConfig('initWidth', {
-                validator: YAHOO.lang.isNumber,
-                writeOnce: true,
-                value: attr.initWidth || (this.get('element').width / 4)
-            });
-
-        },
-        /**
-        * @method destroy
-        * @description Destroys the ImageCropper object and all of it's elements & listeners.
-        */        
-        destroy: function() {
-            this._resize.destroy();
-            this._resizeEl.parentNode.removeChild(this._resizeEl);
-            this._mask.parentNode.removeChild(this._mask);
-            Event.purgeElement(this._wrap);
-            this._wrap.parentNode.replaceChild(this.get('element'), this._wrap);
-            
-            //Brutal Object Destroy
-            for (var i in this) {
-                if (Lang.hasOwnProperty(this, i)) {
-                    this[i] = null;
-                }
-            }
-                       
-        },
-        /**
-        * @method toString
-        * @description Returns a string representing the ImageCropper Object.
-        * @return {String}
-        */        
-        toString: function() {
-            if (this.get) {
-                return 'ImageCropper (#' + this.get('id') + ')';
-            }
-            return 'Image Cropper';
-        }
-    });
-
-    YAHOO.widget.ImageCropper = Crop;
-
-/**
-* @event dragEvent
-* @description Fires when the DragDrop dragEvent
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event startResizeEvent
-* @description Fires when when a resize action is started.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event resizeEvent
-* @description Fires on every element resize.
-* @type YAHOO.util.CustomEvent
-*/
-/**
-* @event moveEvent
-* @description Fires on every element move. Inside these methods: _handleKeyPress, _handleDragEvent, _handleResizeEvent
-* @type YAHOO.util.CustomEvent
-*/
-
-})();
-
-YAHOO.register("imagecropper", YAHOO.widget.ImageCropper, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/imagecropper/imagecropper-debug.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,907 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * @description <p>Creates a Image Cropper control.</p>
+ * @namespace YAHOO.widget
+ * @requires yahoo, dom, dragdrop, element, event, resize
+ * @module imagecropper
+ * @beta
+ */
+(function() {
+var Dom = YAHOO.util.Dom,
+    Event = YAHOO.util.Event,
+    Lang = YAHOO.lang;
+
+    /**
+     * @constructor
+     * @class ImageCropper
+     * @description <p>Creates a Image Cropper control.</p>
+     * @extends YAHOO.util.Element
+     * @param {String/HTMLElement} el The image element to make croppable.
+     * @param {Object} attrs Object liternal containing configuration parameters.
+    */
+    var Crop = function(el, config) {
+        YAHOO.log('Initializing', 'log', 'ImageCropper');
+        var oConfig = {
+            element: el,
+            attributes: config || {}
+        };
+
+        Crop.superclass.constructor.call(this, oConfig.element, oConfig.attributes);    
+    };
+
+    /**
+    * @private
+    * @static
+    * @property _instances
+    * @description Internal hash table for all ImageCropper instances
+    * @type Object
+    */ 
+    Crop._instances = {};
+    /**
+    * @static
+    * @method getCropperById 
+    * @description Get's an ImageCropper object by the HTML id of the image associated with the ImageCropper object.
+    * @return {Object} The ImageCropper Object
+    */ 
+    Crop.getCropperById = function(id) {
+        if (Crop._instances[id]) {
+            return Crop._instances[id];
+        }
+        return false;
+    };
+
+    YAHOO.extend(Crop, YAHOO.util.Element, {
+        /**
+        * @private
+        * @property CSS_MAIN
+        * @description The CSS class used to wrap the element 
+        * @type String
+        */
+        CSS_MAIN: 'yui-crop',
+        /**
+        * @private
+        * @property CSS_MASK
+        * @description The CSS class for the mask element
+        * @type String
+        */
+        CSS_MASK: 'yui-crop-mask',
+        /**
+        * @private
+        * @property CSS_RESIZE_MASK
+        * @description The CSS class for the mask inside the resize element
+        * @type String
+        */
+        CSS_RESIZE_MASK: 'yui-crop-resize-mask',
+
+        /**
+        * @private
+        * @property _image
+        * @description The url of the image we are cropping
+        * @type String
+        */
+        _image: null,
+        /**
+        * @private
+        * @property _active
+        * @description Flag to determine if the crop region is active
+        * @type Boolean
+        */
+        _active: null,
+        /**
+        * @private
+        * @property _resize
+        * @description A reference to the Resize Utility used in this Cropper Instance
+        * @type Object
+        */
+        _resize: null,
+        /**
+        * @private
+        * @property _resizeEl
+        * @description The HTML Element used to create the Resize Oject
+        * @type HTMLElement
+        */
+        _resizeEl: null,
+        /**
+        * @private
+        * @property _resizeMaskEl
+        * @description The HTML Element used to create the Resize mask
+        * @type HTMLElement
+        */
+        _resizeMaskEl: null,
+        /**
+        * @private
+        * @property _wrap
+        * @description The HTML Element created to wrap the image
+        * @type HTMLElement
+        */
+        _wrap: null,
+        /**
+        * @private
+        * @property _mask
+        * @description The HTML Element created to "mask" the image being cropped
+        * @type HTMLElement
+        */
+        _mask: null,
+        /**
+        * @private
+        * @method _createWrap
+        * @description Creates the wrapper element used to wrap the image
+        */
+        _createWrap: function() {
+            YAHOO.log('Creating the wrap element', 'log', 'ImageCropper');
+            this._wrap = document.createElement('div');
+            this._wrap.id = this.get('element').id + '_wrap';
+            this._wrap.className = this.CSS_MAIN;
+            var el = this.get('element');
+            this._wrap.style.width = el.width ? el.width + 'px' : Dom.getStyle(el, 'width');
+            this._wrap.style.height = el.height ? el.height + 'px' : Dom.getStyle(el, 'height');
+            
+            var par = this.get('element').parentNode;
+            par.replaceChild(this._wrap, this.get('element'));
+            this._wrap.appendChild(this.get('element'));
+
+            Event.on(this._wrap, 'mouseover', this._handleMouseOver, this, true);
+            Event.on(this._wrap, 'mouseout', this._handleMouseOut, this, true);
+
+            Event.on(this._wrap, 'click', function(ev) { Event.stopEvent(ev); }, this, true);
+        },
+
+        /**
+        * @private
+        * @method _createMask
+        * @description Creates the mask element used to mask the image
+        */
+        _createMask: function() {
+            YAHOO.log('Creating the Mask', 'log', 'ImageCropper');
+            this._mask = document.createElement('div');
+            this._mask.className = this.CSS_MASK;
+            this._wrap.appendChild(this._mask);
+        },
+
+        /**
+        * @private
+        * @method _createResize
+        * @description Creates the resize element and the instance of the Resize Utility
+        */
+        _createResize: function() {
+            YAHOO.log('Creating the Resize element', 'log', 'ImageCropper');
+            this._resizeEl = document.createElement('div');
+            this._resizeEl.className = YAHOO.util.Resize.prototype.CSS_RESIZE;
+            this._resizeEl.style.position = 'absolute';
+            
+            this._resizeEl.innerHTML = '<div class="' + this.CSS_RESIZE_MASK + '"></div>';
+            this._resizeMaskEl = this._resizeEl.firstChild;
+            this._wrap.appendChild(this._resizeEl);
+            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
+            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
+            this._resizeMaskEl.style.height = Math.floor(this.get('initHeight')) + 'px';
+            this._resizeMaskEl.style.width = Math.floor(this.get('initWidth')) + 'px';
+
+            this._resize = new YAHOO.util.Resize(this._resizeEl, {
+                knobHandles: true,
+                handles: 'all',
+                draggable: true,
+                status: this.get('status'),
+                minWidth: this.get('minWidth'),
+                minHeight: this.get('minHeight'),
+                ratio: this.get('ratio'),
+                autoRatio: this.get('autoRatio'),
+                height: this.get('initHeight'),
+                width: this.get('initWidth')
+            });
+
+            this._setBackgroundImage(this.get('element').getAttribute('src', 2));
+            this._setBackgroundPosition(-(this.get('initialXY')[0]),  -(this.get('initialXY')[1]));
+
+            this._resize.on('startResize', this._handleStartResizeEvent, this, true);
+            this._resize.on('endResize', this._handleEndResizeEvent, this, true);
+            this._resize.on('dragEvent', this._handleDragEvent, this, true);
+            this._resize.on('beforeResize', this._handleBeforeResizeEvent, this, true);
+            this._resize.on('resize', this._handleResizeEvent, this, true);
+            this._resize.dd.on('b4StartDragEvent', this._handleB4DragEvent, this, true);
+        },
+
+        /**
+        * @private
+        * @method _handleMouseOver
+        * @description Handles the mouseover event
+        */
+        _handleMouseOver: function(ev) {
+            var evType = 'keydown';
+            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
+                evType = 'keypress';
+            }
+            if (!this._active) {
+                this._active = true;
+                if (this.get('useKeys')) {
+                    Event.on(document, evType, this._handleKeyPress, this, true);
+                }
+            }
+        },
+        /**
+        * @private
+        * @method _handleMouseOut
+        * @description Handles the mouseout event
+        */
+        _handleMouseOut: function(ev) {
+            var evType = 'keydown';
+            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
+                evType = 'keypress';
+            }
+            this._active = false;
+            if (this.get('useKeys')) {
+                Event.removeListener(document, evType, this._handleKeyPress);
+            }
+        },
+
+        /**
+        * @private
+        * @method _moveEl
+        * @description Moves the resize element based on the arrow keys
+        */
+        _moveEl: function(dir, inc) {
+            YAHOO.log('Moving the element', 'log', 'ImageCropper');
+            var t = 0, l = 0,
+                region = this._setConstraints(),
+                resize = true;
+
+            switch (dir) {
+                case 'down':
+                    t = -(inc);
+                    if ((region.bottom - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.top = (region.top + region.bottom) + 'px';
+                    }
+                    break;
+                case 'up':
+                    t = (inc);
+                    if ((region.top - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.top = '0px';
+                    }
+                    break;
+                case 'right':
+                    l = -(inc);
+                    if ((region.right - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.left = (region.left + region.right) + 'px';
+                    }
+                    break;
+                case 'left':
+                    l = inc;
+                    if ((region.left - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.left = '0px';
+                    }
+                    break;
+            }
+
+            if (resize) {
+                YAHOO.log('Moving via Key Listener: ' + dir, 'log', 'ImageCropper');
+                this._resizeEl.style.left = (parseInt(this._resizeEl.style.left, 10) - l) + 'px';
+                this._resizeEl.style.top = (parseInt(this._resizeEl.style.top, 10) - t) + 'px';
+                this.fireEvent('moveEvent', { target: 'keypress' });
+            } else {
+                this._setConstraints();
+            }
+            this._syncBackgroundPosition();
+        },
+
+        /**
+        * @private
+        * @method _handleKeyPress
+        * @description Handles the keypress event
+        */
+        _handleKeyPress: function(ev) {
+            var kc = Event.getCharCode(ev),
+                stopEvent = false,
+                inc = ((ev.shiftKey) ? this.get('shiftKeyTick') : this.get('keyTick'));
+
+            switch (kc) {
+                case 0x25: // left
+                    this._moveEl('left', inc);
+                    stopEvent = true;
+                    break;
+                case 0x26: // up
+                    this._moveEl('up', inc);
+                    stopEvent = true;
+                    break;
+                case 0x27: // right
+                    this._moveEl('right', inc);
+                    stopEvent = true;
+                    break;
+                case 0x28: // down
+                    this._moveEl('down', inc);
+                    stopEvent = true;
+                    break;
+                default:
+            }
+            if (stopEvent) {
+                Event.preventDefault(ev);
+            }
+        },
+
+        /**
+        * @private
+        * @method _handleB4DragEvent
+        * @description Handles the DragDrop b4DragEvent event
+        */
+        _handleB4DragEvent: function() {
+            this._setConstraints();
+        },
+
+        /**
+        * @private
+        * @method _handleDragEvent
+        * @description Handles the DragDrop DragEvent event
+        */
+        _handleDragEvent: function() {
+            this._syncBackgroundPosition();
+            this.fireEvent('dragEvent', arguments);
+            this.fireEvent('moveEvent', { target: 'dragevent' });
+        },
+
+        /**
+        * @private
+        * @method _handleBeforeResizeEvent
+        * @description Handles the Resize Utilitys beforeResize event
+        */
+        _handleBeforeResizeEvent: function(args) {
+            var region = Dom.getRegion(this.get('element')),
+                c = this._resize._cache,
+                ch = this._resize._currentHandle, h = 0, w = 0;
+
+            if (args.top && (args.top < region.top)) {
+                h = (c.height + c.top) - region.top;
+                Dom.setY(this._resize.getWrapEl(), region.top);
+                this._resize.getWrapEl().style.height = h + 'px';
+                this._resize._cache.height = h;
+                this._resize._cache.top = region.top;
+                this._syncBackgroundPosition();
+                return false;
+            }
+            if (args.left && (args.left < region.left)) {
+                w = (c.width + c.left) - region.left;
+                Dom.setX(this._resize.getWrapEl(), region.left);
+                this._resize._cache.left = region.left;
+                this._resize.getWrapEl().style.width = w + 'px';
+                this._resize._cache.width = w;
+                this._syncBackgroundPosition();
+                return false;
+            }
+            if (ch != 'tl' && ch != 'l' && ch != 'bl') {
+                if (c.left && args.width && ((c.left + args.width) > region.right)) {
+                    w = (region.right - c.left);
+                    Dom.setX(this._resize.getWrapEl(), (region.right - w));
+                    this._resize.getWrapEl().style.width = w + 'px';
+                    this._resize._cache.left = (region.right - w);
+                    this._resize._cache.width = w;
+                    this._syncBackgroundPosition();
+                    return false;
+                }
+            }
+            if (ch != 't' && ch != 'tr' && ch != 'tl') {
+                if (c.top && args.height && ((c.top + args.height) > region.bottom)) {
+                    h = (region.bottom - c.top);
+                    Dom.setY(this._resize.getWrapEl(), (region.bottom - h));
+                    this._resize.getWrapEl().style.height = h + 'px';
+                    this._resize._cache.height = h;
+                    this._resize._cache.top = (region.bottom - h);
+                    this._syncBackgroundPosition();
+                    return false;
+                }
+            }
+        },
+        /**
+        * @private
+        * @method _handleResizeMaskEl
+        * @description Resizes the inner mask element
+        */
+        _handleResizeMaskEl: function() {
+            var a = this._resize._cache;
+            this._resizeMaskEl.style.height = Math.floor(a.height) + 'px';
+            this._resizeMaskEl.style.width = Math.floor(a.width) + 'px';
+        },
+        /**
+        * @private
+        * @method _handleResizeEvent
+        * @param Event ev The Resize Utilitys resize event.
+        * @description Handles the Resize Utilitys Resize event
+        */
+        _handleResizeEvent: function(ev) {
+            this._setConstraints(true);
+            this._syncBackgroundPosition();
+            this.fireEvent('resizeEvent', arguments);
+            this.fireEvent('moveEvent', { target: 'resizeevent' });
+        },
+
+        /**
+        * @private
+        * @method _syncBackgroundPosition
+        * @description Syncs the packground position of the resize element with the resize elements top and left style position
+        */
+        _syncBackgroundPosition: function() {
+            this._handleResizeMaskEl();
+            this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left, 10)), -(parseInt(this._resizeEl.style.top, 10)));
+        },
+
+        /**
+        * @private
+        * @method _setBackgroundPosition
+        * @param Number l The left position
+        * @param Number t The top position
+        * @description Sets the background image position to the top and left position
+        */
+        _setBackgroundPosition: function(l, t) {
+            //YAHOO.log('Setting the image background position of the mask to: (' + l + ', ' + t + ')', 'log', 'ImageCropper');
+            var bl = parseInt(Dom.getStyle(this._resize.get('element'), 'borderLeftWidth'), 10);
+            var bt = parseInt(Dom.getStyle(this._resize.get('element'), 'borderTopWidth'), 10);
+            if (isNaN(bl)) {
+                bl = 0;
+            }
+            if (isNaN(bt)) {
+                bt = 0;
+            }
+            var mask = this._resize.getWrapEl().firstChild;
+            var pos = (l - bl) + 'px ' + (t - bt) + 'px';
+            this._resizeMaskEl.style.backgroundPosition = pos;
+        },
+
+        /**
+        * @private
+        * @method _setBackgroundImage
+        * @param String url The url of the image
+        * @description Sets the background image of the resize element
+        */
+        _setBackgroundImage: function(url) {
+            YAHOO.log('Setting the background image', 'log', 'ImageCropper');
+            var mask = this._resize.getWrapEl().firstChild;
+            this._image = url;
+            mask.style.backgroundImage = 'url(' + url + '#)';
+        },
+        
+        /**
+        * @private
+        * @method _handleEndResizeEvent
+        * @description Handles the Resize Utilitys endResize event
+        */
+        _handleEndResizeEvent: function() {
+            this._setConstraints(true);
+        },
+        /**
+        * @private
+        * @method _handleStartResizeEvent
+        * @description Handles the Resize Utilitys startResize event
+        */
+        _handleStartResizeEvent: function() {
+            this._setConstraints(true);
+
+            var h = this._resize._cache.height,
+                 w = this._resize._cache.width,
+                 t = parseInt(this._resize.getWrapEl().style.top, 10),
+                 l = parseInt(this._resize.getWrapEl().style.left, 10),
+                 maxH = 0, maxW = 0;
+ 
+            switch (this._resize._currentHandle) {
+                case 'b':
+                    maxH = (h + this._resize.dd.bottomConstraint);
+                    break;
+                case 'l':
+                    maxW = (w + this._resize.dd.leftConstraint);
+                    break;
+                case 'r':
+                    maxH = (h + t);
+                    maxW = (w + this._resize.dd.rightConstraint);
+                    break;
+                 case 'br':
+                     maxH = (h + this._resize.dd.bottomConstraint);
+                     maxW = (w + this._resize.dd.rightConstraint);
+                     break;
+                 case 'tr':
+                     maxH = (h + t);
+                     maxW = (w + this._resize.dd.rightConstraint);
+                     break;
+
+             }
+            
+             if (maxH) {
+                YAHOO.log('Setting the maxHeight on the resize object to: ' + maxH, 'log', 'ImageCropper');
+                 //this._resize.set('maxHeight', maxH);
+             }
+             if (maxW) {
+                YAHOO.log('Setting the maxWidth on the resize object to: ' + maxW, 'log', 'ImageCropper');
+                 //this._resize.set('maxWidth', maxW);
+             }
+
+            this.fireEvent('startResizeEvent', arguments);
+        },
+        
+        /**
+        * @private
+        * @method _setConstraints
+        * @param Boolean inside Used when called from inside a resize event, false by default (dragging)
+        * @description Set the DragDrop constraints to keep the element inside the crop area.
+        * @return {Object} Object containing Top, Right, Bottom and Left constraints
+        */
+        _setConstraints: function(inside) {
+            YAHOO.log('Setting Contraints', 'log', 'ImageCropper');
+            var resize = this._resize;
+            resize.dd.resetConstraints();
+            var height = parseInt(resize.get('height'), 10),
+                width = parseInt(resize.get('width'), 10);
+            if (inside) {
+                //Called from inside the resize callback
+                height = resize._cache.height;
+                width = resize._cache.width;
+            }
+
+            //Get the top, right, bottom and left positions
+            var region = Dom.getRegion(this.get('element'));
+            //Get the element we are working on
+            var el = resize.getWrapEl();
+
+            //Get the xy position of it
+            var xy = Dom.getXY(el);
+
+            //Set left to x minus left
+            var left = xy[0] - region.left;
+
+            //Set right to right minus x minus width
+            var right = region.right - xy[0] - width;
+
+            //Set top to y minus top
+            var top = xy[1] - region.top;
+
+            //Set bottom to bottom minus y minus height
+            var bottom = region.bottom - xy[1] - height;
+
+            if (top < 0) {
+                top = 0;
+            }
+            
+            resize.dd.setXConstraint(left, right); 
+            resize.dd.setYConstraint(top, bottom);
+            YAHOO.log('Constraints: ' + top + ',' + right + ',' + bottom + ',' + left, 'log', 'ImageCropper');
+
+            return {
+                top: top,
+                right: right,
+                bottom: bottom,
+                left: left
+            };
+
+            
+            
+        },
+        /**
+        * @method getCropCoords
+        * @description Returns the coordinates needed to crop the image
+        * @return {Object} The top, left, height, width and image url of the image being cropped
+        */
+        getCropCoords: function() {
+            var coords = {
+                top: parseInt(this._resize.getWrapEl().style.top, 10),
+                left: parseInt(this._resize.getWrapEl().style.left, 10),
+                height: this._resize._cache.height,
+                width: this._resize._cache.width,
+                image: this._image
+            };
+            YAHOO.log('Getting the crop coordinates: ' + Lang.dump(coords), 'log', 'ImageCropper');
+            return coords;
+        },
+        /**
+        * @method reset
+        * @description Resets the crop element back to it's original position
+        * @return {<a href="YAHOO.widget.ImageCropper.html">YAHOO.widget.ImageCropper</a>} The ImageCropper instance
+        */
+        reset: function() {
+            YAHOO.log('Resetting the control', 'log', 'ImageCropper');
+            this._resize.resize(null, this.get('initHeight'), this.get('initWidth'), 0, 0, true);
+            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
+            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
+            this._syncBackgroundPosition();
+            return this;
+        },
+
+        /**
+        * @method getEl
+        * @description Get the HTML reference for the image element.
+        * @return {HTMLElement} The image element
+        */      
+        getEl: function() {
+            return this.get('element');
+        },
+        /**
+        * @method getResizeEl
+        * @description Get the HTML reference for the resize element.
+        * @return {HTMLElement} The resize element
+        */      
+        getResizeEl: function() {
+            return this._resizeEl;
+        },
+        /**
+        * @method getWrapEl
+        * @description Get the HTML reference for the wrap element.
+        * @return {HTMLElement} The wrap element
+        */      
+        getWrapEl: function() {
+            return this._wrap;
+        },
+
+        /**
+        * @method getMaskEl
+        * @description Get the HTML reference for the mask element.
+        * @return {HTMLElement} The mask element
+        */      
+        getMaskEl: function() {
+            return this._mask;
+        },
+
+        /**
+        * @method getResizeMaskEl
+        * @description Get the HTML reference for the resizable object's mask element.
+        * @return {HTMLElement} The resize objects mask element.
+        */      
+        getResizeMaskEl: function() {
+            return this._resizeMaskEl;
+        },
+
+        /**
+        * @method getResizeObject
+        * @description Get the Resize Utility object.
+        * @return {<a href="YAHOO.util.Resize.html">YAHOO.util.Resize</a>} The Resize instance
+        */      
+        getResizeObject: function() {
+            return this._resize;
+        },
+
+        /** 
+        * @private
+        * @method init
+        * @description The ImageCropper class's initialization method
+        */        
+        init: function(p_oElement, p_oAttributes) {
+            YAHOO.log('init', 'info', 'ImageCropper');
+            Crop.superclass.init.call(this, p_oElement, p_oAttributes);
+
+            var id = p_oElement;
+
+            if (!Lang.isString(id)) {
+                if (id.tagName && (id.tagName.toLowerCase() == 'img')) {
+                    id = Dom.generateId(id);                    
+                } else {
+                    YAHOO.log('Element is not an image.', 'error', 'ImageCropper');
+                    return false;
+                }
+            } else {
+                var el = Dom.get(id);
+                if (el.tagName && el.tagName.toLowerCase() == 'img') {
+                    //All good
+                } else {
+                    YAHOO.log('Element is not an image.', 'error', 'ImageCropper');
+                    return false;
+                }
+            }
+            
+
+
+            Crop._instances[id] = this;
+            this._createWrap();
+            this._createMask();
+            this._createResize();
+            this._setConstraints();
+
+        },
+        /**
+        * @private
+        * @method initAttributes
+        * @description Initializes all of the configuration attributes used to create a croppable element.
+        * @param {Object} attr Object literal specifying a set of 
+        * configuration attributes used to create the widget.
+        */      
+
+        initAttributes: function(attr) {
+            Crop.superclass.initAttributes.call(this, attr);
+
+            /**
+            * @attribute initialXY
+            * @description Array of the XY position that we need to set the crop element to when we build it. Defaults to [10, 10]
+            * @type Array
+            */
+            this.setAttributeConfig('initialXY', {
+                writeOnce: true,
+                validator: YAHOO.lang.isArray,
+                value: attr.initialXY || [10, 10]
+            });
+            /**
+            * @attribute keyTick
+            * @description The pixel tick for the arrow keys, defaults to 1
+            * @type Number
+            */
+            this.setAttributeConfig('keyTick', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.keyTick || 1
+            });
+
+            /**
+            * @attribute shiftKeyTick
+            * @description The pixel tick for shift + the arrow keys, defaults to 10
+            * @type Number
+            */
+            this.setAttributeConfig('shiftKeyTick', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.shiftKeyTick || 10
+            });
+
+            /**
+            * @attribute useKeys
+            * @description Should we use the Arrow keys to position the crop element, defaults to true
+            * @type Boolean
+            */
+            this.setAttributeConfig('useKeys', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.useKeys === false) ? false : true)
+            });
+
+            /**
+            * @attribute status
+            * @description Show the Resize Utility status, defaults to true
+            * @type Boolean
+            */
+            this.setAttributeConfig('status', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.status === false) ? false : true),
+                method: function(status) {
+                    if (this._resize) {
+                        this._resize.set('status', status);
+                    }
+                }
+            });
+
+            /**
+            * @attribute minHeight
+            * @description MinHeight of the crop area, default 50
+            * @type Number
+            */
+            this.setAttributeConfig('minHeight', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.minHeight || 50,
+                method: function(h) {
+                    if (this._resize) {
+                        this._resize.set('minHeight', h);
+                    }
+                }
+            });
+
+            /**
+            * @attribute minWidth
+            * @description MinWidth of the crop area, default 50.
+            * @type Number
+            */
+            this.setAttributeConfig('minWidth', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.minWidth || 50,
+                method: function(w) {
+                    if (this._resize) {
+                        this._resize.set('minWidth', w);
+                    }
+                }
+            });
+
+            /**
+            * @attribute ratio
+            * @description Set the ratio config option of the Resize Utlility, default false
+            * @type Boolean
+            */
+            this.setAttributeConfig('ratio', {
+                validator: YAHOO.lang.isBoolean,
+                value: attr.ratio || false,
+                method: function(r) {
+                    if (this._resize) {
+                        this._resize.set('ratio', r);
+                    }
+                }
+            });
+
+            /**
+            * @attribute ratio
+            * @description Set the autoRatio config option of the Resize Utlility, default true
+            * @type Boolean
+            */
+            this.setAttributeConfig('autoRatio', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.autoRatio === false) ? false : true),
+                method: function(a) {
+                    if (this._resize) {
+                        this._resize.set('autoRatio', a);
+                    }
+                }
+            });
+
+            /**
+            * @attribute initHeight
+            * @description Set the initlal height of the crop area, defaults to 1/4 of the image height
+            * @type Number
+            */
+            this.setAttributeConfig('initHeight', {
+                writeOnce: true,
+                validator: YAHOO.lang.isNumber,
+                value: attr.initHeight || (this.get('element').height / 4)
+            });
+
+            /**
+            * @attribute initWidth
+            * @description Set the initlal width of the crop area, defaults to 1/4 of the image width
+            * @type Number
+            */
+            this.setAttributeConfig('initWidth', {
+                validator: YAHOO.lang.isNumber,
+                writeOnce: true,
+                value: attr.initWidth || (this.get('element').width / 4)
+            });
+
+        },
+        /**
+        * @method destroy
+        * @description Destroys the ImageCropper object and all of it's elements & listeners.
+        */        
+        destroy: function() {
+            YAHOO.log('Destroying the ImageCropper', 'info', 'ImageCropper');
+            this._resize.destroy();
+            this._resizeEl.parentNode.removeChild(this._resizeEl);
+            this._mask.parentNode.removeChild(this._mask);
+            Event.purgeElement(this._wrap);
+            this._wrap.parentNode.replaceChild(this.get('element'), this._wrap);
+            
+            //Brutal Object Destroy
+            for (var i in this) {
+                if (Lang.hasOwnProperty(this, i)) {
+                    this[i] = null;
+                }
+            }
+                       
+        },
+        /**
+        * @method toString
+        * @description Returns a string representing the ImageCropper Object.
+        * @return {String}
+        */        
+        toString: function() {
+            if (this.get) {
+                return 'ImageCropper (#' + this.get('id') + ')';
+            }
+            return 'Image Cropper';
+        }
+    });
+
+    YAHOO.widget.ImageCropper = Crop;
+
+/**
+* @event dragEvent
+* @description Fires when the DragDrop dragEvent
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event startResizeEvent
+* @description Fires when when a resize action is started.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event resizeEvent
+* @description Fires on every element resize.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event moveEvent
+* @description Fires on every element move. Inside these methods: _handleKeyPress, _handleDragEvent, _handleResizeEvent
+* @type YAHOO.util.CustomEvent
+*/
+
+})();
+
+YAHOO.register("imagecropper", YAHOO.widget.ImageCropper, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/imagecropper/imagecropper-min.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F,E){var G={element:F,attributes:E||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getCropperById=function(E){if(B._instances[E]){return B._instances[E];}return false;};YAHOO.extend(B,YAHOO.util.Element,{CSS_MAIN:"yui-crop",CSS_MASK:"yui-crop-mask",CSS_RESIZE_MASK:"yui-crop-resize-mask",_image:null,_active:null,_resize:null,_resizeEl:null,_resizeMaskEl:null,_wrap:null,_mask:null,_createWrap:function(){this._wrap=document.createElement("div");this._wrap.id=this.get("element").id+"_wrap";this._wrap.className=this.CSS_MAIN;var F=this.get("element");this._wrap.style.width=F.width?F.width+"px":C.getStyle(F,"width");this._wrap.style.height=F.height?F.height+"px":C.getStyle(F,"height");var E=this.get("element").parentNode;E.replaceChild(this._wrap,this.get("element"));this._wrap.appendChild(this.get("element"));A.on(this._wrap,"mouseover",this._handleMouseOver,this,t!
 rue);A.on(this._wrap,"mouseout",this._handleMouseOut,this,true);A.on(this._wrap,"click",function(G){A.stopEvent(G);},this,true);},_createMask:function(){this._mask=document.createElement("div");this._mask.className=this.CSS_MASK;this._wrap.appendChild(this._mask);},_createResize:function(){this._resizeEl=document.createElement("div");this._resizeEl.className=YAHOO.util.Resize.prototype.CSS_RESIZE;this._resizeEl.style.position="absolute";this._resizeEl.innerHTML='<div class="'+this.CSS_RESIZE_MASK+'"></div>';this._resizeMaskEl=this._resizeEl.firstChild;this._wrap.appendChild(this._resizeEl);this._resizeEl.style.top=this.get("initialXY")[1]+"px";this._resizeEl.style.left=this.get("initialXY")[0]+"px";this._resizeMaskEl.style.height=Math.floor(this.get("initHeight"))+"px";this._resizeMaskEl.style.width=Math.floor(this.get("initWidth"))+"px";this._resize=new YAHOO.util.Resize(this._resizeEl,{knobHandles:true,handles:"all",draggable:true,status:this.get("status"),minWidth:this.g!
 et("minWidth"),minHeight:this.get("minHeight"),ratio:this.get(!
 "ratio")
,autoRatio:this.get("autoRatio"),height:this.get("initHeight"),width:this.get("initWidth")});this._setBackgroundImage(this.get("element").getAttribute("src",2));this._setBackgroundPosition(-(this.get("initialXY")[0]),-(this.get("initialXY")[1]));this._resize.on("startResize",this._handleStartResizeEvent,this,true);this._resize.on("endResize",this._handleEndResizeEvent,this,true);this._resize.on("dragEvent",this._handleDragEvent,this,true);this._resize.on("beforeResize",this._handleBeforeResizeEvent,this,true);this._resize.on("resize",this._handleResizeEvent,this,true);this._resize.dd.on("b4StartDragEvent",this._handleB4DragEvent,this,true);},_handleMouseOver:function(F){var E="keydown";if(YAHOO.env.ua.gecko||YAHOO.env.ua.opera){E="keypress";}if(!this._active){this._active=true;if(this.get("useKeys")){A.on(document,E,this._handleKeyPress,this,true);}}},_handleMouseOut:function(F){var E="keydown";if(YAHOO.env.ua.gecko||YAHOO.env.ua.opera){E="keypress";}this._active=false;if(th!
 is.get("useKeys")){A.removeListener(document,E,this._handleKeyPress);}},_moveEl:function(G,J){var H=0,E=0,I=this._setConstraints(),F=true;switch(G){case"down":H=-(J);if((I.bottom-J)<0){F=false;this._resizeEl.style.top=(I.top+I.bottom)+"px";}break;case"up":H=(J);if((I.top-J)<0){F=false;this._resizeEl.style.top="0px";}break;case"right":E=-(J);if((I.right-J)<0){F=false;this._resizeEl.style.left=(I.left+I.right)+"px";}break;case"left":E=J;if((I.left-J)<0){F=false;this._resizeEl.style.left="0px";}break;}if(F){this._resizeEl.style.left=(parseInt(this._resizeEl.style.left,10)-E)+"px";this._resizeEl.style.top=(parseInt(this._resizeEl.style.top,10)-H)+"px";this.fireEvent("moveEvent",{target:"keypress"});}else{this._setConstraints();}this._syncBackgroundPosition();},_handleKeyPress:function(G){var E=A.getCharCode(G),F=false,H=((G.shiftKey)?this.get("shiftKeyTick"):this.get("keyTick"));switch(E){case 37:this._moveEl("left",H);F=true;break;case 38:this._moveEl("up",H);F=true;break;case!
  39:this._moveEl("right",H);F=true;break;case 40:this._moveEl(!
 "down",H
);F=true;break;default:}if(F){A.preventDefault(G);}},_handleB4DragEvent:function(){this._setConstraints();},_handleDragEvent:function(){this._syncBackgroundPosition();this.fireEvent("dragEvent",arguments);this.fireEvent("moveEvent",{target:"dragevent"});},_handleBeforeResizeEvent:function(F){var I=C.getRegion(this.get("element")),J=this._resize._cache,H=this._resize._currentHandle,G=0,E=0;if(F.top&&(F.top<I.top)){G=(J.height+J.top)-I.top;C.setY(this._resize.getWrapEl(),I.top);this._resize.getWrapEl().style.height=G+"px";this._resize._cache.height=G;this._resize._cache.top=I.top;this._syncBackgroundPosition();return false;}if(F.left&&(F.left<I.left)){E=(J.width+J.left)-I.left;C.setX(this._resize.getWrapEl(),I.left);this._resize._cache.left=I.left;this._resize.getWrapEl().style.width=E+"px";this._resize._cache.width=E;this._syncBackgroundPosition();return false;}if(H!="tl"&&H!="l"&&H!="bl"){if(J.left&&F.width&&((J.left+F.width)>I.right)){E=(I.right-J.left);C.setX(this._resize.!
 getWrapEl(),(I.right-E));this._resize.getWrapEl().style.width=E+"px";this._resize._cache.left=(I.right-E);this._resize._cache.width=E;this._syncBackgroundPosition();return false;}}if(H!="t"&&H!="tr"&&H!="tl"){if(J.top&&F.height&&((J.top+F.height)>I.bottom)){G=(I.bottom-J.top);C.setY(this._resize.getWrapEl(),(I.bottom-G));this._resize.getWrapEl().style.height=G+"px";this._resize._cache.height=G;this._resize._cache.top=(I.bottom-G);this._syncBackgroundPosition();return false;}}},_handleResizeMaskEl:function(){var E=this._resize._cache;this._resizeMaskEl.style.height=Math.floor(E.height)+"px";this._resizeMaskEl.style.width=Math.floor(E.width)+"px";},_handleResizeEvent:function(E){this._setConstraints(true);this._syncBackgroundPosition();this.fireEvent("resizeEvent",arguments);this.fireEvent("moveEvent",{target:"resizeevent"});},_syncBackgroundPosition:function(){this._handleResizeMaskEl();this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left,10)),-(parseInt(this._re!
 sizeEl.style.top,10)));
+},_setBackgroundPosition:function(F,H){var J=parseInt(C.getStyle(this._resize.get("element"),"borderLeftWidth"),10);var G=parseInt(C.getStyle(this._resize.get("element"),"borderTopWidth"),10);if(isNaN(J)){J=0;}if(isNaN(G)){G=0;}var E=this._resize.getWrapEl().firstChild;var I=(F-J)+"px "+(H-G)+"px";this._resizeMaskEl.style.backgroundPosition=I;},_setBackgroundImage:function(F){var E=this._resize.getWrapEl().firstChild;this._image=F;E.style.backgroundImage="url("+F+"#)";},_handleEndResizeEvent:function(){this._setConstraints(true);},_handleStartResizeEvent:function(){this._setConstraints(true);var I=this._resize._cache.height,F=this._resize._cache.width,H=parseInt(this._resize.getWrapEl().style.top,10),E=parseInt(this._resize.getWrapEl().style.left,10),G=0,J=0;switch(this._resize._currentHandle){case"b":G=(I+this._resize.dd.bottomConstraint);break;case"l":J=(F+this._resize.dd.leftConstraint);break;case"r":G=(I+H);J=(F+this._resize.dd.rightConstraint);break;case"br":G=(I+this.!
 _resize.dd.bottomConstraint);J=(F+this._resize.dd.rightConstraint);break;case"tr":G=(I+H);J=(F+this._resize.dd.rightConstraint);break;}if(G){}if(J){}this.fireEvent("startResizeEvent",arguments);},_setConstraints:function(J){var H=this._resize;H.dd.resetConstraints();var N=parseInt(H.get("height"),10),F=parseInt(H.get("width"),10);if(J){N=H._cache.height;F=H._cache.width;}var L=C.getRegion(this.get("element"));var G=H.getWrapEl();var O=C.getXY(G);var I=O[0]-L.left;var M=L.right-O[0]-F;var K=O[1]-L.top;var E=L.bottom-O[1]-N;if(K<0){K=0;}H.dd.setXConstraint(I,M);H.dd.setYConstraint(K,E);return{top:K,right:M,bottom:E,left:I};},getCropCoords:function(){var E={top:parseInt(this._resize.getWrapEl().style.top,10),left:parseInt(this._resize.getWrapEl().style.left,10),height:this._resize._cache.height,width:this._resize._cache.width,image:this._image};return E;},reset:function(){this._resize.resize(null,this.get("initHeight"),this.get("initWidth"),0,0,true);this._resizeEl.style.top=t!
 his.get("initialXY")[1]+"px";this._resizeEl.style.left=this.ge!
 t("initi
alXY")[0]+"px";this._syncBackgroundPosition();return this;},getEl:function(){return this.get("element");},getResizeEl:function(){return this._resizeEl;},getWrapEl:function(){return this._wrap;},getMaskEl:function(){return this._mask;},getResizeMaskEl:function(){return this._resizeMaskEl;},getResizeObject:function(){return this._resize;},init:function(G,E){B.superclass.init.call(this,G,E);var H=G;if(!D.isString(H)){if(H.tagName&&(H.tagName.toLowerCase()=="img")){H=C.generateId(H);}else{return false;}}else{var F=C.get(H);if(F.tagName&&F.tagName.toLowerCase()=="img"){}else{return false;}}B._instances[H]=this;this._createWrap();this._createMask();this._createResize();this._setConstraints();},initAttributes:function(E){B.superclass.initAttributes.call(this,E);this.setAttributeConfig("initialXY",{writeOnce:true,validator:YAHOO.lang.isArray,value:E.initialXY||[10,10]});this.setAttributeConfig("keyTick",{validator:YAHOO.lang.isNumber,value:E.keyTick||1});this.setAttributeConfig("shi!
 ftKeyTick",{validator:YAHOO.lang.isNumber,value:E.shiftKeyTick||10});this.setAttributeConfig("useKeys",{validator:YAHOO.lang.isBoolean,value:((E.useKeys===false)?false:true)});this.setAttributeConfig("status",{validator:YAHOO.lang.isBoolean,value:((E.status===false)?false:true),method:function(F){if(this._resize){this._resize.set("status",F);}}});this.setAttributeConfig("minHeight",{validator:YAHOO.lang.isNumber,value:E.minHeight||50,method:function(F){if(this._resize){this._resize.set("minHeight",F);}}});this.setAttributeConfig("minWidth",{validator:YAHOO.lang.isNumber,value:E.minWidth||50,method:function(F){if(this._resize){this._resize.set("minWidth",F);}}});this.setAttributeConfig("ratio",{validator:YAHOO.lang.isBoolean,value:E.ratio||false,method:function(F){if(this._resize){this._resize.set("ratio",F);}}});this.setAttributeConfig("autoRatio",{validator:YAHOO.lang.isBoolean,value:((E.autoRatio===false)?false:true),method:function(F){if(this._resize){this._resize.set("a!
 utoRatio",F);}}});this.setAttributeConfig("initHeight",{writeO!
 nce:true
,validator:YAHOO.lang.isNumber,value:E.initHeight||(this.get("element").height/4)});this.setAttributeConfig("initWidth",{validator:YAHOO.lang.isNumber,writeOnce:true,value:E.initWidth||(this.get("element").width/4)});},destroy:function(){this._resize.destroy();this._resizeEl.parentNode.removeChild(this._resizeEl);this._mask.parentNode.removeChild(this._mask);A.purgeElement(this._wrap);this._wrap.parentNode.replaceChild(this.get("element"),this._wrap);for(var E in this){if(D.hasOwnProperty(this,E)){this[E]=null;}}},toString:function(){if(this.get){return"ImageCropper (#"+this.get("id")+")";}return"Image Cropper";}});YAHOO.widget.ImageCropper=B;})();YAHOO.register("imagecropper",YAHOO.widget.ImageCropper,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/imagecropper/imagecropper.js
===================================================================
--- trunk/root/static/yui/imagecropper/imagecropper.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imagecropper/imagecropper.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,889 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * @description <p>Creates a Image Cropper control.</p>
+ * @namespace YAHOO.widget
+ * @requires yahoo, dom, dragdrop, element, event, resize
+ * @module imagecropper
+ * @beta
+ */
+(function() {
+var Dom = YAHOO.util.Dom,
+    Event = YAHOO.util.Event,
+    Lang = YAHOO.lang;
+
+    /**
+     * @constructor
+     * @class ImageCropper
+     * @description <p>Creates a Image Cropper control.</p>
+     * @extends YAHOO.util.Element
+     * @param {String/HTMLElement} el The image element to make croppable.
+     * @param {Object} attrs Object liternal containing configuration parameters.
+    */
+    var Crop = function(el, config) {
+        var oConfig = {
+            element: el,
+            attributes: config || {}
+        };
+
+        Crop.superclass.constructor.call(this, oConfig.element, oConfig.attributes);    
+    };
+
+    /**
+    * @private
+    * @static
+    * @property _instances
+    * @description Internal hash table for all ImageCropper instances
+    * @type Object
+    */ 
+    Crop._instances = {};
+    /**
+    * @static
+    * @method getCropperById 
+    * @description Get's an ImageCropper object by the HTML id of the image associated with the ImageCropper object.
+    * @return {Object} The ImageCropper Object
+    */ 
+    Crop.getCropperById = function(id) {
+        if (Crop._instances[id]) {
+            return Crop._instances[id];
+        }
+        return false;
+    };
+
+    YAHOO.extend(Crop, YAHOO.util.Element, {
+        /**
+        * @private
+        * @property CSS_MAIN
+        * @description The CSS class used to wrap the element 
+        * @type String
+        */
+        CSS_MAIN: 'yui-crop',
+        /**
+        * @private
+        * @property CSS_MASK
+        * @description The CSS class for the mask element
+        * @type String
+        */
+        CSS_MASK: 'yui-crop-mask',
+        /**
+        * @private
+        * @property CSS_RESIZE_MASK
+        * @description The CSS class for the mask inside the resize element
+        * @type String
+        */
+        CSS_RESIZE_MASK: 'yui-crop-resize-mask',
+
+        /**
+        * @private
+        * @property _image
+        * @description The url of the image we are cropping
+        * @type String
+        */
+        _image: null,
+        /**
+        * @private
+        * @property _active
+        * @description Flag to determine if the crop region is active
+        * @type Boolean
+        */
+        _active: null,
+        /**
+        * @private
+        * @property _resize
+        * @description A reference to the Resize Utility used in this Cropper Instance
+        * @type Object
+        */
+        _resize: null,
+        /**
+        * @private
+        * @property _resizeEl
+        * @description The HTML Element used to create the Resize Oject
+        * @type HTMLElement
+        */
+        _resizeEl: null,
+        /**
+        * @private
+        * @property _resizeMaskEl
+        * @description The HTML Element used to create the Resize mask
+        * @type HTMLElement
+        */
+        _resizeMaskEl: null,
+        /**
+        * @private
+        * @property _wrap
+        * @description The HTML Element created to wrap the image
+        * @type HTMLElement
+        */
+        _wrap: null,
+        /**
+        * @private
+        * @property _mask
+        * @description The HTML Element created to "mask" the image being cropped
+        * @type HTMLElement
+        */
+        _mask: null,
+        /**
+        * @private
+        * @method _createWrap
+        * @description Creates the wrapper element used to wrap the image
+        */
+        _createWrap: function() {
+            this._wrap = document.createElement('div');
+            this._wrap.id = this.get('element').id + '_wrap';
+            this._wrap.className = this.CSS_MAIN;
+            var el = this.get('element');
+            this._wrap.style.width = el.width ? el.width + 'px' : Dom.getStyle(el, 'width');
+            this._wrap.style.height = el.height ? el.height + 'px' : Dom.getStyle(el, 'height');
+            
+            var par = this.get('element').parentNode;
+            par.replaceChild(this._wrap, this.get('element'));
+            this._wrap.appendChild(this.get('element'));
+
+            Event.on(this._wrap, 'mouseover', this._handleMouseOver, this, true);
+            Event.on(this._wrap, 'mouseout', this._handleMouseOut, this, true);
+
+            Event.on(this._wrap, 'click', function(ev) { Event.stopEvent(ev); }, this, true);
+        },
+
+        /**
+        * @private
+        * @method _createMask
+        * @description Creates the mask element used to mask the image
+        */
+        _createMask: function() {
+            this._mask = document.createElement('div');
+            this._mask.className = this.CSS_MASK;
+            this._wrap.appendChild(this._mask);
+        },
+
+        /**
+        * @private
+        * @method _createResize
+        * @description Creates the resize element and the instance of the Resize Utility
+        */
+        _createResize: function() {
+            this._resizeEl = document.createElement('div');
+            this._resizeEl.className = YAHOO.util.Resize.prototype.CSS_RESIZE;
+            this._resizeEl.style.position = 'absolute';
+            
+            this._resizeEl.innerHTML = '<div class="' + this.CSS_RESIZE_MASK + '"></div>';
+            this._resizeMaskEl = this._resizeEl.firstChild;
+            this._wrap.appendChild(this._resizeEl);
+            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
+            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
+            this._resizeMaskEl.style.height = Math.floor(this.get('initHeight')) + 'px';
+            this._resizeMaskEl.style.width = Math.floor(this.get('initWidth')) + 'px';
+
+            this._resize = new YAHOO.util.Resize(this._resizeEl, {
+                knobHandles: true,
+                handles: 'all',
+                draggable: true,
+                status: this.get('status'),
+                minWidth: this.get('minWidth'),
+                minHeight: this.get('minHeight'),
+                ratio: this.get('ratio'),
+                autoRatio: this.get('autoRatio'),
+                height: this.get('initHeight'),
+                width: this.get('initWidth')
+            });
+
+            this._setBackgroundImage(this.get('element').getAttribute('src', 2));
+            this._setBackgroundPosition(-(this.get('initialXY')[0]),  -(this.get('initialXY')[1]));
+
+            this._resize.on('startResize', this._handleStartResizeEvent, this, true);
+            this._resize.on('endResize', this._handleEndResizeEvent, this, true);
+            this._resize.on('dragEvent', this._handleDragEvent, this, true);
+            this._resize.on('beforeResize', this._handleBeforeResizeEvent, this, true);
+            this._resize.on('resize', this._handleResizeEvent, this, true);
+            this._resize.dd.on('b4StartDragEvent', this._handleB4DragEvent, this, true);
+        },
+
+        /**
+        * @private
+        * @method _handleMouseOver
+        * @description Handles the mouseover event
+        */
+        _handleMouseOver: function(ev) {
+            var evType = 'keydown';
+            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
+                evType = 'keypress';
+            }
+            if (!this._active) {
+                this._active = true;
+                if (this.get('useKeys')) {
+                    Event.on(document, evType, this._handleKeyPress, this, true);
+                }
+            }
+        },
+        /**
+        * @private
+        * @method _handleMouseOut
+        * @description Handles the mouseout event
+        */
+        _handleMouseOut: function(ev) {
+            var evType = 'keydown';
+            if (YAHOO.env.ua.gecko || YAHOO.env.ua.opera) {
+                evType = 'keypress';
+            }
+            this._active = false;
+            if (this.get('useKeys')) {
+                Event.removeListener(document, evType, this._handleKeyPress);
+            }
+        },
+
+        /**
+        * @private
+        * @method _moveEl
+        * @description Moves the resize element based on the arrow keys
+        */
+        _moveEl: function(dir, inc) {
+            var t = 0, l = 0,
+                region = this._setConstraints(),
+                resize = true;
+
+            switch (dir) {
+                case 'down':
+                    t = -(inc);
+                    if ((region.bottom - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.top = (region.top + region.bottom) + 'px';
+                    }
+                    break;
+                case 'up':
+                    t = (inc);
+                    if ((region.top - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.top = '0px';
+                    }
+                    break;
+                case 'right':
+                    l = -(inc);
+                    if ((region.right - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.left = (region.left + region.right) + 'px';
+                    }
+                    break;
+                case 'left':
+                    l = inc;
+                    if ((region.left - inc) < 0) {
+                        resize = false;
+                        this._resizeEl.style.left = '0px';
+                    }
+                    break;
+            }
+
+            if (resize) {
+                this._resizeEl.style.left = (parseInt(this._resizeEl.style.left, 10) - l) + 'px';
+                this._resizeEl.style.top = (parseInt(this._resizeEl.style.top, 10) - t) + 'px';
+                this.fireEvent('moveEvent', { target: 'keypress' });
+            } else {
+                this._setConstraints();
+            }
+            this._syncBackgroundPosition();
+        },
+
+        /**
+        * @private
+        * @method _handleKeyPress
+        * @description Handles the keypress event
+        */
+        _handleKeyPress: function(ev) {
+            var kc = Event.getCharCode(ev),
+                stopEvent = false,
+                inc = ((ev.shiftKey) ? this.get('shiftKeyTick') : this.get('keyTick'));
+
+            switch (kc) {
+                case 0x25: // left
+                    this._moveEl('left', inc);
+                    stopEvent = true;
+                    break;
+                case 0x26: // up
+                    this._moveEl('up', inc);
+                    stopEvent = true;
+                    break;
+                case 0x27: // right
+                    this._moveEl('right', inc);
+                    stopEvent = true;
+                    break;
+                case 0x28: // down
+                    this._moveEl('down', inc);
+                    stopEvent = true;
+                    break;
+                default:
+            }
+            if (stopEvent) {
+                Event.preventDefault(ev);
+            }
+        },
+
+        /**
+        * @private
+        * @method _handleB4DragEvent
+        * @description Handles the DragDrop b4DragEvent event
+        */
+        _handleB4DragEvent: function() {
+            this._setConstraints();
+        },
+
+        /**
+        * @private
+        * @method _handleDragEvent
+        * @description Handles the DragDrop DragEvent event
+        */
+        _handleDragEvent: function() {
+            this._syncBackgroundPosition();
+            this.fireEvent('dragEvent', arguments);
+            this.fireEvent('moveEvent', { target: 'dragevent' });
+        },
+
+        /**
+        * @private
+        * @method _handleBeforeResizeEvent
+        * @description Handles the Resize Utilitys beforeResize event
+        */
+        _handleBeforeResizeEvent: function(args) {
+            var region = Dom.getRegion(this.get('element')),
+                c = this._resize._cache,
+                ch = this._resize._currentHandle, h = 0, w = 0;
+
+            if (args.top && (args.top < region.top)) {
+                h = (c.height + c.top) - region.top;
+                Dom.setY(this._resize.getWrapEl(), region.top);
+                this._resize.getWrapEl().style.height = h + 'px';
+                this._resize._cache.height = h;
+                this._resize._cache.top = region.top;
+                this._syncBackgroundPosition();
+                return false;
+            }
+            if (args.left && (args.left < region.left)) {
+                w = (c.width + c.left) - region.left;
+                Dom.setX(this._resize.getWrapEl(), region.left);
+                this._resize._cache.left = region.left;
+                this._resize.getWrapEl().style.width = w + 'px';
+                this._resize._cache.width = w;
+                this._syncBackgroundPosition();
+                return false;
+            }
+            if (ch != 'tl' && ch != 'l' && ch != 'bl') {
+                if (c.left && args.width && ((c.left + args.width) > region.right)) {
+                    w = (region.right - c.left);
+                    Dom.setX(this._resize.getWrapEl(), (region.right - w));
+                    this._resize.getWrapEl().style.width = w + 'px';
+                    this._resize._cache.left = (region.right - w);
+                    this._resize._cache.width = w;
+                    this._syncBackgroundPosition();
+                    return false;
+                }
+            }
+            if (ch != 't' && ch != 'tr' && ch != 'tl') {
+                if (c.top && args.height && ((c.top + args.height) > region.bottom)) {
+                    h = (region.bottom - c.top);
+                    Dom.setY(this._resize.getWrapEl(), (region.bottom - h));
+                    this._resize.getWrapEl().style.height = h + 'px';
+                    this._resize._cache.height = h;
+                    this._resize._cache.top = (region.bottom - h);
+                    this._syncBackgroundPosition();
+                    return false;
+                }
+            }
+        },
+        /**
+        * @private
+        * @method _handleResizeMaskEl
+        * @description Resizes the inner mask element
+        */
+        _handleResizeMaskEl: function() {
+            var a = this._resize._cache;
+            this._resizeMaskEl.style.height = Math.floor(a.height) + 'px';
+            this._resizeMaskEl.style.width = Math.floor(a.width) + 'px';
+        },
+        /**
+        * @private
+        * @method _handleResizeEvent
+        * @param Event ev The Resize Utilitys resize event.
+        * @description Handles the Resize Utilitys Resize event
+        */
+        _handleResizeEvent: function(ev) {
+            this._setConstraints(true);
+            this._syncBackgroundPosition();
+            this.fireEvent('resizeEvent', arguments);
+            this.fireEvent('moveEvent', { target: 'resizeevent' });
+        },
+
+        /**
+        * @private
+        * @method _syncBackgroundPosition
+        * @description Syncs the packground position of the resize element with the resize elements top and left style position
+        */
+        _syncBackgroundPosition: function() {
+            this._handleResizeMaskEl();
+            this._setBackgroundPosition(-(parseInt(this._resizeEl.style.left, 10)), -(parseInt(this._resizeEl.style.top, 10)));
+        },
+
+        /**
+        * @private
+        * @method _setBackgroundPosition
+        * @param Number l The left position
+        * @param Number t The top position
+        * @description Sets the background image position to the top and left position
+        */
+        _setBackgroundPosition: function(l, t) {
+            var bl = parseInt(Dom.getStyle(this._resize.get('element'), 'borderLeftWidth'), 10);
+            var bt = parseInt(Dom.getStyle(this._resize.get('element'), 'borderTopWidth'), 10);
+            if (isNaN(bl)) {
+                bl = 0;
+            }
+            if (isNaN(bt)) {
+                bt = 0;
+            }
+            var mask = this._resize.getWrapEl().firstChild;
+            var pos = (l - bl) + 'px ' + (t - bt) + 'px';
+            this._resizeMaskEl.style.backgroundPosition = pos;
+        },
+
+        /**
+        * @private
+        * @method _setBackgroundImage
+        * @param String url The url of the image
+        * @description Sets the background image of the resize element
+        */
+        _setBackgroundImage: function(url) {
+            var mask = this._resize.getWrapEl().firstChild;
+            this._image = url;
+            mask.style.backgroundImage = 'url(' + url + '#)';
+        },
+        
+        /**
+        * @private
+        * @method _handleEndResizeEvent
+        * @description Handles the Resize Utilitys endResize event
+        */
+        _handleEndResizeEvent: function() {
+            this._setConstraints(true);
+        },
+        /**
+        * @private
+        * @method _handleStartResizeEvent
+        * @description Handles the Resize Utilitys startResize event
+        */
+        _handleStartResizeEvent: function() {
+            this._setConstraints(true);
+
+            var h = this._resize._cache.height,
+                 w = this._resize._cache.width,
+                 t = parseInt(this._resize.getWrapEl().style.top, 10),
+                 l = parseInt(this._resize.getWrapEl().style.left, 10),
+                 maxH = 0, maxW = 0;
+ 
+            switch (this._resize._currentHandle) {
+                case 'b':
+                    maxH = (h + this._resize.dd.bottomConstraint);
+                    break;
+                case 'l':
+                    maxW = (w + this._resize.dd.leftConstraint);
+                    break;
+                case 'r':
+                    maxH = (h + t);
+                    maxW = (w + this._resize.dd.rightConstraint);
+                    break;
+                 case 'br':
+                     maxH = (h + this._resize.dd.bottomConstraint);
+                     maxW = (w + this._resize.dd.rightConstraint);
+                     break;
+                 case 'tr':
+                     maxH = (h + t);
+                     maxW = (w + this._resize.dd.rightConstraint);
+                     break;
+
+             }
+            
+             if (maxH) {
+                 //this._resize.set('maxHeight', maxH);
+             }
+             if (maxW) {
+                 //this._resize.set('maxWidth', maxW);
+             }
+
+            this.fireEvent('startResizeEvent', arguments);
+        },
+        
+        /**
+        * @private
+        * @method _setConstraints
+        * @param Boolean inside Used when called from inside a resize event, false by default (dragging)
+        * @description Set the DragDrop constraints to keep the element inside the crop area.
+        * @return {Object} Object containing Top, Right, Bottom and Left constraints
+        */
+        _setConstraints: function(inside) {
+            var resize = this._resize;
+            resize.dd.resetConstraints();
+            var height = parseInt(resize.get('height'), 10),
+                width = parseInt(resize.get('width'), 10);
+            if (inside) {
+                //Called from inside the resize callback
+                height = resize._cache.height;
+                width = resize._cache.width;
+            }
+
+            //Get the top, right, bottom and left positions
+            var region = Dom.getRegion(this.get('element'));
+            //Get the element we are working on
+            var el = resize.getWrapEl();
+
+            //Get the xy position of it
+            var xy = Dom.getXY(el);
+
+            //Set left to x minus left
+            var left = xy[0] - region.left;
+
+            //Set right to right minus x minus width
+            var right = region.right - xy[0] - width;
+
+            //Set top to y minus top
+            var top = xy[1] - region.top;
+
+            //Set bottom to bottom minus y minus height
+            var bottom = region.bottom - xy[1] - height;
+
+            if (top < 0) {
+                top = 0;
+            }
+            
+            resize.dd.setXConstraint(left, right); 
+            resize.dd.setYConstraint(top, bottom);
+
+            return {
+                top: top,
+                right: right,
+                bottom: bottom,
+                left: left
+            };
+
+            
+            
+        },
+        /**
+        * @method getCropCoords
+        * @description Returns the coordinates needed to crop the image
+        * @return {Object} The top, left, height, width and image url of the image being cropped
+        */
+        getCropCoords: function() {
+            var coords = {
+                top: parseInt(this._resize.getWrapEl().style.top, 10),
+                left: parseInt(this._resize.getWrapEl().style.left, 10),
+                height: this._resize._cache.height,
+                width: this._resize._cache.width,
+                image: this._image
+            };
+            return coords;
+        },
+        /**
+        * @method reset
+        * @description Resets the crop element back to it's original position
+        * @return {<a href="YAHOO.widget.ImageCropper.html">YAHOO.widget.ImageCropper</a>} The ImageCropper instance
+        */
+        reset: function() {
+            this._resize.resize(null, this.get('initHeight'), this.get('initWidth'), 0, 0, true);
+            this._resizeEl.style.top = this.get('initialXY')[1] + 'px';
+            this._resizeEl.style.left = this.get('initialXY')[0] + 'px';
+            this._syncBackgroundPosition();
+            return this;
+        },
+
+        /**
+        * @method getEl
+        * @description Get the HTML reference for the image element.
+        * @return {HTMLElement} The image element
+        */      
+        getEl: function() {
+            return this.get('element');
+        },
+        /**
+        * @method getResizeEl
+        * @description Get the HTML reference for the resize element.
+        * @return {HTMLElement} The resize element
+        */      
+        getResizeEl: function() {
+            return this._resizeEl;
+        },
+        /**
+        * @method getWrapEl
+        * @description Get the HTML reference for the wrap element.
+        * @return {HTMLElement} The wrap element
+        */      
+        getWrapEl: function() {
+            return this._wrap;
+        },
+
+        /**
+        * @method getMaskEl
+        * @description Get the HTML reference for the mask element.
+        * @return {HTMLElement} The mask element
+        */      
+        getMaskEl: function() {
+            return this._mask;
+        },
+
+        /**
+        * @method getResizeMaskEl
+        * @description Get the HTML reference for the resizable object's mask element.
+        * @return {HTMLElement} The resize objects mask element.
+        */      
+        getResizeMaskEl: function() {
+            return this._resizeMaskEl;
+        },
+
+        /**
+        * @method getResizeObject
+        * @description Get the Resize Utility object.
+        * @return {<a href="YAHOO.util.Resize.html">YAHOO.util.Resize</a>} The Resize instance
+        */      
+        getResizeObject: function() {
+            return this._resize;
+        },
+
+        /** 
+        * @private
+        * @method init
+        * @description The ImageCropper class's initialization method
+        */        
+        init: function(p_oElement, p_oAttributes) {
+            Crop.superclass.init.call(this, p_oElement, p_oAttributes);
+
+            var id = p_oElement;
+
+            if (!Lang.isString(id)) {
+                if (id.tagName && (id.tagName.toLowerCase() == 'img')) {
+                    id = Dom.generateId(id);                    
+                } else {
+                    return false;
+                }
+            } else {
+                var el = Dom.get(id);
+                if (el.tagName && el.tagName.toLowerCase() == 'img') {
+                    //All good
+                } else {
+                    return false;
+                }
+            }
+            
+
+
+            Crop._instances[id] = this;
+            this._createWrap();
+            this._createMask();
+            this._createResize();
+            this._setConstraints();
+
+        },
+        /**
+        * @private
+        * @method initAttributes
+        * @description Initializes all of the configuration attributes used to create a croppable element.
+        * @param {Object} attr Object literal specifying a set of 
+        * configuration attributes used to create the widget.
+        */      
+
+        initAttributes: function(attr) {
+            Crop.superclass.initAttributes.call(this, attr);
+
+            /**
+            * @attribute initialXY
+            * @description Array of the XY position that we need to set the crop element to when we build it. Defaults to [10, 10]
+            * @type Array
+            */
+            this.setAttributeConfig('initialXY', {
+                writeOnce: true,
+                validator: YAHOO.lang.isArray,
+                value: attr.initialXY || [10, 10]
+            });
+            /**
+            * @attribute keyTick
+            * @description The pixel tick for the arrow keys, defaults to 1
+            * @type Number
+            */
+            this.setAttributeConfig('keyTick', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.keyTick || 1
+            });
+
+            /**
+            * @attribute shiftKeyTick
+            * @description The pixel tick for shift + the arrow keys, defaults to 10
+            * @type Number
+            */
+            this.setAttributeConfig('shiftKeyTick', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.shiftKeyTick || 10
+            });
+
+            /**
+            * @attribute useKeys
+            * @description Should we use the Arrow keys to position the crop element, defaults to true
+            * @type Boolean
+            */
+            this.setAttributeConfig('useKeys', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.useKeys === false) ? false : true)
+            });
+
+            /**
+            * @attribute status
+            * @description Show the Resize Utility status, defaults to true
+            * @type Boolean
+            */
+            this.setAttributeConfig('status', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.status === false) ? false : true),
+                method: function(status) {
+                    if (this._resize) {
+                        this._resize.set('status', status);
+                    }
+                }
+            });
+
+            /**
+            * @attribute minHeight
+            * @description MinHeight of the crop area, default 50
+            * @type Number
+            */
+            this.setAttributeConfig('minHeight', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.minHeight || 50,
+                method: function(h) {
+                    if (this._resize) {
+                        this._resize.set('minHeight', h);
+                    }
+                }
+            });
+
+            /**
+            * @attribute minWidth
+            * @description MinWidth of the crop area, default 50.
+            * @type Number
+            */
+            this.setAttributeConfig('minWidth', {
+                validator: YAHOO.lang.isNumber,
+                value: attr.minWidth || 50,
+                method: function(w) {
+                    if (this._resize) {
+                        this._resize.set('minWidth', w);
+                    }
+                }
+            });
+
+            /**
+            * @attribute ratio
+            * @description Set the ratio config option of the Resize Utlility, default false
+            * @type Boolean
+            */
+            this.setAttributeConfig('ratio', {
+                validator: YAHOO.lang.isBoolean,
+                value: attr.ratio || false,
+                method: function(r) {
+                    if (this._resize) {
+                        this._resize.set('ratio', r);
+                    }
+                }
+            });
+
+            /**
+            * @attribute ratio
+            * @description Set the autoRatio config option of the Resize Utlility, default true
+            * @type Boolean
+            */
+            this.setAttributeConfig('autoRatio', {
+                validator: YAHOO.lang.isBoolean,
+                value: ((attr.autoRatio === false) ? false : true),
+                method: function(a) {
+                    if (this._resize) {
+                        this._resize.set('autoRatio', a);
+                    }
+                }
+            });
+
+            /**
+            * @attribute initHeight
+            * @description Set the initlal height of the crop area, defaults to 1/4 of the image height
+            * @type Number
+            */
+            this.setAttributeConfig('initHeight', {
+                writeOnce: true,
+                validator: YAHOO.lang.isNumber,
+                value: attr.initHeight || (this.get('element').height / 4)
+            });
+
+            /**
+            * @attribute initWidth
+            * @description Set the initlal width of the crop area, defaults to 1/4 of the image width
+            * @type Number
+            */
+            this.setAttributeConfig('initWidth', {
+                validator: YAHOO.lang.isNumber,
+                writeOnce: true,
+                value: attr.initWidth || (this.get('element').width / 4)
+            });
+
+        },
+        /**
+        * @method destroy
+        * @description Destroys the ImageCropper object and all of it's elements & listeners.
+        */        
+        destroy: function() {
+            this._resize.destroy();
+            this._resizeEl.parentNode.removeChild(this._resizeEl);
+            this._mask.parentNode.removeChild(this._mask);
+            Event.purgeElement(this._wrap);
+            this._wrap.parentNode.replaceChild(this.get('element'), this._wrap);
+            
+            //Brutal Object Destroy
+            for (var i in this) {
+                if (Lang.hasOwnProperty(this, i)) {
+                    this[i] = null;
+                }
+            }
+                       
+        },
+        /**
+        * @method toString
+        * @description Returns a string representing the ImageCropper Object.
+        * @return {String}
+        */        
+        toString: function() {
+            if (this.get) {
+                return 'ImageCropper (#' + this.get('id') + ')';
+            }
+            return 'Image Cropper';
+        }
+    });
+
+    YAHOO.widget.ImageCropper = Crop;
+
+/**
+* @event dragEvent
+* @description Fires when the DragDrop dragEvent
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event startResizeEvent
+* @description Fires when when a resize action is started.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event resizeEvent
+* @description Fires on every element resize.
+* @type YAHOO.util.CustomEvent
+*/
+/**
+* @event moveEvent
+* @description Fires on every element move. Inside these methods: _handleKeyPress, _handleDragEvent, _handleResizeEvent
+* @type YAHOO.util.CustomEvent
+*/
+
+})();
+
+YAHOO.register("imagecropper", YAHOO.widget.ImageCropper, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/imageloader/README
===================================================================
--- trunk/root/static/yui/imageloader/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imageloader/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,23 +0,0 @@
-ImageLoader - Release Notes
-
-2.6.0
-   * No Change
-
-2.5.2
-   * No Change
-
-2.5.1
-   * No Change
-
-2.5.0
-   * Group object has an addCustomTrigger() function for adding custom event triggers
-   * PNG background images now support custom properties for AlphaImageLoader
-
-2.4.0
-   * No Change
-
-2.3.1
-   * No Change
-
-2.3.0
-   * Initial release

Modified: trunk/root/static/yui/imageloader/imageloader-debug.js
===================================================================
--- trunk/root/static/yui/imageloader/imageloader-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imageloader/imageloader-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The image loader is a framework to dynamically load images
@@ -484,4 +484,4 @@
 		el.style.backgroundImage = "url('" + this.url + "')";
 	}
 };
-YAHOO.register("imageloader", YAHOO.util.ImageLoader, {version: "2.6.0", build: "1321"});
+YAHOO.register("imageloader", YAHOO.util.ImageLoader, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/imageloader/imageloader-min.js
===================================================================
--- trunk/root/static/yui/imageloader/imageloader-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imageloader/imageloader-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof (YAHOO.util.ImageLoader)=="undefined"){YAHOO.util.ImageLoader={};}YAHOO.util.ImageLoader.group=function(A,B,C){this.name="unnamed";this._imgObjs={};this.timeoutLen=C;this._timeout=null;this._triggers=[];this._customTriggers=[];this.foldConditional=false;this.className=null;this._classImageEls=null;YAHOO.util.Event.addListener(window,"load",this._onloadTasks,this,true);this.addTrigger(A,B);};YAHOO.util.ImageLoader.group.prototype.addTrigger=function(B,C){if(!B||!C){return ;}var A=function(){this.fetch();};this._triggers.push([B,C,A]);YAHOO.util.Event.addListener(B,C,A,this,true);};YAHOO.util.ImageLoader.group.prototype.addCustomTrigger=function(B){if(!B||!B instanceof YAHOO.util.CustomEvent){return ;}var A=function(){this.fetch();};this._customTriggers.push([B,A]);B.subscribe(A,this,true);};YAHOO.util.ImageLoader.group.prototype._onloadTasks=function(){if(this.timeoutLen&&typeof (this.timeoutLen)=="number"&&this.timeoutLen>0){this._timeout=setTimeout(this._getFetch!
 Timeout(),this.timeoutLen*1000);}if(this.foldConditional){this._foldCheck();}};YAHOO.util.ImageLoader.group.prototype._getFetchTimeout=function(){var A=this;return function(){A.fetch();};};YAHOO.util.ImageLoader.group.prototype.registerBgImage=function(B,A){this._imgObjs[B]=new YAHOO.util.ImageLoader.bgImgObj(B,A);return this._imgObjs[B];};YAHOO.util.ImageLoader.group.prototype.registerSrcImage=function(D,B,C,A){this._imgObjs[D]=new YAHOO.util.ImageLoader.srcImgObj(D,B,C,A);return this._imgObjs[D];};YAHOO.util.ImageLoader.group.prototype.registerPngBgImage=function(C,B,A){this._imgObjs[C]=new YAHOO.util.ImageLoader.pngBgImgObj(C,B,A);return this._imgObjs[C];};YAHOO.util.ImageLoader.group.prototype.fetch=function(){clearTimeout(this._timeout);for(var B=0,A=this._triggers.length;B<A;B++){YAHOO.util.Event.removeListener(this._triggers[B][0],this._triggers[B][1],this._triggers[B][2]);}for(var B=0,A=this._customTriggers.length;B<A;B++){this._customTriggers[B][0].unsubscribe(this!
 ._customTriggers[B][1],this);}this._fetchByClass();for(var C i!
 n this._
imgObjs){if(YAHOO.lang.hasOwnProperty(this._imgObjs,C)){this._imgObjs[C].fetch();}}};YAHOO.util.ImageLoader.group.prototype._foldCheck=function(){var C=(document.compatMode!="CSS1Compat")?document.body.scrollTop:document.documentElement.scrollTop;var D=YAHOO.util.Dom.getViewportHeight();var A=C+D;var E=(document.compatMode!="CSS1Compat")?document.body.scrollLeft:document.documentElement.scrollLeft;var G=YAHOO.util.Dom.getViewportWidth();var I=E+G;for(var B in this._imgObjs){if(YAHOO.lang.hasOwnProperty(this._imgObjs,B)){var J=YAHOO.util.Dom.getXY(this._imgObjs[B].domId);if(J[1]<A&&J[0]<I){this._imgObjs[B].fetch();}}}if(this.className){this._classImageEls=YAHOO.util.Dom.getElementsByClassName(this.className);for(var F=0,H=this._classImageEls.length;F<H;F++){var J=YAHOO.util.Dom.getXY(this._classImageEls[F]);if(J[1]<A&&J[0]<I){YAHOO.util.Dom.removeClass(this._classImageEls[F],this.className);}}}};YAHOO.util.ImageLoader.group.prototype._fetchByClass=function(){if(!this.classNam!
 e){return ;}if(this._classImageEls===null){this._classImageEls=YAHOO.util.Dom.getElementsByClassName(this.className);}YAHOO.util.Dom.removeClass(this._classImageEls,this.className);};YAHOO.util.ImageLoader.imgObj=function(B,A){this.domId=B;this.url=A;this.width=null;this.height=null;this.setVisible=false;this._fetched=false;};YAHOO.util.ImageLoader.imgObj.prototype.fetch=function(){if(this._fetched){return ;}var A=document.getElementById(this.domId);if(!A){return ;}this._applyUrl(A);if(this.setVisible){A.style.visibility="visible";}if(this.width){A.width=this.width;}if(this.height){A.height=this.height;}this._fetched=true;};YAHOO.util.ImageLoader.imgObj.prototype._applyUrl=function(A){};YAHOO.util.ImageLoader.bgImgObj=function(B,A){YAHOO.util.ImageLoader.bgImgObj.superclass.constructor.call(this,B,A);};YAHOO.lang.extend(YAHOO.util.ImageLoader.bgImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.bgImgObj.prototype._applyUrl=function(A){A.style.backgroundImage="url(!
 '"+this.url+"')";};YAHOO.util.ImageLoader.srcImgObj=function(D!
 ,B,C,A){
YAHOO.util.ImageLoader.srcImgObj.superclass.constructor.call(this,D,B);this.width=C;this.height=A;};YAHOO.lang.extend(YAHOO.util.ImageLoader.srcImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.srcImgObj.prototype._applyUrl=function(A){A.src=this.url;};YAHOO.util.ImageLoader.pngBgImgObj=function(C,B,A){YAHOO.util.ImageLoader.pngBgImgObj.superclass.constructor.call(this,C,B);this.props=A||{};};YAHOO.lang.extend(YAHOO.util.ImageLoader.pngBgImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.pngBgImgObj.prototype._applyUrl=function(B){if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6){var C=(YAHOO.lang.isUndefined(this.props.sizingMethod))?"scale":this.props.sizingMethod;var A=(YAHOO.lang.isUndefined(this.props.enabled))?"true":this.props.enabled;B.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+this.url+'", sizingMethod="'+C+'", enabled="'+A+'")';}else{B.style.backgroundImage="url('"+this.url+"')";}};YAHOO.register("imageloader",YAHOO.util.Imag!
 eLoader,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+if(typeof(YAHOO.util.ImageLoader)=="undefined"){YAHOO.util.ImageLoader={};}YAHOO.util.ImageLoader.group=function(A,B,C){this.name="unnamed";this._imgObjs={};this.timeoutLen=C;this._timeout=null;this._triggers=[];this._customTriggers=[];this.foldConditional=false;this.className=null;this._classImageEls=null;YAHOO.util.Event.addListener(window,"load",this._onloadTasks,this,true);this.addTrigger(A,B);};YAHOO.util.ImageLoader.group.prototype.addTrigger=function(B,C){if(!B||!C){return;}var A=function(){this.fetch();};this._triggers.push([B,C,A]);YAHOO.util.Event.addListener(B,C,A,this,true);};YAHOO.util.ImageLoader.group.prototype.addCustomTrigger=function(B){if(!B||!B instanceof YAHOO.util.CustomEvent){return;}var A=function(){this.fetch();};this._customTriggers.push([B,A]);B.subscribe(A,this,true);};YAHOO.util.ImageLoader.group.prototype._onloadTasks=function(){if(this.timeoutLen&&typeof(this.timeoutLen)=="number"&&this.timeoutLen>0){this._timeout=setTimeout(this._getFetchTime!
 out(),this.timeoutLen*1000);}if(this.foldConditional){this._foldCheck();}};YAHOO.util.ImageLoader.group.prototype._getFetchTimeout=function(){var A=this;return function(){A.fetch();};};YAHOO.util.ImageLoader.group.prototype.registerBgImage=function(B,A){this._imgObjs[B]=new YAHOO.util.ImageLoader.bgImgObj(B,A);return this._imgObjs[B];};YAHOO.util.ImageLoader.group.prototype.registerSrcImage=function(D,B,C,A){this._imgObjs[D]=new YAHOO.util.ImageLoader.srcImgObj(D,B,C,A);return this._imgObjs[D];};YAHOO.util.ImageLoader.group.prototype.registerPngBgImage=function(C,B,A){this._imgObjs[C]=new YAHOO.util.ImageLoader.pngBgImgObj(C,B,A);return this._imgObjs[C];};YAHOO.util.ImageLoader.group.prototype.fetch=function(){clearTimeout(this._timeout);for(var B=0,A=this._triggers.length;B<A;B++){YAHOO.util.Event.removeListener(this._triggers[B][0],this._triggers[B][1],this._triggers[B][2]);}for(var B=0,A=this._customTriggers.length;B<A;B++){this._customTriggers[B][0].unsubscribe(this._cu!
 stomTriggers[B][1],this);}this._fetchByClass();for(var C in th!
 is._imgO
bjs){if(YAHOO.lang.hasOwnProperty(this._imgObjs,C)){this._imgObjs[C].fetch();}}};YAHOO.util.ImageLoader.group.prototype._foldCheck=function(){var C=(document.compatMode!="CSS1Compat")?document.body.scrollTop:document.documentElement.scrollTop;var D=YAHOO.util.Dom.getViewportHeight();var A=C+D;var E=(document.compatMode!="CSS1Compat")?document.body.scrollLeft:document.documentElement.scrollLeft;var G=YAHOO.util.Dom.getViewportWidth();var I=E+G;for(var B in this._imgObjs){if(YAHOO.lang.hasOwnProperty(this._imgObjs,B)){var J=YAHOO.util.Dom.getXY(this._imgObjs[B].domId);if(J[1]<A&&J[0]<I){this._imgObjs[B].fetch();}}}if(this.className){this._classImageEls=YAHOO.util.Dom.getElementsByClassName(this.className);for(var F=0,H=this._classImageEls.length;F<H;F++){var J=YAHOO.util.Dom.getXY(this._classImageEls[F]);if(J[1]<A&&J[0]<I){YAHOO.util.Dom.removeClass(this._classImageEls[F],this.className);}}}};YAHOO.util.ImageLoader.group.prototype._fetchByClass=function(){if(!this.className){r!
 eturn;}if(this._classImageEls===null){this._classImageEls=YAHOO.util.Dom.getElementsByClassName(this.className);}YAHOO.util.Dom.removeClass(this._classImageEls,this.className);};YAHOO.util.ImageLoader.imgObj=function(B,A){this.domId=B;this.url=A;this.width=null;this.height=null;this.setVisible=false;this._fetched=false;};YAHOO.util.ImageLoader.imgObj.prototype.fetch=function(){if(this._fetched){return;}var A=document.getElementById(this.domId);if(!A){return;}this._applyUrl(A);if(this.setVisible){A.style.visibility="visible";}if(this.width){A.width=this.width;}if(this.height){A.height=this.height;}this._fetched=true;};YAHOO.util.ImageLoader.imgObj.prototype._applyUrl=function(A){};YAHOO.util.ImageLoader.bgImgObj=function(B,A){YAHOO.util.ImageLoader.bgImgObj.superclass.constructor.call(this,B,A);};YAHOO.lang.extend(YAHOO.util.ImageLoader.bgImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.bgImgObj.prototype._applyUrl=function(A){A.style.backgroundImage="url('"+this!
 .url+"')";};YAHOO.util.ImageLoader.srcImgObj=function(D,B,C,A)!
 {YAHOO.u
til.ImageLoader.srcImgObj.superclass.constructor.call(this,D,B);this.width=C;this.height=A;};YAHOO.lang.extend(YAHOO.util.ImageLoader.srcImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.srcImgObj.prototype._applyUrl=function(A){A.src=this.url;};YAHOO.util.ImageLoader.pngBgImgObj=function(C,B,A){YAHOO.util.ImageLoader.pngBgImgObj.superclass.constructor.call(this,C,B);this.props=A||{};};YAHOO.lang.extend(YAHOO.util.ImageLoader.pngBgImgObj,YAHOO.util.ImageLoader.imgObj);YAHOO.util.ImageLoader.pngBgImgObj.prototype._applyUrl=function(B){if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<=6){var C=(YAHOO.lang.isUndefined(this.props.sizingMethod))?"scale":this.props.sizingMethod;var A=(YAHOO.lang.isUndefined(this.props.enabled))?"true":this.props.enabled;B.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+this.url+'", sizingMethod="'+C+'", enabled="'+A+'")';}else{B.style.backgroundImage="url('"+this.url+"')";}};YAHOO.register("imageloader",YAHOO.util.ImageLoader!
 ,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/imageloader/imageloader.js
===================================================================
--- trunk/root/static/yui/imageloader/imageloader.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/imageloader/imageloader.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The image loader is a framework to dynamically load images
@@ -478,4 +478,4 @@
 		el.style.backgroundImage = "url('" + this.url + "')";
 	}
 };
-YAHOO.register("imageloader", YAHOO.util.ImageLoader, {version: "2.6.0", build: "1321"});
+YAHOO.register("imageloader", YAHOO.util.ImageLoader, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/json/README
===================================================================
--- trunk/root/static/yui/json/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/json/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,22 +0,0 @@
-JSON Utility - Release Notes
-
-2.6.0
-    * Security updates
-    * Architecture change to make lang.JSON object more durable
-    * stringify whitelist keys scrubbed for duplicates
-    * Object keys sorted in stringify
-
-2.5.1
-    * Updated validation regex to address poor unicode escape treatment in FF
-    * Updated special characters RegExp
-    * Changed stringification to account for odd responses to typeof
-
-2.5.0
-    * Restructured for customization and readability
-    * Extracted isValid method to test a JSON string
-    * Extracted dateToString method to allow overriding with custom serialization format
-    * Added stringToDate method to reconstitute Date instances from default JSON UTC date strings.  Use this in a filter method passed to lang.JSON.parse
-    * fixed walk method so filters are properly applied
-
-2.4.0
-    * Initial release

Modified: trunk/root/static/yui/json/json-debug.js
===================================================================
--- trunk/root/static/yui/json/json-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/json/json-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides methods to parse JSON strings and convert objects to JSON strings.
@@ -393,4 +393,4 @@
 };
 
 })();
-YAHOO.register("json", YAHOO.lang.JSON, {version: "2.6.0", build: "1321"});
+YAHOO.register("json", YAHOO.lang.JSON, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/json/json-min.js
===================================================================
--- trunk/root/static/yui/json/json-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/json/json-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.lang.JSON=(function(){var l=YAHOO.lang,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_INVALID=/^[\],:{}\s]*$/,_SPECIAL_CHARS=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];if(value&&typeof value==="object"){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);if(v===undefined){delete value[k];}else{value[k]=v;}}}}return reviver.call(o,key,value);};return typeof reviver==="function"?walk({"":data},""):data;}function _char(c){if(!_CHARS[c]){_CHARS[c]="\\u"+("0000"+(+(c.charCodeAt(0))).toString(1!
 6)).slice(-4);}return _CHARS[c];}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char);}function _isValid(str){return l.isString(str)&&_INVALID.test(str.replace(_ESCAPES,"@").replace(_VALUES,"]").replace(_BRACKETS,""));}function _string(s){return'"'+s.replace(_SPECIAL_CHARS,_char)+'"';}function _stringify(h,key,d,w,pstack){var o=typeof w==="function"?w.call(h,key,h[key]):h[key],i,len,j,k,v,isArray,a;if(o instanceof Date){o=l.JSON.dateToString(o);}else{if(o instanceof String||o instanceof Boolean||o instanceof Number){o=o.valueOf();}}switch(typeof o){case"string":return _string(o);case"number":return isFinite(o)?String(o):"null";case"boolean":return String(o);case"object":if(o===null){return"null";}for(i=pstack.length-1;i>=0;--i){if(pstack[i]===o){return"null";}}pstack[pstack.length]=o;a=[];isArray=l.isArray(o);if(d>0){if(isArray){for(i=o.length-1;i>=0;--i){a[i]=_stringify(o,i,d-1,w,pstack)||"null";}}else{j=0;if(l.isArray(w)){for(i=0,len=w.length;i<len;++i){k=w[i]!
 ;v=_stringify(o,k,d-1,w,pstack);if(v){a[j++]=_string(k)+":"+v;!
 }}}else{
for(k in o){if(typeof k==="string"&&l.hasOwnProperty(o,k)){v=_stringify(o,k,d-1,w,pstack);if(v){a[j++]=_string(k)+":"+v;}}}}a.sort();}}pstack.pop();return isArray?"["+a.join(",")+"]":"{"+a.join(",")+"}";}return undefined;}return{isValid:function(s){return _isValid(_prepare(s));},parse:function(s,reviver){s=_prepare(s);if(_isValid(s)){return _revive(eval("("+s+")"),reviver);}throw new SyntaxError("parseJSON");},stringify:function(o,w,d){if(o!==undefined){if(l.isArray(w)){w=(function(a){var uniq=[],map={},v,i,j,len;for(i=0,j=0,len=a.length;i<len;++i){v=a[i];if(typeof v==="string"&&map[v]===undefined){uniq[(map[v]=j++)]=v;}}return uniq;})(w);}d=d>=0?d:1/0;return _stringify({"":o},"",d,w,[]);}return undefined;},dateToString:function(d){function _zeroPad(v){return v<10?"0"+v:v;}return d.getUTCFullYear()+"-"+_zeroPad(d.getUTCMonth()+1)+"-"+_zeroPad(d.getUTCDate())+"T"+_zeroPad(d.getUTCHours())+":"+_zeroPad(d.getUTCMinutes())+":"+_zeroPad(d.getUTCSeconds())+"Z";},stringToDate:funct!
 ion(str){if(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/.test(str)){var d=new Date();d.setUTCFullYear(RegExp.$1,(RegExp.$2|0)-1,RegExp.$3);d.setUTCHours(RegExp.$4,RegExp.$5,RegExp.$6);return d;}return str;}};})();YAHOO.register("json",YAHOO.lang.JSON,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.lang.JSON=(function(){var l=YAHOO.lang,_UNICODE_EXCEPTIONS=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_ESCAPES=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,_VALUES=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,_BRACKETS=/(?:^|:|,)(?:\s*\[)+/g,_INVALID=/^[\],:{}\s]*$/,_SPECIAL_CHARS=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,_CHARS={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};function _revive(data,reviver){var walk=function(o,key){var k,v,value=o[key];if(value&&typeof value==="object"){for(k in value){if(l.hasOwnProperty(value,k)){v=walk(value,k);if(v===undefined){delete value[k];}else{value[k]=v;}}}}return reviver.call(o,key,value);};return typeof reviver==="function"?walk({"":data},""):data;}function _char(c){if(!_CHARS[c]){_CHARS[c]="\\u"+("0000"+(+(c.charCodeAt(0))).toString(1!
 6)).slice(-4);}return _CHARS[c];}function _prepare(s){return s.replace(_UNICODE_EXCEPTIONS,_char);}function _isValid(str){return l.isString(str)&&_INVALID.test(str.replace(_ESCAPES,"@").replace(_VALUES,"]").replace(_BRACKETS,""));}function _string(s){return'"'+s.replace(_SPECIAL_CHARS,_char)+'"';}function _stringify(h,key,d,w,pstack){var o=typeof w==="function"?w.call(h,key,h[key]):h[key],i,len,j,k,v,isArray,a;if(o instanceof Date){o=l.JSON.dateToString(o);}else{if(o instanceof String||o instanceof Boolean||o instanceof Number){o=o.valueOf();}}switch(typeof o){case"string":return _string(o);case"number":return isFinite(o)?String(o):"null";case"boolean":return String(o);case"object":if(o===null){return"null";}for(i=pstack.length-1;i>=0;--i){if(pstack[i]===o){return"null";}}pstack[pstack.length]=o;a=[];isArray=l.isArray(o);if(d>0){if(isArray){for(i=o.length-1;i>=0;--i){a[i]=_stringify(o,i,d-1,w,pstack)||"null";}}else{j=0;if(l.isArray(w)){for(i=0,len=w.length;i<len;++i){k=w[i]!
 ;v=_stringify(o,k,d-1,w,pstack);if(v){a[j++]=_string(k)+":"+v;!
 }}}else{
for(k in o){if(typeof k==="string"&&l.hasOwnProperty(o,k)){v=_stringify(o,k,d-1,w,pstack);if(v){a[j++]=_string(k)+":"+v;}}}}a.sort();}}pstack.pop();return isArray?"["+a.join(",")+"]":"{"+a.join(",")+"}";}return undefined;}return{isValid:function(s){return _isValid(_prepare(s));},parse:function(s,reviver){s=_prepare(s);if(_isValid(s)){return _revive(eval("("+s+")"),reviver);}throw new SyntaxError("parseJSON");},stringify:function(o,w,d){if(o!==undefined){if(l.isArray(w)){w=(function(a){var uniq=[],map={},v,i,j,len;for(i=0,j=0,len=a.length;i<len;++i){v=a[i];if(typeof v==="string"&&map[v]===undefined){uniq[(map[v]=j++)]=v;}}return uniq;})(w);}d=d>=0?d:1/0;return _stringify({"":o},"",d,w,[]);}return undefined;},dateToString:function(d){function _zeroPad(v){return v<10?"0"+v:v;}return d.getUTCFullYear()+"-"+_zeroPad(d.getUTCMonth()+1)+"-"+_zeroPad(d.getUTCDate())+"T"+_zeroPad(d.getUTCHours())+":"+_zeroPad(d.getUTCMinutes())+":"+_zeroPad(d.getUTCSeconds())+"Z";},stringToDate:funct!
 ion(str){if(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/.test(str)){var d=new Date();d.setUTCFullYear(RegExp.$1,(RegExp.$2|0)-1,RegExp.$3);d.setUTCHours(RegExp.$4,RegExp.$5,RegExp.$6);return d;}return str;}};})();YAHOO.register("json",YAHOO.lang.JSON,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/json/json.js
===================================================================
--- trunk/root/static/yui/json/json.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/json/json.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * Provides methods to parse JSON strings and convert objects to JSON strings.
@@ -393,4 +393,4 @@
 };
 
 })();
-YAHOO.register("json", YAHOO.lang.JSON, {version: "2.6.0", build: "1321"});
+YAHOO.register("json", YAHOO.lang.JSON, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/layout/README
===================================================================
--- trunk/root/static/yui/layout/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,28 +0,0 @@
-**** version 2.6.0 ****
-
-    Enhancements:
-        * Added support for the new useShim config on Resize objects
-        * Added support (via Caridy) for ajax content retrieval
-        * Promoted to GA Status - beta flag removed from files.
-
-    Bug Fixes:
-        * 1972411 - [SF 1961290 ] Conflict w/prototype.js 1.6.2.0
-        * 2156112 - [SF 2059693 ] collapse property doesn't work properly without header
-        * 2166981 - [SF 1997164 ] Wrong unit size after expand if animation is false
-        * 1828802 - Remove over use of overflow hidden
-	    * 1837810 - [SF 1925551] Blank space after expanding LayoutUnit
-        * 1837812 - [SF 1927265 ] Layout needs destroy clean-up method
-	    * 1939616 - [SF 1964055 ] mouseup during resize of layout unit on top of an iframe
-
-**** version 2.5.1 ***
-    Bug Fixes:
-        * 1756637 - handling of scrollbar on panel resize is inconsistent
-        * 1767234 - [SF 1900012] LayoutUnit loses scrolled state on resize
-        * 1770567 - [SF 1901621] Left Unit Disappears on Expand
-        * 1778721 - [SF 1904062] Layout Manager documentation error
-        * 1781653 - Don't assume element with id "doc" is the body
-        * Removed the requirement for the collapse config option in order to programatically collapse a unit.   
-
-**** version 2.5.0 ***
-
-Initial Release

Modified: trunk/root/static/yui/layout/assets/layout-core.css
===================================================================
--- trunk/root/static/yui/layout/assets/layout-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/assets/layout-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-layout-loading {
     visibility: hidden;

Modified: trunk/root/static/yui/layout/assets/skins/sam/layout-skin.css
===================================================================
--- trunk/root/static/yui/layout/assets/skins/sam/layout-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/assets/skins/sam/layout-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Remove the dotted border on the resize proxy */
 .yui-skin-sam .yui-layout .yui-resize-proxy {

Modified: trunk/root/static/yui/layout/assets/skins/sam/layout.css
===================================================================
--- trunk/root/static/yui/layout/assets/skins/sam/layout.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/assets/skins/sam/layout.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-layout-loading{visibility:hidden;}body.yui-layout{overflow:hidden;position:relative;padding:0;margin:0;}.yui-layout-doc{position:relative;overflow:hidden;padding:0;margin:0;}.yui-layout-unit{height:50px;width:50px;padding:0;margin:0;float:none;z-index:0;}.yui-layout-unit-top{position:absolute;top:0;left:0;width:100%;}.yui-layout-unit-left{position:absolute;top:0;left:0;}.yui-layout-unit-right{position:absolute;top:0;right:0;}.yui-layout-unit-bottom{position:absolute;bottom:0;left:0;width:100%;}.yui-layout-unit-center{position:absolute;top:0;left:0;width:100%;}.yui-layout div.yui-layout-hd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout div.yui-layout-bd{position:absolute;top:0;left:0;zoom:1;width:100%;}.yui-layout .yui-layout-noscroll div.yui-layout-bd{overflow:hidden;}.yui-layout .yui-layout-scroll div.yui-layout-bd{overflow:auto;}.yui-layout div.yui-layout-ft{position:absolute;bottom:0;left:0;width:100%;zoom:1;}.yui-layout .yui-layout-unit div.yui-layou!
 t-hd h2{text-align:left;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .close{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0;}.yui-layout .yui-layout-unit div.yui-layout-hd .collapse-close{right:25px;}.yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#c0c0c0;display:none;}.yui-layout .yui-layout-clip .collapse{cursor:pointer;height:13px;position:absolute;right:2px;top:2px;width:17px;font-size:0px;}.yui-layout .yui-layout-wrap{height:100%;width:100%;position:absolute;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy{border:none;font-size:0;margin:0;padding:0;}.yui-skin-sam .yui-layout .yui-resize-resizing .yui-resize-handle{visibility:hidden;}.yui-skin-sam .yui-layout .yui-resize-proxy div{position:absolute;border:1px solid #808080;background-color:#EDF5FF;}.yui-skin!
 -sam .yui-layout .yui-resize .yui-resize-handle-active{}.yui-s!
 kin-sam 
.yui-layout .yui-resize-proxy .yui-layout-handle-l{width:5px;height:100%;top:0;left:0;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-r{width:5px;top:0;right:0;height:100%;position:absolute;zoom:1;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-b{width:100%;bottom:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-resize-proxy .yui-layout-handle-t{width:100%;top:0;left:0;height:5px;}.yui-skin-sam .yui-layout .yui-layout-unit-left div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -160px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-left .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -140px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-right div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -200px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-right .collapse{background:tran!
 sparent url(layout_sprite.png) no-repeat -20px -120px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-top div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -220px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-top .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -240px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit-bottom div.yui-layout-hd .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -260px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip-bottom .collapse{background:transparent url(layout_sprite.png) no-repeat -20px -180px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd .close{background:transparent url(layout_sprite.png) no-repeat -20px -100px;border:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-hd{background:url(../../../../assets/skins/sam/sprite.png!
 ) repeat-x 0 -1400px;border:1px solid #808080;}.yui-skin-sam .!
 yui-layo
ut{background-color:#EDF5FF;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-hd h2{font-weight:bold;color:#fff;padding:3px;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd{border:1px solid #808080;border-bottom:none;border-top:none;*border-bottom-width:0;*border-top-width:0;background-color:#f2f2f2;text-align:left;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-noft{border-bottom:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-unit div.yui-layout-bd-nohd{border-top:1px solid #808080;}.yui-skin-sam .yui-layout .yui-layout-clip{position:absolute;height:20px;background-color:#EDF5FF;display:none;border:1px solid #808080;}.yui-skin-sam .yui-layout div.yui-layout-ft{border:1px solid #808080;border-top:none;*border-top-width:0;background-color:#f2f2f2;}.yui-skin-sam .yui-layout-unit .yui-resize-handle{background-color:transparent;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r{right:0;top:0;background-image:none;}.yui-skin-sam .yu!
 i-layout-unit .yui-resize-handle-l{left:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-b{right:0;bottom:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t{right:0;top:0;background-image:none;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-r .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-l .yui-layout-resize-knob{position:absolute;height:16px;width:6px;top:45%;left:0px;background:transparent url(layout_sprite.png) no-repeat 0 -5px;}.yui-skin-sam .yui-layout-unit .yui-resize-handle-t .yui-layout-resize-knob,.yui-skin-sam .yui-layout-unit .yui-resize-handle-b .yui-layout-resize-knob{position:absolute;height:6px;width:16px;left:45%;background:transparent url(layout_sprite.png) no-repeat -20px 0;}

Modified: trunk/root/static/yui/layout/layout-debug.js
===================================================================
--- trunk/root/static/yui/layout/layout-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/layout-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,15 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * @description <p>Provides a fixed layout containing, top, bottom, left, right and center layout units. It can be applied to either the body or an element.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event
  * @module layout
- * @beta
  */
 (function() {
     var Dom = YAHOO.util.Dom,
@@ -87,7 +86,7 @@
         * @description An object literal that contains a list of units in the layout
         * @type Object
         */
-        _rendered: null,
+        _units: null,
         /**
         * @private
         * @property _rendered
@@ -659,7 +658,7 @@
     */
     /**
     * @event beforeResize
-    * @description Firef at the beginning of the resize method. If you return false, the resize is cancelled.
+    * @description Fires at the beginning of the resize method. If you return false, the resize is cancelled.
     * @type YAHOO.util.CustomEvent
     */
     /**
@@ -675,7 +674,6 @@
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, layout
  * @optional animation, dragdrop, selector
- * @beta
  */
 (function() {
     var Dom = YAHOO.util.Dom,
@@ -943,6 +941,9 @@
                 var b = this._getBorderSizes(el);
                 w = (w - (b[1] + b[3]));
                 w = this._fixQuirks(el, w, 'w');
+                if (w < 0) {
+                    w = 0;
+                }
                 Dom.setStyle(el, 'width', w + 'px');
             }
             return w;
@@ -960,6 +961,9 @@
                 var b = this._getBorderSizes(el);
                 h = (h - (b[0] + b[2]));
                 h = this._fixQuirks(el, h, 'h');
+                if (h < 0) {
+                    h = 0;
+                }
                 Dom.setStyle(el, 'height', h + 'px');
             }
             return h;
@@ -1573,6 +1577,9 @@
                 validator: Lang.isNumber,
                 method: function(h) {
                     if (!this._collapsing) {
+                        if (h < 0) {
+                            h = 0;
+                        }
                         this.setStyle('height', h + 'px');
                     }
                 }
@@ -1588,6 +1595,9 @@
                 validator: Lang.isNumber,
                 method: function(w) {
                     if (!this._collapsing) {
+                        if (w < 0) {
+                            w = 0;
+                        }
                         this.setStyle('width', w + 'px');
                     }
                 }
@@ -2029,6 +2039,7 @@
                                     this.get('parent').fireEvent('startResize');
                                     var c = this.get('parent').getUnitByPosition('center');
                                     this._lastCenterScroll = c.get('scroll');
+                                    c.addClass(this._resize.CSS_RESIZING);
                                     c.set('scroll', false);
                                 }
                                 this.fireEvent('startResize');
@@ -2042,6 +2053,7 @@
                                 if (this.get('parent')) {
                                     var c = this.get('parent').getUnitByPosition('center');
                                     c.set('scroll', this._lastCenterScroll);
+                                    c.removeClass(this._resize.CSS_RESIZING);
                                 }
                                 this.resize();
                                 this.fireEvent('endResize');
@@ -2195,7 +2207,7 @@
     */
     /**
     * @event beforeResize
-    * @description Firef at the beginning of the resize method. If you return false, the resize is cancelled.
+    * @description Fired at the beginning of the resize method. If you return false, the resize is cancelled.
     * @type YAHOO.util.CustomEvent
     */
     /**
@@ -2242,4 +2254,4 @@
 
     YAHOO.widget.LayoutUnit = LayoutUnit;
 })();
-YAHOO.register("layout", YAHOO.widget.Layout, {version: "2.6.0", build: "1321"});
+YAHOO.register("layout", YAHOO.widget.Layout, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/layout/layout-min.js
===================================================================
--- trunk/root/static/yui/layout/layout-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/layout-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F,E){if(D.isObject(F)&&!F.tagName){E=F;F=null;}if(D.isString(F)){if(C.get(F)){F=C.get(F);}}if(!F){F=document.body;}var G={element:F,attributes:E||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getLayoutById=function(E){if(B._instances[E]){return B._instances[E];}return false;};YAHOO.extend(B,YAHOO.util.Element,{browser:function(){var E=YAHOO.env.ua;E.standardsMode=false;E.secure=false;return E;}(),_rendered:null,_rendered:null,_zIndex:null,_sizes:null,_setBodySize:function(G){var F=0,E=0;G=((G===false)?false:true);if(this._isBody){F=C.getClientHeight();E=C.getClientWidth();}else{F=parseInt(this.getStyle("height"),10);E=parseInt(this.getStyle("width"),10);if(isNaN(E)){E=this.get("element").clientWidth;}if(isNaN(F)){F=this.get("element").clientHeight;}}if(this.get("minWidth")){if(E<this.get("minWidth")){E=this.get("minWidth");}}if(this.get("minHeight")){if(F<thi!
 s.get("minHeight")){F=this.get("minHeight");}}if(G){C.setStyle(this._doc,"height",F+"px");C.setStyle(this._doc,"width",E+"px");}this._sizes.doc={h:F,w:E};this._setSides(G);},_setSides:function(J){var H=((this._units.top)?this._units.top.get("height"):0),G=((this._units.bottom)?this._units.bottom.get("height"):0),I=this._sizes.doc.h,E=this._sizes.doc.w;J=((J===false)?false:true);this._sizes.top={h:H,w:((this._units.top)?E:0),t:0};this._sizes.bottom={h:G,w:((this._units.bottom)?E:0)};var F=(I-(H+G));this._sizes.left={h:F,w:((this._units.left)?this._units.left.get("width"):0)};this._sizes.right={h:F,w:((this._units.right)?this._units.right.get("width"):0),l:((this._units.right)?(E-this._units.right.get("width")):0),t:((this._units.top)?this._sizes.top.h:0)};if(this._units.right&&J){this._units.right.set("top",this._sizes.right.t);if(!this._units.right._collapsing){this._units.right.set("left",this._sizes.right.l);}this._units.right.set("height",this._sizes.right.h,true);}if(th!
 is._units.left){this._sizes.left.l=0;if(this._units.top){this.!
 _sizes.l
eft.t=this._sizes.top.h;}else{this._sizes.left.t=0;}if(J){this._units.left.set("top",this._sizes.left.t);this._units.left.set("height",this._sizes.left.h,true);this._units.left.set("left",0);}}if(this._units.bottom){this._sizes.bottom.t=this._sizes.top.h+this._sizes.left.h;if(J){this._units.bottom.set("top",this._sizes.bottom.t);this._units.bottom.set("width",this._sizes.bottom.w,true);}}if(this._units.top){if(J){this._units.top.set("width",this._sizes.top.w,true);}}this._setCenter(J);},_setCenter:function(G){G=((G===false)?false:true);var F=this._sizes.left.h;var E=(this._sizes.doc.w-(this._sizes.left.w+this._sizes.right.w));if(G){this._units.center.set("height",F,true);this._units.center.set("width",E,true);this._units.center.set("top",this._sizes.top.h);this._units.center.set("left",this._sizes.left.w);}this._sizes.center={h:F,w:E,t:this._sizes.top.h,l:this._sizes.left.w};},getSizes:function(){return this._sizes;},getUnitById:function(E){return YAHOO.widget.LayoutUnit.get!
 LayoutUnitById(E);},getUnitByPosition:function(E){if(E){E=E.toLowerCase();if(this._units[E]){return this._units[E];}return false;}return false;},removeUnit:function(E){delete this._units[E.get("position")];this.resize();},addUnit:function(G){if(!G.position){return false;}if(this._units[G.position]){return false;}var H=null,J=null;if(G.id){if(C.get(G.id)){H=C.get(G.id);delete G.id;}}if(G.element){H=G.element;}if(!J){J=document.createElement("div");var L=C.generateId();J.id=L;}if(!H){H=document.createElement("div");}C.addClass(H,"yui-layout-wrap");if(this.browser.ie&&!this.browser.standardsMode){J.style.zoom=1;H.style.zoom=1;}if(J.firstChild){J.insertBefore(H,J.firstChild);}else{J.appendChild(H);}this._doc.appendChild(J);var I=false,F=false;if(G.height){I=parseInt(G.height,10);}if(G.width){F=parseInt(G.width,10);}var E={};YAHOO.lang.augmentObject(E,G);E.parent=this;E.wrap=H;E.height=I;E.width=F;var K=new YAHOO.widget.LayoutUnit(J,E);K.on("heightChange",this.resize,this,true);!
 K.on("widthChange",this.resize,this,true);K.on("gutterChange",!
 this.res
ize,this,true);this._units[G.position]=K;if(this._rendered){this.resize();}return K;},_createUnits:function(){var E=this.get("units");for(var F in E){if(D.hasOwnProperty(E,F)){this.addUnit(E[F]);}}},resize:function(F){F=((F===false)?false:true);if(F){var E=this.fireEvent("beforeResize");if(E===false){F=false;}if(this.browser.ie){if(this._isBody){C.removeClass(document.documentElement,"yui-layout");C.addClass(document.documentElement,"yui-layout");}else{this.removeClass("yui-layout");this.addClass("yui-layout");}}}this._setBodySize(F);if(F){this.fireEvent("resize",{target:this,sizes:this._sizes});}return this;},_setupBodyElements:function(){this._doc=C.get("layout-doc");if(!this._doc){this._doc=document.createElement("div");this._doc.id="layout-doc";if(document.body.firstChild){document.body.insertBefore(this._doc,document.body.firstChild);}else{document.body.appendChild(this._doc);}}this._createUnits();this._setBodySize();A.on(window,"resize",this.resize,this,true);C.addClas!
 s(this._doc,"yui-layout-doc");},_setupElements:function(){this._doc=this.getElementsByClassName("yui-layout-doc")[0];if(!this._doc){this._doc=document.createElement("div");this.get("element").appendChild(this._doc);}this._createUnits();this._setBodySize();C.addClass(this._doc,"yui-layout-doc");},_isBody:null,_doc:null,init:function(F,E){this._zIndex=0;B.superclass.init.call(this,F,E);if(this.get("parent")){this._zIndex=this.get("parent")._zIndex+10;}this._sizes={};this._units={};var G=F;if(!D.isString(G)){G=C.generateId(G);}B._instances[G]=this;},render:function(){this._stamp();var E=this.get("element");if(E&&E.tagName&&(E.tagName.toLowerCase()=="body")){this._isBody=true;C.addClass(document.body,"yui-layout");if(C.hasClass(document.body,"yui-skin-sam")){C.addClass(document.documentElement,"yui-skin-sam");C.removeClass(document.body,"yui-skin-sam");}this._setupBodyElements();}else{this._isBody=false;this.addClass("yui-layout");
-this._setupElements();}this.resize();this._rendered=true;this.fireEvent("render");return this;},_stamp:function(){if(document.compatMode=="CSS1Compat"){this.browser.standardsMode=true;}if(window.location.href.toLowerCase().indexOf("https")===0){C.addClass(document.documentElement,"secure");this.browser.secure=true;}},initAttributes:function(E){B.superclass.initAttributes.call(this,E);this.setAttributeConfig("units",{writeOnce:true,validator:YAHOO.lang.isArray,value:E.units||[]});this.setAttributeConfig("minHeight",{value:E.minHeight||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minWidth",{value:E.minWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("height",{value:E.height||false,validator:YAHOO.lang.isNumber,method:function(F){this.setStyle("height",F+"px");}});this.setAttributeConfig("width",{value:E.width||false,validator:YAHOO.lang.isNumber,method:function(F){this.setStyle("width",F+"px");}});this.setAttributeConfig("parent",{writeOn!
 ce:true,value:E.parent||false,method:function(F){if(F){F.on("resize",this.resize,this,true);}}});},destroy:function(){var G=this.get("parent");if(G){G.removeListener("resize",this.resize,this,true);}A.removeListener(window,"resize",this.resize,this,true);this.unsubscribeAll();for(var E in this._units){if(D.hasOwnProperty(this._units,E)){if(this._units[E]){this._units[E].destroy(true);}}}A.purgeElement(this.get("element"));this.get("parentNode").removeChild(this.get("element"));delete YAHOO.widget.Layout._instances[this.get("id")];for(var F in this){if(D.hasOwnProperty(this,F)){this[F]=null;delete this[F];}}if(G){G.resize();}},toString:function(){if(this.get){return"Layout #"+this.get("id");}return"Layout";}});YAHOO.widget.Layout=B;})();(function(){var D=YAHOO.util.Dom,C=YAHOO.util.Selector,A=YAHOO.util.Event,E=YAHOO.lang;var B=function(G,F){var H={element:G,attributes:F||{}};B.superclass.constructor.call(this,H.element,H.attributes);};B._instances={};B.getLayoutUnitById=fun!
 ction(F){if(B._instances[F]){return B._instances[F];}return fa!
 lse;};YA
HOO.extend(B,YAHOO.util.Element,{STR_CLOSE:"Click to close this pane.",STR_COLLAPSE:"Click to collapse this pane.",STR_EXPAND:"Click to expand this pane.",LOADING_CLASSNAME:"loading",browser:null,_sizes:null,_anim:null,_resize:null,_clip:null,_gutter:null,header:null,body:null,footer:null,_collapsed:null,_collapsing:null,_lastWidth:null,_lastHeight:null,_lastTop:null,_lastLeft:null,_lastScroll:null,_lastCenterScroll:null,_lastScrollTop:null,resize:function(F){var G=this.fireEvent("beforeResize");if(G===false){return this;}if(!this._collapsing||(F===true)){var N=this.get("scroll");this.set("scroll",false);var K=this._getBoxSize(this.header),J=this._getBoxSize(this.footer),L=[this.get("height"),this.get("width")];var H=(L[0]-K[0]-J[0])-(this._gutter.top+this._gutter.bottom),M=L[1]-(this._gutter.left+this._gutter.right);var O=(H+(K[0]+J[0])),I=M;if(this._collapsed&&!this._collapsing){this._setHeight(this._clip,O);this._setWidth(this._clip,I);D.setStyle(this._clip,"top",this.get!
 ("top")+this._gutter.top+"px");D.setStyle(this._clip,"left",this.get("left")+this._gutter.left+"px");}else{if(!this._collapsed||(this._collapsed&&this._collapsing)){O=this._setHeight(this.get("wrap"),O);I=this._setWidth(this.get("wrap"),I);this._sizes.wrap.h=O;this._sizes.wrap.w=I;D.setStyle(this.get("wrap"),"top",this._gutter.top+"px");D.setStyle(this.get("wrap"),"left",this._gutter.left+"px");this._sizes.header.w=this._setWidth(this.header,I);this._sizes.header.h=K[0];this._sizes.footer.w=this._setWidth(this.footer,I);this._sizes.footer.h=J[0];D.setStyle(this.footer,"bottom","0px");this._sizes.body.h=this._setHeight(this.body,(O-(K[0]+J[0])));this._sizes.body.w=this._setWidth(this.body,I);D.setStyle(this.body,"top",K[0]+"px");this.set("scroll",N);this.fireEvent("resize");}}}return this;},_setWidth:function(H,G){if(H){var F=this._getBorderSizes(H);G=(G-(F[1]+F[3]));G=this._fixQuirks(H,G,"w");D.setStyle(H,"width",G+"px");}return G;},_setHeight:function(H,G){if(H){var F=this!
 ._getBorderSizes(H);G=(G-(F[0]+F[2]));G=this._fixQuirks(H,G,"h!
 ");D.set
Style(H,"height",G+"px");}return G;},_fixQuirks:function(I,L,G){var K=0,H=2;if(G=="w"){K=1;H=3;}if(this.browser.ie&&!this.browser.standardsMode){var F=this._getBorderSizes(I),J=this._getBorderSizes(I.parentNode);if((F[K]===0)&&(F[H]===0)){if((J[K]!==0)&&(J[H]!==0)){L=(L-(J[K]+J[H]));}}else{if((J[K]===0)&&(J[H]===0)){L=(L+(F[K]+F[H]));}}}return L;},_getBoxSize:function(H){var G=[0,0];if(H){if(this.browser.ie&&!this.browser.standardsMode){H.style.zoom=1;}var F=this._getBorderSizes(H);G[0]=H.clientHeight+(F[0]+F[2]);G[1]=H.clientWidth+(F[1]+F[3]);}return G;},_getBorderSizes:function(H){var G=[];H=H||this.get("element");if(this.browser.ie&&!this.browser.standardsMode){H.style.zoom=1;}G[0]=parseInt(D.getStyle(H,"borderTopWidth"),10);G[1]=parseInt(D.getStyle(H,"borderRightWidth"),10);G[2]=parseInt(D.getStyle(H,"borderBottomWidth"),10);G[3]=parseInt(D.getStyle(H,"borderLeftWidth"),10);for(var F=0;F<G.length;F++){if(isNaN(G[F])){G[F]=0;}}return G;},_createClip:function(){if(!this._c!
 lip){this._clip=document.createElement("div");this._clip.className="yui-layout-clip yui-layout-clip-"+this.get("position");this._clip.innerHTML='<div class="collapse"></div>';var F=this._clip.firstChild;F.title=this.STR_EXPAND;A.on(F,"click",this.expand,this,true);this.get("element").parentNode.appendChild(this._clip);}},_toggleClip:function(){if(!this._collapsed){var J=this._getBoxSize(this.header),K=this._getBoxSize(this.footer),I=[this.get("height"),this.get("width")];var H=(I[0]-J[0]-K[0])-(this._gutter.top+this._gutter.bottom),F=I[1]-(this._gutter.left+this._gutter.right),G=(H+(J[0]+K[0]));switch(this.get("position")){case"top":case"bottom":this._setWidth(this._clip,F);this._setHeight(this._clip,this.get("collapseSize"));D.setStyle(this._clip,"left",(this._lastLeft+this._gutter.left)+"px");if(this.get("position")=="bottom"){D.setStyle(this._clip,"top",((this._lastTop+this._lastHeight)-(this.get("collapseSize")-this._gutter.top))+"px");
+(function(){var C=YAHOO.util.Dom,A=YAHOO.util.Event,D=YAHOO.lang;var B=function(F,E){if(D.isObject(F)&&!F.tagName){E=F;F=null;}if(D.isString(F)){if(C.get(F)){F=C.get(F);}}if(!F){F=document.body;}var G={element:F,attributes:E||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getLayoutById=function(E){if(B._instances[E]){return B._instances[E];}return false;};YAHOO.extend(B,YAHOO.util.Element,{browser:function(){var E=YAHOO.env.ua;E.standardsMode=false;E.secure=false;return E;}(),_units:null,_rendered:null,_zIndex:null,_sizes:null,_setBodySize:function(G){var F=0,E=0;G=((G===false)?false:true);if(this._isBody){F=C.getClientHeight();E=C.getClientWidth();}else{F=parseInt(this.getStyle("height"),10);E=parseInt(this.getStyle("width"),10);if(isNaN(E)){E=this.get("element").clientWidth;}if(isNaN(F)){F=this.get("element").clientHeight;}}if(this.get("minWidth")){if(E<this.get("minWidth")){E=this.get("minWidth");}}if(this.get("minHeight")){if(F<this.g!
 et("minHeight")){F=this.get("minHeight");}}if(G){C.setStyle(this._doc,"height",F+"px");C.setStyle(this._doc,"width",E+"px");}this._sizes.doc={h:F,w:E};this._setSides(G);},_setSides:function(J){var H=((this._units.top)?this._units.top.get("height"):0),G=((this._units.bottom)?this._units.bottom.get("height"):0),I=this._sizes.doc.h,E=this._sizes.doc.w;J=((J===false)?false:true);this._sizes.top={h:H,w:((this._units.top)?E:0),t:0};this._sizes.bottom={h:G,w:((this._units.bottom)?E:0)};var F=(I-(H+G));this._sizes.left={h:F,w:((this._units.left)?this._units.left.get("width"):0)};this._sizes.right={h:F,w:((this._units.right)?this._units.right.get("width"):0),l:((this._units.right)?(E-this._units.right.get("width")):0),t:((this._units.top)?this._sizes.top.h:0)};if(this._units.right&&J){this._units.right.set("top",this._sizes.right.t);if(!this._units.right._collapsing){this._units.right.set("left",this._sizes.right.l);}this._units.right.set("height",this._sizes.right.h,true);}if(this.!
 _units.left){this._sizes.left.l=0;if(this._units.top){this._si!
 zes.left
.t=this._sizes.top.h;}else{this._sizes.left.t=0;}if(J){this._units.left.set("top",this._sizes.left.t);this._units.left.set("height",this._sizes.left.h,true);this._units.left.set("left",0);}}if(this._units.bottom){this._sizes.bottom.t=this._sizes.top.h+this._sizes.left.h;if(J){this._units.bottom.set("top",this._sizes.bottom.t);this._units.bottom.set("width",this._sizes.bottom.w,true);}}if(this._units.top){if(J){this._units.top.set("width",this._sizes.top.w,true);}}this._setCenter(J);},_setCenter:function(G){G=((G===false)?false:true);var F=this._sizes.left.h;var E=(this._sizes.doc.w-(this._sizes.left.w+this._sizes.right.w));if(G){this._units.center.set("height",F,true);this._units.center.set("width",E,true);this._units.center.set("top",this._sizes.top.h);this._units.center.set("left",this._sizes.left.w);}this._sizes.center={h:F,w:E,t:this._sizes.top.h,l:this._sizes.left.w};},getSizes:function(){return this._sizes;},getUnitById:function(E){return YAHOO.widget.LayoutUnit.getLay!
 outUnitById(E);},getUnitByPosition:function(E){if(E){E=E.toLowerCase();if(this._units[E]){return this._units[E];}return false;}return false;},removeUnit:function(E){delete this._units[E.get("position")];this.resize();},addUnit:function(G){if(!G.position){return false;}if(this._units[G.position]){return false;}var H=null,J=null;if(G.id){if(C.get(G.id)){H=C.get(G.id);delete G.id;}}if(G.element){H=G.element;}if(!J){J=document.createElement("div");var L=C.generateId();J.id=L;}if(!H){H=document.createElement("div");}C.addClass(H,"yui-layout-wrap");if(this.browser.ie&&!this.browser.standardsMode){J.style.zoom=1;H.style.zoom=1;}if(J.firstChild){J.insertBefore(H,J.firstChild);}else{J.appendChild(H);}this._doc.appendChild(J);var I=false,F=false;if(G.height){I=parseInt(G.height,10);}if(G.width){F=parseInt(G.width,10);}var E={};YAHOO.lang.augmentObject(E,G);E.parent=this;E.wrap=H;E.height=I;E.width=F;var K=new YAHOO.widget.LayoutUnit(J,E);K.on("heightChange",this.resize,this,true);K.o!
 n("widthChange",this.resize,this,true);K.on("gutterChange",thi!
 s.resize
,this,true);this._units[G.position]=K;if(this._rendered){this.resize();}return K;},_createUnits:function(){var E=this.get("units");for(var F in E){if(D.hasOwnProperty(E,F)){this.addUnit(E[F]);}}},resize:function(F){F=((F===false)?false:true);if(F){var E=this.fireEvent("beforeResize");if(E===false){F=false;}if(this.browser.ie){if(this._isBody){C.removeClass(document.documentElement,"yui-layout");C.addClass(document.documentElement,"yui-layout");}else{this.removeClass("yui-layout");this.addClass("yui-layout");}}}this._setBodySize(F);if(F){this.fireEvent("resize",{target:this,sizes:this._sizes});}return this;},_setupBodyElements:function(){this._doc=C.get("layout-doc");if(!this._doc){this._doc=document.createElement("div");this._doc.id="layout-doc";if(document.body.firstChild){document.body.insertBefore(this._doc,document.body.firstChild);}else{document.body.appendChild(this._doc);}}this._createUnits();this._setBodySize();A.on(window,"resize",this.resize,this,true);C.addClass(t!
 his._doc,"yui-layout-doc");},_setupElements:function(){this._doc=this.getElementsByClassName("yui-layout-doc")[0];if(!this._doc){this._doc=document.createElement("div");this.get("element").appendChild(this._doc);}this._createUnits();this._setBodySize();C.addClass(this._doc,"yui-layout-doc");},_isBody:null,_doc:null,init:function(F,E){this._zIndex=0;B.superclass.init.call(this,F,E);if(this.get("parent")){this._zIndex=this.get("parent")._zIndex+10;}this._sizes={};this._units={};var G=F;if(!D.isString(G)){G=C.generateId(G);}B._instances[G]=this;},render:function(){this._stamp();var E=this.get("element");if(E&&E.tagName&&(E.tagName.toLowerCase()=="body")){this._isBody=true;C.addClass(document.body,"yui-layout");if(C.hasClass(document.body,"yui-skin-sam")){C.addClass(document.documentElement,"yui-skin-sam");C.removeClass(document.body,"yui-skin-sam");}this._setupBodyElements();}else{this._isBody=false;this.addClass("yui-layout");
+this._setupElements();}this.resize();this._rendered=true;this.fireEvent("render");return this;},_stamp:function(){if(document.compatMode=="CSS1Compat"){this.browser.standardsMode=true;}if(window.location.href.toLowerCase().indexOf("https")===0){C.addClass(document.documentElement,"secure");this.browser.secure=true;}},initAttributes:function(E){B.superclass.initAttributes.call(this,E);this.setAttributeConfig("units",{writeOnce:true,validator:YAHOO.lang.isArray,value:E.units||[]});this.setAttributeConfig("minHeight",{value:E.minHeight||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minWidth",{value:E.minWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("height",{value:E.height||false,validator:YAHOO.lang.isNumber,method:function(F){this.setStyle("height",F+"px");}});this.setAttributeConfig("width",{value:E.width||false,validator:YAHOO.lang.isNumber,method:function(F){this.setStyle("width",F+"px");}});this.setAttributeConfig("parent",{writeOn!
 ce:true,value:E.parent||false,method:function(F){if(F){F.on("resize",this.resize,this,true);}}});},destroy:function(){var G=this.get("parent");if(G){G.removeListener("resize",this.resize,this,true);}A.removeListener(window,"resize",this.resize,this,true);this.unsubscribeAll();for(var E in this._units){if(D.hasOwnProperty(this._units,E)){if(this._units[E]){this._units[E].destroy(true);}}}A.purgeElement(this.get("element"));this.get("parentNode").removeChild(this.get("element"));delete YAHOO.widget.Layout._instances[this.get("id")];for(var F in this){if(D.hasOwnProperty(this,F)){this[F]=null;delete this[F];}}if(G){G.resize();}},toString:function(){if(this.get){return"Layout #"+this.get("id");}return"Layout";}});YAHOO.widget.Layout=B;})();(function(){var D=YAHOO.util.Dom,C=YAHOO.util.Selector,A=YAHOO.util.Event,E=YAHOO.lang;var B=function(G,F){var H={element:G,attributes:F||{}};B.superclass.constructor.call(this,H.element,H.attributes);};B._instances={};B.getLayoutUnitById=fun!
 ction(F){if(B._instances[F]){return B._instances[F];}return fa!
 lse;};YA
HOO.extend(B,YAHOO.util.Element,{STR_CLOSE:"Click to close this pane.",STR_COLLAPSE:"Click to collapse this pane.",STR_EXPAND:"Click to expand this pane.",LOADING_CLASSNAME:"loading",browser:null,_sizes:null,_anim:null,_resize:null,_clip:null,_gutter:null,header:null,body:null,footer:null,_collapsed:null,_collapsing:null,_lastWidth:null,_lastHeight:null,_lastTop:null,_lastLeft:null,_lastScroll:null,_lastCenterScroll:null,_lastScrollTop:null,resize:function(F){var G=this.fireEvent("beforeResize");if(G===false){return this;}if(!this._collapsing||(F===true)){var N=this.get("scroll");this.set("scroll",false);var K=this._getBoxSize(this.header),J=this._getBoxSize(this.footer),L=[this.get("height"),this.get("width")];var H=(L[0]-K[0]-J[0])-(this._gutter.top+this._gutter.bottom),M=L[1]-(this._gutter.left+this._gutter.right);var O=(H+(K[0]+J[0])),I=M;if(this._collapsed&&!this._collapsing){this._setHeight(this._clip,O);this._setWidth(this._clip,I);D.setStyle(this._clip,"top",this.get!
 ("top")+this._gutter.top+"px");D.setStyle(this._clip,"left",this.get("left")+this._gutter.left+"px");}else{if(!this._collapsed||(this._collapsed&&this._collapsing)){O=this._setHeight(this.get("wrap"),O);I=this._setWidth(this.get("wrap"),I);this._sizes.wrap.h=O;this._sizes.wrap.w=I;D.setStyle(this.get("wrap"),"top",this._gutter.top+"px");D.setStyle(this.get("wrap"),"left",this._gutter.left+"px");this._sizes.header.w=this._setWidth(this.header,I);this._sizes.header.h=K[0];this._sizes.footer.w=this._setWidth(this.footer,I);this._sizes.footer.h=J[0];D.setStyle(this.footer,"bottom","0px");this._sizes.body.h=this._setHeight(this.body,(O-(K[0]+J[0])));this._sizes.body.w=this._setWidth(this.body,I);D.setStyle(this.body,"top",K[0]+"px");this.set("scroll",N);this.fireEvent("resize");}}}return this;},_setWidth:function(H,G){if(H){var F=this._getBorderSizes(H);G=(G-(F[1]+F[3]));G=this._fixQuirks(H,G,"w");if(G<0){G=0;}D.setStyle(H,"width",G+"px");}return G;},_setHeight:function(H,G){if(!
 H){var F=this._getBorderSizes(H);G=(G-(F[0]+F[2]));G=this._fix!
 Quirks(H
,G,"h");if(G<0){G=0;}D.setStyle(H,"height",G+"px");}return G;},_fixQuirks:function(I,L,G){var K=0,H=2;if(G=="w"){K=1;H=3;}if(this.browser.ie&&!this.browser.standardsMode){var F=this._getBorderSizes(I),J=this._getBorderSizes(I.parentNode);if((F[K]===0)&&(F[H]===0)){if((J[K]!==0)&&(J[H]!==0)){L=(L-(J[K]+J[H]));}}else{if((J[K]===0)&&(J[H]===0)){L=(L+(F[K]+F[H]));}}}return L;},_getBoxSize:function(H){var G=[0,0];if(H){if(this.browser.ie&&!this.browser.standardsMode){H.style.zoom=1;}var F=this._getBorderSizes(H);G[0]=H.clientHeight+(F[0]+F[2]);G[1]=H.clientWidth+(F[1]+F[3]);}return G;},_getBorderSizes:function(H){var G=[];H=H||this.get("element");if(this.browser.ie&&!this.browser.standardsMode){H.style.zoom=1;}G[0]=parseInt(D.getStyle(H,"borderTopWidth"),10);G[1]=parseInt(D.getStyle(H,"borderRightWidth"),10);G[2]=parseInt(D.getStyle(H,"borderBottomWidth"),10);G[3]=parseInt(D.getStyle(H,"borderLeftWidth"),10);for(var F=0;F<G.length;F++){if(isNaN(G[F])){G[F]=0;}}return G;},_createC!
 lip:function(){if(!this._clip){this._clip=document.createElement("div");this._clip.className="yui-layout-clip yui-layout-clip-"+this.get("position");this._clip.innerHTML='<div class="collapse"></div>';var F=this._clip.firstChild;F.title=this.STR_EXPAND;A.on(F,"click",this.expand,this,true);this.get("element").parentNode.appendChild(this._clip);}},_toggleClip:function(){if(!this._collapsed){var J=this._getBoxSize(this.header),K=this._getBoxSize(this.footer),I=[this.get("height"),this.get("width")];var H=(I[0]-J[0]-K[0])-(this._gutter.top+this._gutter.bottom),F=I[1]-(this._gutter.left+this._gutter.right),G=(H+(J[0]+K[0]));switch(this.get("position")){case"top":case"bottom":this._setWidth(this._clip,F);this._setHeight(this._clip,this.get("collapseSize"));D.setStyle(this._clip,"left",(this._lastLeft+this._gutter.left)+"px");if(this.get("position")=="bottom"){D.setStyle(this._clip,"top",((this._lastTop+this._lastHeight)-(this.get("collapseSize")-this._gutter.top))+"px");
 }else{D.setStyle(this._clip,"top",this.get("top")+this._gutter.top+"px");}break;case"left":case"right":this._setWidth(this._clip,this.get("collapseSize"));this._setHeight(this._clip,G);D.setStyle(this._clip,"top",(this.get("top")+this._gutter.top)+"px");if(this.get("position")=="right"){D.setStyle(this._clip,"left",(((this._lastLeft+this._lastWidth)-this.get("collapseSize"))-this._gutter.left)+"px");}else{D.setStyle(this._clip,"left",(this.get("left")+this._gutter.left)+"px");}break;}D.setStyle(this._clip,"display","block");this.setStyle("display","none");}else{D.setStyle(this._clip,"display","none");}},getSizes:function(){return this._sizes;},toggle:function(){if(this._collapsed){this.expand();}else{this.collapse();}return this;},expand:function(){if(!this._collapsed){return this;}var L=this.fireEvent("beforeExpand");if(L===false){return this;}this._collapsing=true;this.setStyle("zIndex",this.get("parent")._zIndex+1);if(this._anim){this.setStyle("display","none");var F={},!
 H;switch(this.get("position")){case"left":case"right":this.set("width",this._lastWidth,true);this.setStyle("width",this._lastWidth+"px");this.get("parent").resize(false);H=this.get("parent").getSizes()[this.get("position")];this.set("height",H.h,true);var K=H.l;F={left:{to:K}};if(this.get("position")=="left"){F.left.from=(K-H.w);this.setStyle("left",(K-H.w)+"px");}break;case"top":case"bottom":this.set("height",this._lastHeight,true);this.setStyle("height",this._lastHeight+"px");this.get("parent").resize(false);H=this.get("parent").getSizes()[this.get("position")];this.set("width",H.w,true);var J=H.t;F={top:{to:J}};if(this.get("position")=="top"){this.setStyle("top",(J-H.h)+"px");F.top.from=(J-H.h);}break;}this._anim.attributes=F;var I=function(){this.setStyle("display","block");this.resize(true);this._anim.onStart.unsubscribe(I,this,true);};var G=function(){this._collapsing=false;this.setStyle("zIndex",this.get("parent")._zIndex);this.set("width",this._lastWidth);this.set("!
 height",this._lastHeight);this._collapsed=false;this.resize();!
 this.set
("scroll",this._lastScroll);if(this._lastScrollTop>0){this.body.scrollTop=this._lastScrollTop;}this._anim.onComplete.unsubscribe(G,this,true);this.fireEvent("expand");};this._anim.onStart.subscribe(I,this,true);this._anim.onComplete.subscribe(G,this,true);this._anim.animate();this._toggleClip();}else{this._collapsing=false;this._toggleClip();this._collapsed=false;this.setStyle("zIndex",this.get("parent")._zIndex);this.setStyle("display","block");this.set("width",this._lastWidth);this.set("height",this._lastHeight);this.resize();this.set("scroll",this._lastScroll);if(this._lastScrollTop>0){this.body.scrollTop=this._lastScrollTop;}this.fireEvent("expand");}return this;},collapse:function(){if(this._collapsed){return this;}var J=this.fireEvent("beforeCollapse");if(J===false){return this;}if(!this._clip){this._createClip();}this._collapsing=true;var G=this.get("width"),H=this.get("height"),F={};this._lastWidth=G;this._lastHeight=H;this._lastScroll=this.get("scroll");this._lastSc!
 rollTop=this.body.scrollTop;this.set("scroll",false,true);this._lastLeft=parseInt(this.get("element").style.left,10);this._lastTop=parseInt(this.get("element").style.top,10);if(isNaN(this._lastTop)){this._lastTop=0;this.set("top",0);}if(isNaN(this._lastLeft)){this._lastLeft=0;this.set("left",0);}this.setStyle("zIndex",this.get("parent")._zIndex+1);var K=this.get("position");switch(K){case"top":case"bottom":this.set("height",(this.get("collapseSize")+(this._gutter.top+this._gutter.bottom)));F={top:{to:(this.get("top")-H)}};if(K=="bottom"){F.top.to=(this.get("top")+H);}break;case"left":case"right":this.set("width",(this.get("collapseSize")+(this._gutter.left+this._gutter.right)));F={left:{to:-(this._lastWidth)}};if(K=="right"){F.left={to:(this.get("left")+G)};}break;}if(this._anim){this._anim.attributes=F;var I=function(){this._collapsing=false;this._toggleClip();this.setStyle("zIndex",this.get("parent")._zIndex);this._collapsed=true;this.get("parent").resize();this._anim.onC!
 omplete.unsubscribe(I,this,true);this.fireEvent("collapse");};!
 this._an
im.onComplete.subscribe(I,this,true);this._anim.animate();}else{this._collapsing=false;this.setStyle("display","none");this._toggleClip();this.setStyle("zIndex",this.get("parent")._zIndex);this.get("parent").resize();this._collapsed=true;this.fireEvent("collapse");}return this;},close:function(){this.setStyle("display","none");this.get("parent").removeUnit(this);this.fireEvent("close");if(this._clip){this._clip.parentNode.removeChild(this._clip);this._clip=null;}return this.get("parent");},loadHandler:{success:function(F){this.body.innerHTML=F.responseText;this.resize(true);},failure:function(F){}},dataConnection:null,_loading:false,loadContent:function(){if(YAHOO.util.Connect&&this.get("dataSrc")&&!this._loading&&!this.get("dataLoaded")){this._loading=true;D.addClass(this.body,this.LOADING_CLASSNAME);this.dataConnection=YAHOO.util.Connect.asyncRequest(this.get("loadMethod"),this.get("dataSrc"),{success:function(F){this.loadHandler.success.call(this,F);this.set("dataLoaded",!
 true);this.dataConnection=null;D.removeClass(this.body,this.LOADING_CLASSNAME);this._loading=false;this.fireEvent("load");},failure:function(F){this.loadHandler.failure.call(this,F);this.dataConnection=null;D.removeClass(this.body,this.LOADING_CLASSNAME);this._loading=false;this.fireEvent("loadError",{error:F});},scope:this,timeout:this.get("dataTimeout")});return this.dataConnection;}return false;},init:function(H,G){this._gutter={left:0,right:0,top:0,bottom:0};this._sizes={wrap:{h:0,w:0},header:{h:0,w:0},body:{h:0,w:0},footer:{h:0,w:0}};B.superclass.init.call(this,H,G);this.browser=this.get("parent").browser;var K=H;if(!E.isString(K)){K=D.generateId(K);}B._instances[K]=this;this.setStyle("position","absolute");this.addClass("yui-layout-unit");this.addClass("yui-layout-unit-"+this.get("position"));var J=this.getElementsByClassName("yui-layout-hd","div")[0];if(J){this.header=J;}var F=this.getElementsByClassName("yui-layout-bd","div")[0];
-if(F){this.body=F;}var I=this.getElementsByClassName("yui-layout-ft","div")[0];if(I){this.footer=I;}this.on("contentChange",this.resize,this,true);this._lastScrollTop=0;this.set("animate",this.get("animate"));},initAttributes:function(F){B.superclass.initAttributes.call(this,F);this.setAttributeConfig("wrap",{value:F.wrap||null,method:function(G){if(G){var H=D.generateId(G);B._instances[H]=this;}}});this.setAttributeConfig("grids",{value:F.grids||false});this.setAttributeConfig("top",{value:F.top||0,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("top",G+"px");}}});this.setAttributeConfig("left",{value:F.left||0,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("left",G+"px");}}});this.setAttributeConfig("minWidth",{value:F.minWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxWidth",{value:F.maxWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minHeight",{value:F.minHeight||fals!
 e,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxHeight",{value:F.maxHeight||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("height",{value:F.height,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("height",G+"px");}}});this.setAttributeConfig("width",{value:F.width,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("width",G+"px");}}});this.setAttributeConfig("zIndex",{value:F.zIndex||false,method:function(G){this.setStyle("zIndex",G);}});this.setAttributeConfig("position",{value:F.position});this.setAttributeConfig("gutter",{value:F.gutter||0,validator:YAHOO.lang.isString,method:function(H){var G=H.split(" ");if(G.length){this._gutter.top=parseInt(G[0],10);if(G[1]){this._gutter.right=parseInt(G[1],10);}else{this._gutter.right=this._gutter.top;}if(G[2]){this._gutter.bottom=parseInt(G[2],10);}else{this._gutter.bottom=this._gutter.top;}if(G[3]){this._gutter.left=parseInt(G[3],10);}else{if(G[1]){t!
 his._gutter.left=this._gutter.right;}else{this._gutter.left=th!
 is._gutt
er.top;}}}}});this.setAttributeConfig("parent",{writeOnce:true,value:F.parent||false,method:function(G){if(G){G.on("resize",this.resize,this,true);}}});this.setAttributeConfig("collapseSize",{value:F.collapseSize||25,validator:YAHOO.lang.isNumber});this.setAttributeConfig("duration",{value:F.duration||0.5});this.setAttributeConfig("easing",{value:F.easing||((YAHOO.util&&YAHOO.util.Easing)?YAHOO.util.Easing.BounceIn:"false")});this.setAttributeConfig("animate",{value:((F.animate===false)?false:true),validator:function(){var G=false;if(YAHOO.util.Anim){G=true;}return G;},method:function(G){if(G){this._anim=new YAHOO.util.Anim(this.get("element"),{},this.get("duration"),this.get("easing"));}else{this._anim=false;}}});this.setAttributeConfig("header",{value:F.header||false,method:function(G){if(G===false){if(this.header){D.addClass(this.body,"yui-layout-bd-nohd");this.header.parentNode.removeChild(this.header);this.header=null;}}else{if(!this.header){var I=this.getElementsByClas!
 sName("yui-layout-hd","div")[0];if(!I){I=this._createHeader();}this.header=I;}var H=this.header.getElementsByTagName("h2")[0];if(!H){H=document.createElement("h2");this.header.appendChild(H);}H.innerHTML=G;if(this.body){D.removeClass(this.body,"yui-layout-bd-nohd");}}this.fireEvent("contentChange",{target:"header"});}});this.setAttributeConfig("proxy",{writeOnce:true,value:((F.proxy===false)?false:true)});this.setAttributeConfig("body",{value:F.body||false,method:function(I){if(!this.body){var G=this.getElementsByClassName("yui-layout-bd","div")[0];if(G){this.body=G;}else{G=document.createElement("div");G.className="yui-layout-bd";this.body=G;this.get("wrap").appendChild(G);}}if(!this.header){D.addClass(this.body,"yui-layout-bd-nohd");}D.addClass(this.body,"yui-layout-bd-noft");var H=null;if(E.isString(I)){H=D.get(I);}else{if(I&&I.tagName){H=I;}}if(H){var J=D.generateId(H);B._instances[J]=this;this.body.appendChild(H);}else{this.body.innerHTML=I;}this._cleanGrids();this.fir!
 eEvent("contentChange",{target:"body"});}});this.setAttributeC!
 onfig("f
ooter",{value:F.footer||false,method:function(H){if(H===false){if(this.footer){D.addClass(this.body,"yui-layout-bd-noft");this.footer.parentNode.removeChild(this.footer);this.footer=null;}}else{if(!this.footer){var I=this.getElementsByClassName("yui-layout-ft","div")[0];if(!I){I=document.createElement("div");I.className="yui-layout-ft";this.footer=I;this.get("wrap").appendChild(I);}else{this.footer=I;}}var G=null;if(E.isString(H)){G=D.get(H);}else{if(H&&H.tagName){G=H;}}if(G){this.footer.appendChild(G);}else{this.footer.innerHTML=H;}D.removeClass(this.body,"yui-layout-bd-noft");}this.fireEvent("contentChange",{target:"footer"});}});this.setAttributeConfig("close",{value:F.close||false,method:function(G){if(this.get("position")=="center"){return false;}if(!this.header){this._createHeader();}var H=D.getElementsByClassName("close","div",this.header)[0];if(G){if(!this.get("header")){this.set("header"," ");}if(!H){H=document.createElement("div");H.className="close";this.head!
 er.appendChild(H);A.on(H,"click",this.close,this,true);}H.title=this.STR_CLOSE;}else{if(H){A.purgeElement(H);H.parentNode.removeChild(H);}}this._configs.close.value=G;this.set("collapse",this.get("collapse"));}});this.setAttributeConfig("collapse",{value:F.collapse||false,method:function(G){if(this.get("position")=="center"){return false;}if(!this.header){this._createHeader();}var H=D.getElementsByClassName("collapse","div",this.header)[0];if(G){if(!this.get("header")){this.set("header"," ");}if(!H){H=document.createElement("div");this.header.appendChild(H);A.on(H,"click",this.collapse,this,true);}H.title=this.STR_COLLAPSE;H.className="collapse"+((this.get("close"))?" collapse-close":"");}else{if(H){A.purgeElement(H);H.parentNode.removeChild(H);}}}});this.setAttributeConfig("scroll",{value:(((F.scroll===true)||(F.scroll===false)||(F.scroll===null))?F.scroll:false),method:function(G){if((G===false)&&!this._collapsed){if(this.body){if(this.body.scrollTop>0){this._lastScr!
 ollTop=this.body.scrollTop;
-}}}if(G===true){this.addClass("yui-layout-scroll");this.removeClass("yui-layout-noscroll");if(this._lastScrollTop>0){if(this.body){this.body.scrollTop=this._lastScrollTop;}}}else{if(G===false){this.removeClass("yui-layout-scroll");this.addClass("yui-layout-noscroll");}else{if(G===null){this.removeClass("yui-layout-scroll");this.removeClass("yui-layout-noscroll");}}}}});this.setAttributeConfig("hover",{writeOnce:true,value:F.hover||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("useShim",{value:F.useShim||false,validator:YAHOO.lang.isBoolean,method:function(G){if(this._resize){this._resize.set("useShim",G);}}});this.setAttributeConfig("resize",{value:F.resize||false,validator:function(G){if(YAHOO.util&&YAHOO.util.Resize){return true;}return false;},method:function(G){if(G&&!this._resize){if(this.get("position")=="center"){return false;}var I=false;switch(this.get("position")){case"top":I="b";break;case"bottom":I="t";break;case"right":I="l";break;case"left":I=!
 "r";break;}this.setStyle("position","absolute");if(I){this._resize=new YAHOO.util.Resize(this.get("element"),{proxy:this.get("proxy"),hover:this.get("hover"),status:false,autoRatio:false,handles:[I],minWidth:this.get("minWidth"),maxWidth:this.get("maxWidth"),minHeight:this.get("minHeight"),maxHeight:this.get("maxHeight"),height:this.get("height"),width:this.get("width"),setSize:false,useShim:this.get("useShim"),wrap:false});this._resize._handles[I].innerHTML='<div class="yui-layout-resize-knob"></div>';if(this.get("proxy")){var H=this._resize.getProxyEl();H.innerHTML='<div class="yui-layout-handle-'+I+'"></div>';}this._resize.on("startResize",function(J){this._lastScroll=this.get("scroll");this.set("scroll",false);if(this.get("parent")){this.get("parent").fireEvent("startResize");var K=this.get("parent").getUnitByPosition("center");this._lastCenterScroll=K.get("scroll");K.set("scroll",false);}this.fireEvent("startResize");},this,true);this._resize.on("resize",function(J){th!
 is.set("height",J.height);this.set("width",J.width);},this,tru!
 e);this.
_resize.on("endResize",function(J){this.set("scroll",this._lastScroll);if(this.get("parent")){var K=this.get("parent").getUnitByPosition("center");K.set("scroll",this._lastCenterScroll);}this.resize();this.fireEvent("endResize");},this,true);}}else{if(this._resize){this._resize.destroy();}}}});this.setAttributeConfig("dataSrc",{value:F.dataSrc});this.setAttributeConfig("loadMethod",{value:F.loadMethod||"GET",validator:YAHOO.lang.isString});this.setAttributeConfig("dataLoaded",{value:false,validator:YAHOO.lang.isBoolean,writeOnce:true});this.setAttributeConfig("dataTimeout",{value:F.dataTimeout||null,validator:YAHOO.lang.isNumber});},_cleanGrids:function(){if(this.get("grids")){var F=C.query("div.yui-b",this.body,true);if(F){D.removeClass(F,"yui-b");}A.onAvailable("yui-main",function(){D.setStyle(C.query("#yui-main"),"margin-left","0");D.setStyle(C.query("#yui-main"),"margin-right","0");});}},_createHeader:function(){var F=document.createElement("div");F.className="yui-layout!
 -hd";if(this.get("firstChild")){this.get("wrap").insertBefore(F,this.get("wrap").firstChild);}else{this.get("wrap").appendChild(F);}this.header=F;return F;},destroy:function(H){if(this._resize){this._resize.destroy();}var G=this.get("parent");this.setStyle("display","none");if(this._clip){this._clip.parentNode.removeChild(this._clip);this._clip=null;}if(!H){G.removeUnit(this);}if(G){G.removeListener("resize",this.resize,this,true);}this.unsubscribeAll();A.purgeElement(this.get("element"));this.get("parentNode").removeChild(this.get("element"));delete YAHOO.widget.LayoutUnit._instances[this.get("id")];for(var F in this){if(E.hasOwnProperty(this,F)){this[F]=null;delete this[F];}}return G;},toString:function(){if(this.get){return"LayoutUnit #"+this.get("id")+" ("+this.get("position")+")";}return"LayoutUnit";}});YAHOO.widget.LayoutUnit=B;})();YAHOO.register("layout",YAHOO.widget.Layout,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+if(F){this.body=F;}var I=this.getElementsByClassName("yui-layout-ft","div")[0];if(I){this.footer=I;}this.on("contentChange",this.resize,this,true);this._lastScrollTop=0;this.set("animate",this.get("animate"));},initAttributes:function(F){B.superclass.initAttributes.call(this,F);this.setAttributeConfig("wrap",{value:F.wrap||null,method:function(G){if(G){var H=D.generateId(G);B._instances[H]=this;}}});this.setAttributeConfig("grids",{value:F.grids||false});this.setAttributeConfig("top",{value:F.top||0,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("top",G+"px");}}});this.setAttributeConfig("left",{value:F.left||0,validator:E.isNumber,method:function(G){if(!this._collapsing){this.setStyle("left",G+"px");}}});this.setAttributeConfig("minWidth",{value:F.minWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxWidth",{value:F.maxWidth||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minHeight",{value:F.minHeight||fals!
 e,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxHeight",{value:F.maxHeight||false,validator:YAHOO.lang.isNumber});this.setAttributeConfig("height",{value:F.height,validator:E.isNumber,method:function(G){if(!this._collapsing){if(G<0){G=0;}this.setStyle("height",G+"px");}}});this.setAttributeConfig("width",{value:F.width,validator:E.isNumber,method:function(G){if(!this._collapsing){if(G<0){G=0;}this.setStyle("width",G+"px");}}});this.setAttributeConfig("zIndex",{value:F.zIndex||false,method:function(G){this.setStyle("zIndex",G);}});this.setAttributeConfig("position",{value:F.position});this.setAttributeConfig("gutter",{value:F.gutter||0,validator:YAHOO.lang.isString,method:function(H){var G=H.split(" ");if(G.length){this._gutter.top=parseInt(G[0],10);if(G[1]){this._gutter.right=parseInt(G[1],10);}else{this._gutter.right=this._gutter.top;}if(G[2]){this._gutter.bottom=parseInt(G[2],10);}else{this._gutter.bottom=this._gutter.top;}if(G[3]){this._gutter.left=parseInt!
 (G[3],10);}else{if(G[1]){this._gutter.left=this._gutter.right;!
 }else{th
is._gutter.left=this._gutter.top;}}}}});this.setAttributeConfig("parent",{writeOnce:true,value:F.parent||false,method:function(G){if(G){G.on("resize",this.resize,this,true);}}});this.setAttributeConfig("collapseSize",{value:F.collapseSize||25,validator:YAHOO.lang.isNumber});this.setAttributeConfig("duration",{value:F.duration||0.5});this.setAttributeConfig("easing",{value:F.easing||((YAHOO.util&&YAHOO.util.Easing)?YAHOO.util.Easing.BounceIn:"false")});this.setAttributeConfig("animate",{value:((F.animate===false)?false:true),validator:function(){var G=false;if(YAHOO.util.Anim){G=true;}return G;},method:function(G){if(G){this._anim=new YAHOO.util.Anim(this.get("element"),{},this.get("duration"),this.get("easing"));}else{this._anim=false;}}});this.setAttributeConfig("header",{value:F.header||false,method:function(G){if(G===false){if(this.header){D.addClass(this.body,"yui-layout-bd-nohd");this.header.parentNode.removeChild(this.header);this.header=null;}}else{if(!this.header){va!
 r I=this.getElementsByClassName("yui-layout-hd","div")[0];if(!I){I=this._createHeader();}this.header=I;}var H=this.header.getElementsByTagName("h2")[0];if(!H){H=document.createElement("h2");this.header.appendChild(H);}H.innerHTML=G;if(this.body){D.removeClass(this.body,"yui-layout-bd-nohd");}}this.fireEvent("contentChange",{target:"header"});}});this.setAttributeConfig("proxy",{writeOnce:true,value:((F.proxy===false)?false:true)});this.setAttributeConfig("body",{value:F.body||false,method:function(I){if(!this.body){var G=this.getElementsByClassName("yui-layout-bd","div")[0];if(G){this.body=G;}else{G=document.createElement("div");G.className="yui-layout-bd";this.body=G;this.get("wrap").appendChild(G);}}if(!this.header){D.addClass(this.body,"yui-layout-bd-nohd");}D.addClass(this.body,"yui-layout-bd-noft");var H=null;if(E.isString(I)){H=D.get(I);}else{if(I&&I.tagName){H=I;}}if(H){var J=D.generateId(H);B._instances[J]=this;this.body.appendChild(H);}else{this.body.innerHTML=I;}t!
 his._cleanGrids();this.fireEvent("contentChange",{target:"body!
 "});}});
this.setAttributeConfig("footer",{value:F.footer||false,method:function(H){if(H===false){if(this.footer){D.addClass(this.body,"yui-layout-bd-noft");this.footer.parentNode.removeChild(this.footer);this.footer=null;}}else{if(!this.footer){var I=this.getElementsByClassName("yui-layout-ft","div")[0];if(!I){I=document.createElement("div");I.className="yui-layout-ft";this.footer=I;this.get("wrap").appendChild(I);}else{this.footer=I;}}var G=null;if(E.isString(H)){G=D.get(H);}else{if(H&&H.tagName){G=H;}}if(G){this.footer.appendChild(G);}else{this.footer.innerHTML=H;}D.removeClass(this.body,"yui-layout-bd-noft");}this.fireEvent("contentChange",{target:"footer"});}});this.setAttributeConfig("close",{value:F.close||false,method:function(G){if(this.get("position")=="center"){return false;}if(!this.header){this._createHeader();}var H=D.getElementsByClassName("close","div",this.header)[0];if(G){if(!this.get("header")){this.set("header"," ");}if(!H){H=document.createElement("div");H.c!
 lassName="close";this.header.appendChild(H);A.on(H,"click",this.close,this,true);}H.title=this.STR_CLOSE;}else{if(H){A.purgeElement(H);H.parentNode.removeChild(H);}}this._configs.close.value=G;this.set("collapse",this.get("collapse"));}});this.setAttributeConfig("collapse",{value:F.collapse||false,method:function(G){if(this.get("position")=="center"){return false;}if(!this.header){this._createHeader();}var H=D.getElementsByClassName("collapse","div",this.header)[0];if(G){if(!this.get("header")){this.set("header"," ");}if(!H){H=document.createElement("div");this.header.appendChild(H);A.on(H,"click",this.collapse,this,true);}H.title=this.STR_COLLAPSE;H.className="collapse"+((this.get("close"))?" collapse-close":"");}else{if(H){A.purgeElement(H);H.parentNode.removeChild(H);}}}});this.setAttributeConfig("scroll",{value:(((F.scroll===true)||(F.scroll===false)||(F.scroll===null))?F.scroll:false),method:function(G){if((G===false)&&!this._collapsed){if(this.body){if(this.body.!
 scrollTop>0){this._lastScrollTop=this.body.scrollTop;
+}}}if(G===true){this.addClass("yui-layout-scroll");this.removeClass("yui-layout-noscroll");if(this._lastScrollTop>0){if(this.body){this.body.scrollTop=this._lastScrollTop;}}}else{if(G===false){this.removeClass("yui-layout-scroll");this.addClass("yui-layout-noscroll");}else{if(G===null){this.removeClass("yui-layout-scroll");this.removeClass("yui-layout-noscroll");}}}}});this.setAttributeConfig("hover",{writeOnce:true,value:F.hover||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("useShim",{value:F.useShim||false,validator:YAHOO.lang.isBoolean,method:function(G){if(this._resize){this._resize.set("useShim",G);}}});this.setAttributeConfig("resize",{value:F.resize||false,validator:function(G){if(YAHOO.util&&YAHOO.util.Resize){return true;}return false;},method:function(G){if(G&&!this._resize){if(this.get("position")=="center"){return false;}var I=false;switch(this.get("position")){case"top":I="b";break;case"bottom":I="t";break;case"right":I="l";break;case"left":I=!
 "r";break;}this.setStyle("position","absolute");if(I){this._resize=new YAHOO.util.Resize(this.get("element"),{proxy:this.get("proxy"),hover:this.get("hover"),status:false,autoRatio:false,handles:[I],minWidth:this.get("minWidth"),maxWidth:this.get("maxWidth"),minHeight:this.get("minHeight"),maxHeight:this.get("maxHeight"),height:this.get("height"),width:this.get("width"),setSize:false,useShim:this.get("useShim"),wrap:false});this._resize._handles[I].innerHTML='<div class="yui-layout-resize-knob"></div>';if(this.get("proxy")){var H=this._resize.getProxyEl();H.innerHTML='<div class="yui-layout-handle-'+I+'"></div>';}this._resize.on("startResize",function(J){this._lastScroll=this.get("scroll");this.set("scroll",false);if(this.get("parent")){this.get("parent").fireEvent("startResize");var K=this.get("parent").getUnitByPosition("center");this._lastCenterScroll=K.get("scroll");K.addClass(this._resize.CSS_RESIZING);K.set("scroll",false);}this.fireEvent("startResize");},this,true);t!
 his._resize.on("resize",function(J){this.set("height",J.height!
 );this.s
et("width",J.width);},this,true);this._resize.on("endResize",function(J){this.set("scroll",this._lastScroll);if(this.get("parent")){var K=this.get("parent").getUnitByPosition("center");K.set("scroll",this._lastCenterScroll);K.removeClass(this._resize.CSS_RESIZING);}this.resize();this.fireEvent("endResize");},this,true);}}else{if(this._resize){this._resize.destroy();}}}});this.setAttributeConfig("dataSrc",{value:F.dataSrc});this.setAttributeConfig("loadMethod",{value:F.loadMethod||"GET",validator:YAHOO.lang.isString});this.setAttributeConfig("dataLoaded",{value:false,validator:YAHOO.lang.isBoolean,writeOnce:true});this.setAttributeConfig("dataTimeout",{value:F.dataTimeout||null,validator:YAHOO.lang.isNumber});},_cleanGrids:function(){if(this.get("grids")){var F=C.query("div.yui-b",this.body,true);if(F){D.removeClass(F,"yui-b");}A.onAvailable("yui-main",function(){D.setStyle(C.query("#yui-main"),"margin-left","0");D.setStyle(C.query("#yui-main"),"margin-right","0");});}},_crea!
 teHeader:function(){var F=document.createElement("div");F.className="yui-layout-hd";if(this.get("firstChild")){this.get("wrap").insertBefore(F,this.get("wrap").firstChild);}else{this.get("wrap").appendChild(F);}this.header=F;return F;},destroy:function(H){if(this._resize){this._resize.destroy();}var G=this.get("parent");this.setStyle("display","none");if(this._clip){this._clip.parentNode.removeChild(this._clip);this._clip=null;}if(!H){G.removeUnit(this);}if(G){G.removeListener("resize",this.resize,this,true);}this.unsubscribeAll();A.purgeElement(this.get("element"));this.get("parentNode").removeChild(this.get("element"));delete YAHOO.widget.LayoutUnit._instances[this.get("id")];for(var F in this){if(E.hasOwnProperty(this,F)){this[F]=null;delete this[F];}}return G;},toString:function(){if(this.get){return"LayoutUnit #"+this.get("id")+" ("+this.get("position")+")";}return"LayoutUnit";}});YAHOO.widget.LayoutUnit=B;})();YAHOO.register("layout",YAHOO.widget.Layout,{version:"2.7.!
 0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/layout/layout.js
===================================================================
--- trunk/root/static/yui/layout/layout.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/layout/layout.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,15 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * @description <p>Provides a fixed layout containing, top, bottom, left, right and center layout units. It can be applied to either the body or an element.</p>
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event
  * @module layout
- * @beta
  */
 (function() {
     var Dom = YAHOO.util.Dom,
@@ -86,7 +85,7 @@
         * @description An object literal that contains a list of units in the layout
         * @type Object
         */
-        _rendered: null,
+        _units: null,
         /**
         * @private
         * @property _rendered
@@ -649,7 +648,7 @@
     */
     /**
     * @event beforeResize
-    * @description Firef at the beginning of the resize method. If you return false, the resize is cancelled.
+    * @description Fires at the beginning of the resize method. If you return false, the resize is cancelled.
     * @type YAHOO.util.CustomEvent
     */
     /**
@@ -665,7 +664,6 @@
  * @namespace YAHOO.widget
  * @requires yahoo, dom, element, event, layout
  * @optional animation, dragdrop, selector
- * @beta
  */
 (function() {
     var Dom = YAHOO.util.Dom,
@@ -932,6 +930,9 @@
                 var b = this._getBorderSizes(el);
                 w = (w - (b[1] + b[3]));
                 w = this._fixQuirks(el, w, 'w');
+                if (w < 0) {
+                    w = 0;
+                }
                 Dom.setStyle(el, 'width', w + 'px');
             }
             return w;
@@ -949,6 +950,9 @@
                 var b = this._getBorderSizes(el);
                 h = (h - (b[0] + b[2]));
                 h = this._fixQuirks(el, h, 'h');
+                if (h < 0) {
+                    h = 0;
+                }
                 Dom.setStyle(el, 'height', h + 'px');
             }
             return h;
@@ -1561,6 +1565,9 @@
                 validator: Lang.isNumber,
                 method: function(h) {
                     if (!this._collapsing) {
+                        if (h < 0) {
+                            h = 0;
+                        }
                         this.setStyle('height', h + 'px');
                     }
                 }
@@ -1576,6 +1583,9 @@
                 validator: Lang.isNumber,
                 method: function(w) {
                     if (!this._collapsing) {
+                        if (w < 0) {
+                            w = 0;
+                        }
                         this.setStyle('width', w + 'px');
                     }
                 }
@@ -2014,6 +2024,7 @@
                                     this.get('parent').fireEvent('startResize');
                                     var c = this.get('parent').getUnitByPosition('center');
                                     this._lastCenterScroll = c.get('scroll');
+                                    c.addClass(this._resize.CSS_RESIZING);
                                     c.set('scroll', false);
                                 }
                                 this.fireEvent('startResize');
@@ -2027,6 +2038,7 @@
                                 if (this.get('parent')) {
                                     var c = this.get('parent').getUnitByPosition('center');
                                     c.set('scroll', this._lastCenterScroll);
+                                    c.removeClass(this._resize.CSS_RESIZING);
                                 }
                                 this.resize();
                                 this.fireEvent('endResize');
@@ -2180,7 +2192,7 @@
     */
     /**
     * @event beforeResize
-    * @description Firef at the beginning of the resize method. If you return false, the resize is cancelled.
+    * @description Fired at the beginning of the resize method. If you return false, the resize is cancelled.
     * @type YAHOO.util.CustomEvent
     */
     /**
@@ -2227,4 +2239,4 @@
 
     YAHOO.widget.LayoutUnit = LayoutUnit;
 })();
-YAHOO.register("layout", YAHOO.widget.Layout, {version: "2.6.0", build: "1321"});
+YAHOO.register("layout", YAHOO.widget.Layout, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/logger/README
===================================================================
--- trunk/root/static/yui/logger/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,116 +0,0 @@
-Logger Release Notes
-
-*** version 2.6.0 ***
-
-* LogWriter source member typo fix
-* LogReader pause(), resume() work when footerEnabled = false
-* Console logging in Safari now receives full message
-* Invalid markup in VERBOSE_TEMPLATE corrected, space re-added after category
-* Corrected problem where messages containing { content } were getting destroyed
-
-
-*** version 2.5.2 ***
-
-* No changes.
-
-
-*** version 2.5.1 ***
-
-* Support object introspection to Firebug.
-* Better performance when rendering messages to LogReader.
-
-
-
-*** version 2.5.0 ***
-
-* No changes.
-
-
-
-*** version 2.4.0 ***
-
-* Global window error event no longer being handled by default. Implemented
- handleWindowErrors() and unhandleWindowErrors().
-
-
-
-*** version 2.3.1 ***
-
-* No changes.
-
-
-
-**** version 2.3.0 ****
-
-* Applied new skinning model.
-* Logger singleton no longer clobbers itself.
-* Fixed issues when setting LogReader property footerEnabled to false.
-
-
-
-**** version 2.2.2 ****
-
-* No changes.
-
-
-
-*** version 2.2.1 ***
-
-* Updated default ".yui-log-hd h4" font-size to "107%".
-* Fixed synchronicity issue with pause()/resume() calls and the corresponding
-LogReader button state.
-* Better support for "\n" newlines in log messages, while wrapping long lines in
-verboseOutput mode.
-* Added draggable and outputBuffer properties to LogReader.
-* Added showCategory(), hideCategory(), showSource(), hideSource(), and
-clearConsole() methods to LogReader.
-* Support for multiple freestanding LogReader instances.
-* Improved type checking with YAHOO.lang.
-
-
-
-**** version 2.2.0 ***
-
-* Implemented expand() and collapse() in LogReader class.
-* Better internal browser detection.
-
-
-
-*** version 0.12.2 ***
-
-* No changes.
-
-
-
-**** version 0.12.1 ***
-
-* Fixed issues with setting LogReader's "bottom" property.
-
-
-
-*** version 0.12.0 ***
-
-* Added method formatMsg(oLogMsg) to support custom formatting of log messages
-for output to a LogReader.
-
-
-
-*** version 0.11.3 ***
-
-* The Logger static method enableFirebug() has been RENAMED to
-enableBrowserConsole().
-* The Logger static method disableFirebug() has been RENAMED to
-disableBrowserConsole().
-* By default, the Logger will not automatically output to Firebug or Safari's
-JavaScript console. To enable this feature, implementers should now explicitly
-call YAHOO.widget.Logger.enableBrowserConsole().
-* Implementers may now cap the size of the YAHOO.widget.Logger stack by setting
-the property YAHOO.widget.Logger.maxStackEntries.
-* Implementers may now control the number of items displayed in each console by
-setting the LogReader properties thresholdMax and thresholdMin.
-
-
-
-*** version 0.11.0 ***
-
-* Initial release

Modified: trunk/root/static/yui/logger/assets/logger-core.css
===================================================================
--- trunk/root/static/yui/logger/assets/logger-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/assets/logger-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-/* This file intentionally left blank */
+/* This file intentionally left blank */

Modified: trunk/root/static/yui/logger/assets/logger.css
===================================================================
--- trunk/root/static/yui/logger/assets/logger.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/assets/logger.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* logger default styles */
 /* default width: 31em */

Modified: trunk/root/static/yui/logger/assets/skins/sam/logger-skin.css
===================================================================
--- trunk/root/static/yui/logger/assets/skins/sam/logger-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/assets/skins/sam/logger-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* logger default styles */
 /* default width: 31em */

Modified: trunk/root/static/yui/logger/assets/skins/sam/logger.css
===================================================================
--- trunk/root/static/yui/logger/assets/skins/sam/logger.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/assets/skins/sam/logger.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-log{padding:1em;width:31em;background-color:#AAA;color:#000;border:1px solid black;font-family:monospace;font-size:77%;text-align:left;z-index:9000;}.yui-skin-sam .yui-log-container{position:absolute;top:1em;right:1em;}.yui-skin-sam .yui-log input{margin:0;padding:0;font-family:arial;font-size:100%;font-weight:normal;}.yui-skin-sam .yui-log .yui-log-btns{position:relative;float:right;bottom:.25em;}.yui-skin-sam .yui-log .yui-log-hd{margin-top:1em;padding:.5em;background-color:#575757;}.yui-skin-sam .yui-log .yui-log-hd h4{margin:0;padding:0;font-size:108%;font-weight:bold;color:#FFF;}.yui-skin-sam .yui-log .yui-log-bd{width:100%;height:20em;background-color:#FFF;border:1px solid gray;overflow:auto;}.yui-skin-sam .yui-log p{margin:1px;padding:.1em;}.yui-skin-sam .yui-log pre{margin:0;padding:0;}.yui-skin-sam .yui-log pre.yui-log-verbose{white-space:pre-wrap;white-space:-moz-pre-wrap !important;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-w!
 ord;}.yui-skin-sam .yui-log .yui-log-ft{margin-top:.5em;}.yui-skin-sam .yui-log .yui-log-ft .yui-log-categoryfilters{}.yui-skin-sam .yui-log .yui-log-ft .yui-log-sourcefilters{width:100%;border-top:1px solid #575757;margin-top:.75em;padding-top:.75em;}.yui-skin-sam .yui-log .yui-log-filtergrp{margin-right:.5em;}.yui-skin-sam .yui-log .info{background-color:#A7CC25;}.yui-skin-sam .yui-log .warn{background-color:#F58516;}.yui-skin-sam .yui-log .error{background-color:#E32F0B;}.yui-skin-sam .yui-log .time{background-color:#A6C9D7;}.yui-skin-sam .yui-log .window{background-color:#F2E886;}

Modified: trunk/root/static/yui/logger/logger-debug.js
===================================================================
--- trunk/root/static/yui/logger/logger-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/logger-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /****************************************************************************/
 /****************************************************************************/
@@ -2041,4 +2041,4 @@
 }
 
 
-YAHOO.register("logger", YAHOO.widget.Logger, {version: "2.6.0", build: "1321"});
+YAHOO.register("logger", YAHOO.widget.Logger, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/logger/logger-min.js
===================================================================
--- trunk/root/static/yui/logger/logger-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/logger-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,9 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.widget.LogMsg=function(A){this.msg=this.time=this.category=this.source=this.sourceDetail=null;if(A&&(A.constructor==Object)){for(var B in A){if(A.hasOwnProperty(B)){this[B]=A[B];}}}};YAHOO.widget.LogWriter=function(A){if(!A){YAHOO.log("Could not instantiate LogWriter due to invalid source.","error","LogWriter");return ;}this._source=A;};YAHOO.widget.LogWriter.prototype.toString=function(){return"LogWriter "+this._sSource;};YAHOO.widget.LogWriter.prototype.log=function(A,B){YAHOO.widget.Logger.log(A,B,this._source);};YAHOO.widget.LogWriter.prototype.getSource=function(){return this._source;};YAHOO.widget.LogWriter.prototype.setSource=function(A){if(!A){YAHOO.log("Could not set source due to invalid source.","error",this.toString());return ;}else{this._source=A;}};YAHOO.widget.LogWriter.prototype._source=null;YAHOO.widget.LogReader=function(B,A){this._sName=YAHOO.widget.LogReader._index;YAHOO.widget.LogReader._index++;this._buffer=[];this._filterCheckboxes={};this._last!
 Time=YAHOO.widget.Logger.getStartTime();if(A&&(A.constructor==Object)){for(var C in A){if(A.hasOwnProperty(C)){this[C]=A[C];}}}this._initContainerEl(B);if(!this._elContainer){YAHOO.log("Could not instantiate LogReader due to an invalid container element "+B,"error",this.toString());return ;}this._initHeaderEl();this._initConsoleEl();this._initFooterEl();this._initDragDrop();this._initCategories();this._initSources();YAHOO.widget.Logger.newLogEvent.subscribe(this._onNewLog,this);YAHOO.widget.Logger.logResetEvent.subscribe(this._onReset,this);YAHOO.widget.Logger.categoryCreateEvent.subscribe(this._onCategoryCreate,this);YAHOO.widget.Logger.sourceCreateEvent.subscribe(this._onSourceCreate,this);this._filterLogs();YAHOO.log("LogReader initialized",null,this.toString());};YAHOO.lang.augmentObject(YAHOO.widget.LogReader,{_index:0,ENTRY_TEMPLATE:(function(){var A=document.createElement("pre");YAHOO.util.Dom.addClass(A,"yui-log-entry");return A;})(),VERBOSE_TEMPLATE:"<p><span class!
 ='{category}'>{label}</span> {totalTime}ms (+{elapsedTime}) {l!
 ocalTime
}:</p><p>{sourceAndDetail}</p><p>{message}</p>",BASIC_TEMPLATE:"<p><span class='{category}'>{label}</span> {totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}</p>"});YAHOO.widget.LogReader.prototype={logReaderEnabled:true,width:null,height:null,top:null,left:null,right:null,bottom:null,fontSize:null,footerEnabled:true,verboseOutput:true,entryFormat:null,newestOnTop:true,outputBuffer:100,thresholdMax:500,thresholdMin:100,isCollapsed:false,isPaused:false,draggable:true,toString:function(){return"LogReader instance"+this._sName;},pause:function(){this.isPaused=true;this._timeout=null;this.logReaderEnabled=false;if(this._btnPause){this._btnPause.value="Resume";}},resume:function(){this.isPaused=false;this.logReaderEnabled=true;this._printBuffer();if(this._btnPause){this._btnPause.value="Pause";}},hide:function(){this._elContainer.style.display="none";},show:function(){this._elContainer.style.display="block";},collapse:function(){this._elConsole.style.display!
 ="none";if(this._elFt){this._elFt.style.display="none";}this._btnCollapse.value="Expand";this.isCollapsed=true;},expand:function(){this._elConsole.style.display="block";if(this._elFt){this._elFt.style.display="block";}this._btnCollapse.value="Collapse";this.isCollapsed=false;},getCheckbox:function(A){return this._filterCheckboxes[A];},getCategories:function(){return this._categoryFilters;},showCategory:function(B){var D=this._categoryFilters;if(D.indexOf){if(D.indexOf(B)>-1){return ;}}else{for(var A=0;A<D.length;A++){if(D[A]===B){return ;}}}this._categoryFilters.push(B);this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=true;}},hideCategory:function(B){var D=this._categoryFilters;for(var A=0;A<D.length;A++){if(B==D[A]){D.splice(A,1);break;}}this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=false;}},getSources:function(){return this._sourceFilters;},showSource:function(A){var D=this._sourceFilters;if(D.indexOf){if(D.indexOf(A)>-1){return ;}}else{for(var !
 B=0;B<D.length;B++){if(A==D[B]){return ;}}}D.push(A);this._fil!
 terLogs(
);var C=this.getCheckbox(A);if(C){C.checked=true;}},hideSource:function(A){var D=this._sourceFilters;for(var B=0;B<D.length;B++){if(A==D[B]){D.splice(B,1);break;}}this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=false;}},clearConsole:function(){this._timeout=null;this._buffer=[];this._consoleMsgCount=0;var A=this._elConsole;A.innerHTML="";},setTitle:function(A){this._title.innerHTML=this.html2Text(A);},getLastTime:function(){return this._lastTime;},formatMsg:function(C){var B=YAHOO.widget.LogReader,A=this.entryFormat||(this.verboseOutput?B.VERBOSE_TEMPLATE:B.BASIC_TEMPLATE),D={category:C.category,label:C.category.substring(0,4).toUpperCase(),sourceAndDetail:C.sourceDetail?C.source+" "+C.sourceDetail:C.source,message:this.html2Text(C.msg||C.message||"")};if(C.time&&C.time.getTime){D.localTime=C.time.toLocaleTimeString?C.time.toLocaleTimeString():C.time.toString();D.elapsedTime=C.time.getTime()-this.getLastTime();D.totalTime=C.time.getTime()-YAHOO.widget.Logger.get!
 StartTime();}var E=B.ENTRY_TEMPLATE.cloneNode(true);if(this.verboseOutput){E.className+=" yui-log-verbose";}E.innerHTML=A.replace(/\{(\w+)\}/g,function(F,G){return(G in D)?D[G]:"";});return E;},html2Text:function(A){if(A){A+="";return A.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");}return"";},_sName:null,_buffer:null,_consoleMsgCount:0,_lastTime:null,_timeout:null,_filterCheckboxes:null,_categoryFilters:null,_sourceFilters:null,_elContainer:null,_elHd:null,_elCollapse:null,_btnCollapse:null,_title:null,_elConsole:null,_elFt:null,_elBtns:null,_elCategoryFilters:null,_elSourceFilters:null,_btnPause:null,_btnClear:null,_initContainerEl:function(B){B=YAHOO.util.Dom.get(B);if(B&&B.tagName&&(B.tagName.toLowerCase()=="div")){this._elContainer=B;YAHOO.util.Dom.addClass(this._elContainer,"yui-log");}else{this._elContainer=document.body.appendChild(document.createElement("div"));YAHOO.util.Dom.addClass(this._elContainer,"yui-log");
+YAHOO.widget.LogMsg=function(A){this.msg=this.time=this.category=this.source=this.sourceDetail=null;if(A&&(A.constructor==Object)){for(var B in A){if(A.hasOwnProperty(B)){this[B]=A[B];}}}};YAHOO.widget.LogWriter=function(A){if(!A){YAHOO.log("Could not instantiate LogWriter due to invalid source.","error","LogWriter");return;}this._source=A;};YAHOO.widget.LogWriter.prototype.toString=function(){return"LogWriter "+this._sSource;};YAHOO.widget.LogWriter.prototype.log=function(A,B){YAHOO.widget.Logger.log(A,B,this._source);};YAHOO.widget.LogWriter.prototype.getSource=function(){return this._source;};YAHOO.widget.LogWriter.prototype.setSource=function(A){if(!A){YAHOO.log("Could not set source due to invalid source.","error",this.toString());return;}else{this._source=A;}};YAHOO.widget.LogWriter.prototype._source=null;YAHOO.widget.LogReader=function(B,A){this._sName=YAHOO.widget.LogReader._index;YAHOO.widget.LogReader._index++;this._buffer=[];this._filterCheckboxes={};this._lastTi!
 me=YAHOO.widget.Logger.getStartTime();if(A&&(A.constructor==Object)){for(var C in A){if(A.hasOwnProperty(C)){this[C]=A[C];}}}this._initContainerEl(B);if(!this._elContainer){YAHOO.log("Could not instantiate LogReader due to an invalid container element "+B,"error",this.toString());return;}this._initHeaderEl();this._initConsoleEl();this._initFooterEl();this._initDragDrop();this._initCategories();this._initSources();YAHOO.widget.Logger.newLogEvent.subscribe(this._onNewLog,this);YAHOO.widget.Logger.logResetEvent.subscribe(this._onReset,this);YAHOO.widget.Logger.categoryCreateEvent.subscribe(this._onCategoryCreate,this);YAHOO.widget.Logger.sourceCreateEvent.subscribe(this._onSourceCreate,this);this._filterLogs();YAHOO.log("LogReader initialized",null,this.toString());};YAHOO.lang.augmentObject(YAHOO.widget.LogReader,{_index:0,ENTRY_TEMPLATE:(function(){var A=document.createElement("pre");YAHOO.util.Dom.addClass(A,"yui-log-entry");return A;})(),VERBOSE_TEMPLATE:"<p><span class='{!
 category}'>{label}</span> {totalTime}ms (+{elapsedTime}) {loca!
 lTime}:<
/p><p>{sourceAndDetail}</p><p>{message}</p>",BASIC_TEMPLATE:"<p><span class='{category}'>{label}</span> {totalTime}ms (+{elapsedTime}) {localTime}: {sourceAndDetail}: {message}</p>"});YAHOO.widget.LogReader.prototype={logReaderEnabled:true,width:null,height:null,top:null,left:null,right:null,bottom:null,fontSize:null,footerEnabled:true,verboseOutput:true,entryFormat:null,newestOnTop:true,outputBuffer:100,thresholdMax:500,thresholdMin:100,isCollapsed:false,isPaused:false,draggable:true,toString:function(){return"LogReader instance"+this._sName;},pause:function(){this.isPaused=true;this._timeout=null;this.logReaderEnabled=false;if(this._btnPause){this._btnPause.value="Resume";}},resume:function(){this.isPaused=false;this.logReaderEnabled=true;this._printBuffer();if(this._btnPause){this._btnPause.value="Pause";}},hide:function(){this._elContainer.style.display="none";},show:function(){this._elContainer.style.display="block";},collapse:function(){this._elConsole.style.display="n!
 one";if(this._elFt){this._elFt.style.display="none";}this._btnCollapse.value="Expand";this.isCollapsed=true;},expand:function(){this._elConsole.style.display="block";if(this._elFt){this._elFt.style.display="block";}this._btnCollapse.value="Collapse";this.isCollapsed=false;},getCheckbox:function(A){return this._filterCheckboxes[A];},getCategories:function(){return this._categoryFilters;},showCategory:function(B){var D=this._categoryFilters;if(D.indexOf){if(D.indexOf(B)>-1){return;}}else{for(var A=0;A<D.length;A++){if(D[A]===B){return;}}}this._categoryFilters.push(B);this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=true;}},hideCategory:function(B){var D=this._categoryFilters;for(var A=0;A<D.length;A++){if(B==D[A]){D.splice(A,1);break;}}this._filterLogs();var C=this.getCheckbox(B);if(C){C.checked=false;}},getSources:function(){return this._sourceFilters;},showSource:function(A){var D=this._sourceFilters;if(D.indexOf){if(D.indexOf(A)>-1){return;}}else{for(var B=0;B<!
 D.length;B++){if(A==D[B]){return;}}}D.push(A);this._filterLogs!
 ();var C
=this.getCheckbox(A);if(C){C.checked=true;}},hideSource:function(A){var D=this._sourceFilters;for(var B=0;B<D.length;B++){if(A==D[B]){D.splice(B,1);break;}}this._filterLogs();var C=this.getCheckbox(A);if(C){C.checked=false;}},clearConsole:function(){this._timeout=null;this._buffer=[];this._consoleMsgCount=0;var A=this._elConsole;A.innerHTML="";},setTitle:function(A){this._title.innerHTML=this.html2Text(A);},getLastTime:function(){return this._lastTime;},formatMsg:function(C){var B=YAHOO.widget.LogReader,A=this.entryFormat||(this.verboseOutput?B.VERBOSE_TEMPLATE:B.BASIC_TEMPLATE),D={category:C.category,label:C.category.substring(0,4).toUpperCase(),sourceAndDetail:C.sourceDetail?C.source+" "+C.sourceDetail:C.source,message:this.html2Text(C.msg||C.message||"")};if(C.time&&C.time.getTime){D.localTime=C.time.toLocaleTimeString?C.time.toLocaleTimeString():C.time.toString();D.elapsedTime=C.time.getTime()-this.getLastTime();D.totalTime=C.time.getTime()-YAHOO.widget.Logger.getStartTi!
 me();}var E=B.ENTRY_TEMPLATE.cloneNode(true);if(this.verboseOutput){E.className+=" yui-log-verbose";}E.innerHTML=A.replace(/\{(\w+)\}/g,function(F,G){return(G in D)?D[G]:"";});return E;},html2Text:function(A){if(A){A+="";return A.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");}return"";},_sName:null,_buffer:null,_consoleMsgCount:0,_lastTime:null,_timeout:null,_filterCheckboxes:null,_categoryFilters:null,_sourceFilters:null,_elContainer:null,_elHd:null,_elCollapse:null,_btnCollapse:null,_title:null,_elConsole:null,_elFt:null,_elBtns:null,_elCategoryFilters:null,_elSourceFilters:null,_btnPause:null,_btnClear:null,_initContainerEl:function(B){B=YAHOO.util.Dom.get(B);if(B&&B.tagName&&(B.tagName.toLowerCase()=="div")){this._elContainer=B;YAHOO.util.Dom.addClass(this._elContainer,"yui-log");}else{this._elContainer=document.body.appendChild(document.createElement("div"));YAHOO.util.Dom.addClass(this._elContainer,"yui-log");
 YAHOO.util.Dom.addClass(this._elContainer,"yui-log-container");var A=this._elContainer.style;if(this.width){A.width=this.width;}if(this.right){A.right=this.right;}if(this.top){A.top=this.top;}if(this.left){A.left=this.left;A.right="auto";}if(this.bottom){A.bottom=this.bottom;A.top="auto";}if(this.fontSize){A.fontSize=this.fontSize;}if(navigator.userAgent.toLowerCase().indexOf("opera")!=-1){document.body.style+="";}}},_initHeaderEl:function(){var A=this;if(this._elHd){YAHOO.util.Event.purgeElement(this._elHd,true);this._elHd.innerHTML="";}this._elHd=this._elContainer.appendChild(document.createElement("div"));this._elHd.id="yui-log-hd"+this._sName;this._elHd.className="yui-log-hd";this._elCollapse=this._elHd.appendChild(document.createElement("div"));this._elCollapse.className="yui-log-btns";this._btnCollapse=document.createElement("input");this._btnCollapse.type="button";this._btnCollapse.className="yui-log-button";this._btnCollapse.value="Collapse";this._btnCollapse=this._!
 elCollapse.appendChild(this._btnCollapse);YAHOO.util.Event.addListener(A._btnCollapse,"click",A._onClickCollapseBtn,A);this._title=this._elHd.appendChild(document.createElement("h4"));this._title.innerHTML="Logger Console";},_initConsoleEl:function(){if(this._elConsole){YAHOO.util.Event.purgeElement(this._elConsole,true);this._elConsole.innerHTML="";}this._elConsole=this._elContainer.appendChild(document.createElement("div"));this._elConsole.className="yui-log-bd";if(this.height){this._elConsole.style.height=this.height;}},_initFooterEl:function(){var A=this;if(this.footerEnabled){if(this._elFt){YAHOO.util.Event.purgeElement(this._elFt,true);this._elFt.innerHTML="";}this._elFt=this._elContainer.appendChild(document.createElement("div"));this._elFt.className="yui-log-ft";this._elBtns=this._elFt.appendChild(document.createElement("div"));this._elBtns.className="yui-log-btns";this._btnPause=document.createElement("input");this._btnPause.type="button";this._btnPause.className="!
 yui-log-button";this._btnPause.value="Pause";this._btnPause=th!
 is._elBt
ns.appendChild(this._btnPause);YAHOO.util.Event.addListener(A._btnPause,"click",A._onClickPauseBtn,A);this._btnClear=document.createElement("input");this._btnClear.type="button";this._btnClear.className="yui-log-button";this._btnClear.value="Clear";this._btnClear=this._elBtns.appendChild(this._btnClear);YAHOO.util.Event.addListener(A._btnClear,"click",A._onClickClearBtn,A);this._elCategoryFilters=this._elFt.appendChild(document.createElement("div"));this._elCategoryFilters.className="yui-log-categoryfilters";this._elSourceFilters=this._elFt.appendChild(document.createElement("div"));this._elSourceFilters.className="yui-log-sourcefilters";}},_initDragDrop:function(){if(YAHOO.util.DD&&this.draggable&&this._elHd){var A=new YAHOO.util.DD(this._elContainer);A.setHandleElId(this._elHd.id);this._elHd.style.cursor="move";}},_initCategories:function(){this._categoryFilters=[];var C=YAHOO.widget.Logger.categories;for(var A=0;A<C.length;A++){var B=C[A];this._categoryFilters.push(B);if(!
 this._elCategoryFilters){this._createCategoryCheckbox(B);}}},_initSources:function(){this._sourceFilters=[];var C=YAHOO.widget.Logger.sources;for(var B=0;B<C.length;B++){var A=C[B];this._sourceFilters.push(A);if(this._elSourceFilters){this._createSourceCheckbox(A);}}},_createCategoryCheckbox:function(B){var A=this;if(this._elFt){var E=this._elCategoryFilters;var D=E.appendChild(document.createElement("span"));D.className="yui-log-filtergrp";var C=document.createElement("input");C.id="yui-log-filter-"+B+this._sName;C.className="yui-log-filter-"+B;C.type="checkbox";C.category=B;C=D.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",A._onCheckCategory,A);var F=D.appendChild(document.createElement("label"));F.htmlFor=C.id;F.className=B;F.innerHTML=B;this._filterCheckboxes[B]=C;}},_createSourceCheckbox:function(A){var D=this;if(this._elFt){var F=this._elSourceFilters;var E=F.appendChild(document.createElement("span"));E.className="yui-log-filtergrp";var C=docum!
 ent.createElement("input");C.id="yui-log-filter"+A+this._sName!
 ;C.class
Name="yui-log-filter"+A;C.type="checkbox";C.source=A;C=E.appendChild(C);C.checked=true;YAHOO.util.Event.addListener(C,"click",D._onCheckSource,D);var B=E.appendChild(document.createElement("label"));B.htmlFor=C.id;B.className=A;B.innerHTML=A;this._filterCheckboxes[A]=C;}},_filterLogs:function(){if(this._elConsole!==null){this.clearConsole();this._printToConsole(YAHOO.widget.Logger.getStack());}},_printBuffer:function(){this._timeout=null;if(this._elConsole!==null){var B=this.thresholdMax;B=(B&&!isNaN(B))?B:500;if(this._consoleMsgCount<B){var A=[];for(var C=0;C<this._buffer.length;C++){A[C]=this._buffer[C];}this._buffer=[];this._printToConsole(A);}else{this._filterLogs();}if(!this.newestOnTop){this._elConsole.scrollTop=this._elConsole.scrollHeight;}}},_printToConsole:function(I){var B=I.length,M=document.createDocumentFragment(),P=[],Q=this.thresholdMin,C=this._sourceFilters.length,N=this._categoryFilters.length,K,H,G,F,L;if(isNaN(Q)||(Q>this.thresholdMax)){Q=0;}K=(B>Q)?(B-Q)!
 :0;for(H=K;H<B;H++){var E=false;var J=false;var O=I[H];var A=O.source;var D=O.category;for(G=0;G<C;G++){if(A==this._sourceFilters[G]){J=true;break;}}if(J){for(G=0;G<N;G++){if(D==this._categoryFilters[G]){E=true;break;}}}if(E){F=this.formatMsg(O);if(typeof F==="string"){P[P.length]=F;}else{M.insertBefore(F,this.newestOnTop?M.firstChild||null:null);}this._consoleMsgCount++;this._lastTime=O.time.getTime();}}if(P.length){P.splice(0,0,this._elConsole.innerHTML);this._elConsole.innerHTML=this.newestOnTop?P.reverse().join(""):P.join("");}else{if(M.firstChild){this._elConsole.insertBefore(M,this.newestOnTop?this._elConsole.firstChild||null:null);}}},_onCategoryCreate:function(D,C,A){var B=C[0];A._categoryFilters.push(B);if(A._elFt){A._createCategoryCheckbox(B);}},_onSourceCreate:function(D,C,A){var B=C[0];A._sourceFilters.push(B);if(A._elFt){A._createSourceCheckbox(B);}},_onCheckCategory:function(A,B){var C=this.category;
-if(!this.checked){B.hideCategory(C);}else{B.showCategory(C);}},_onCheckSource:function(A,B){var C=this.source;if(!this.checked){B.hideSource(C);}else{B.showSource(C);}},_onClickCollapseBtn:function(A,B){if(!B.isCollapsed){B.collapse();}else{B.expand();}},_onClickPauseBtn:function(A,B){if(!B.isPaused){B.pause();}else{B.resume();}},_onClickClearBtn:function(A,B){B.clearConsole();},_onNewLog:function(D,C,A){var B=C[0];A._buffer.push(B);if(A.logReaderEnabled===true&&A._timeout===null){A._timeout=setTimeout(function(){A._printBuffer();},A.outputBuffer);}},_onReset:function(C,B,A){A._filterLogs();}};if(!YAHOO.widget.Logger){YAHOO.widget.Logger={loggerEnabled:true,_browserConsoleEnabled:false,categories:["info","warn","error","time","window"],sources:["global"],_stack:[],maxStackEntries:2500,_startTime:new Date().getTime(),_lastTime:null,_windowErrorsHandled:false,_origOnWindowError:null};YAHOO.widget.Logger.log=function(B,F,G){if(this.loggerEnabled){if(!F){F="info";}else{F=F.toLo!
 caleLowerCase();if(this._isNewCategory(F)){this._createNewCategory(F);}}var C="global";var A=null;if(G){var D=G.indexOf(" ");if(D>0){C=G.substring(0,D);A=G.substring(D,G.length);}else{C=G;}if(this._isNewSource(C)){this._createNewSource(C);}}var H=new Date();var J=new YAHOO.widget.LogMsg({msg:B,time:H,category:F,source:C,sourceDetail:A});var I=this._stack;var E=this.maxStackEntries;if(E&&!isNaN(E)&&(I.length>=E)){I.shift();}I.push(J);this.newLogEvent.fire(J);if(this._browserConsoleEnabled){this._printToBrowserConsole(J);}return true;}else{return false;}};YAHOO.widget.Logger.reset=function(){this._stack=[];this._startTime=new Date().getTime();this.loggerEnabled=true;this.log("Logger reset");this.logResetEvent.fire();};YAHOO.widget.Logger.getStack=function(){return this._stack;};YAHOO.widget.Logger.getStartTime=function(){return this._startTime;};YAHOO.widget.Logger.disableBrowserConsole=function(){YAHOO.log("Logger output to the function console.log() has been disabled.");thi!
 s._browserConsoleEnabled=false;};YAHOO.widget.Logger.enableBro!
 wserCons
ole=function(){this._browserConsoleEnabled=true;YAHOO.log("Logger output to the function console.log() has been enabled.");};YAHOO.widget.Logger.handleWindowErrors=function(){if(!YAHOO.widget.Logger._windowErrorsHandled){if(window.error){YAHOO.widget.Logger._origOnWindowError=window.onerror;}window.onerror=YAHOO.widget.Logger._onWindowError;YAHOO.widget.Logger._windowErrorsHandled=true;YAHOO.log("Logger handling of window.onerror has been enabled.");}else{YAHOO.log("Logger handling of window.onerror had already been enabled.");}};YAHOO.widget.Logger.unhandleWindowErrors=function(){if(YAHOO.widget.Logger._windowErrorsHandled){if(YAHOO.widget.Logger._origOnWindowError){window.onerror=YAHOO.widget.Logger._origOnWindowError;YAHOO.widget.Logger._origOnWindowError=null;}else{window.onerror=null;}YAHOO.widget.Logger._windowErrorsHandled=false;YAHOO.log("Logger handling of window.onerror has been disabled.");}else{YAHOO.log("Logger handling of window.onerror had already been disable!
 d.");}};YAHOO.widget.Logger.categoryCreateEvent=new YAHOO.util.CustomEvent("categoryCreate",this,true);YAHOO.widget.Logger.sourceCreateEvent=new YAHOO.util.CustomEvent("sourceCreate",this,true);YAHOO.widget.Logger.newLogEvent=new YAHOO.util.CustomEvent("newLog",this,true);YAHOO.widget.Logger.logResetEvent=new YAHOO.util.CustomEvent("logReset",this,true);YAHOO.widget.Logger._createNewCategory=function(A){this.categories.push(A);this.categoryCreateEvent.fire(A);};YAHOO.widget.Logger._isNewCategory=function(B){for(var A=0;A<this.categories.length;A++){if(B==this.categories[A]){return false;}}return true;};YAHOO.widget.Logger._createNewSource=function(A){this.sources.push(A);this.sourceCreateEvent.fire(A);};YAHOO.widget.Logger._isNewSource=function(A){if(A){for(var B=0;B<this.sources.length;B++){if(A==this.sources[B]){return false;}}return true;}};YAHOO.widget.Logger._printToBrowserConsole=function(C){if(window.console&&console.log){var E=C.category;var D=C.category.substring(0!
 ,4).toUpperCase();var G=C.time;var F;if(G.toLocaleTimeString){!
 F=G.toLo
caleTimeString();}else{F=G.toString();}var H=G.getTime();var B=(YAHOO.widget.Logger._lastTime)?(H-YAHOO.widget.Logger._lastTime):0;YAHOO.widget.Logger._lastTime=H;var A=F+" ("+B+"ms): "+C.source+": ";if(YAHOO.env.ua.webkit){A+=C.msg;}console.log(A,C.msg);}};YAHOO.widget.Logger._onWindowError=function(A,C,B){try{YAHOO.widget.Logger.log(A+" ("+C+", line "+B+")","window");if(YAHOO.widget.Logger._origOnWindowError){YAHOO.widget.Logger._origOnWindowError();}}catch(D){return false;}};YAHOO.widget.Logger.log("Logger initialized");}YAHOO.register("logger",YAHOO.widget.Logger,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+if(!this.checked){B.hideCategory(C);}else{B.showCategory(C);}},_onCheckSource:function(A,B){var C=this.source;if(!this.checked){B.hideSource(C);}else{B.showSource(C);}},_onClickCollapseBtn:function(A,B){if(!B.isCollapsed){B.collapse();}else{B.expand();}},_onClickPauseBtn:function(A,B){if(!B.isPaused){B.pause();}else{B.resume();}},_onClickClearBtn:function(A,B){B.clearConsole();},_onNewLog:function(D,C,A){var B=C[0];A._buffer.push(B);if(A.logReaderEnabled===true&&A._timeout===null){A._timeout=setTimeout(function(){A._printBuffer();},A.outputBuffer);}},_onReset:function(C,B,A){A._filterLogs();}};if(!YAHOO.widget.Logger){YAHOO.widget.Logger={loggerEnabled:true,_browserConsoleEnabled:false,categories:["info","warn","error","time","window"],sources:["global"],_stack:[],maxStackEntries:2500,_startTime:new Date().getTime(),_lastTime:null,_windowErrorsHandled:false,_origOnWindowError:null};YAHOO.widget.Logger.log=function(B,F,G){if(this.loggerEnabled){if(!F){F="info";}else{F=F.toLo!
 caleLowerCase();if(this._isNewCategory(F)){this._createNewCategory(F);}}var C="global";var A=null;if(G){var D=G.indexOf(" ");if(D>0){C=G.substring(0,D);A=G.substring(D,G.length);}else{C=G;}if(this._isNewSource(C)){this._createNewSource(C);}}var H=new Date();var J=new YAHOO.widget.LogMsg({msg:B,time:H,category:F,source:C,sourceDetail:A});var I=this._stack;var E=this.maxStackEntries;if(E&&!isNaN(E)&&(I.length>=E)){I.shift();}I.push(J);this.newLogEvent.fire(J);if(this._browserConsoleEnabled){this._printToBrowserConsole(J);}return true;}else{return false;}};YAHOO.widget.Logger.reset=function(){this._stack=[];this._startTime=new Date().getTime();this.loggerEnabled=true;this.log("Logger reset");this.logResetEvent.fire();};YAHOO.widget.Logger.getStack=function(){return this._stack;};YAHOO.widget.Logger.getStartTime=function(){return this._startTime;};YAHOO.widget.Logger.disableBrowserConsole=function(){YAHOO.log("Logger output to the function console.log() has been disabled.");thi!
 s._browserConsoleEnabled=false;};YAHOO.widget.Logger.enableBro!
 wserCons
ole=function(){this._browserConsoleEnabled=true;YAHOO.log("Logger output to the function console.log() has been enabled.");};YAHOO.widget.Logger.handleWindowErrors=function(){if(!YAHOO.widget.Logger._windowErrorsHandled){if(window.error){YAHOO.widget.Logger._origOnWindowError=window.onerror;}window.onerror=YAHOO.widget.Logger._onWindowError;YAHOO.widget.Logger._windowErrorsHandled=true;YAHOO.log("Logger handling of window.onerror has been enabled.");}else{YAHOO.log("Logger handling of window.onerror had already been enabled.");}};YAHOO.widget.Logger.unhandleWindowErrors=function(){if(YAHOO.widget.Logger._windowErrorsHandled){if(YAHOO.widget.Logger._origOnWindowError){window.onerror=YAHOO.widget.Logger._origOnWindowError;YAHOO.widget.Logger._origOnWindowError=null;}else{window.onerror=null;}YAHOO.widget.Logger._windowErrorsHandled=false;YAHOO.log("Logger handling of window.onerror has been disabled.");}else{YAHOO.log("Logger handling of window.onerror had already been disable!
 d.");}};YAHOO.widget.Logger.categoryCreateEvent=new YAHOO.util.CustomEvent("categoryCreate",this,true);YAHOO.widget.Logger.sourceCreateEvent=new YAHOO.util.CustomEvent("sourceCreate",this,true);YAHOO.widget.Logger.newLogEvent=new YAHOO.util.CustomEvent("newLog",this,true);YAHOO.widget.Logger.logResetEvent=new YAHOO.util.CustomEvent("logReset",this,true);YAHOO.widget.Logger._createNewCategory=function(A){this.categories.push(A);this.categoryCreateEvent.fire(A);};YAHOO.widget.Logger._isNewCategory=function(B){for(var A=0;A<this.categories.length;A++){if(B==this.categories[A]){return false;}}return true;};YAHOO.widget.Logger._createNewSource=function(A){this.sources.push(A);this.sourceCreateEvent.fire(A);};YAHOO.widget.Logger._isNewSource=function(A){if(A){for(var B=0;B<this.sources.length;B++){if(A==this.sources[B]){return false;}}return true;}};YAHOO.widget.Logger._printToBrowserConsole=function(C){if(window.console&&console.log){var E=C.category;var D=C.category.substring(0!
 ,4).toUpperCase();var G=C.time;var F;if(G.toLocaleTimeString){!
 F=G.toLo
caleTimeString();}else{F=G.toString();}var H=G.getTime();var B=(YAHOO.widget.Logger._lastTime)?(H-YAHOO.widget.Logger._lastTime):0;YAHOO.widget.Logger._lastTime=H;var A=F+" ("+B+"ms): "+C.source+": ";if(YAHOO.env.ua.webkit){A+=C.msg;}console.log(A,C.msg);}};YAHOO.widget.Logger._onWindowError=function(A,C,B){try{YAHOO.widget.Logger.log(A+" ("+C+", line "+B+")","window");if(YAHOO.widget.Logger._origOnWindowError){YAHOO.widget.Logger._origOnWindowError();}}catch(D){return false;}};YAHOO.widget.Logger.log("Logger initialized");}YAHOO.register("logger",YAHOO.widget.Logger,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/logger/logger.js
===================================================================
--- trunk/root/static/yui/logger/logger.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/logger/logger.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /****************************************************************************/
 /****************************************************************************/
@@ -2041,4 +2041,4 @@
 }
 
 
-YAHOO.register("logger", YAHOO.widget.Logger, {version: "2.6.0", build: "1321"});
+YAHOO.register("logger", YAHOO.widget.Logger, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/menu/README
===================================================================
--- trunk/root/static/yui/menu/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1130 +0,0 @@
-*** version 2.6.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Submenus no longer appear in the top-left corner of the viewport before moving into position when 
-  initially made visible.
-
-+ Submenus are no longer re-shown when the mouse moves from a submenu back to its parent MenuItem.
-
-+ A Menu's shadow is now rendered at the correct dimensions consistently in Internet Explorer.
-
-+ Menus no longer trigger a JavaScript error if the "constraintoviewport" configuration property 
-  is set to "true", but the "context" configuration property is not set.
-
-
-Added the following features:
------------------------------
-
-+ Added a "keepopen" configuration property to YAHOO.widget.Menu that, when set to "true", will 
-  result in a Menu remaining open when clicked.
-
-+ Popup Menus now automatically focus themselves when made visible, and when hidden, restore focus 
-  to the element in the DOM that had focus prior to them being made visible.
-
-+ Added a new "submenutoggleregion" configuration property to YAHOO.widget.MenuBar.  When set to 
-  "true", only clicking a specific region of a MenuBarItem will toggle the display of a submenu.  
-  The width of the toggle region is defined 
-  by YAHOO.widget.MenuBar.prototype.SUBMENU_TOGGLE_REGION_WIDTH.
-
-
-
-*** version 2.6.0 Preview 1 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Setting the "submenualignment" configuration property for a MenuBar instance will no longer 
-  result in the value being automatically propagated across all submenus.
-
-+ Setting a MenuItem instance's "disabled" configuration property to "true" inside the scope of 
-  a "click" event listener registered via the "onclick" configuration property will no longer 
-  prevent the "click" event of its parent Menu instance from firing.
-  
-+ MenuItem instances of submenus that open to the left of their parent MenuItem will now 
-  highlight in response to the "mouseover" event in Firefox 2.
-  
-+ The Menu library no longer logs errors when strict error reporting is enabled in FireFox.
-
-+ Submenus will no longer hide in IE 7 when moving the mouse from an item in a MenuBar to 
-  its corresponding submenu.
-
-+ MenuItem instances placed in groups are now properly removed and destroyed when the 
-  "clearContent" method of their parent Menu instance is called.
-
-+ The "monitorresize" configuration property now propagates to submenus.
-  
-+ Updated the "maxheight" configuration property so that it will only scroll the body of a Menu if 
-  its content is composed of MenuItem instances.
-
-+ Updated the implementation of Menu's "constraintoviewport" configuration property so that 
-  submenus will automatically scroll and reposition themselves to remain inside the boundaries of 
-  the viewport regardless of the default value supplied to the "submenualignment" 
-  configuration property.
-
-
-Added the following features:
------------------------------
-
-+ Added a new "preventcontextoverlap" configuration property that is used to manage whether or not 
-  a submenu should overlap its parent MenuItem when the "constraintoviewport" configuration 
-  property is set to "true".
-
-+ Added a new "shadow" configuration property.  The "shadow" configuration property should be 
-  set via the constructor and cannot be changed.  Previously a Menu's shadow was created via the 
-  public "onRender" method.  This method has been removed.
-
-
-Changes:
---------
-
-+ The "url" configuration property for MenuItem instances with a submenu will now be set to 
-  "#[submenu_id]" if the "url" property is not otherwise specified by the user. 
-
-+ Dynamically positioned submenus now have a default z-index of 1, rather than one greater than 
-  the z-index of their parent Menu.
-
-
-*** version 2.5.2 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Mousing over a Menu instance will no longer result in the JavaScript error "oItem has 
-  no properties"
-
-+ When using a custom skin, a Menu instance's width will no longer continue to increase in IE each 
-  time it is displayed.
-
-+ Menu no longer blocks the display of the browser's default context menu when right clicking on a 
-  MenuItem instance in Firefox 2 for Windows or Firefox 3.
-
-+ Fixed the behavior of the "clicktohide" configuration property so that the property properly 
-  cascades to all submenus when a Menu instance's "position" configuration property is set to 
-  "dynamic".
-
-+ Rolled back a change introduced in 2.5.0 that modified the behavior of submenus so that they are 
-  no longer hidden then re-shown when the mouse is moving from a visible submenu back to its parent 
-  MenuItem instance.  This change in 2.5.0 introduced a problem where multiple submenus of a menu
-  could end up being displayed at once.  Currently targeting to restore the behavior introduced in 
-  2.5.0 in 2.6.0.
-
-
-
-*** version 2.5.1 ***
-
-Fixed the following bugs:
--------------------------
-
-+ The "url" configuration property of YAHOO.widget.MenuItem now returns the exact value of the 
-  "href" attribute of its anchor element in Internet Explorer. 
-
-+ Clicking on an item in a Menu will no longer cause Firefox to scroll to the top of the window.
-
-+ Improved Menu's viewport boundary awareness.
-
-
-
-*** version 2.5.0 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Corrected the paths to all images in the original Menu CSS file so that checked MenuItems now
-  render correctly.
-
-+ Clicking on a disabled MenuItem instance will no longer cause the browser to navigate to 
-  the top of the current page.
-
-+ Removed the use of the "yui-skin-sam" class name from the Menu core CSS file.
-
-+ Scrolling Menus now render correctly in IE 6 and IE 7.
-
-+ Submenus are no longer hidden then re-shown when the mouse is moving from a visible submenu back
-  to its parent MenuItem instance.
-
-
-
-*** version 2.4.1 ***
-
-+ No changes
-
-
-
-*** version 2.4.0 ***
-
-
-Fixed the following bugs:
--------------------------
-
-+ The "context" property of YAHOO.widget.Menu works better in IE 6.
-
-+ Immediate submenus of a YAHOO.widget.MenuBar instance will now re-align 
-  themselves to their parent YAHOO.widget.MenuBarItem instance to remain inside 
-  the boundaries of the browser viewport when the "constraintoviewport" 
-  property is set to "true."
-
-+ A submenu will now appear in the correct position when its parent menu 
-  is scrolled.
-
-+ YAHOO.widget.MenuItem instances will no longer increase in height when their
-  submenu is made visible.
-
-+ Removed superfluous white space between YAHOO.widget.MenuItem instances in 
-  IE 6 (Strict Mode and Quirks Mode) and IE 7 (Quirks Mode).
-  
-+ Statically positioned YAHOO.widget.MenuBar instances will no longer be 
-  rendered in the wrong position when the Container CSS file is included in 
-  the page.
-
-+ Usage of the "maxheight" configuration property will no longer change the 
-  position of a YAHOO.widget.Menu instance's shadow element 
-  (<DIV class="yui-menu-shadow">).  The shadow element will alway be the last 
-  child node of a menu's root element.
-
-+ YAHOO.widget.MenuBar instances with their "position" configuration property 
-  set to "dynamic" are no longer rendered with scrollbars in Firefox for 
-  Mac OS X.
-		
-
-
-Added the following features:
------------------------------
-
-+ Added a new "minscrollheight" configuration property to YAHOO.widget.Menu
-  that defines the minimum threshold for the "maxheight" configuration property.
-
-+ Added a new "scrollincrement" configuration property to YAHOO.widget.Menu 
-  which can be used to increase or decrease the scroll speed of scolled menu.
-
-+ Hidden YAHOO.widget.Menu instances are now positioned off screen to 
-  prevent them from introducing scrollbars on the browser viewport.  The 
-  default off-screen position is -10000 for both the x and y coordinates and is
-  defined in a new constant: "YAHOO.widget.Menu.prototype.OFF_SCREEN_POSITION".
-  The method responsible for moving a menu off the screen is 
-  "YAHOO.widget.Menu.prototype.positionOffScreen" which is called in response
-  to the firing of the "hide" event.
-    
-
-Changes:
---------
-
-+ Setting "iframe" configuration property on a YAHOO.widget.MenuBar instance
-  will now result in the property cascading down to all submenus.
-
-+ The "position" configuration property no longer automatically enables the 
-  iframe shim for YAHOO.widget.Menu instances.  Previously, setting the 
-  "position" configuration property to "static" would automatically 
-  set the "iframe" configuration property to "false," and setting "position" to
-  "dynamic" would set the "iframe" configuration property to "true" for IE 6.
-
-+ YAHOO.widget.Menu instances no longer have their widths set automatically 
-  as they are rendered.
-
-+ Modified the DOM structure for a YAHOO.widget.MenuItem instance so that the 
-  submenu indicator node (<EM class="submenuindicator" />) and checked 
-  indicator node (<EM class="checkedindicator" />) that were previously direct 
-  descendants of the <A/> node are no longer present.  The updated DOM
-  structure of a YAHOO.widget.MenuItem instance is now:
-
-    <LI class="yuimenuitem">
-    
-        <A class="yuimenuitemlabel">
-    
-            Text Label
-    
-            <EM class="helptext"> Help Text </EM>   (Optional)
-    
-        </A>
-    
-        <DIV class="yuimenu"> ... </DIV> (Optional submenu node)
-    
-    </LI>
-
-
-  With the removal of the submenu indicator and checked indicator nodes,
-  the following YAHOO.widget.MenuItem constants, used to define the inner 
-  text of these nodes, have been removed:
-
-    - YAHOO.widget.MenuItem.prototype.COLLAPSED_SUBMENU_INDICATOR_TEXT
-    - YAHOO.widget.MenuItem.prototype.EXPANDED_SUBMENU_INDICATOR_TEXT
-    - YAHOO.widget.MenuItem.prototype.DISABLED_SUBMENU_INDICATOR_TEXT
-    - YAHOO.widget.MenuItem.prototype.CHECKED_TEXT
-    - YAHOO.widget.MenuItem.prototype.DISABLED_CHECKED_TEXT
-    
-  The "submenuIndicator" property of YAHOO.widget.MenuItem has also 
-  been removed.
-
-
-+ Modified the CSS class names used to represent the state of 
-  YAHOO.widget.MenuItem and YAHOO.widget.MenuBarItem instances.  Previous to 
-  2.4.0 the following CSS class names were applied only to the <A> element 
-  representing the text label for YAHOO.widget.MenuItem and 
-  YAHOO.widget.MenuBarItem instances:
-
-    + hashelptext
-    + checked
-    + hassubmenu
-    + selected
-    + disabled
-
-
-  To provide more flexibility and facilitate easier styling of state, a set of
-  new CSS class names have been created that are applied to both the root 
-  <LI> node and its child <A> node for YAHOO.widget.MenuItem and 
-  YAHOO.widget.MenuBarItem instances:
-  
-
-    New YAHOO.widget.MenuItem CSS classes:
-    --------------------------------------
-    
-    The following are applied to the <LI> element:
-    
-    .yuimenuitem-hassubmenu
-    .yuimenuitem-checked
-    .yuimenuitem-selected
-    .yuimenuitem-disabled
-    
-    .yuimenuitem-checked-selected
-    .yuimenuitem-checked-disabled
-    
-    .yuimenuitem-hassubmenu-selected
-    .yuimenuitem-hassubmenu-disabled
-    
-
-    The following are applied to the <A> element:
-
-    .yuimenuitemlabel-hassubmenu
-    .yuimenuitemlabel-checked
-    .yuimenuitemlabel-selected
-    .yuimenuitemlabel-disabled
-    
-    .yuimenuitemlabel-checked-selected
-    .yuimenuitemlabel-checked-disabled
-    
-    .yuimenuitemlabel-hassubmenu-selected
-    .yuimenuitemlabel-hassubmenu-disabled
-
-
-    New YAHOO.widget.MenuBarItem CSS classes:
-    -----------------------------------------
-    
-    The following are applied to the <LI> element:
-    
-    .yuimenubaritem-hassubmenu
-    .yuimenubaritem-selected
-    .yuimenubaritem-disabled
-    
-    .yuimenubaritem-hassubmenu-selected
-    .yuimenubaritem-hassubmenu-disabled
-    
-
-    The following are applied to the <A> element:
-    
-    .yuimenubaritemlabel-hassubmenu
-    .yuimenubaritemlabel-selected
-    .yuimenubaritemlabel-disabled
-    
-    .yuimenubaritemlabel-hassubmenu-selected
-    .yuimenubaritemlabel-hassubmenu-disabled
-
-
-+ Deprecated the YAHOO.widget.ContextMenuItem class and replaced it 
-  with YAHOO.widget.MenuItem.
-
-+ All submenus of a YAHOO.widget.ContextMenu instance are now of type
-  YAHOO.widget.Menu.
-
-+ Updated the behavior of the "clicktohide" configuration property of 
-  YAHOO.widget.Menu so that it behaves as documented: controls whether or not 
-  clicking outside a menu results in the menu hiding.
-
-
-
-*** version 2.3.1 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Including the Container CSS along with Menu CSS on a page will no longer 
-  result in statically positioned Menu instances rendering as hidden.
-
-+ The focus outline for MenuItem instances no longer sticks in Opera.
-
-+ Clicking MenuItem instances without a value for the "url" configuration 
-  property will no longer result in the MenuItem losing focus.
-  
-+ Improved compatibility with Menu CSS and YUI Base CSS.
-
-
-*** version 2.3 ***
-
-Fixed the following bugs:
--------------------------
-
-+ Pressing the Esc key when an item in a MenuBar has focus will now result
-  in the item blurring in IE.
-
-+ Clicking a YAHOO.widget.MenuItem instance with a "url" configuration property 
-  set will now result in the hiding of its parent YAHOO.widget.Menu instance.
-
-+ Creating an empty YAHOO.widget.Menu instance from existing markup will no 
-  longer result in a JavaScript error.
-  
-+ The "constraintoviewport" configuration property now correctly keeps a 
-  YAHOO.widget.Menu instance inside the boundaries of the browser viewport.
-
-+ Tuned scrolling behavior so that when the user has scrolled to the bottom of 
-  a YAHOO.widget.Menu instance and starts pressing the up arrow key, the 
-  contents begin scrolling only when the next item to be selected is out of 
-  view of the scrollable area.
-
-+ Modified "removeMenu" method of YAHOO.widget.MenuManager so that it removes
-  the specified YAHOO.widget.Menu instance from the collection of visible menus.
- 
-+ Calling the "destroy" method of a visible YAHOO.widget.Menu instance now
-  purges it from the YAHOO.widget.Manager's collection of visible Menus.
- 
-+ YAHOO.widget.Menu instances now blur before hiding.
-
-+ The debug version of YAHOO.widget.Menu now correctly logs as "Menu" rather 
-  than "Overlay" in IE.
-  
-+ Setting a YAHOO.widget.MenuItem instance's "checked" configuration property 
-  to "true" two or more times followed by "false" will no longer result in some 
-  of the DOM elements used to render the checkmark icon will no longer remain 
-  in the item's DOM.
-
-+ It is now possible to click anywhere on a YAHOO.widget.MenuItem instance 
-  and have it navigate to the URL specified by its "url" configuration property 
-  - even if the MenuItem has a value specified for its "target"
-  configuation property.
-
-+ The "toString" method of YAHOO.widget.MenuItem now returns the instance's id.
-
-+ Setting the YAHOO.widget.MenuItem.prototype.COLLAPSED_SUBMENU_INDICATOR_TEXT 
-  constant to empty string no longer results in JavaScript error.
-
-+ YAHOO.widget.MenuBar instances behave the same regardless of the value
-  of their "position" configuration property.
-
-+ It is now possible to ctr or shift-click on YAHOO.widget.MenuItem instances 
-  without the browser automatically redirecting to the URL specified by the 
-  MenuItem's "url" configuration property.
-
-
-Added the following features:
------------------------------
-
-+ Prototype of all classes (Menu, ContextMenu, MenuBar, MenuItem, 
-  ContextMenuItem, MenuBarItem) are augmented with YAHOO.util.EventProvider.
-
-+ Added the following methods to YAHOO.widget.MenuManager:
-
-    - "getMenuItem"
-    - "getMenuItemGroup"
-
-+ Added the following methods to YAHOO.widget.Menu:
-
-    - "subscribe" 
-    - "getSubmenus"
-    - "onRender"
-
-+ Added a "disabled" configuration property to YAHOO.widget.Menu.
-
-+ Added the constant "CSS_LABEL_CLASS_NAME" to YAHOO.widget.MenuItem that 
-  represents the name of the CSS class applied to the <A/> node that is the 
-  first child of its root <LI/> node.
-
-+ Added the constant "CSS_LABEL_CLASS_NAME" to YAHOO.widget.MenuBarItem that 
-  represents the name of the CSS class applied to the <A/> node that is the 
-  first child of its root <LI/> node.
-
-+ Added ability for YAHOO.widget.Menu instances to have shadow:
-
-    - The shadow for a Menu is implemented by appending a new element as the 
-      last child of its root <DIV/> element:
-
-        <DIV class="yuimenu">
-            <DIV class="bd">
-                <UL>
-                    <LI class="yuimenuitem"/>
-                    <LI class="yuimenuitem"/>
-                    <LI class="yuimenuitem"/>
-                </UL>
-            </DIV>
-            <DIV class="yui-menu-shadow"/>
-        </DIV>
-
-    - The code that creates the shadow element resides inside the Menu's 
-      public "onRender" prototype method.  To disable the creation of a Menu's 
-      shadow override the prototype of the "onRender" method:
-      
-      YAHOO.widget.Menu.prototype.onRender = function () { };
-      
-    - The actual creation of the shadow element is deferred until the Menu is 
-      made visible for the first time.
-      
-    - The shadow element is only created for Menu instances whose
-      "position" configuration property is set to "dynamic."
-
-    - A Menu's shadow element can be styled via two CSS classes:
-
-        + "yui-menu-shadow"  - Applied to the shadow element when it is created.
-        + "yui-menu-shadow-visible" - Applied to the shadow element when the 
-        Menu is visible; it is removed when hidden.
-
-    - The shadow element is only styled when using the new "Sam" skin, for
-      the previous default skin its "display" property is set to "none."
-
-
-Changes:
---------
-
-+ Deprecated "browser" property of YAHOO.widget.MenuItem in favor 
-  of the YAHOO.env.ua.
-
-+ Modified the DOM structure for a YAHOO.widget.MenuItem instance so that its
-  root <LI/> node only has only two direct descendants: 
-  
-    - The <A/> node for its text label
-    - The <DIV/> node for its submenu
-  
-  The submenu indicator node (<EM class="submenuindicator" />), checked 
-  indicator node (<EM class="checkedindicator" />), and help text node
-  (<EM class="helptext" />) that were previously direct descendants of a
-  YAHOO.widget.MenuItem instance's root <LI/> are now direct descendants of 
-  its <A/> node:
-
-    <LI class="yuimenuitem || yuimenubaritem">
-
-        <A class="yuimenuitemlabel || yuimenubaritemlabel">
-
-            Text Label
-
-            <EM class="helptext"> Help Text </EM>   (Optional)
-            <EM class="checkedindicator"> ... </EM> (Optional)
-            <EM class="submenuindicator"> ... </EM> (Optional)
-
-        </A>
-
-        <DIV class="yuimenu"> ... </DIV> (Optional submenu node)
-
-    </LI>
-
-+ As a result of the DOM structure changes for YAHOO.widget.MenuItem, the
-  following CSS class are now only applied to a YAHOO.widget.MenuItem 
-  instance's <A/> node:
-
-    - "selected"
-    - "disabled"
-    - "checked"
-    - "hashelptext"
-    - "hassubmenu"
-
-+ The "text" configuration property of YAHOO.widget.MenuItem now accepts a 
-  string of HTML (previously only accepted plain text).
-
-+ The "emphasis" and "strongemphasis" configuration properties of 
-  YAHOO.widget.MenuItem are no longer interpreted when building from 
-  existing markup.
-
-+ All YAHOO.widget.MenuItem instances built from markup must have an <A> node 
-  as the first child of its root <LI> node.
-
-+ When building YAHOO.widget.MenuItem instances from existing markup, the value 
-  of the "text" property is set to the innerHTML of the menu item's <A> node.
-
-+ Deprecated the following YAHOO.widget.MenuItem configuration properties:
-
-    - "strongemphasis"
-    - "emphasis"
-    - "helptext"
-
-
-Known Issues
-------------
-
-+ ContextMenu works differently in Opera
-  --------------------------------------
-  Opera doesn't support the "contextmenu" DOM event used to trigger the display
-  of YAHOO.widget.ContextMenu instances.  As a result, clicking the right mouse 
-  button in Opera will not result in the display of a ContextMenu instance 
-  as it would in IE, Gecko, and Safari.  To work around this shortcoming, users 
-  will need to do the following to trigger the display of 
-  YAHOO.widget.ContextMenu instances in Opera:
-
-    - Opera for Windows: Hold down the control key while clicking with the 
-      left mouse button.
-
-    - Opera for Mac OS X: Hold down the command/Apple key while clicking with  
-      the left mouse button.
-
-+ Focus highlight sticks in Opera 
-  -------------------------------
-  In Opera focus is designated via the application of a background color 
-  to an element's text node.  When a Menu instance has focus in Opera, the 
-  focus highlight can remain on a MenuItem instance even after it has blurred.
-
-+ ContextMenu instances cannot be invoked by clicking on Java Applets
-  -------------------------------------------------------------------
-  When a Java Applet is specified as the "trigger" element for a ContextMenu 
-  instance it will not display when the Applet is clicked.  This is not a 
-  bug in the ContextMenu class, but rather a result of DOM events not bubbling 
-  up from inside Java Applets.  For more information on this issue see:
-  http://tech.groups.yahoo.com/group/ydn-javascript/message/12128
-
-+ Flash Movies appear on top of Menu instances
-  --------------------------------------------
-  Flash movies can appear on top of Menu instances in IE and Gecko-based
-  browsers.  To fix this problem, set the "wmode" of the Flash movie to either
-  "transparent" or "opaque" as indicated below: 
-
-  Via the <object> tag:
-
-    <object>
-        <param name="wmode" value="opaque">
-    </object>
-
-    <object>
-        <param name="wmode" value="transparent"> 
-    </object>
-
-  Via the <embed> tag:
-    
-    <embed wmode="transparent"> ... </embed>
-    <embed wmode="opaque"> ... </embed>
-
-    ** For more information see 
-       http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_15523
-
-+ Menu instances not rendered at correct z-index in IE
-  -------------------------------------------------------
-  In IE, when a Menu instance is rendered inside a relatively positioned 
-  element the z-index of the Menu instance is now relative to its 
-  relatively positioned parent element.  This is not a bug in the 
-  Menu class, but rather a bug in IE where relatively positioned elements 
-  establish a new stacking context for their child nodes.  To avoid this 
-  bug is recommend that all Menu instances that need to be able to float
-  above any other element in the document be made direct descendants of the 
-  <body> element.
-  
-  ** For more information see 
-   http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html
-
-+ Elements with scrollbars poke through Menu instances floating above them
-  ------------------------------------------------------------------------
-  There is a bug in Gecko-based browsers for Mac OS X where an element's 
-  scrollbars will poke through absolutely positioned elements floating above
-  them.  To fix this problem the "overflow" property of a Menu instance's 
-  shadow element is toggled between "hidden" and "auto" (through the application 
-  and removal of the "hide-scrollbars" and "show-scrollbars" CSS classes) as its 
-  "visibility" configuration property is toggled between "false" and "true."
-  Therefore, the shadow element acts like a shim, blocking scrollbars from
-  poking through the Menu.
-
-  PLEASE NOTE:  
-
-  1) The "hide-scrollbars" and "show-scrollbars" CSS classes classes are 
-     applied only for Gecko on Mac OS X and are added/removed to/from the 
-     Menu's root HTML element (DIV) via the "hideMacGeckoScrollbars" and 
-     "showMacGeckoScrollbars" methods of YAHOO.widget.Overlay.  
-  
-  2) This fix is only applied when using the "Sam" skin; the CSS for the 
-     original Menu skin does not contain any rules for rendering the 
-     shadow element.  
-  
-  3) Once the fix is applied the bug will reappear if the window loses focus.  
-     This can be fixed via Javascript by hiding and showing the Menu instance 
-     when the window receives focus:
-
-        YAHOO.util.Event.on(window, "focus", function () {
-        
-            oMyMenu.hide();
-            oMyMenu.show();
-        
-        });
-
-    ** For more information see 
-       https://bugzilla.mozilla.org/show_bug.cgi?id=187435
-
-
-*** version 2.2.2 ***
-
-Fixed the following bugs:
--------------------------
-
-+ "toString" method of MenuItem, MenuBarItem and ContextMenuItem classes will
-  no longer throw a JavaScript error when using the debug version 
-  of the Event utility.
-
-+ "toString" method of Menu, MenuBar and ContextMenu classes will
-  no longer attempt to output the instance's id if it is not available.
-
-+ Logger statements output by debug version of MenuManager are now properly 
-  categorized as "MenuManager"
-
-
-
-*** version 2.2.1 ***
-
-Added the following features:
------------------------------
-
-+ Added the following methods to YAHOO.widget.Menu:
-  - "focus"
-  - "blur"
-  - "hasFocus"
-
-+ Added the following Custom Events to YAHOO.widget.Menu:
-    + "focusEvent"
-    + "blurEvent"
-
-+ Added the following methods to YAHOO.widget.MenuManager:
-  - "getFocusedMenuItem"
-  - "getFocusedMenu"
-
-+ Added "hasFocus" method to YAHOO.widget.MenuItem
-
-
-Fixed the following bugs:
--------------------------
-
-+ Menu instances no longer set focus to themselves by default when made 
-  visible.  Menus only receive focus in response to the following events: 
-    - The user mouses down on a MenuItem instance
-    - The user tabs into a MenuItem instance
-
-+ Application of the "maxheight" configuration property is now correctly 
-  deferred until the "render" event fires when Menu instance is being 
-  lazy loaded.
-
-+ The "maxheight" configuration property can now be set multiple times without 
-  a Menu instance restoring itself to its original default height.
-
-+ The "maxheight" configuration property can now be set on hidden Menu 
-  instances that use lazy loading. 
-
-+ Menu instances with a "width" configuration property set will now render 
-  at the specified width rather than shrink wrapping to their contents.
-
-+ Menu item help text no longer wraps to the next line in Opera 9.
-
-+ Immediate submenus of a Menubar instance will no longer shift their position 
-  to try and remain inside the confines of the browser's viewport.
-
-+ Lazy loaded ContextMenu instances now appear in the correct position when 
-  they are made visible for the first time.
-
-+ MenuBar instances no longer throw JavaScript errors when navigating items with
-  submenus containing no active items using the keyboard.
-
-+ Replaced use of native "hasOwnProperty" method 
-  with YAHOO.lang.hasOwnProperty.
-
-+ Rendered Menu instances will now update their width when items are added 
-  or removed.
-
-+ Mousing over a Menu instance in an IE window that does not have focus will 
-  no longer cause the window to receive focus.
-
-
-Changes:
---------
-
-+ "activeItem" property of YAHOO.widget.Menu now returns a reference to the 
-  Menu's currently selected item.
-
-+ Added a "visible" CSS class that is applied to visible Menu instances.
-
-+ Refactored the Menu family to improve performance, especially when working 
-  with a large number of instances in IE6.
-
-
-
-*** version 2.2.0 ***
-
-Added the following features:
------------------------------
-
-* Added two new methods to YAHOO.widget.Menu:
-
-    * "getItems" - Returns a flat array of the items in a menu.
-
-    * "clearContent" - Removes all of the content from the menu, including the 
-      menu items, group titles, header and footer.
-
-
-* Added three new configuration attributes to YAHOO.widget.Menu:
-
-    * "submenuhidedelay" - Number indicating the time (in milliseconds) that 
-      should expire before a submenu is hidden when the user mouses out of a 
-      menu item heading in the direction of a submenu. The value must be 
-      greater than or equal to the value specified for the "showdelay" 
-      configuration property.
-
-    * "maxheight" - Defines the maximum height (in pixels) for a menu before 
-      the contents of the body are scrolled. 
-
-    * "classname" - CSS class to be applied to the menu's root <div> element. 
-      The specified class(es) are appended in addition to the default class as 
-      specified by the menu's CSS_CLASS_NAME constant.
-
-
-* Added new constants to YAHOO.widget.MenuItem:
-
-    * COLLAPSED_SUBMENU_INDICATOR_TEXT - String representing the text for the 
-      <em> element used for the submenu arrow indicator.
-
-    * EXPANDED_SUBMENU_INDICATOR_TEXT - String representing the text for the 
-      submenu arrow indicator element (<em>) when the submenu is visible.
-
-    * DISABLED_SUBMENU_INDICATOR_ALT_TEXT - String representing the text for 
-      the submenu arrow indicator element (<em>) when the menu item is disabled.
-
-    * CHECKED_TEXT - String representing the text to be used for the checked 
-      indicator element (<em>).
-
-    * DISABLED_CHECKED_TEXT - String representing the text to be used for the 
-      checked indicator element (<em>) when the menu item is disabled.
-
-
-* Added two new configuration attributes to YAHOO.widget.MenuItem:
-
-    * "onclick" - Object literal representing the code to be executed when the 
-      button is clicked. Format:
-
-        {
-            fn: Function, // The handler to call when the event fires.
-            obj: Object, // An object to pass back to the handler.
-            scope: Object // The object to use for the scope of the handler.
-        }
-    
-    * "classname" - CSS class to be applied to the menu item's root <li> 
-      element. The specified class(es) are appended in addition to the default 
-      class as specified by the menu item's CSS_CLASS_NAME constant.
-
-
-* Added an "id" property to YAHOO.widget.MenuItem that represents the id of
-  the menu item's root <li> node.  Although not a configuration attribute, this
-  property should be set via the object literal of configuration attributes 
-  passed as the second argument to the constructor.  If no value is 
-  specified, then one will be generated using the "generateId" method of the 
-  Dom utility (YAHOO.widget.Dom).
-
-* Added a "trigger context menu event" 
-  (YAHOO.widget.ContextMenu.triggerContextMenuEvent) that fires when the DOM 
-  "contextmenu" event ("mousedown" for Opera) is fired by one of the elemeents
-  defined as a YAHOO.widget.ContextMenu instance's trigger.
-
-* Added a "cancel" method to YAHOO.widget.ContextMenu that can be used to 
-  cancel the display of a YAHOO.widget.ContextMen instance.  This method 
-  should be called within the scope of a "context menu" event handler for 
-  one of the context menu's triggers 
-  (YAHOO.widget.ContextMenu.triggerContextMenuEvent).
-
-
-Fixed the following bugs:
--------------------------
-
-* Users can now move diagonally from a menu item to its corresponding submenu 
-  without the submenu hiding immediately.
-
-* "destroy" method of YAHOO.widget.Menu now unsubscribes from the "text resize"  
-  event (YAHOO.widget.Module.textResizeEvent).
-
-* Browser progress bar no longer flashes when hovering over checked menu items 
-  or menu items with submenus.
-
-* Menu item submenu indicator image no longer jumps to the next line in 
-  quirks mode.
-
-* Mouse events no longer fire in Firefox if a YAHOO.widget.Menu instance is 
-  moved by script into a stationary mouse pointer.
-
-* Modified "toString" method of YAHOO.widget.ContextMenuItem to return the 
-  correct class name, as it was reporting as YAHOO.widget.MenuBarItem.
-
-
-Changes:
---------
-
-* Default value for the "showdelay" configuration attribute is now 250
-
-* Modified code so that all Menu images are added via CSS background images.  
-  As a result, the following constants and properties have been deprecated:
-
-    * YAHOO.widget.MenuItem.SUBMENU_INDICATOR_IMAGE_PATH
-    * YAHOO.widget.MenuItem.SELECTED_SUBMENU_INDICATOR_IMAGE_PATH
-    * YAHOO.widget.MenuItem.DISABLED_SUBMENU_INDICATOR_IMAGE_PATH
-    * YAHOO.widget.MenuItem.COLLAPSED_SUBMENU_INDICATOR_ALT_TEXT
-    * YAHOO.widget.MenuItem.EXPANDED_SUBMENU_INDICATOR_ALT_TEXT
-    * YAHOO.widget.MenuItem.DISABLED_SUBMENU_INDICATOR_ALT_TEXT
-    * YAHOO.widget.MenuItem.CHECKED_IMAGE_PATH
-    * YAHOO.widget.MenuItem.SELECTED_CHECKED_IMAGE_PATH
-    * YAHOO.widget.MenuItem.DISABLED_CHECKED_IMAGE_PATH
-    * YAHOO.widget.MenuItem.CHECKED_IMAGE_ALT_TEXT
-    * YAHOO.widget.MenuItem.DISABLED_CHECKED_IMAGE_ALT_TEXT
-    * YAHOO.widget.MenuItem.IMG_ROOT
-    * YAHOO.widget.MenuItem.IMG_ROOT_SSL
-    * YAHOO.widget.MenuItem.imageRoot
-    * YAHOO.widget.MenuItem.isSecure
-
-
-
-*** version 0.12.2 ***
-
-* No changes
-
-
-
-*** version 0.12.1 ***
-
-Fixed the following bugs:
--------------------------
-
-* Placed the call to the DOM "focus" method used by the MenuItem class inside 
-  a zero-second timeout to resolve a race condition between menu positioning 
-  and focusing of a menu item that resulted in the browser viewport 
-  scrolling unnecessarily.
-
-* Switched to JSMin for JavaScript compression to resolve issues with the 
-  minified version.  
-
-* Disabled menu item instances will no longer display a submenu if the item is 
-  clicked or moused over. 
-
-* Can no longer select more than one item in a menu if using the keyboard and 
-  mouse simultaneously.
-
-* Calling the "destory" method on a menu will now unregister all of the menu's 
-  submenus from the MenuManager.  
-
-
-
-*** version 0.12 ***
-
-Added the following features:
------------------------------
-
-* Added the YAHOO.widget.MenuManager singleton class.
-
-* Added two new methods to YAHOO.widget.Menu:
-
-    * "addItems" - Adds an array of items to a menu.
-
-    * "getRoot" - Returns the root menu in a menu hierarchy.
-
-* Added two new events to YAHOO.widget.Menu:
-
-    * "itemAddedEvent" - Fires when an item is added to a menu.
-
-    * "itemRemovedEvent" - Fires when an item is removed from a menu.
-
-* Added two new properties to YAHOO.widget.Menu:
-
-    * "itemData" - Array of items to be added to the menu.
-
-    * "lazyLoad" - Boolean indicating if the menu's "lazy load" feature 
-      is enabled.
-
-* Added new configuration properties to YAHOO.widget.Menu:
-
-    * "hidedelay" - Hides the menu after the specified number of milliseconds.  
-
-    * "showdelay" - Shows the menu after the specified number of milliseconds.  
-
-    * "container" - The containing element the menu should be rendered into.  
-
-    * "clicktohide" - Boolean indicating if the menu will automatically be 
-      hidden if the user clicks outside of it.
-
-    * "autosubmenudisplay" - Boolean indicating if submenus are automatically 
-      made visible when the user mouses over the menu's items.
-
-* Added a "toString" method to YAHOO.widget.MenuItem, YAHOO.widget.MenuBarItem 
-  and YAHOO.widget.ContextMenuItem that returns the class name followed by the 
-  value of the item's "text" configuration property.
-
-
-Fixed the following bugs:
--------------------------
-
-* Setting a YAHOO.widget.ContextMenu instance's "trigger" configuration 
-  property will remove all previous triggers before setting up the new ones.
-
-* "destroy" method of YAHOO.widget.ContextMenu cleans up all DOM event handlers.
-
-* Clicking on a menu item with a submenu no longer hides/collapses the 
-  entire menu.
-
-* Clicking an item's submenu indicator image no longer collapses the 
-  entire menu.
-  
-  
-Changes:
---------
-
-* Deprecated the YAHOO.widget.MenuModule and YAHOO.widget.MenuModuleItem 
-  classes.  The Base classes are now YAHOO.widget.Menu and 
-  YAHOO.widget.MenuItem.
-
-* "addItem" and "insertItem" methods of YAHOO.widget.Menu now accept an 
-  object literal representing YAHOO.widget.MenuItem configuration properties.
-
-* "clearActiveItem" now takes an argument: flag indicating if the Menu 
-  instance's active item should be blurred.
-
-* Switched the default value of the "visible" configuration property for 
-  YAHOO.widget.Menu to "false."
-
-* Switched the default value of the "constraintoviewport" configuration 
-  property for YAHOO.widget.Menu to "true."
-
-* Overloaded the "submenu" configuration property for YAHOO.widget.MenuItem
-  so that it now can accept any of the following:
-
-    * YAHOO.widget.Menu instance
-    * Object literal representation of a menu
-    * Element id
-    * Element reference
-
-* "hide" and "show" methods of statically positioned menus now toggle the their
-  element's "display" style property between "block" and "none."
-
-
-
-*** version 0.10.0 ***
-
-* Initial release
-
-* Known issues:
-
-      * Some Firefox extensions disable the ability for JavaScript to prevent  
-        the display of the browser's default context menu.  These extensions
-        can cause the YUI ContextMenu to stop working.  If you encounter this 
-        problem, you can reset the context menu preference in Firefox back to 
-        the default by making sure the "Disable or replace context menus" 
-        preference is checked:
-
-            Mac Firefox 1.0: 
-            -------------------
-            Preferences > Web Features > 
-                Advanced... > Disable or replace context menus
-
-            Mac Firefox 1.5
-            -------------------
-            Preferences > Context > 
-                Advanced... > Disable or replace context menus
-
-            Windows Firefox 1.0
-            -------------------
-            Tools > Options > Web Features > 
-                Advanced... > Disable or replace context menus
-
-            Windows Firefox 1.5
-            -------------------
-            Tools > Options > Context > 
-                Advanced... > Disable or replace context menus
-
-
-
-*** version 0.11.3 ***
-
-Added the following features:
------------------------------
-
-* Added a "target" configuration property to the MenuModuleItem object that
-  allows the user to specify the target of an item's anchor element.  Items 
-  that make use of the "target" configuration property will require the user 
-  to click exactly on the item's anchor element to navigate to the specified 
-  URL.
-
-* Items without a "url" property set will automatically hide their parent 
-  menu instance(s) when clicked.
-
-
-Fixed the following bugs:
--------------------------
-
-* Items in a submenu should now navigate to their specified URL when clicked.
-
-* Removed MenuBar's use of "overflow:hidden."  This fixes an issue in Firefox
-  1.5 in which submenus of a Menubar instance cannot overlay other absolutely 
-  positioned elements on the page.
-
-* Submenus of a Menubar instance will now automatically have their iframe shim
-  enabled in IE<7.
-
-* Statically positioned Menubar and Menu instances will now render with the 
-  correct position and dimensions in Safari.
-
-* MenuModuleItem's "focus" method now checks to make sure that an item's 
-  "display" style property is not "none" before trying to set focus to its
-  anchor element.
-  
-* A ContextMenu instance will now hide all other ContextMenu instances before
-  displaying itself.
-
-* Removed the dead space in front of an item's submenu indicator image in IE.  
-  This space was causing an item's submenu to flicker when the user hovered 
-  over it.
-
-
-Changes:
---------
-
-* Moved the DOM event handlers for every menu from the root DIV node of each 
-  instance to the document object.  This change reduces the number of DOM event 
-  handlers used by Menu to eight, improving the cleanup time required by the 
-  Event utility.
-
-                
-
-*** version 0.11.0 ***
-
-Added the following features:
------------------------------
-* Overloaded the "addItem" and "insertItem" methods of MenuModule to accept a 
-  string or a MenuModuleItem instance
-
-* Added the ability to define a MenuItem instance as being "checked"
-
-
-Fixed the following bugs:
--------------------------
-* Changing the path for the submenu indicator image of one MenuModuleItem 
-  subclass will no longer affect other subclasses
-
-* MenuItem instances built from existing markup without anchor tags will no 
-  longer trigger a JavaScript error when clicked
-
-* Modified the implementation of the "imageRoot" property for the 
-  MenuModuleItem class so that it is set to a secure/non-secure path when the
-  object is instantiated
-
-* Menu instances now resize in response to changes to the browser's font size
-
-* Modified the propagation of the MenuModule class's "submenualignment" 
-  configuration property so that it only applies to instances of the same type
-
-* Adjusted the specificity of the style rule that controls the position of a 
-  MenuItem instance's submenu indicator image to prevent it from wrapping in IE
-
-* Specified a width and height for submenu indicator images in the Menu 
-  stylesheet to ensure that Menu instances are always rendered at the correct 
-  width
-
-* Clicking a MenuItem instance will no longer trigger two HTTP GET requests
-
-* Users can now control or shift-click on MenuItem links
-
-
-Changes:
---------
-* In the Menu stylesheet (menu.css), switched from using "first" class to
-  "first-of-type" class
-
-* Changed case of MenuModuleItem class's "subMenuIndicator" property 
-  to "submenuIndicator"
\ No newline at end of file

Modified: trunk/root/static/yui/menu/assets/menu-core.css
===================================================================
--- trunk/root/static/yui/menu/assets/menu-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/assets/menu-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Menu & MenuBar styles */
 
@@ -235,4 +235,8 @@
 
     overflow: auto;
 
+}
+
+.yui-overlay.yui-force-redraw {
+   margin-bottom: 1px;
 }
\ No newline at end of file

Modified: trunk/root/static/yui/menu/assets/menu.css
===================================================================
--- trunk/root/static/yui/menu/assets/menu.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/assets/menu.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Menu & MenuBar styles */
 

Modified: trunk/root/static/yui/menu/assets/skins/sam/menu-skin.css
===================================================================
--- trunk/root/static/yui/menu/assets/skins/sam/menu-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/assets/skins/sam/menu-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* MenuBar style rules */
 
@@ -285,7 +285,7 @@
     */
 
     opacity: .12;
-    *filter: alpha(opacity=12);  /* For IE */
+    filter: alpha(opacity=12);  /* For IE */
 
 }
 

Modified: trunk/root/static/yui/menu/assets/skins/sam/menu.css
===================================================================
--- trunk/root/static/yui/menu/assets/skins/sam/menu.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/assets/skins/sam/menu.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 -1700px;}.yui-skin-sam .yuimenubarite!
 mlabel-selected{border-color:#7D98B8;}.yui-skin-sam .yuimenuba!
 rnav .yu
imenubaritemlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yuimenu h6.first-of-type{border-width:0;}.yui-skin-s!
 am .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(../../../../assets/skins/sam/sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicator.png);background-position:right center;backgroun!
 d-repeat:no-repeat;}.yui-skin-sam .yuimenuitem-checked{backgro!
 und-imag
e:url(menuitem_checkbox.png);background-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;*filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}
+.yuimenu{top:-999em;left:-999em;}.yuimenubar{position:static;}.yuimenu .yuimenu,.yuimenubar .yuimenu{position:absolute;}.yuimenubar li,.yuimenu li{list-style-type:none;}.yuimenubar ul,.yuimenu ul,.yuimenubar li,.yuimenu li,.yuimenu h6,.yuimenubar h6{margin:0;padding:0;}.yuimenuitemlabel,.yuimenubaritemlabel{text-align:left;white-space:nowrap;}.yuimenubar ul{*zoom:1;}.yuimenubar .yuimenu ul{*zoom:normal;}.yuimenubar>.bd>ul:after{content:".";display:block;clear:both;visibility:hidden;height:0;line-height:0;}.yuimenubaritem{float:left;}.yuimenubaritemlabel,.yuimenuitemlabel{display:block;}.yuimenuitemlabel .helptext{font-style:normal;display:block;margin:-1em 0 0 10em;}.yui-menu-shadow{position:absolute;visibility:hidden;z-index:-1;}.yui-menu-shadow-visible{top:2px;right:-3px;left:-3px;bottom:-3px;visibility:visible;}.hide-scrollbars *{overflow:hidden;}.hide-scrollbars select{display:none;}.yuimenu.show-scrollbars,.yuimenubar.show-scrollbars{overflow:visible;}.yuimenu.hide-scr!
 ollbars .yui-menu-shadow,.yuimenubar.hide-scrollbars .yui-menu-shadow{overflow:hidden;}.yuimenu.show-scrollbars .yui-menu-shadow,.yuimenubar.show-scrollbars .yui-menu-shadow{overflow:auto;}.yui-overlay.yui-force-redraw{margin-bottom:1px;}.yui-skin-sam .yuimenubar{font-size:93%;line-height:2;*line-height:1.9;border:solid 1px #808080;background:url(../../../../assets/skins/sam/sprite.png) repeat-x 0 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritem{border-right:solid 1px #ccc;}.yui-skin-sam .yuimenubaritemlabel{padding:0 10px;color:#000;text-decoration:none;cursor:default;border-style:solid;border-color:#808080;border-width:1px 0;*position:relative;margin:-1px 0;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel{padding-right:20px;*display:inline-block;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu{background:url(menubaritem_submenuindicator.png) right center no-repeat;}.yui-skin-sam .yuimenubaritem-selected{background:url(../../../../assets/skins/sam/sprite.png)!
  repeat-x 0 -1700px;}.yui-skin-sam .yuimenubaritemlabel-select!
 ed{borde
r-color:#7D98B8;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-selected{border-left-width:1px;margin-left:-1px;*left:-1px;}.yui-skin-sam .yuimenubaritemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenubarnav .yuimenubaritemlabel-hassubmenu-disabled{background-image:url(menubaritem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenu{font-size:93%;line-height:1.5;*line-height:1.45;}.yui-skin-sam .yuimenubar .yuimenu,.yui-skin-sam .yuimenu .yuimenu{font-size:100%;}.yui-skin-sam .yuimenu .bd{*zoom:1;_zoom:normal;border:solid 1px #808080;background-color:#fff;}.yui-skin-sam .yuimenu .yuimenu .bd{*zoom:normal;}.yui-skin-sam .yuimenu ul{padding:3px 0;border-width:1px 0 0 0;border-color:#ccc;border-style:solid;}.yui-skin-sam .yuimenu ul.first-of-type{border-width:0;}.yui-skin-sam .yuimenu h6{font-weight:bold;border-style:solid;border-color:#ccc;border-width:1px 0 0 0;color:#a4a4a4;padding:3px 10px 0 10px;}.yui-skin-sam .yuimenu ul.hastitle,.yui-skin-sam .yui!
 menu h6.first-of-type{border-width:0;}.yui-skin-sam .yuimenu .yui-menu-body-scrolled{border-color:#ccc #808080;overflow:hidden;}.yui-skin-sam .yuimenu .topscrollbar,.yui-skin-sam .yuimenu .bottomscrollbar{height:16px;border:solid 1px #808080;background:#fff url(../../../../assets/skins/sam/sprite.png) no-repeat 0 0;}.yui-skin-sam .yuimenu .topscrollbar{border-bottom-width:0;background-position:center -950px;}.yui-skin-sam .yuimenu .topscrollbar_disabled{background-position:center -975px;}.yui-skin-sam .yuimenu .bottomscrollbar{border-top-width:0;background-position:center -850px;}.yui-skin-sam .yuimenu .bottomscrollbar_disabled{background-position:center -875px;}.yui-skin-sam .yuimenuitem{_border-bottom:solid 1px #fff;}.yui-skin-sam .yuimenuitemlabel{padding:0 20px;color:#000;text-decoration:none;cursor:default;}.yui-skin-sam .yuimenuitemlabel .helptext{margin-top:-1.5em;*margin-top:-1.45em;}.yui-skin-sam .yuimenuitem-hassubmenu{background-image:url(menuitem_submenuindicato!
 r.png);background-position:right center;background-repeat:no-r!
 epeat;}.
yui-skin-sam .yuimenuitem-checked{background-image:url(menuitem_checkbox.png);background-position:left center;background-repeat:no-repeat;}.yui-skin-sam .yui-menu-shadow-visible{background-color:#000;opacity:.12;filter:alpha(opacity=12);}.yui-skin-sam .yuimenuitem-selected{background-color:#B3D4FF;}.yui-skin-sam .yuimenuitemlabel-disabled{cursor:default;color:#A6A6A6;}.yui-skin-sam .yuimenuitem-hassubmenu-disabled{background-image:url(menuitem_submenuindicator_disabled.png);}.yui-skin-sam .yuimenuitem-checked-disabled{background-image:url(menuitem_checkbox_disabled.png);}

Modified: trunk/root/static/yui/menu/menu-debug.js
===================================================================
--- trunk/root/static/yui/menu/menu-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/menu-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 
 
@@ -1271,7 +1271,7 @@
 
 
 /** 
-* @property _bHideDelayEventHandlersAssigned
+* @property _useHideDelay
 * @description Boolean indicating if the "mouseover" and "mouseout" event 
 * handlers used for hiding the menu via a call to "YAHOO.lang.later" have 
 * already been assigned.
@@ -1279,7 +1279,7 @@
 * @private
 * @type Boolean
 */
-_bHideDelayEventHandlersAssigned: false,
+_useHideDelay: false,
 
 
 /**
@@ -1653,10 +1653,13 @@
         this.keyDownEvent.subscribe(this._onKeyDown);
         this.keyPressEvent.subscribe(this._onKeyPress);
         this.blurEvent.subscribe(this._onBlur);
-        
 
-        if (UA.gecko || UA.webkit) {
 
+		//	Fixes an issue in Firefox 2 and Webkit where Dom's "getX" and "getY" 
+		//	methods return values that don't take scrollTop into consideration 
+
+        if ((UA.gecko && UA.gecko < 1.9) || UA.webkit) {
+
             this.cfg.subscribeToConfigEvent(_Y, this._onYChange);
 
         }
@@ -2637,6 +2640,10 @@
 				Dom.isAncestor(this.element, oTarget))) {
 	
 			// Menu mouseover logic
+
+	        if (this._useHideDelay) {
+	        	this._cancelHideDelay();
+	        }
 	
 			this._nCurrentMouseX = 0;
 	
@@ -2832,7 +2839,11 @@
 			!Dom.isAncestor(this.element, oRelatedTarget)) || bMovingToSubmenu)) {
 	
 			// Menu mouseout logic
-	
+
+	        if (this._useHideDelay) {
+	        	this._execHideDelay();
+	        }
+
 			Event.removeListener(this.element, _MOUSEMOVE, this._onMouseMove);
 	
 			this._nCurrentMouseX = Event.getPageX(oEvent);
@@ -2881,6 +2892,7 @@
 		oItem = p_aArgs[1],
 		bInMenuAnchor = false,
 		oSubmenu,
+		oMenu,
 		oRoot,
 		sId,
 		sURL,
@@ -2891,16 +2903,16 @@
 	var hide = function () {
 
 		/*
-			There is an inconsistency between Firefox 2 for Mac OS X and Firefox 2 Windows 
+			There is an inconsistency between Firefox for Mac OS X and Firefox Windows 
 			regarding the triggering of the display of the browser's context menu and the 
 			subsequent firing of the "click" event. In Firefox for Windows, when the user 
 			triggers the display of the browser's context menu the "click" event also fires 
 			for the document object, even though the "click" event did not fire for the 
 			element that was the original target of the "contextmenu" event. This is unique 
-			to Firefox on Windows. For all other A-Grade browsers, including Firefox 2 for 
+			to Firefox on Windows. For all other A-Grade browsers, including Firefox for 
 			Mac OS X, the "click" event doesn't fire for the document object. 
 
-			This bug in Firefox 2 for Windows affects Menu as Menu instances listen for 
+			This bug in Firefox for Windows affects Menu as Menu instances listen for 
 			events at the document level and have an internal "click" event handler they 
 			use to hide themselves when clicked. As a result, in Firefox for Windows a 
 			Menu will hide when the user right clicks on a MenuItem to raise the browser's 
@@ -2969,8 +2981,15 @@
 	
 						sId = sURL.substr(1, nLen);
 	
-						bInMenuAnchor = Dom.isAncestor(this.element, sId);
+						oMenu = YAHOO.widget.MenuManager.getMenu(sId);
 						
+						if (oMenu) {
+
+							bInMenuAnchor = 
+								(this.getRoot() === oMenu.getRoot());
+
+						}
+						
 					}
 					else if (nLen === 1) {
 	
@@ -2982,7 +3001,6 @@
 			
 			}
 
-
 	
 			if (bInMenuAnchor && !oItem.cfg.getProperty(_TARGET)) {
 	
@@ -3043,6 +3061,11 @@
         oParentMenu;
 
 
+	if (this._useHideDelay) {
+		this._cancelHideDelay();
+	}
+
+
     /*
         This function is called to prevent a bug in Firefox.  In Firefox,
         moving a DOM element into a stationary mouse pointer will cause the 
@@ -3858,8 +3881,8 @@
 		nTopRegionHeight,
 		nBottomRegionHeight,
 
-		topConstraint,
-		bottomConstraint,
+		topConstraint = scrollY + nViewportOffset,
+		bottomConstraint = scrollY + viewPortHeight - nMenuOffsetHeight - nViewportOffset,
 
 		yNew = y;
 		
@@ -3943,8 +3966,7 @@
 		var nDisplayRegionHeight = getDisplayRegionHeight(),
 			bMenuHasItems = (oMenu.getItems().length > 0),
 			nMenuMinScrollHeight,
-			fnReturnVal,
-			nNewY;
+			fnReturnVal;
 
 
 		if (nMenuOffsetHeight > nDisplayRegionHeight) {
@@ -3997,7 +4019,7 @@
 			}
 		
 		}
-		else if (nMaxHeight && (nMaxHeight != nInitialMaxHeight)) {
+		else if (nMaxHeight && (nMaxHeight !== nInitialMaxHeight)) {
 		
 			oMenu._setScrollHeight(nInitialMaxHeight);
 			oMenu.hideEvent.subscribe(resetMaxHeight);
@@ -4014,55 +4036,76 @@
 	};
 
 
-	if (oMenu.cfg.getProperty(_PREVENT_CONTEXT_OVERLAP) && bPotentialContextOverlap) {
+	// Determine if the current value for the Menu's "y" configuration property will
+	// result in the Menu being positioned outside the boundaries of the viewport
 
-		if (bCanConstrain) {
+	if (y < topConstraint || y  > bottomConstraint) {
 
-			oContextEl = aContext[0];
-			nContextElHeight = oContextEl.offsetHeight;
-			nContextElY = (Dom.getY(oContextEl) - scrollY);
+		// The current value for the Menu's "y" configuration property WILL
+		// result in the Menu being positioned outside the boundaries of the viewport
 
-			nTopRegionHeight = nContextElY;
-			nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+		if (bCanConstrain) {
 
-			setVerticalPosition();
+			if (oMenu.cfg.getProperty(_PREVENT_CONTEXT_OVERLAP) && bPotentialContextOverlap) {
 		
-		}
+				//	SOLUTION #1:
+				//	If the "preventcontextoverlap" configuration property is set to "true", 
+				//	try to flip and/or scroll the Menu to both keep it inside the boundaries of the 
+				//	viewport AND from overlaping its context element (MenuItem or MenuBarItem).
 
-		yNew = oMenu.cfg.getProperty(_Y);
-
-	}
-    else if (!(oMenu instanceof YAHOO.widget.MenuBar) && nMenuOffsetHeight >= viewPortHeight) {
+				oContextEl = aContext[0];
+				nContextElHeight = oContextEl.offsetHeight;
+				nContextElY = (Dom.getY(oContextEl) - scrollY);
 	
-		nAvailableHeight = (viewPortHeight - (nViewportOffset * 2));
+				nTopRegionHeight = nContextElY;
+				nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+	
+				setVerticalPosition();
+				
+				yNew = oMenu.cfg.getProperty(_Y);
+		
+			}
+			else if (!(oMenu instanceof YAHOO.widget.MenuBar) && 
+				nMenuOffsetHeight >= viewPortHeight) {
 
-		if (nAvailableHeight > oMenu.cfg.getProperty(_MIN_SCROLL_HEIGHT)) {
+				//	SOLUTION #2:
+				//	If the Menu exceeds the height of the viewport, introduce scroll bars
+				//	to keep the Menu inside the boundaries of the viewport
 
-			oMenu._setScrollHeight(nAvailableHeight);
-			oMenu.hideEvent.subscribe(resetMaxHeight);
+				nAvailableHeight = (viewPortHeight - (nViewportOffset * 2));
+		
+				if (nAvailableHeight > oMenu.cfg.getProperty(_MIN_SCROLL_HEIGHT)) {
+		
+					oMenu._setScrollHeight(nAvailableHeight);
+					oMenu.hideEvent.subscribe(resetMaxHeight);
+		
+					alignY();
+					
+					yNew = oMenu.cfg.getProperty(_Y);
+				
+				}
+		
+			}	
+			else {
 
-			alignY();
+				//	SOLUTION #3:
 			
-			yNew = oMenu.cfg.getProperty(_Y);
-		
+				if (y < topConstraint) {
+					yNew  = topConstraint;
+				} else if (y  > bottomConstraint) {
+					yNew  = bottomConstraint;
+				}				
+			
+			}
+
 		}
-
-    }	
-	else {
-
-		if (bCanConstrain) {
-
-			topConstraint = scrollY + nViewportOffset;
-			bottomConstraint = scrollY + viewPortHeight - nMenuOffsetHeight - nViewportOffset;
-
-			if (y < topConstraint) {
-				yNew  = topConstraint;
-			} else if (y  > bottomConstraint) {
-				yNew  = bottomConstraint;
-			}
-		} else {
+		else {
+			//	The "y" configuration property cannot be set to a value that will keep
+			//	entire Menu inside the boundary of the viewport.  Therefore, set  
+			//	the "y" configuration property to scrollY to keep as much of the 
+			//	Menu inside the viewport as possible.
 			yNew = nViewportOffset + scrollY;
-		}
+		}	
 
 	}
 
@@ -4159,13 +4202,13 @@
         }
 
 
-		// The following fixes an issue with the selected state of a MenuItem not rendering 
-		// correctly when a submenu is aligned to the left of its parent Menu instance.
+		//	The following fixes an issue with the selected state of a MenuItem 
+		//	not rendering correctly when a submenu is aligned to the left of
+		//	its parent Menu instance.
 
 		if ((this.cfg.getProperty("x") < oParentMenu.cfg.getProperty("x")) && 
-			(UA.gecko < 1.9) && 
-			!this.cfg.getProperty(_WIDTH)) {
-		
+			(UA.gecko && UA.gecko < 1.9) && !this.cfg.getProperty(_WIDTH)) {
+
 			oElement = this.element;
 			nOffsetWidth = oElement.offsetWidth;
 			
@@ -4273,6 +4316,7 @@
         case _EFFECT:
         case _CLASSNAME:
         case _SCROLL_INCREMENT:
+        case _MAX_HEIGHT:
         case _MIN_SCROLL_HEIGHT:
         case _MONITOR_RESIZE:
         case _SHADOW:
@@ -4333,6 +4377,8 @@
             
             scrollincrement: oParentCfg.getProperty(_SCROLL_INCREMENT),
             
+			maxheight: oParentCfg.getProperty(_MAX_HEIGHT),
+
             minscrollheight: oParentCfg.getProperty(_MIN_SCROLL_HEIGHT),
             
             iframe: oParentCfg.getProperty(_IFRAME),
@@ -4590,39 +4636,10 @@
 */
 configHideDelay: function (p_sType, p_aArgs, p_oMenu) {
 
-    var nHideDelay = p_aArgs[0],
-        oMouseOutEvent = this.mouseOutEvent,
-        oMouseOverEvent = this.mouseOverEvent,
-        oKeyDownEvent = this.keyDownEvent;
+    var nHideDelay = p_aArgs[0];
 
-    if (nHideDelay > 0) {
+	this._useHideDelay = (nHideDelay > 0);
 
-        /*
-            Only assign event handlers once. This way the user change 
-            the value for the hidedelay as many times as they want.
-        */
-
-        if (!this._bHideDelayEventHandlersAssigned) {
-
-            oMouseOutEvent.subscribe(this._execHideDelay);
-            oMouseOverEvent.subscribe(this._cancelHideDelay);
-            oKeyDownEvent.subscribe(this._cancelHideDelay);
-
-            this._bHideDelayEventHandlersAssigned = true;
-        
-        }
-
-    }
-    else {
-
-        oMouseOutEvent.unsubscribe(this._execHideDelay);
-        oMouseOverEvent.unsubscribe(this._cancelHideDelay);
-        oKeyDownEvent.unsubscribe(this._cancelHideDelay);
-
-        this._bHideDelayEventHandlersAssigned = false;
-
-    }
-
 },
 
 
@@ -4683,7 +4700,6 @@
         oBody,
         oHeader,
         oFooter,
-		oParent,
         fnMouseOver,
         fnMouseOut,
         nMinScrollHeight,
@@ -4701,7 +4717,6 @@
         fnMouseOver = this._onScrollTargetMouseOver;
         fnMouseOut = this._onScrollTargetMouseOut;
         nMinScrollHeight = this.cfg.getProperty(_MIN_SCROLL_HEIGHT);
-        oParent = this.parent;
 
 
 		if (nScrollHeight > 0 && nScrollHeight < nMinScrollHeight) {
@@ -4716,24 +4731,26 @@
 		oBody.scrollTop = 0;
 
 
-		/*
-			There is a bug in gecko-based browsers where an element whose 
-			"position" property is set to "absolute" and "overflow" property is set 
-			to "hidden" will not render at the correct width when its 
-			offsetParent's "position" property is also set to "absolute."  It is 
-			possible to work around this bug by specifying a value for the width 
-			property in addition to overflow.
+		//	Need to set a width for the Menu to fix the following problems in 
+		//	Firefox 2 and IE:
+
+		//	#1) Scrolled Menus will render at 1px wide in Firefox 2
+
+		//	#2) There is a bug in gecko-based browsers where an element whose 
+		//	"position" property is set to "absolute" and "overflow" property is 
+		//	set to "hidden" will not render at the correct width when its 
+		//	offsetParent's "position" property is also set to "absolute."  It is 
+		//	possible to work around this bug by specifying a value for the width 
+		//	property in addition to overflow.
+
+		//	#3) In IE it is necessary to give the Menu a width before the 
+		//	scrollbars are rendered to prevent the Menu from rendering with a 
+		//	width that is 100% of the browser viewport.
 	
-			In IE it is also necessary to give the Menu a width before the scrollbars are 
-			rendered to prevent the Menu from rendering with a width that is 100% of
-			the browser viewport.
-		*/
-	
-		bSetWidth = ((UA.gecko && oParent && oParent.parent && 
-			oParent.parent.cfg.getProperty(_POSITION) == _DYNAMIC) || UA.ie);
+		bSetWidth = ((UA.gecko && UA.gecko < 1.9) || UA.ie);
 
 		if (nScrollHeight > 0 && bSetWidth && !this.cfg.getProperty(_WIDTH)) {
-	
+
 			nOffsetWidth = oElement.offsetWidth;
 	
 			/*
@@ -5153,7 +5170,7 @@
 
 
     var onBeforeShow = function () {
-    
+
     	if (this._shadow) {
 
 			// If called because the "shadow" event was refired - just append again and resize
@@ -6427,7 +6444,7 @@
     /**
     * @config keepopen
     * @description Boolean indicating if the menu should remain open when clicked.
-    * @default flase
+    * @default false
     * @type Boolean
     */
     oConfig.addProperty(
@@ -6519,9 +6536,7 @@
 	_OPTION = "OPTION",
 	_OPTGROUP = "OPTGROUP",
 	_LI_UPPERCASE = "LI",
-	_LI_LOWERCASE = "li",
 	_HREF = "href",
-	_ANCHOR_TEMPLATE = "<a href=\"#\"></a>",
 	_SELECT = "SELECT",
 	_DIV = "DIV",
 	_START_HELP_TEXT = "<em class=\"helptext\">",
@@ -6536,6 +6551,11 @@
 	_VISIBLE = "visible",
 	_SPACE = " ",
 	_MENUITEM = "MenuItem",
+	_CLICK = "click",
+	_SHOW = "show",
+	_HIDE = "hide",
+	_LI_LOWERCASE = "li",
+	_ANCHOR_TEMPLATE = "<a href=\"#\"></a>",
 
     EVENT_TYPES = [
     
@@ -6543,7 +6563,7 @@
         ["mouseOutEvent", "mouseout"],
         ["mouseDownEvent", "mousedown"],
         ["mouseUpEvent", "mouseup"],
-        ["clickEvent", "click"],
+        ["clickEvent", _CLICK],
         ["keyPressEvent", "keypress"],
         ["keyDownEvent", "keydown"],
         ["keyUpEvent", "keyup"],
@@ -6634,11 +6654,17 @@
 		suppressEvent: true
 	},
     
-    CLASS_NAMES = {},
-    
-    m_oMenuItemTemplate;
+	KEY_LISTENER_CONFIG = {
+		key: "keylistener", 
+		value: null, 
+		suppressEvent: true
+	},
 
+	m_oMenuItemTemplate = null,
 
+    CLASS_NAMES = {};
+
+
 /**
 * @method getClassNameForState
 * @description Returns a class name for the specified prefix and state.  If the class name does not 
@@ -7181,7 +7207,7 @@
 
         oAnchor = oElement.firstChild;
         oAnchor.className = this.CSS_LABEL_CLASS_NAME;
-        
+
         this.element = oElement;
         this._oAnchor = oAnchor;
 
@@ -7865,7 +7891,151 @@
     },
 
 
+    /**
+    * @method _dispatchClickEvent
+    * @description Dispatches a DOM "click" event to the anchor element of a 
+	* MenuItem instance.
+	* @private	
+    */
+	_dispatchClickEvent: function () {
 
+		var oMenuItem = this,
+			oAnchor,
+			oEvent;
+
+		if (!oMenuItem.cfg.getProperty(_DISABLED)) {
+
+			oAnchor = Dom.getFirstChild(oMenuItem.element);
+
+			//	Dispatch a "click" event to the MenuItem's anchor so that its
+			//	"click" event handlers will get called in response to the user 
+			//	pressing the keyboard shortcut defined by the "keylistener"
+			//	configuration property.
+
+			if (UA.ie) {
+				oAnchor.fireEvent(_ONCLICK);
+			}
+			else {
+
+				if ((UA.gecko && UA.gecko >= 1.9) || UA.opera || UA.webkit) {
+
+					oEvent = document.createEvent("HTMLEvents");
+					oEvent.initEvent(_CLICK, true, true);
+
+				}
+				else {
+
+					oEvent = document.createEvent("MouseEvents");
+					oEvent.initMouseEvent(_CLICK, true, true, window, 0, 0, 0, 
+						0, 0, false, false, false, false, 0, null);
+
+				}
+
+				oAnchor.dispatchEvent(oEvent);
+
+			}
+
+		}
+
+	},
+
+
+    /**
+    * @method _createKeyListener
+    * @description "show" event handler for a Menu instance - responsible for 
+	* setting up the KeyListener instance for a MenuItem.
+	* @private	
+    * @param {String} type String representing the name of the event that 
+    * was fired.
+    * @param {Array} args Array of arguments sent when the event was fired.
+    * @param {Array} keyData Array of arguments sent when the event was fired.
+    */
+	_createKeyListener: function (type, args, keyData) {
+
+		var oMenuItem = this,
+			oMenu = oMenuItem.parent;
+
+		var oKeyListener = new YAHOO.util.KeyListener(
+										oMenu.element.ownerDocument, 
+										keyData, 
+										{
+											fn: oMenuItem._dispatchClickEvent, 
+											scope: oMenuItem, 
+											correctScope: true });
+
+
+		if (oMenu.cfg.getProperty(_VISIBLE)) {
+			oKeyListener.enable();
+		}
+
+
+		oMenu.subscribe(_SHOW, oKeyListener.enable, null, oKeyListener);
+		oMenu.subscribe(_HIDE, oKeyListener.disable, null, oKeyListener);
+		
+		oMenuItem._keyListener = oKeyListener;
+		
+		oMenu.unsubscribe(_SHOW, oMenuItem._createKeyListener, keyData);
+		
+	},
+
+
+    /**
+    * @method configKeyListener
+    * @description Event handler for when the "keylistener" configuration 
+    * property of a menu item changes.
+    * @param {String} p_sType String representing the name of the event that 
+    * was fired.
+    * @param {Array} p_aArgs Array of arguments sent when the event was fired.
+    */
+    configKeyListener: function (p_sType, p_aArgs) {
+
+		var oKeyData = p_aArgs[0],
+			oMenuItem = this,
+			oMenu = oMenuItem.parent;
+
+		if (oMenuItem._keyData) {
+
+			//	Unsubscribe from the "show" event in case the keylistener 
+			//	config was changed before the Menu was ever made visible.
+
+			oMenu.unsubscribe(_SHOW, 
+					oMenuItem._createKeyListener, oMenuItem._keyData);
+
+			oMenuItem._keyData = null;					
+					
+		}
+
+
+		//	Tear down for the previous value of the "keylistener" property
+
+		if (oMenuItem._keyListener) {
+
+			oMenu.unsubscribe(_SHOW, oMenuItem._keyListener.enable);
+			oMenu.unsubscribe(_HIDE, oMenuItem._keyListener.disable);
+
+			oMenuItem._keyListener.disable();
+			oMenuItem._keyListener = null;
+
+		}
+
+
+    	if (oKeyData) {
+	
+			oMenuItem._keyData = oKeyData;
+
+			//	Defer the creation of the KeyListener instance until the 
+			//	parent Menu is visible.  This is necessary since the 
+			//	KeyListener instance needs to be bound to the document the 
+			//	Menu has been rendered into.  Deferring creation of the 
+			//	KeyListener instance also improves performance.
+
+			oMenu.subscribe(_SHOW, oMenuItem._createKeyListener, 
+				oKeyData, oMenuItem);
+		}
+    
+    },
+
+
     // Public methods
 
 
@@ -8125,6 +8295,25 @@
             }
         );
 
+
+        /**
+        * @config keylistener
+        * @description Object literal representing the key(s) that can be used 
+ 		* to trigger the MenuItem's "click" event.  Possible attributes are 
+		* shift (boolean), alt (boolean), ctrl (boolean) and keys (either an int 
+		* or an array of ints representing keycodes).
+        * @default null
+        * @type Object
+        */
+        oConfig.addProperty(
+            KEY_LISTENER_CONFIG.key, 
+            { 
+                handler: this.configKeyListener,
+                value: KEY_LISTENER_CONFIG.value, 
+                suppressEvent: KEY_LISTENER_CONFIG.suppressEvent 
+            }
+        );
+
 	},
 
 
@@ -8744,29 +8933,29 @@
     var aXY;
 
     if (!(p_oEvent.type == _MOUSEDOWN && !p_oEvent.ctrlKey)) {
-
-		/*
-			Prevent the browser's default context menu from appearing and 
-			stop the propagation of the "contextmenu" event so that 
-			other ContextMenu instances are not displayed.
-		*/
 	
-		Event.stopEvent(p_oEvent);
-	
-	
 		this.contextEventTarget = Event.getTarget(p_oEvent);
 	
 		this.triggerContextMenuEvent.fire(p_oEvent);
-	
-	
-		// Hide any other Menu instances that might be visible
-	
-		YAHOO.widget.MenuManager.hideVisible();
 		
 	
-	
 		if (!this._bCancelled) {
+
+			/*
+				Prevent the browser's default context menu from appearing and 
+				stop the propagation of the "contextmenu" event so that 
+				other ContextMenu instances are not displayed.
+			*/
+
+			Event.stopEvent(p_oEvent);
+
+
+			// Hide any other Menu instances that might be visible
+
+			YAHOO.widget.MenuManager.hideVisible();
+			
 	
+
 			// Position and display the context menu
 	
 			aXY = Event.getXY(p_oEvent);
@@ -9663,4 +9852,4 @@
 }
     
 }); // END YAHOO.lang.extend
-YAHOO.register("menu", YAHOO.widget.Menu, {version: "2.6.0", build: "1321"});
+YAHOO.register("menu", YAHOO.widget.Menu, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/menu/menu-min.js
===================================================================
--- trunk/root/static/yui/menu/menu-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/menu-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,15 +1,16 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function(){var S="DIV",O="hd",K="bd",N="ft",X="LI",A="disabled",D="mouseover",F="mouseout",U="mousedown",G="mouseup",R=YAHOO.env.ua.ie?"focusin":"focus",V="click",B="keydown",M="keyup",I="keypress",L="clicktohide",T="position",P="dynamic",Y="showdelay",J="selected",E="visible",W="UL",Q="MenuManager",C=YAHOO.util.Dom,Z=YAHOO.util.Event,H=YAHOO.lang;YAHOO.widget.MenuManager=function(){var a=false,c={},r={},d={},n={"click":"clickEvent","mousedown":"mouseDownEvent","mouseup":"mouseUpEvent","mouseover":"mouseOverEvent","mouseout":"mouseOutEvent","keydown":"keyDownEvent","keyup":"keyUpEvent","keypress":"keyPressEvent","focus":"focusEvent","focusin":"focusEvent","blur":"blurEvent","focusout":"blurEvent"},m=null,k=null;function o(u){var s,t;if(u&&u.tagName){switch(u.tagName.toUpperCase()){case S:s=u.parentNode;if((C.hasClass(u,O)||C.hasClass(u,K)||C.hasClass(u,N))&&s&&s.tagName&&s.tagName.toUpperCase()==S){t=s;}else{t=u;}break;case X:t=u;break;default:s=u.parentNode;if(s){t=o(s);}!
 break;}}return t;}function q(w){var s=Z.getTarget(w),t=o(s),y,u,v,AA,z;if(t){u=t.tagName.toUpperCase();if(u==X){v=t.id;if(v&&d[v]){AA=d[v];z=AA.parent;}}else{if(u==S){if(t.id){z=c[t.id];}}}}if(z){y=n[w.type];if(AA&&!AA.cfg.getProperty(A)){AA[y].fire(w);}z[y].fire(w,AA);}else{if(w.type==U){for(var x in r){if(H.hasOwnProperty(r,x)){z=r[x];if(z.cfg.getProperty(L)&&!(z instanceof YAHOO.widget.MenuBar)&&z.cfg.getProperty(T)==P){z.hide();}else{if(z.cfg.getProperty(Y)>0){z._cancelShowDelay();}if(z.activeItem){z.activeItem.blur();z.activeItem.cfg.setProperty(J,false);z.activeItem=null;}}}}}else{if(w.type==R){m=s;}}}}function f(t,s,u){if(c[u.id]){this.removeMenu(u);}}function j(t,s){var u=s[1];if(u){k=u;}}function i(t,s){k=null;}function b(t,s,v){if(v&&v.focus){try{v.focus();}catch(u){}}this.hideEvent.unsubscribe(b,v);}function l(t,s){if(this===this.getRoot()&&this.cfg.getProperty(T)===P){this.hideEvent.subscribe(b,m);this.focus();}}function g(u,t){var s=t[0],v=this.id;if(s){r[v]=th!
 is;}else{if(r[v]){delete r[v];}}}function h(t,s){p(this);}func!
 tion p(t
){var s=t.id;if(s&&d[s]){if(k==t){k=null;}delete d[s];t.destroyEvent.unsubscribe(h);}}function e(t,s){var v=s[0],u;if(v instanceof YAHOO.widget.MenuItem){u=v.id;if(!d[u]){d[u]=v;v.destroyEvent.subscribe(h);}}}return{addMenu:function(t){var s;if(t instanceof YAHOO.widget.Menu&&t.id&&!c[t.id]){c[t.id]=t;if(!a){s=document;Z.on(s,D,q,this,true);Z.on(s,F,q,this,true);Z.on(s,U,q,this,true);Z.on(s,G,q,this,true);Z.on(s,V,q,this,true);Z.on(s,B,q,this,true);Z.on(s,M,q,this,true);Z.on(s,I,q,this,true);Z.onFocus(s,q,this,true);Z.onBlur(s,q,this,true);a=true;}t.cfg.subscribeToConfigEvent(E,g);t.destroyEvent.subscribe(f,t,this);t.itemAddedEvent.subscribe(e);t.focusEvent.subscribe(j);t.blurEvent.subscribe(i);t.showEvent.subscribe(l);}},removeMenu:function(v){var t,s,u;if(v){t=v.id;if((t in c)&&(c[t]==v)){s=v.getItems();if(s&&s.length>0){u=s.length-1;do{p(s[u]);}while(u--);}delete c[t];if((t in r)&&(r[t]==v)){delete r[t];}if(v.cfg){v.cfg.unsubscribeFromConfigEvent(E,g);}v.destroyEvent.unsu!
 bscribe(f,v);v.itemAddedEvent.unsubscribe(e);v.focusEvent.unsubscribe(j);v.blurEvent.unsubscribe(i);}}},hideVisible:function(){var s;for(var t in r){if(H.hasOwnProperty(r,t)){s=r[t];if(!(s instanceof YAHOO.widget.MenuBar)&&s.cfg.getProperty(T)==P){s.hide();}}}},getVisible:function(){return r;},getMenus:function(){return c;},getMenu:function(t){var s;if(t in c){s=c[t];}return s;},getMenuItem:function(t){var s;if(t in d){s=d[t];}return s;},getMenuItemGroup:function(w){var t=C.get(w),s,y,x,u,v;if(t&&t.tagName&&t.tagName.toUpperCase()==W){y=t.firstChild;if(y){s=[];do{u=y.id;if(u){x=this.getMenuItem(u);if(x){s[s.length]=x;}}}while((y=y.nextSibling));if(s.length>0){v=s;}}}return v;},getFocusedMenuItem:function(){return k;},getFocusedMenu:function(){var s;if(k){s=k.parent.getRoot();}return s;},toString:function(){return Q;}};}();})();(function(){var AN=YAHOO.lang,Ao="Menu",H="DIV",K="div",Ak="id",AI="SELECT",f="xy",R="y",Av="UL",L="ul",AK="first-of-type",l="LI",i="OPTGROUP",Ax="OP!
 TION",Af="disabled",AY="none",z="selected",Ar="groupindex",j="!
 index",O
="submenu",As="visible",AX="hidedelay",Ab="position",AE="dynamic",C="static",Al=AE+","+C,Y="windows",Q="url",M="#",V="target",AU="maxheight",T="topscrollbar",y="bottomscrollbar",e="_",P=T+e+Af,E=y+e+Af,c="mousemove",At="showdelay",d="submenuhidedelay",AG="iframe",x="constraintoviewport",A2="preventcontextoverlap",AP="submenualignment",a="autosubmenudisplay",AD="clicktohide",h="container",k="scrollincrement",Ah="minscrollheight",A0="classname",Ae="shadow",Ap="keepopen",Ay="hd",D="hastitle",q="context",v="",Ai="mousedown",Ac="keydown",Am="height",U="width",AR="px",Aw="effect",AF="monitorresize",AW="display",AV="block",J="visibility",AA="absolute",AT="zindex",m="yui-menu-body-scrolled",AL=" ",Az=" ",Ag="mouseover",G="mouseout",AS="itemAdded",o="itemRemoved",AM="hidden",t="yui-menu-shadow",AH=t+"-visible",n=t+Az+AH;YAHOO.widget.Menu=function(A4,A3){if(A3){this.parent=A3.parent;this.lazyLoad=A3.lazyLoad||A3.lazyload;this.itemData=A3.itemData||A3.itemdata;}YAHOO.widget.Menu.su!
 perclass.constructor.call(this,A4,A3);};function B(A4){var A3=false;if(AN.isString(A4)){A3=(Al.indexOf((A4.toLowerCase()))!=-1);}return A3;}var g=YAHOO.util.Dom,AB=YAHOO.util.Event,Au=YAHOO.widget.Module,AC=YAHOO.widget.Overlay,s=YAHOO.widget.Menu,A1=YAHOO.widget.MenuManager,F=YAHOO.util.CustomEvent,Aq=YAHOO.env.ua,An,Aa=[["mouseOverEvent",Ag],["mouseOutEvent",G],["mouseDownEvent",Ai],["mouseUpEvent","mouseup"],["clickEvent","click"],["keyPressEvent","keypress"],["keyDownEvent",Ac],["keyUpEvent","keyup"],["focusEvent","focus"],["blurEvent","blur"],["itemAddedEvent",AS],["itemRemovedEvent",o]],AZ={key:As,value:false,validator:AN.isBoolean},AQ={key:x,value:true,validator:AN.isBoolean,supercedes:[AG,"x",R,f]},AJ={key:A2,value:true,validator:AN.isBoolean,supercedes:[x]},S={key:Ab,value:AE,validator:B,supercedes:[As,AG]},A={key:AP,value:["tl","tr"]},u={key:a,value:true,validator:AN.isBoolean,suppressEvent:true},Z={key:At,value:250,validator:AN.isNumber,suppressEvent:true},r={key!
 :AX,value:0,validator:AN.isNumber,suppressEvent:true},w={key:d!
 ,value:2
50,validator:AN.isNumber,suppressEvent:true},p={key:AD,value:true,validator:AN.isBoolean,suppressEvent:true},AO={key:h,suppressEvent:true},Ad={key:k,value:1,validator:AN.isNumber,supercedes:[AU],suppressEvent:true},N={key:Ah,value:90,validator:AN.isNumber,supercedes:[AU],suppressEvent:true},X={key:AU,value:0,validator:AN.isNumber,supercedes:[AG],suppressEvent:true},W={key:A0,value:null,validator:AN.isString,suppressEvent:true},b={key:Af,value:false,validator:AN.isBoolean,suppressEvent:true},I={key:Ae,value:true,validator:AN.isBoolean,suppressEvent:true,supercedes:[As]},Aj={key:Ap,value:false,validator:AN.isBoolean};
-YAHOO.lang.extend(s,AC,{CSS_CLASS_NAME:"yuimenu",ITEM_TYPE:null,GROUP_TITLE_TAG_NAME:"h6",OFF_SCREEN_POSITION:"-999em",_bHideDelayEventHandlersAssigned:false,_bHandledMouseOverEvent:false,_bHandledMouseOutEvent:false,_aGroupTitleElements:null,_aItemGroups:null,_aListElements:null,_nCurrentMouseX:0,_bStopMouseEventHandlers:false,_sClassName:null,lazyLoad:false,itemData:null,activeItem:null,parent:null,srcElement:null,init:function(A5,A4){this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];if(!this.ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuItem;}var A3;if(AN.isString(A5)){A3=g.get(A5);}else{if(A5.tagName){A3=A5;}}if(A3&&A3.tagName){switch(A3.tagName.toUpperCase()){case H:this.srcElement=A3;if(!A3.id){A3.setAttribute(Ak,g.generateId());}s.superclass.init.call(this,A3);this.beforeInitEvent.fire(s);break;case AI:this.srcElement=A3;s.superclass.init.call(this,g.generateId());this.beforeInitEvent.fire(s);break;}}else{s.superclass.init.call(this,A5);this.befor!
 eInitEvent.fire(s);}if(this.element){g.addClass(this.element,this.CSS_CLASS_NAME);this.initEvent.subscribe(this._onInit);this.beforeRenderEvent.subscribe(this._onBeforeRender);this.renderEvent.subscribe(this._onRender);this.beforeShowEvent.subscribe(this._onBeforeShow);this.hideEvent.subscribe(this._onHide);this.showEvent.subscribe(this._onShow);this.beforeHideEvent.subscribe(this._onBeforeHide);this.mouseOverEvent.subscribe(this._onMouseOver);this.mouseOutEvent.subscribe(this._onMouseOut);this.clickEvent.subscribe(this._onClick);this.keyDownEvent.subscribe(this._onKeyDown);this.keyPressEvent.subscribe(this._onKeyPress);this.blurEvent.subscribe(this._onBlur);if(Aq.gecko||Aq.webkit){this.cfg.subscribeToConfigEvent(R,this._onYChange);}if(A4){this.cfg.applyConfig(A4,true);}A1.addMenu(this);this.initEvent.fire(s);}},_initSubTree:function(){var A4=this.srcElement,A3,A6,A9,BA,A8,A7,A5;if(A4){A3=(A4.tagName&&A4.tagName.toUpperCase());if(A3==H){BA=this.body.firstChild;if(BA){A6=0;A!
 9=this.GROUP_TITLE_TAG_NAME.toUpperCase();do{if(BA&&BA.tagName!
 ){switch
(BA.tagName.toUpperCase()){case A9:this._aGroupTitleElements[A6]=BA;break;case Av:this._aListElements[A6]=BA;this._aItemGroups[A6]=[];A6++;break;}}}while((BA=BA.nextSibling));if(this._aListElements[0]){g.addClass(this._aListElements[0],AK);}}}BA=null;if(A3){switch(A3){case H:A8=this._aListElements;A7=A8.length;if(A7>0){A5=A7-1;do{BA=A8[A5].firstChild;if(BA){do{if(BA&&BA.tagName&&BA.tagName.toUpperCase()==l){this.addItem(new this.ITEM_TYPE(BA,{parent:this}),A5);}}while((BA=BA.nextSibling));}}while(A5--);}break;case AI:BA=A4.firstChild;do{if(BA&&BA.tagName){switch(BA.tagName.toUpperCase()){case i:case Ax:this.addItem(new this.ITEM_TYPE(BA,{parent:this}));break;}}}while((BA=BA.nextSibling));break;}}}},_getFirstEnabledItem:function(){var A3=this.getItems(),A7=A3.length,A6,A5;for(var A4=0;A4<A7;A4++){A6=A3[A4];if(A6&&!A6.cfg.getProperty(Af)&&A6.element.style.display!=AY){A5=A6;break;}}return A5;},_addItemToGroup:function(A8,A9,BD){var BB,BE,A6,BC,A7,A4,A5,BA;function A3(BF,BG){re!
 turn(BF[BG]||A3(BF,(BG+1)));}if(A9 instanceof this.ITEM_TYPE){BB=A9;BB.parent=this;}else{if(AN.isString(A9)){BB=new this.ITEM_TYPE(A9,{parent:this});}else{if(AN.isObject(A9)){A9.parent=this;BB=new this.ITEM_TYPE(A9.text,A9);}}}if(BB){if(BB.cfg.getProperty(z)){this.activeItem=BB;}BE=AN.isNumber(A8)?A8:0;A6=this._getItemGroup(BE);if(!A6){A6=this._createItemGroup(BE);}if(AN.isNumber(BD)){A7=(BD>=A6.length);if(A6[BD]){A6.splice(BD,0,BB);}else{A6[BD]=BB;}BC=A6[BD];if(BC){if(A7&&(!BC.element.parentNode||BC.element.parentNode.nodeType==11)){this._aListElements[BE].appendChild(BC.element);}else{A4=A3(A6,(BD+1));if(A4&&(!BC.element.parentNode||BC.element.parentNode.nodeType==11)){this._aListElements[BE].insertBefore(BC.element,A4.element);}}BC.parent=this;this._subscribeToItemEvents(BC);this._configureSubmenu(BC);this._updateItemProperties(BE);this.itemAddedEvent.fire(BC);this.changeContentEvent.fire();BA=BC;}}else{A5=A6.length;A6[A5]=BB;BC=A6[A5];if(BC){if(!g.isAncestor(this._aList!
 Elements[BE],BC.element)){this._aListElements[BE].appendChild(!
 BC.eleme
nt);}BC.element.setAttribute(Ar,BE);BC.element.setAttribute(j,A5);BC.parent=this;BC.index=A5;BC.groupIndex=BE;this._subscribeToItemEvents(BC);this._configureSubmenu(BC);if(A5===0){g.addClass(BC.element,AK);}this.itemAddedEvent.fire(BC);this.changeContentEvent.fire();BA=BC;}}}return BA;},_removeItemFromGroupByIndex:function(A6,A4){var A5=AN.isNumber(A6)?A6:0,A7=this._getItemGroup(A5),A9,A8,A3;if(A7){A9=A7.splice(A4,1);A8=A9[0];if(A8){this._updateItemProperties(A5);if(A7.length===0){A3=this._aListElements[A5];if(this.body&&A3){this.body.removeChild(A3);}this._aItemGroups.splice(A5,1);this._aListElements.splice(A5,1);A3=this._aListElements[0];if(A3){g.addClass(A3,AK);}}this.itemRemovedEvent.fire(A8);this.changeContentEvent.fire();}}return A8;},_removeItemFromGroupByValue:function(A6,A3){var A8=this._getItemGroup(A6),A9,A7,A5,A4;if(A8){A9=A8.length;A7=-1;if(A9>0){A4=A9-1;do{if(A8[A4]==A3){A7=A4;break;}}while(A4--);if(A7>-1){A5=this._removeItemFromGroupByIndex(A6,A7);}}}return A5!
 ;},_updateItemProperties:function(A4){var A5=this._getItemGroup(A4),A8=A5.length,A7,A6,A3;if(A8>0){A3=A8-1;do{A7=A5[A3];if(A7){A6=A7.element;A7.index=A3;A7.groupIndex=A4;A6.setAttribute(Ar,A4);A6.setAttribute(j,A3);g.removeClass(A6,AK);}}while(A3--);if(A6){g.addClass(A6,AK);}}},_createItemGroup:function(A5){var A3,A4;if(!this._aItemGroups[A5]){this._aItemGroups[A5]=[];A3=document.createElement(L);this._aListElements[A5]=A3;A4=this._aItemGroups[A5];}return A4;},_getItemGroup:function(A5){var A3=AN.isNumber(A5)?A5:0,A6=this._aItemGroups,A4;if(A3 in A6){A4=A6[A3];}return A4;},_configureSubmenu:function(A3){var A4=A3.cfg.getProperty(O);if(A4){this.cfg.configChangedEvent.subscribe(this._onParentMenuConfigChange,A4,true);this.renderEvent.subscribe(this._onParentMenuRender,A4,true);}},_subscribeToItemEvents:function(A3){A3.destroyEvent.subscribe(this._onMenuItemDestroy,A3,this);A3.cfg.configChangedEvent.subscribe(this._onMenuItemConfigChange,A3,this);
-},_onVisibleChange:function(A5,A4){var A3=A4[0];if(A3){g.addClass(this.element,As);}else{g.removeClass(this.element,As);}},_cancelHideDelay:function(){var A3=this.getRoot()._hideDelayTimer;if(A3){A3.cancel();}},_execHideDelay:function(){this._cancelHideDelay();var A3=this.getRoot();A3._hideDelayTimer=AN.later(A3.cfg.getProperty(AX),this,function(){if(A3.activeItem){if(A3.hasFocus()){A3.activeItem.focus();}A3.clearActiveItem();}if(A3==this&&!(this instanceof YAHOO.widget.MenuBar)&&this.cfg.getProperty(Ab)==AE){this.hide();}});},_cancelShowDelay:function(){var A3=this.getRoot()._showDelayTimer;if(A3){A3.cancel();}},_execSubmenuHideDelay:function(A5,A4,A3){A5._submenuHideDelayTimer=AN.later(50,this,function(){if(this._nCurrentMouseX>(A4+10)){A5._submenuHideDelayTimer=AN.later(A3,A5,function(){this.hide();});}else{A5.hide();}});},_disableScrollHeader:function(){if(!this._bHeaderDisabled){g.addClass(this.header,P);this._bHeaderDisabled=true;}},_disableScrollFooter:function(){if(!
 !this._bFooterDisabled){g.addClass(this.footer,E);this._bFooterDisabled=true;}},_enableScrollHeader:function(){if(this._bHeaderDisabled){g.removeClass(this.header,P);this._bHeaderDisabled=false;}},_enableScrollFooter:function(){if(this._bFooterDisabled){g.removeClass(this.footer,E);this._bFooterDisabled=false;}},_onMouseOver:function(BF,A8){var BG=A8[0],BC=A8[1],A3=AB.getTarget(BG),A7=this.getRoot(),BE=this._submenuHideDelayTimer,A4,A6,BB,A5,BA,A9;var BD=function(){if(this.parent.cfg.getProperty(z)){this.show();}};if(!this._bStopMouseEventHandlers){if(!this._bHandledMouseOverEvent&&(A3==this.element||g.isAncestor(this.element,A3))){this._nCurrentMouseX=0;AB.on(this.element,c,this._onMouseMove,this,true);if(!(BC&&g.isAncestor(BC.element,AB.getRelatedTarget(BG)))){this.clearActiveItem();}if(this.parent&&BE){BE.cancel();this.parent.cfg.setProperty(z,true);A4=this.parent.parent;A4._bHandledMouseOutEvent=true;A4._bHandledMouseOverEvent=false;}this._bHandledMouseOverEvent=true;th!
 is._bHandledMouseOutEvent=false;}if(BC&&!BC.handledMouseOverEv!
 ent&&!BC
.cfg.getProperty(Af)&&(A3==BC.element||g.isAncestor(BC.element,A3))){A6=this.cfg.getProperty(At);BB=(A6>0);if(BB){this._cancelShowDelay();}A5=this.activeItem;if(A5){A5.cfg.setProperty(z,false);}BA=BC.cfg;BA.setProperty(z,true);if(this.hasFocus()||A7._hasFocus){BC.focus();A7._hasFocus=false;}if(this.cfg.getProperty(a)){A9=BA.getProperty(O);if(A9){if(BB){A7._showDelayTimer=AN.later(A7.cfg.getProperty(At),A9,BD);}else{A9.show();}}}BC.handledMouseOverEvent=true;BC.handledMouseOutEvent=false;}}},_onMouseOut:function(BB,A5){var BC=A5[0],A9=A5[1],A6=AB.getRelatedTarget(BC),BA=false,A8,A7,A3,A4;if(!this._bStopMouseEventHandlers){if(A9&&!A9.cfg.getProperty(Af)){A8=A9.cfg;A7=A8.getProperty(O);if(A7&&(A6==A7.element||g.isAncestor(A7.element,A6))){BA=true;}if(!A9.handledMouseOutEvent&&((A6!=A9.element&&!g.isAncestor(A9.element,A6))||BA)){if(!BA){A9.cfg.setProperty(z,false);if(A7){A3=this.cfg.getProperty(d);A4=this.cfg.getProperty(At);if(!(this instanceof YAHOO.widget.MenuBar)&&A3>0&&A4>!
 =A3){this._execSubmenuHideDelay(A7,AB.getPageX(BC),A3);}else{A7.hide();}}}A9.handledMouseOutEvent=true;A9.handledMouseOverEvent=false;}}if(!this._bHandledMouseOutEvent&&((A6!=this.element&&!g.isAncestor(this.element,A6))||BA)){AB.removeListener(this.element,c,this._onMouseMove);this._nCurrentMouseX=AB.getPageX(BC);this._bHandledMouseOutEvent=true;this._bHandledMouseOverEvent=false;}}},_onMouseMove:function(A4,A3){if(!this._bStopMouseEventHandlers){this._nCurrentMouseX=AB.getPageX(A4);}},_onClick:function(BD,A5){var BE=A5[0],A9=A5[1],BB=false,A7,A4,A3,A8,BA,BC;var A6=function(){if(!((Aq.gecko&&this.platform==Y)&&BE.button>0)){A4=this.getRoot();if(A4 instanceof YAHOO.widget.MenuBar||A4.cfg.getProperty(Ab)==C){A4.clearActiveItem();}else{A4.hide();}}};if(A9){if(A9.cfg.getProperty(Af)){AB.preventDefault(BE);A6.call(this);}else{A7=A9.cfg.getProperty(O);A8=A9.cfg.getProperty(Q);if(A8){BA=A8.indexOf(M);BC=A8.length;if(BA!=-1){A8=A8.substr(BA,BC);BC=A8.length;if(BC>1){A3=A8.substr(1!
 ,BC);BB=g.isAncestor(this.element,A3);}else{if(BC===1){BB=true!
 ;}}}}if(
BB&&!A9.cfg.getProperty(V)){AB.preventDefault(BE);if(Aq.webkit){A9.focus();}else{A9.focusEvent.fire();}}if(!A7&&!this.cfg.getProperty(Ap)){A6.call(this);}}}},_onKeyDown:function(BH,BB){var BE=BB[0],BD=BB[1],BA,BF,A4,A8,BI,A3,BK,A7,BG,A6,BC,BJ,A9;function A5(){this._bStopMouseEventHandlers=true;AN.later(10,this,function(){this._bStopMouseEventHandlers=false;});}if(BD&&!BD.cfg.getProperty(Af)){BF=BD.cfg;A4=this.parent;switch(BE.keyCode){case 38:case 40:BI=(BE.keyCode==38)?BD.getPreviousEnabledSibling():BD.getNextEnabledSibling();if(BI){this.clearActiveItem();BI.cfg.setProperty(z,true);BI.focus();if(this.cfg.getProperty(AU)>0){A3=this.body;BK=A3.scrollTop;A7=A3.offsetHeight;BG=this.getItems();A6=BG.length-1;BC=BI.element.offsetTop;if(BE.keyCode==40){if(BC>=(A7+BK)){A3.scrollTop=BC-A7;}else{if(BC<=BK){A3.scrollTop=0;}}if(BI==BG[A6]){A3.scrollTop=BI.element.offsetTop;}}else{if(BC<=BK){A3.scrollTop=BC-BI.element.offsetHeight;}else{if(BC>=(BK+A7)){A3.scrollTop=BC;}}if(BI==BG[0]){A3!
 .scrollTop=0;}}BK=A3.scrollTop;BJ=A3.scrollHeight-A3.offsetHeight;if(BK===0){this._disableScrollHeader();this._enableScrollFooter();}else{if(BK==BJ){this._enableScrollHeader();this._disableScrollFooter();}else{this._enableScrollHeader();this._enableScrollFooter();}}}}AB.preventDefault(BE);A5();break;case 39:BA=BF.getProperty(O);if(BA){if(!BF.getProperty(z)){BF.setProperty(z,true);}BA.show();BA.setInitialFocus();BA.setInitialSelection();}else{A8=this.getRoot();if(A8 instanceof YAHOO.widget.MenuBar){BI=A8.activeItem.getNextEnabledSibling();if(BI){A8.clearActiveItem();BI.cfg.setProperty(z,true);BA=BI.cfg.getProperty(O);if(BA){BA.show();BA.setInitialFocus();}else{BI.focus();}}}}AB.preventDefault(BE);A5();break;case 37:if(A4){A9=A4.parent;if(A9 instanceof YAHOO.widget.MenuBar){BI=A9.activeItem.getPreviousEnabledSibling();if(BI){A9.clearActiveItem();BI.cfg.setProperty(z,true);BA=BI.cfg.getProperty(O);if(BA){BA.show();
-BA.setInitialFocus();}else{BI.focus();}}}else{this.hide();A4.focus();}}AB.preventDefault(BE);A5();break;}}if(BE.keyCode==27){if(this.cfg.getProperty(Ab)==AE){this.hide();if(this.parent){this.parent.focus();}}else{if(this.activeItem){BA=this.activeItem.cfg.getProperty(O);if(BA&&BA.cfg.getProperty(As)){BA.hide();this.activeItem.focus();}else{this.activeItem.blur();this.activeItem.cfg.setProperty(z,false);}}}AB.preventDefault(BE);}},_onKeyPress:function(A5,A4){var A3=A4[0];if(A3.keyCode==40||A3.keyCode==38){AB.preventDefault(A3);}},_onBlur:function(A4,A3){if(this._hasFocus){this._hasFocus=false;}},_onYChange:function(A4,A3){var A6=this.parent,A8,A5,A7;if(A6){A8=A6.parent.body.scrollTop;if(A8>0){A7=(this.cfg.getProperty(R)-A8);g.setY(this.element,A7);A5=this.iframe;if(A5){g.setY(A5,A7);}this.cfg.setProperty(R,A7,true);}}},_onScrollTargetMouseOver:function(A9,BC){var BB=this._bodyScrollTimer;if(BB){BB.cancel();}this._cancelHideDelay();var A5=AB.getTarget(A9),A7=this.body,A6=this!
 .cfg.getProperty(k),A3,A4;function BA(){var BD=A7.scrollTop;if(BD<A3){A7.scrollTop=(BD+A6);this._enableScrollHeader();}else{A7.scrollTop=A3;this._bodyScrollTimer.cancel();this._disableScrollFooter();}}function A8(){var BD=A7.scrollTop;if(BD>0){A7.scrollTop=(BD-A6);this._enableScrollFooter();}else{A7.scrollTop=0;this._bodyScrollTimer.cancel();this._disableScrollHeader();}}if(g.hasClass(A5,Ay)){A4=A8;}else{A3=A7.scrollHeight-A7.offsetHeight;A4=BA;}this._bodyScrollTimer=AN.later(10,this,A4,null,true);},_onScrollTargetMouseOut:function(A5,A3){var A4=this._bodyScrollTimer;if(A4){A4.cancel();}this._cancelHideDelay();},_onInit:function(A4,A3){this.cfg.subscribeToConfigEvent(As,this._onVisibleChange);var A5=!this.parent,A6=this.lazyLoad;if(((A5&&!A6)||(A5&&(this.cfg.getProperty(As)||this.cfg.getProperty(Ab)==C))||(!A5&&!A6))&&this.getItemGroups().length===0){if(this.srcElement){this._initSubTree();}if(this.itemData){this.addItems(this.itemData);}}else{if(A6){this.cfg.fireQueue();}}!
 },_onBeforeRender:function(A6,A5){var A7=this.element,BA=this.!
 _aListEl
ements.length,A4=true,A9=0,A3,A8;if(BA>0){do{A3=this._aListElements[A9];if(A3){if(A4){g.addClass(A3,AK);A4=false;}if(!g.isAncestor(A7,A3)){this.appendToBody(A3);}A8=this._aGroupTitleElements[A9];if(A8){if(!g.isAncestor(A7,A8)){A3.parentNode.insertBefore(A8,A3);}g.addClass(A3,D);}}A9++;}while(A9<BA);}},_onRender:function(A4,A3){if(this.cfg.getProperty(Ab)==AE){if(!this.cfg.getProperty(As)){this.positionOffScreen();}}},_onBeforeShow:function(A5,A4){var A7,BA,A6,A8=this.cfg.getProperty(h);if(this.lazyLoad&&this.getItemGroups().length===0){if(this.srcElement){this._initSubTree();}if(this.itemData){if(this.parent&&this.parent.parent&&this.parent.parent.srcElement&&this.parent.parent.srcElement.tagName.toUpperCase()==AI){A7=this.itemData.length;for(BA=0;BA<A7;BA++){if(this.itemData[BA].tagName){this.addItem((new this.ITEM_TYPE(this.itemData[BA])));}}}else{this.addItems(this.itemData);}}A6=this.srcElement;if(A6){if(A6.tagName.toUpperCase()==AI){if(g.inDocument(A6)){this.render(A6.p!
 arentNode);}else{this.render(A8);}}else{this.render();}}else{if(this.parent){this.render(this.parent.element);}else{this.render(A8);}}}var A9=this.parent,A3;if(!A9&&this.cfg.getProperty(Ab)==AE){this.cfg.refireEvent(f);}if(A9){A3=A9.parent.cfg.getProperty(AP);this.cfg.setProperty(q,[A9.element,A3[0],A3[1]]);this.align();}},getConstrainedY:function(BF){var BQ=this,BM=BQ.cfg.getProperty(q),BT=BQ.cfg.getProperty(AU),BP,BE={"trbr":true,"tlbl":true,"bltl":true,"brtr":true},A8=(BM&&BE[BM[1]+BM[2]]),BA=BQ.element,BU=BA.offsetHeight,BO=AC.VIEWPORT_OFFSET,BJ=g.getViewportHeight(),BN=g.getDocumentScrollTop(),BK=(BQ.cfg.getProperty(Ah)+BO<BJ),BS,BB,BH,BI,BD=false,BC,A5,BG,A7,A3=BF;var A9=function(){var BV;if((BQ.cfg.getProperty(R)-BN)>BH){BV=(BH-BU);}else{BV=(BH+BI);}BQ.cfg.setProperty(R,(BV+BN),true);return BV;};var A6=function(){if((BQ.cfg.getProperty(R)-BN)>BH){return(A5-BO);}else{return(BC-BO);}};var BL=function(){var BV;if((BQ.cfg.getProperty(R)-BN)>BH){BV=(BH+BI);}else{BV=(BH-BA!
 .offsetHeight);}BQ.cfg.setProperty(R,(BV+BN),true);};var A4=fu!
 nction()
{BQ._setScrollHeight(this.cfg.getProperty(AU));BQ.hideEvent.unsubscribe(A4);};var BR=function(){var BZ=A6(),BV=(BQ.getItems().length>0),BY,BX,BW;if(BU>BZ){BY=BV?BQ.cfg.getProperty(Ah):BU;if((BZ>BY)&&BV){BP=BZ;}else{BP=BT;}BQ._setScrollHeight(BP);BQ.hideEvent.subscribe(A4);BL();if(BZ<BY){if(BD){A9();}else{A9();BD=true;BX=BR();}}}else{if(BP&&(BP!=BT)){BQ._setScrollHeight(BT);BQ.hideEvent.subscribe(A4);BL();}}return BX;};if(BQ.cfg.getProperty(A2)&&A8){if(BK){BB=BM[0];BI=BB.offsetHeight;BH=(g.getY(BB)-BN);BC=BH;A5=(BJ-(BH+BI));BR();}A3=BQ.cfg.getProperty(R);}else{if(!(BQ instanceof YAHOO.widget.MenuBar)&&BU>=BJ){BS=(BJ-(BO*2));if(BS>BQ.cfg.getProperty(Ah)){BQ._setScrollHeight(BS);BQ.hideEvent.subscribe(A4);BL();A3=BQ.cfg.getProperty(R);}}else{if(BK){BG=BN+BO;A7=BN+BJ-BU-BO;if(BF<BG){A3=BG;}else{if(BF>A7){A3=A7;}}}else{A3=BO+BN;}}}return A3;},_onHide:function(A4,A3){if(this.cfg.getProperty(Ab)===AE){this.positionOffScreen();}},_onShow:function(BB,A9){var A3=this.parent,A5,A6,A8,A!
 4;function A7(BD){var BC;if(BD.type==Ai||(BD.type==Ac&&BD.keyCode==27)){BC=AB.getTarget(BD);if(BC!=A5.element||!g.isAncestor(A5.element,BC)){A5.cfg.setProperty(a,false);AB.removeListener(document,Ai,A7);AB.removeListener(document,Ac,A7);}}}function BA(BD,BC,BE){this.cfg.setProperty(U,v);this.hideEvent.unsubscribe(BA,BE);}if(A3){A5=A3.parent;if(!A5.cfg.getProperty(a)&&(A5 instanceof YAHOO.widget.MenuBar||A5.cfg.getProperty(Ab)==C)){A5.cfg.setProperty(a,true);AB.on(document,Ai,A7);AB.on(document,Ac,A7);}if((this.cfg.getProperty("x")<A5.cfg.getProperty("x"))&&(Aq.gecko<1.9)&&!this.cfg.getProperty(U)){A6=this.element;A8=A6.offsetWidth;A6.style.width=A8+AR;A4=(A8-(A6.offsetWidth-A8))+AR;this.cfg.setProperty(U,A4);this.hideEvent.subscribe(BA,A4);}}},_onBeforeHide:function(A5,A4){var A3=this.activeItem,A7=this.getRoot(),A8,A6;if(A3){A8=A3.cfg;A8.setProperty(z,false);A6=A8.getProperty(O);if(A6){A6.hide();}}if(Aq.ie&&this.cfg.getProperty(Ab)===AE&&this.parent){A7._hasFocus=this.hasF!
 ocus();
-}if(A7==this){A7.blur();}},_onParentMenuConfigChange:function(A4,A3,A7){var A5=A3[0][0],A6=A3[0][1];switch(A5){case AG:case x:case AX:case At:case d:case AD:case Aw:case A0:case k:case Ah:case AF:case Ae:case A2:A7.cfg.setProperty(A5,A6);break;case AP:if(!(this.parent.parent instanceof YAHOO.widget.MenuBar)){A7.cfg.setProperty(A5,A6);}break;}},_onParentMenuRender:function(A4,A3,A9){var A6=A9.parent.parent,A5=A6.cfg,A7={constraintoviewport:A5.getProperty(x),xy:[0,0],clicktohide:A5.getProperty(AD),effect:A5.getProperty(Aw),showdelay:A5.getProperty(At),hidedelay:A5.getProperty(AX),submenuhidedelay:A5.getProperty(d),classname:A5.getProperty(A0),scrollincrement:A5.getProperty(k),minscrollheight:A5.getProperty(Ah),iframe:A5.getProperty(AG),shadow:A5.getProperty(Ae),preventcontextoverlap:A5.getProperty(A2),monitorresize:A5.getProperty(AF)},A8;if(!(A6 instanceof YAHOO.widget.MenuBar)){A7[AP]=A5.getProperty(AP);}A9.cfg.applyConfig(A7);if(!this.lazyLoad){A8=this.parent.element;if(thi!
 s.element.parentNode==A8){this.render();}else{this.render(A8);}}},_onMenuItemDestroy:function(A5,A4,A3){this._removeItemFromGroupByValue(A3.groupIndex,A3);},_onMenuItemConfigChange:function(A5,A4,A3){var A7=A4[0][0],A8=A4[0][1],A6;switch(A7){case z:if(A8===true){this.activeItem=A3;}break;case O:A6=A4[0][1];if(A6){this._configureSubmenu(A3);}break;}},configVisible:function(A5,A4,A6){var A3,A7;if(this.cfg.getProperty(Ab)==AE){s.superclass.configVisible.call(this,A5,A4,A6);}else{A3=A4[0];A7=g.getStyle(this.element,AW);g.setStyle(this.element,J,As);if(A3){if(A7!=AV){this.beforeShowEvent.fire();g.setStyle(this.element,AW,AV);this.showEvent.fire();}}else{if(A7==AV){this.beforeHideEvent.fire();g.setStyle(this.element,AW,AY);this.hideEvent.fire();}}}},configPosition:function(A5,A4,A8){var A7=this.element,A6=A4[0]==C?C:AA,A9=this.cfg,A3;g.setStyle(A7,Ab,A6);if(A6==C){g.setStyle(A7,AW,AV);A9.setProperty(As,true);}else{g.setStyle(A7,J,AM);}if(A6==AA){A3=A9.getProperty(AT);if(!A3||A3==!
 =0){A9.setProperty(AT,1);}}},configIframe:function(A4,A3,A5){i!
 f(this.c
fg.getProperty(Ab)==AE){s.superclass.configIframe.call(this,A4,A3,A5);}},configHideDelay:function(A4,A3,A7){var A9=A3[0],A8=this.mouseOutEvent,A5=this.mouseOverEvent,A6=this.keyDownEvent;if(A9>0){if(!this._bHideDelayEventHandlersAssigned){A8.subscribe(this._execHideDelay);A5.subscribe(this._cancelHideDelay);A6.subscribe(this._cancelHideDelay);this._bHideDelayEventHandlersAssigned=true;}}else{A8.unsubscribe(this._execHideDelay);A5.unsubscribe(this._cancelHideDelay);A6.unsubscribe(this._cancelHideDelay);this._bHideDelayEventHandlersAssigned=false;}},configContainer:function(A4,A3,A6){var A5=A3[0];if(AN.isString(A5)){this.cfg.setProperty(h,g.get(A5),true);}},_clearSetWidthFlag:function(){this._widthSetForScroll=false;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);},_setScrollHeight:function(BF){var BB=BF,BA=false,BG=false,A7,A8,BE,A5,A4,BD,BH,A3,BC,A9,A6;if(this.getItems().length>0){A7=this.element;A8=this.body;BE=this.header;A5=this.footer;BD=this._onScrollTarg!
 etMouseOver;BH=this._onScrollTargetMouseOut;A3=this.cfg.getProperty(Ah);A4=this.parent;if(BB>0&&BB<A3){BB=A3;}g.setStyle(A8,Am,v);g.removeClass(A8,m);A8.scrollTop=0;BG=((Aq.gecko&&A4&&A4.parent&&A4.parent.cfg.getProperty(Ab)==AE)||Aq.ie);if(BB>0&&BG&&!this.cfg.getProperty(U)){A9=A7.offsetWidth;A7.style.width=A9+AR;A6=(A9-(A7.offsetWidth-A9))+AR;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,A6);this._widthSetForScroll=true;this.cfg.subscribeToConfigEvent(U,this._clearSetWidthFlag);}if(BB>0&&(!BE&&!A5)){this.setHeader(AL);this.setFooter(AL);BE=this.header;A5=this.footer;g.addClass(BE,T);g.addClass(A5,y);A7.insertBefore(BE,A8);A7.appendChild(A5);}BC=BB;if(BE&&A5){BC=(BC-(BE.offsetHeight+A5.offsetHeight));}if((BC>0)&&(A8.offsetHeight>BB)){g.addClass(A8,m);g.setStyle(A8,Am,(BC+AR));if(!this._hasScrollEventHandlers){AB.on(BE,Ag,BD,this,true);AB.on(BE,G,BH,this,true);AB.on(A5,Ag,BD,this,true);AB.on(A5,G,BH,this,true);this._hasScrollEventHand!
 lers=true;}this._disableScrollHeader();this._enableScrollFoote!
 r();BA=t
rue;}else{if(BE&&A5){if(this._widthSetForScroll){this._widthSetForScroll=false;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,v);}this._enableScrollHeader();this._enableScrollFooter();if(this._hasScrollEventHandlers){AB.removeListener(BE,Ag,BD);AB.removeListener(BE,G,BH);AB.removeListener(A5,Ag,BD);AB.removeListener(A5,G,BH);this._hasScrollEventHandlers=false;}A7.removeChild(BE);A7.removeChild(A5);this.header=null;this.footer=null;BA=true;}}if(BA){this.cfg.refireEvent(AG);this.cfg.refireEvent(Ae);}}},_setMaxHeight:function(A4,A3,A5){this._setScrollHeight(A5);this.renderEvent.unsubscribe(this._setMaxHeight);},configMaxHeight:function(A4,A3,A5){var A6=A3[0];if(this.lazyLoad&&!this.body&&A6>0){this.renderEvent.subscribe(this._setMaxHeight,A6,this);}else{this._setScrollHeight(A6);}},configClassName:function(A5,A4,A6){var A3=A4[0];if(this._sClassName){g.removeClass(this.element,this._sClassName);}g.addClass(this.element,A3);this._sClassName=!
 A3;},_onItemAdded:function(A4,A3){var A5=A3[0];if(A5){A5.cfg.setProperty(Af,true);}},configDisabled:function(A5,A4,A8){var A7=A4[0],A3=this.getItems(),A9,A6;if(AN.isArray(A3)){A9=A3.length;if(A9>0){A6=A9-1;do{A3[A6].cfg.setProperty(Af,A7);}while(A6--);}if(A7){this.clearActiveItem(true);g.addClass(this.element,Af);this.itemAddedEvent.subscribe(this._onItemAdded);}else{g.removeClass(this.element,Af);this.itemAddedEvent.unsubscribe(this._onItemAdded);}}},configShadow:function(BB,A5,BA){var A9=function(){var BE=this.element,BD=this._shadow;if(BD&&BE){if(BD.style.width&&BD.style.height){BD.style.width=v;BD.style.height=v;}BD.style.width=(BE.offsetWidth+6)+AR;BD.style.height=(BE.offsetHeight+1)+AR;}};var BC=function(){this.element.appendChild(this._shadow);};var A7=function(){g.addClass(this._shadow,AH);};var A8=function(){g.removeClass(this._shadow,AH);};var A4=function(){var BE=this._shadow,BD;if(!BE){BD=this.element;
-if(!An){An=document.createElement(K);An.className=n;}BE=An.cloneNode(false);BD.appendChild(BE);this._shadow=BE;this.beforeShowEvent.subscribe(A7);this.beforeHideEvent.subscribe(A8);if(Aq.ie){AN.later(0,this,function(){A9.call(this);this.syncIframe();});this.cfg.subscribeToConfigEvent(U,A9);this.cfg.subscribeToConfigEvent(Am,A9);this.cfg.subscribeToConfigEvent(AU,A9);this.changeContentEvent.subscribe(A9);Au.textResizeEvent.subscribe(A9,this,true);this.destroyEvent.subscribe(function(){Au.textResizeEvent.unsubscribe(A9,this);});}this.cfg.subscribeToConfigEvent(AU,BC);}};var A6=function(){if(this._shadow){BC.call(this);if(Aq.ie){A9.call(this);}}else{A4.call(this);}this.beforeShowEvent.unsubscribe(A6);};var A3=A5[0];if(A3&&this.cfg.getProperty(Ab)==AE){if(this.cfg.getProperty(As)){if(this._shadow){BC.call(this);if(Aq.ie){A9.call(this);}}else{A4.call(this);}}else{this.beforeShowEvent.subscribe(A6);}}},initEvents:function(){s.superclass.initEvents.call(this);var A4=Aa.length-1,A5!
 ,A3;do{A5=Aa[A4];A3=this.createEvent(A5[1]);A3.signature=F.LIST;this[A5[0]]=A3;}while(A4--);},positionOffScreen:function(){var A4=this.iframe,A5=this.element,A3=this.OFF_SCREEN_POSITION;A5.style.top=v;A5.style.left=v;if(A4){A4.style.top=A3;A4.style.left=A3;}},getRoot:function(){var A5=this.parent,A4,A3;if(A5){A4=A5.parent;A3=A4?A4.getRoot():this;}else{A3=this;}return A3;},toString:function(){var A4=Ao,A3=this.id;if(A3){A4+=(Az+A3);}return A4;},setItemGroupTitle:function(A8,A7){var A6,A5,A4,A3;if(AN.isString(A8)&&A8.length>0){A6=AN.isNumber(A7)?A7:0;A5=this._aGroupTitleElements[A6];if(A5){A5.innerHTML=A8;}else{A5=document.createElement(this.GROUP_TITLE_TAG_NAME);A5.innerHTML=A8;this._aGroupTitleElements[A6]=A5;}A4=this._aGroupTitleElements.length-1;do{if(this._aGroupTitleElements[A4]){g.removeClass(this._aGroupTitleElements[A4],AK);A3=A4;}}while(A4--);if(A3!==null){g.addClass(this._aGroupTitleElements[A3],AK);}this.changeContentEvent.fire();}},addItem:function(A3,A4){return !
 this._addItemToGroup(A4,A3);},addItems:function(A7,A6){var A9,!
 A3,A8,A4
,A5;if(AN.isArray(A7)){A9=A7.length;A3=[];for(A4=0;A4<A9;A4++){A8=A7[A4];if(A8){if(AN.isArray(A8)){A3[A3.length]=this.addItems(A8,A4);}else{A3[A3.length]=this._addItemToGroup(A6,A8);}}}if(A3.length){A5=A3;}}return A5;},insertItem:function(A3,A4,A5){return this._addItemToGroup(A5,A3,A4);},removeItem:function(A3,A5){var A6,A4;if(!AN.isUndefined(A3)){if(A3 instanceof YAHOO.widget.MenuItem){A6=this._removeItemFromGroupByValue(A5,A3);}else{if(AN.isNumber(A3)){A6=this._removeItemFromGroupByIndex(A5,A3);}}if(A6){A6.destroy();A4=A6;}}return A4;},getItems:function(){var A6=this._aItemGroups,A4,A5,A3=[];if(AN.isArray(A6)){A4=A6.length;A5=((A4==1)?A6[0]:(Array.prototype.concat.apply(A3,A6)));}return A5;},getItemGroups:function(){return this._aItemGroups;},getItem:function(A4,A5){var A6,A3;if(AN.isNumber(A4)){A6=this._getItemGroup(A5);if(A6){A3=A6[A4];}}return A3;},getSubmenus:function(){var A4=this.getItems(),A8=A4.length,A3,A5,A7,A6;if(A8>0){A3=[];for(A6=0;A6<A8;A6++){A7=A4[A6];if(A7)!
 {A5=A7.cfg.getProperty(O);if(A5){A3[A3.length]=A5;}}}}return A3;},clearContent:function(){var A7=this.getItems(),A4=A7.length,A5=this.element,A6=this.body,BB=this.header,A3=this.footer,BA,A9,A8;if(A4>0){A8=A4-1;do{BA=A7[A8];if(BA){A9=BA.cfg.getProperty(O);if(A9){this.cfg.configChangedEvent.unsubscribe(this._onParentMenuConfigChange,A9);this.renderEvent.unsubscribe(this._onParentMenuRender,A9);}this.removeItem(BA,BA.groupIndex);}}while(A8--);}if(BB){AB.purgeElement(BB);A5.removeChild(BB);}if(A3){AB.purgeElement(A3);A5.removeChild(A3);}if(A6){AB.purgeElement(A6);A6.innerHTML=v;}this.activeItem=null;this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];this.cfg.setProperty(U,null);},destroy:function(){this.clearContent();this._aItemGroups=null;this._aListElements=null;this._aGroupTitleElements=null;s.superclass.destroy.call(this);},setInitialFocus:function(){var A3=this._getFirstEnabledItem();if(A3){A3.focus();}},setInitialSelection:function(){var A3=this._g!
 etFirstEnabledItem();if(A3){A3.cfg.setProperty(z,true);}},clea!
 rActiveI
tem:function(A5){if(this.cfg.getProperty(At)>0){this._cancelShowDelay();}var A3=this.activeItem,A6,A4;if(A3){A6=A3.cfg;if(A5){A3.blur();this.getRoot()._hasFocus=true;}A6.setProperty(z,false);A4=A6.getProperty(O);if(A4){A4.hide();}this.activeItem=null;}},focus:function(){if(!this.hasFocus()){this.setInitialFocus();}},blur:function(){var A3;if(this.hasFocus()){A3=A1.getFocusedMenuItem();if(A3){A3.blur();}}},hasFocus:function(){return(A1.getFocusedMenu()==this.getRoot());},subscribe:function(){function A6(BB,BA,BD){var BE=BA[0],BC=BE.cfg.getProperty(O);if(BC){BC.subscribe.apply(BC,BD);}}function A9(BB,BA,BD){var BC=this.cfg.getProperty(O);if(BC){BC.subscribe.apply(BC,BD);}}s.superclass.subscribe.apply(this,arguments);s.superclass.subscribe.call(this,AS,A6,arguments);var A3=this.getItems(),A8,A7,A4,A5;if(A3){A8=A3.length;if(A8>0){A5=A8-1;do{A7=A3[A5];A4=A7.cfg.getProperty(O);if(A4){A4.subscribe.apply(A4,arguments);}else{A7.cfg.subscribeToConfigEvent(O,A9,arguments);}}while(A5--)!
 ;}}},initDefaultConfig:function(){s.superclass.initDefaultConfig.call(this);var A3=this.cfg;A3.addProperty(AZ.key,{handler:this.configVisible,value:AZ.value,validator:AZ.validator});A3.addProperty(AQ.key,{handler:this.configConstrainToViewport,value:AQ.value,validator:AQ.validator,supercedes:AQ.supercedes});A3.addProperty(AJ.key,{value:AJ.value,validator:AJ.validator,supercedes:AJ.supercedes});A3.addProperty(S.key,{handler:this.configPosition,value:S.value,validator:S.validator,supercedes:S.supercedes});A3.addProperty(A.key,{value:A.value,suppressEvent:A.suppressEvent});A3.addProperty(u.key,{value:u.value,validator:u.validator,suppressEvent:u.suppressEvent});A3.addProperty(Z.key,{value:Z.value,validator:Z.validator,suppressEvent:Z.suppressEvent});A3.addProperty(r.key,{handler:this.configHideDelay,value:r.value,validator:r.validator,suppressEvent:r.suppressEvent});A3.addProperty(w.key,{value:w.value,validator:w.validator,suppressEvent:w.suppressEvent});
-A3.addProperty(p.key,{value:p.value,validator:p.validator,suppressEvent:p.suppressEvent});A3.addProperty(AO.key,{handler:this.configContainer,value:document.body,suppressEvent:AO.suppressEvent});A3.addProperty(Ad.key,{value:Ad.value,validator:Ad.validator,supercedes:Ad.supercedes,suppressEvent:Ad.suppressEvent});A3.addProperty(N.key,{value:N.value,validator:N.validator,supercedes:N.supercedes,suppressEvent:N.suppressEvent});A3.addProperty(X.key,{handler:this.configMaxHeight,value:X.value,validator:X.validator,suppressEvent:X.suppressEvent,supercedes:X.supercedes});A3.addProperty(W.key,{handler:this.configClassName,value:W.value,validator:W.validator,supercedes:W.supercedes});A3.addProperty(b.key,{handler:this.configDisabled,value:b.value,validator:b.validator,suppressEvent:b.suppressEvent});A3.addProperty(I.key,{handler:this.configShadow,value:I.value,validator:I.validator});A3.addProperty(Aj.key,{value:Aj.value,validator:Aj.validator});}});})();(function(){YAHOO.widget.Men!
 uItem=function(AO,AN){if(AO){if(AN){this.parent=AN.parent;this.value=AN.value;this.id=AN.id;}this.init(AO,AN);}};var v=YAHOO.util.Dom,h=YAHOO.widget.Module,x=YAHOO.widget.Menu,a=YAHOO.widget.MenuItem,AG=YAHOO.util.CustomEvent,i=YAHOO.env.ua,AM=YAHOO.lang,AH="text",M="#",O="-",K="helptext",l="url",AD="target",A="emphasis",L="strongemphasis",Z="checked",u="submenu",G="disabled",B="selected",N="hassubmenu",S="checked-disabled",AE="hassubmenu-disabled",z="hassubmenu-selected",R="checked-selected",o="onclick",I="classname",AF="",g="OPTION",t="OPTGROUP",J="LI",Q="li",AA="href",AB='<a href="#"></a>',p="SELECT",V="DIV",AJ='<em class="helptext">',Y="<em>",H="</em>",U="<strong>",w="</strong>",W="preventcontextoverlap",f="obj",AC="scope",r="none",T="visible",D=" ",k="MenuItem",n=[["mouseOverEvent","mouseover"],["mouseOutEvent","mouseout"],["mouseDownEvent","mousedown"],["mouseUpEvent","mouseup"],["clickEvent","click"],["keyPressEvent","keypress"],["keyDownEvent","keydown"],["keyUpEven!
 t","keyup"],["focusEvent","focus"],["blurEvent","blur"],["dest!
 royEvent
","destroy"]],m={key:AH,value:AF,validator:AM.isString,suppressEvent:true},q={key:K,supercedes:[AH],suppressEvent:true},F={key:l,value:M,suppressEvent:true},AK={key:AD,suppressEvent:true},AL={key:A,value:false,validator:AM.isBoolean,suppressEvent:true,supercedes:[AH]},b={key:L,value:false,validator:AM.isBoolean,suppressEvent:true,supercedes:[AH]},j={key:Z,value:false,validator:AM.isBoolean,suppressEvent:true,supercedes:[G,B]},E={key:u,suppressEvent:true,supercedes:[G,B]},AI={key:G,value:false,validator:AM.isBoolean,suppressEvent:true,supercedes:[AH,B]},d={key:B,value:false,validator:AM.isBoolean,suppressEvent:true},s={key:o,suppressEvent:true},y={key:I,value:null,validator:AM.isString,suppressEvent:true},c={},C;var X=function(AQ,AP){var AN=c[AQ];if(!AN){c[AQ]={};AN=c[AQ];}var AO=AN[AP];if(!AO){AO=AQ+O+AP;AN[AP]=AO;}return AO;};var e=function(AN){v.addClass(this.element,X(this.CSS_CLASS_NAME,AN));v.addClass(this._oAnchor,X(this.CSS_LABEL_CLASS_NAME,AN));};var P=function(AN){v!
 .removeClass(this.element,X(this.CSS_CLASS_NAME,AN));v.removeClass(this._oAnchor,X(this.CSS_LABEL_CLASS_NAME,AN));};a.prototype={CSS_CLASS_NAME:"yuimenuitem",CSS_LABEL_CLASS_NAME:"yuimenuitemlabel",SUBMENU_TYPE:null,_oAnchor:null,_oHelpTextEM:null,_oSubmenu:null,_oOnclickAttributeValue:null,_sClassName:null,constructor:a,index:null,groupIndex:null,parent:null,element:null,srcElement:null,value:null,browser:h.prototype.browser,id:null,init:function(AN,AX){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=x;}this.cfg=new YAHOO.util.Config(this);this.initDefaultConfig();var AT=this.cfg,AU=M,AP,AW,AV,AO,AR,AQ,AS;if(AM.isString(AN)){this._createRootNodeStructure();AT.queueProperty(AH,AN);}else{if(AN&&AN.tagName){switch(AN.tagName.toUpperCase()){case g:this._createRootNodeStructure();AT.queueProperty(AH,AN.text);AT.queueProperty(G,AN.disabled);this.value=AN.value;this.srcElement=AN;break;case t:this._createRootNodeStructure();AT.queueProperty(AH,AN.label);AT.queueProperty(G,AN.disabled);t!
 his.srcElement=AN;this._initSubTree();break;case J:AV=v.getFir!
 stChild(
AN);if(AV){AU=AV.getAttribute(AA,2);AO=AV.getAttribute(AD);AR=AV.innerHTML;}this.srcElement=AN;this.element=AN;this._oAnchor=AV;AT.setProperty(AH,AR,true);AT.setProperty(l,AU,true);AT.setProperty(AD,AO,true);this._initSubTree();break;}}}if(this.element){AQ=(this.srcElement||this.element).id;if(!AQ){AQ=this.id||v.generateId();this.element.id=AQ;}this.id=AQ;v.addClass(this.element,this.CSS_CLASS_NAME);v.addClass(this._oAnchor,this.CSS_LABEL_CLASS_NAME);AS=n.length-1;do{AW=n[AS];AP=this.createEvent(AW[1]);AP.signature=AG.LIST;this[AW[0]]=AP;}while(AS--);if(AX){AT.applyConfig(AX);}AT.fireQueue();}},_createRootNodeStructure:function(){var AN,AO;if(!C){C=document.createElement(Q);C.innerHTML=AB;}AN=C.cloneNode(true);AN.className=this.CSS_CLASS_NAME;AO=AN.firstChild;AO.className=this.CSS_LABEL_CLASS_NAME;this.element=AN;this._oAnchor=AO;},_initSubTree:function(){var AT=this.srcElement,AP=this.cfg,AR,AQ,AO,AN,AS;if(AT.childNodes.length>0){if(this.parent.lazyLoad&&this.parent.srcElem!
 ent&&this.parent.srcElement.tagName.toUpperCase()==p){AP.setProperty(u,{id:v.generateId(),itemdata:AT.childNodes});}else{AR=AT.firstChild;AQ=[];do{if(AR&&AR.tagName){switch(AR.tagName.toUpperCase()){case V:AP.setProperty(u,AR);break;case g:AQ[AQ.length]=AR;break;}}}while((AR=AR.nextSibling));AO=AQ.length;if(AO>0){AN=new this.SUBMENU_TYPE(v.generateId());AP.setProperty(u,AN);for(AS=0;AS<AO;AS++){AN.addItem((new AN.ITEM_TYPE(AQ[AS])));}}}}},configText:function(AW,AP,AR){var AO=AP[0],AQ=this.cfg,AU=this._oAnchor,AN=AQ.getProperty(K),AV=AF,AS=AF,AT=AF;if(AO){if(AN){AV=AJ+AN+H;}if(AQ.getProperty(A)){AS=Y;AT=H;}if(AQ.getProperty(L)){AS=U;AT=w;}AU.innerHTML=(AS+AO+AT+AV);}},configHelpText:function(AP,AO,AN){this.cfg.refireEvent(AH);},configURL:function(AP,AO,AN){var AR=AO[0];if(!AR){AR=M;}var AQ=this._oAnchor;if(i.opera){AQ.removeAttribute(AA);}AQ.setAttribute(AA,AR);},configTarget:function(AQ,AP,AO){var AN=AP[0],AR=this._oAnchor;
-if(AN&&AN.length>0){AR.setAttribute(AD,AN);}else{AR.removeAttribute(AD);}},configEmphasis:function(AP,AO,AN){var AR=AO[0],AQ=this.cfg;if(AR&&AQ.getProperty(L)){AQ.setProperty(L,false);}AQ.refireEvent(AH);},configStrongEmphasis:function(AQ,AP,AO){var AN=AP[0],AR=this.cfg;if(AN&&AR.getProperty(A)){AR.setProperty(A,false);}AR.refireEvent(AH);},configChecked:function(AP,AO,AN){var AR=AO[0],AQ=this.cfg;if(AR){e.call(this,Z);}else{P.call(this,Z);}AQ.refireEvent(AH);if(AQ.getProperty(G)){AQ.refireEvent(G);}if(AQ.getProperty(B)){AQ.refireEvent(B);}},configDisabled:function(AP,AO,AN){var AR=AO[0],AS=this.cfg,AQ=AS.getProperty(u),AT=AS.getProperty(Z);if(AR){if(AS.getProperty(B)){AS.setProperty(B,false);}e.call(this,G);if(AQ){e.call(this,AE);}if(AT){e.call(this,S);}}else{P.call(this,G);if(AQ){P.call(this,AE);}if(AT){P.call(this,S);}}},configSelected:function(AP,AO,AN){var AT=this.cfg,AS=this._oAnchor,AR=AO[0],AU=AT.getProperty(Z),AQ=AT.getProperty(u);if(i.opera){AS.blur();}if(AR&&!AT.!
 getProperty(G)){e.call(this,B);if(AQ){e.call(this,z);}if(AU){e.call(this,R);}}else{P.call(this,B);if(AQ){P.call(this,z);}if(AU){P.call(this,R);}}if(this.hasFocus()&&i.opera){AS.focus();}},_onSubmenuBeforeHide:function(AQ,AP){var AR=this.parent,AN;function AO(){AR._oAnchor.blur();AN.beforeHideEvent.unsubscribe(AO);}if(AR.hasFocus()){AN=AR.parent;AN.beforeHideEvent.subscribe(AO);}},configSubmenu:function(AU,AP,AS){var AR=AP[0],AQ=this.cfg,AO=this.parent&&this.parent.lazyLoad,AT,AV,AN;if(AR){if(AR instanceof x){AT=AR;AT.parent=this;AT.lazyLoad=AO;}else{if(AM.isObject(AR)&&AR.id&&!AR.nodeType){AV=AR.id;AN=AR;AN.lazyload=AO;AN.parent=this;AT=new this.SUBMENU_TYPE(AV,AN);AQ.setProperty(u,AT,true);}else{AT=new this.SUBMENU_TYPE(AR,{lazyload:AO,parent:this});AQ.setProperty(u,AT,true);}}if(AT){AT.cfg.setProperty(W,true);e.call(this,N);if(AQ.getProperty(l)===M){AQ.setProperty(l,(M+AT.id));}this._oSubmenu=AT;if(i.opera){AT.beforeHideEvent.subscribe(this._onSubmenuBeforeHide);}}}else{P!
 .call(this,N);if(this._oSubmenu){this._oSubmenu.destroy();}}if!
 (AQ.getP
roperty(G)){AQ.refireEvent(G);}if(AQ.getProperty(B)){AQ.refireEvent(B);}},configOnClick:function(AP,AO,AN){var AQ=AO[0];if(this._oOnclickAttributeValue&&(this._oOnclickAttributeValue!=AQ)){this.clickEvent.unsubscribe(this._oOnclickAttributeValue.fn,this._oOnclickAttributeValue.obj);this._oOnclickAttributeValue=null;}if(!this._oOnclickAttributeValue&&AM.isObject(AQ)&&AM.isFunction(AQ.fn)){this.clickEvent.subscribe(AQ.fn,((f in AQ)?AQ.obj:this),((AC in AQ)?AQ.scope:null));this._oOnclickAttributeValue=AQ;}},configClassName:function(AQ,AP,AO){var AN=AP[0];if(this._sClassName){v.removeClass(this.element,this._sClassName);}v.addClass(this.element,AN);this._sClassName=AN;},initDefaultConfig:function(){var AN=this.cfg;AN.addProperty(m.key,{handler:this.configText,value:m.value,validator:m.validator,suppressEvent:m.suppressEvent});AN.addProperty(q.key,{handler:this.configHelpText,supercedes:q.supercedes,suppressEvent:q.suppressEvent});AN.addProperty(F.key,{handler:this.configURL,valu!
 e:F.value,suppressEvent:F.suppressEvent});AN.addProperty(AK.key,{handler:this.configTarget,suppressEvent:AK.suppressEvent});AN.addProperty(AL.key,{handler:this.configEmphasis,value:AL.value,validator:AL.validator,suppressEvent:AL.suppressEvent,supercedes:AL.supercedes});AN.addProperty(b.key,{handler:this.configStrongEmphasis,value:b.value,validator:b.validator,suppressEvent:b.suppressEvent,supercedes:b.supercedes});AN.addProperty(j.key,{handler:this.configChecked,value:j.value,validator:j.validator,suppressEvent:j.suppressEvent,supercedes:j.supercedes});AN.addProperty(AI.key,{handler:this.configDisabled,value:AI.value,validator:AI.validator,suppressEvent:AI.suppressEvent});AN.addProperty(d.key,{handler:this.configSelected,value:d.value,validator:d.validator,suppressEvent:d.suppressEvent});AN.addProperty(E.key,{handler:this.configSubmenu,supercedes:E.supercedes,suppressEvent:E.suppressEvent});AN.addProperty(s.key,{handler:this.configOnClick,suppressEvent:s.suppressEvent});AN!
 .addProperty(y.key,{handler:this.configClassName,value:y.value!
 ,validat
or:y.validator,suppressEvent:y.suppressEvent});},getNextEnabledSibling:function(){var AQ,AT,AN,AS,AR,AO;function AP(AU,AV){return AU[AV]||AP(AU,(AV+1));}if(this.parent instanceof x){AQ=this.groupIndex;AT=this.parent.getItemGroups();if(this.index<(AT[AQ].length-1)){AN=AP(AT[AQ],(this.index+1));}else{if(AQ<(AT.length-1)){AS=AQ+1;}else{AS=0;}AR=AP(AT,AS);AN=AP(AR,0);}AO=(AN.cfg.getProperty(G)||AN.element.style.display==r)?AN.getNextEnabledSibling():AN;}return AO;},getPreviousEnabledSibling:function(){var AS,AU,AO,AN,AR,AQ;function AT(AV,AW){return AV[AW]||AT(AV,(AW-1));}function AP(AV,AW){return AV[AW]?AW:AP(AV,(AW+1));}if(this.parent instanceof x){AS=this.groupIndex;AU=this.parent.getItemGroups();if(this.index>AP(AU[AS],0)){AO=AT(AU[AS],(this.index-1));}else{if(AS>AP(AU,0)){AN=AS-1;}else{AN=AU.length-1;}AR=AT(AU,AN);AO=AT(AR,(AR.length-1));}AQ=(AO.cfg.getProperty(G)||AO.element.style.display==r)?AO.getPreviousEnabledSibling():AO;}return AQ;},focus:function(){var AQ=this.parent!
 ,AP=this._oAnchor,AN=AQ.activeItem;function AO(){try{if(!(i.ie&&!document.hasFocus())){if(AN){AN.blurEvent.fire();}AP.focus();this.focusEvent.fire();}}catch(AR){}}if(!this.cfg.getProperty(G)&&AQ&&AQ.cfg.getProperty(T)&&this.element.style.display!=r){AM.later(0,this,AO);}},blur:function(){var AN=this.parent;if(!this.cfg.getProperty(G)&&AN&&AN.cfg.getProperty(T)){AM.later(0,this,function(){try{this._oAnchor.blur();this.blurEvent.fire();}catch(AO){}},0);}},hasFocus:function(){return(YAHOO.widget.MenuManager.getFocusedMenuItem()==this);},destroy:function(){var AP=this.element,AO,AN,AR,AQ;if(AP){AO=this.cfg.getProperty(u);if(AO){AO.destroy();}AN=AP.parentNode;if(AN){AN.removeChild(AP);this.destroyEvent.fire();}AQ=n.length-1;do{AR=n[AQ];this[AR[0]].unsubscribeAll();}while(AQ--);this.cfg.configChangedEvent.unsubscribeAll();}},toString:function(){var AO=k,AN=this.id;if(AN){AO+=(D+AN);}return AO;}};AM.augmentProto(a,YAHOO.util.EventProvider);
-})();(function(){var B="xy",C="mousedown",F="ContextMenu",J=" ";YAHOO.widget.ContextMenu=function(L,K){YAHOO.widget.ContextMenu.superclass.constructor.call(this,L,K);};var I=YAHOO.util.Event,E=YAHOO.env.ua,G=YAHOO.widget.ContextMenu,A={"TRIGGER_CONTEXT_MENU":"triggerContextMenu","CONTEXT_MENU":(E.opera?C:"contextmenu"),"CLICK":"click"},H={key:"trigger",suppressEvent:true};function D(L,K,M){this.cfg.setProperty(B,M);this.beforeShowEvent.unsubscribe(D,M);}YAHOO.lang.extend(G,YAHOO.widget.Menu,{_oTrigger:null,_bCancelled:false,contextEventTarget:null,triggerContextMenuEvent:null,init:function(L,K){G.superclass.init.call(this,L);this.beforeInitEvent.fire(G);if(K){this.cfg.applyConfig(K,true);}this.initEvent.fire(G);},initEvents:function(){G.superclass.initEvents.call(this);this.triggerContextMenuEvent=this.createEvent(A.TRIGGER_CONTEXT_MENU);this.triggerContextMenuEvent.signature=YAHOO.util.CustomEvent.LIST;},cancel:function(){this._bCancelled=true;},_removeEventHandlers:functi!
 on(){var K=this._oTrigger;if(K){I.removeListener(K,A.CONTEXT_MENU,this._onTriggerContextMenu);if(E.opera){I.removeListener(K,A.CLICK,this._onTriggerClick);}}},_onTriggerClick:function(L,K){if(L.ctrlKey){I.stopEvent(L);}},_onTriggerContextMenu:function(M,K){var L;if(!(M.type==C&&!M.ctrlKey)){I.stopEvent(M);this.contextEventTarget=I.getTarget(M);this.triggerContextMenuEvent.fire(M);YAHOO.widget.MenuManager.hideVisible();if(!this._bCancelled){L=I.getXY(M);if(!YAHOO.util.Dom.inDocument(this.element)){this.beforeShowEvent.subscribe(D,L);}else{this.cfg.setProperty(B,L);}this.show();}this._bCancelled=false;}},toString:function(){var L=F,K=this.id;if(K){L+=(J+K);}return L;},initDefaultConfig:function(){G.superclass.initDefaultConfig.call(this);this.cfg.addProperty(H.key,{handler:this.configTrigger,suppressEvent:H.suppressEvent});},destroy:function(){this._removeEventHandlers();G.superclass.destroy.call(this);},configTrigger:function(L,K,N){var M=K[0];if(M){if(this._oTrigger){this._!
 removeEventHandlers();}this._oTrigger=M;I.on(M,A.CONTEXT_MENU,!
 this._on
TriggerContextMenu,this,true);if(E.opera){I.on(M,A.CLICK,this._onTriggerClick,this,true);}}else{this._removeEventHandlers();}}});}());YAHOO.widget.ContextMenuItem=YAHOO.widget.MenuItem;(function(){var D=YAHOO.lang,N="static",M="dynamic,"+N,A="disabled",F="selected",B="autosubmenudisplay",G="submenu",C="visible",Q=" ",H="submenutoggleregion",P="MenuBar";YAHOO.widget.MenuBar=function(T,S){YAHOO.widget.MenuBar.superclass.constructor.call(this,T,S);};function O(T){var S=false;if(D.isString(T)){S=(M.indexOf((T.toLowerCase()))!=-1);}return S;}var R=YAHOO.util.Event,L=YAHOO.widget.MenuBar,K={key:"position",value:N,validator:O,supercedes:[C]},E={key:"submenualignment",value:["tl","bl"]},J={key:B,value:false,validator:D.isBoolean,suppressEvent:true},I={key:H,value:false,validator:D.isBoolean};D.extend(L,YAHOO.widget.Menu,{init:function(T,S){if(!this.ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuBarItem;}L.superclass.init.call(this,T);this.beforeInitEvent.fire(L);if(S){this.cfg.applyConf!
 ig(S,true);}this.initEvent.fire(L);},CSS_CLASS_NAME:"yuimenubar",SUBMENU_TOGGLE_REGION_WIDTH:20,_onKeyDown:function(U,T,Y){var S=T[0],Z=T[1],W,X,V;if(Z&&!Z.cfg.getProperty(A)){X=Z.cfg;switch(S.keyCode){case 37:case 39:if(Z==this.activeItem&&!X.getProperty(F)){X.setProperty(F,true);}else{V=(S.keyCode==37)?Z.getPreviousEnabledSibling():Z.getNextEnabledSibling();if(V){this.clearActiveItem();V.cfg.setProperty(F,true);W=V.cfg.getProperty(G);if(W){W.show();W.setInitialFocus();}else{V.focus();}}}R.preventDefault(S);break;case 40:if(this.activeItem!=Z){this.clearActiveItem();X.setProperty(F,true);Z.focus();}W=X.getProperty(G);if(W){if(W.cfg.getProperty(C)){W.setInitialSelection();W.setInitialFocus();}else{W.show();W.setInitialFocus();}}R.preventDefault(S);break;}}if(S.keyCode==27&&this.activeItem){W=this.activeItem.cfg.getProperty(G);if(W&&W.cfg.getProperty(C)){W.hide();this.activeItem.focus();}else{this.activeItem.cfg.setProperty(F,false);this.activeItem.blur();}R.preventDefault(S!
 );}},_onClick:function(e,Y,b){L.superclass._onClick.call(this,!
 e,Y,b);v
ar d=Y[1],T=true,S,f,U,W,Z,a,c,V;var X=function(){if(a.cfg.getProperty(C)){a.hide();}else{a.show();}};if(d&&!d.cfg.getProperty(A)){f=Y[0];U=R.getTarget(f);W=this.activeItem;Z=this.cfg;if(W&&W!=d){this.clearActiveItem();}d.cfg.setProperty(F,true);a=d.cfg.getProperty(G);if(a){S=d.element;c=YAHOO.util.Dom.getX(S);V=c+(S.offsetWidth-this.SUBMENU_TOGGLE_REGION_WIDTH);if(Z.getProperty(H)){if(R.getPageX(f)>V){X();R.preventDefault(f);T=false;}}else{X();}}}return T;},configSubmenuToggle:function(U,T){var S=T[0];if(S){this.cfg.setProperty(B,false);}},toString:function(){var T=P,S=this.id;if(S){T+=(Q+S);}return T;},initDefaultConfig:function(){L.superclass.initDefaultConfig.call(this);var S=this.cfg;S.addProperty(K.key,{handler:this.configPosition,value:K.value,validator:K.validator,supercedes:K.supercedes});S.addProperty(E.key,{value:E.value,suppressEvent:E.suppressEvent});S.addProperty(J.key,{value:J.value,validator:J.validator,suppressEvent:J.suppressEvent});S.addProperty(I.key,{val!
 ue:I.value,validator:I.validator,handler:this.configSubmenuToggle});}});}());YAHOO.widget.MenuBarItem=function(B,A){YAHOO.widget.MenuBarItem.superclass.constructor.call(this,B,A);};YAHOO.lang.extend(YAHOO.widget.MenuBarItem,YAHOO.widget.MenuItem,{init:function(B,A){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=YAHOO.widget.Menu;}YAHOO.widget.MenuBarItem.superclass.init.call(this,B);var C=this.cfg;if(A){C.applyConfig(A,true);}C.fireQueue();},CSS_CLASS_NAME:"yuimenubaritem",CSS_LABEL_CLASS_NAME:"yuimenubaritemlabel",toString:function(){var A="MenuBarItem";if(this.cfg&&this.cfg.getProperty("text")){A+=(": "+this.cfg.getProperty("text"));}return A;}});YAHOO.register("menu",YAHOO.widget.Menu,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.lang.extend(s,AC,{CSS_CLASS_NAME:"yuimenu",ITEM_TYPE:null,GROUP_TITLE_TAG_NAME:"h6",OFF_SCREEN_POSITION:"-999em",_useHideDelay:false,_bHandledMouseOverEvent:false,_bHandledMouseOutEvent:false,_aGroupTitleElements:null,_aItemGroups:null,_aListElements:null,_nCurrentMouseX:0,_bStopMouseEventHandlers:false,_sClassName:null,lazyLoad:false,itemData:null,activeItem:null,parent:null,srcElement:null,init:function(A5,A4){this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];if(!this.ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuItem;}var A3;if(AN.isString(A5)){A3=g.get(A5);}else{if(A5.tagName){A3=A5;}}if(A3&&A3.tagName){switch(A3.tagName.toUpperCase()){case H:this.srcElement=A3;if(!A3.id){A3.setAttribute(Ak,g.generateId());}s.superclass.init.call(this,A3);this.beforeInitEvent.fire(s);break;case AI:this.srcElement=A3;s.superclass.init.call(this,g.generateId());this.beforeInitEvent.fire(s);break;}}else{s.superclass.init.call(this,A5);this.beforeInitEvent.fire(s);!
 }if(this.element){g.addClass(this.element,this.CSS_CLASS_NAME);this.initEvent.subscribe(this._onInit);this.beforeRenderEvent.subscribe(this._onBeforeRender);this.renderEvent.subscribe(this._onRender);this.beforeShowEvent.subscribe(this._onBeforeShow);this.hideEvent.subscribe(this._onHide);this.showEvent.subscribe(this._onShow);this.beforeHideEvent.subscribe(this._onBeforeHide);this.mouseOverEvent.subscribe(this._onMouseOver);this.mouseOutEvent.subscribe(this._onMouseOut);this.clickEvent.subscribe(this._onClick);this.keyDownEvent.subscribe(this._onKeyDown);this.keyPressEvent.subscribe(this._onKeyPress);this.blurEvent.subscribe(this._onBlur);if((Aq.gecko&&Aq.gecko<1.9)||Aq.webkit){this.cfg.subscribeToConfigEvent(R,this._onYChange);}if(A4){this.cfg.applyConfig(A4,true);}A1.addMenu(this);this.initEvent.fire(s);}},_initSubTree:function(){var A4=this.srcElement,A3,A6,A9,BA,A8,A7,A5;if(A4){A3=(A4.tagName&&A4.tagName.toUpperCase());if(A3==H){BA=this.body.firstChild;if(BA){A6=0;A9=t!
 his.GROUP_TITLE_TAG_NAME.toUpperCase();do{if(BA&&BA.tagName){s!
 witch(BA
.tagName.toUpperCase()){case A9:this._aGroupTitleElements[A6]=BA;break;case Av:this._aListElements[A6]=BA;this._aItemGroups[A6]=[];A6++;break;}}}while((BA=BA.nextSibling));if(this._aListElements[0]){g.addClass(this._aListElements[0],AK);}}}BA=null;if(A3){switch(A3){case H:A8=this._aListElements;A7=A8.length;if(A7>0){A5=A7-1;do{BA=A8[A5].firstChild;if(BA){do{if(BA&&BA.tagName&&BA.tagName.toUpperCase()==l){this.addItem(new this.ITEM_TYPE(BA,{parent:this}),A5);}}while((BA=BA.nextSibling));}}while(A5--);}break;case AI:BA=A4.firstChild;do{if(BA&&BA.tagName){switch(BA.tagName.toUpperCase()){case i:case Ax:this.addItem(new this.ITEM_TYPE(BA,{parent:this}));break;}}}while((BA=BA.nextSibling));break;}}}},_getFirstEnabledItem:function(){var A3=this.getItems(),A7=A3.length,A6,A5;for(var A4=0;A4<A7;A4++){A6=A3[A4];if(A6&&!A6.cfg.getProperty(Af)&&A6.element.style.display!=AY){A5=A6;break;}}return A5;},_addItemToGroup:function(A8,A9,BD){var BB,BE,A6,BC,A7,A4,A5,BA;function A3(BF,BG){retur!
 n(BF[BG]||A3(BF,(BG+1)));}if(A9 instanceof this.ITEM_TYPE){BB=A9;BB.parent=this;}else{if(AN.isString(A9)){BB=new this.ITEM_TYPE(A9,{parent:this});}else{if(AN.isObject(A9)){A9.parent=this;BB=new this.ITEM_TYPE(A9.text,A9);}}}if(BB){if(BB.cfg.getProperty(z)){this.activeItem=BB;}BE=AN.isNumber(A8)?A8:0;A6=this._getItemGroup(BE);if(!A6){A6=this._createItemGroup(BE);}if(AN.isNumber(BD)){A7=(BD>=A6.length);if(A6[BD]){A6.splice(BD,0,BB);}else{A6[BD]=BB;}BC=A6[BD];if(BC){if(A7&&(!BC.element.parentNode||BC.element.parentNode.nodeType==11)){this._aListElements[BE].appendChild(BC.element);}else{A4=A3(A6,(BD+1));if(A4&&(!BC.element.parentNode||BC.element.parentNode.nodeType==11)){this._aListElements[BE].insertBefore(BC.element,A4.element);}}BC.parent=this;this._subscribeToItemEvents(BC);this._configureSubmenu(BC);this._updateItemProperties(BE);this.itemAddedEvent.fire(BC);this.changeContentEvent.fire();BA=BC;}}else{A5=A6.length;A6[A5]=BB;BC=A6[A5];if(BC){if(!g.isAncestor(this._aListEle!
 ments[BE],BC.element)){this._aListElements[BE].appendChild(BC.!
 element)
;}BC.element.setAttribute(Ar,BE);BC.element.setAttribute(j,A5);BC.parent=this;BC.index=A5;BC.groupIndex=BE;this._subscribeToItemEvents(BC);this._configureSubmenu(BC);if(A5===0){g.addClass(BC.element,AK);}this.itemAddedEvent.fire(BC);this.changeContentEvent.fire();BA=BC;}}}return BA;},_removeItemFromGroupByIndex:function(A6,A4){var A5=AN.isNumber(A6)?A6:0,A7=this._getItemGroup(A5),A9,A8,A3;if(A7){A9=A7.splice(A4,1);A8=A9[0];if(A8){this._updateItemProperties(A5);if(A7.length===0){A3=this._aListElements[A5];if(this.body&&A3){this.body.removeChild(A3);}this._aItemGroups.splice(A5,1);this._aListElements.splice(A5,1);A3=this._aListElements[0];if(A3){g.addClass(A3,AK);}}this.itemRemovedEvent.fire(A8);this.changeContentEvent.fire();}}return A8;},_removeItemFromGroupByValue:function(A6,A3){var A8=this._getItemGroup(A6),A9,A7,A5,A4;if(A8){A9=A8.length;A7=-1;if(A9>0){A4=A9-1;do{if(A8[A4]==A3){A7=A4;break;}}while(A4--);if(A7>-1){A5=this._removeItemFromGroupByIndex(A6,A7);}}}return A5;},!
 _updateItemProperties:function(A4){var A5=this._getItemGroup(A4),A8=A5.length,A7,A6,A3;if(A8>0){A3=A8-1;do{A7=A5[A3];if(A7){A6=A7.element;A7.index=A3;A7.groupIndex=A4;A6.setAttribute(Ar,A4);A6.setAttribute(j,A3);g.removeClass(A6,AK);}}while(A3--);if(A6){g.addClass(A6,AK);}}},_createItemGroup:function(A5){var A3,A4;if(!this._aItemGroups[A5]){this._aItemGroups[A5]=[];A3=document.createElement(L);this._aListElements[A5]=A3;A4=this._aItemGroups[A5];}return A4;},_getItemGroup:function(A5){var A3=AN.isNumber(A5)?A5:0,A6=this._aItemGroups,A4;if(A3 in A6){A4=A6[A3];}return A4;},_configureSubmenu:function(A3){var A4=A3.cfg.getProperty(O);if(A4){this.cfg.configChangedEvent.subscribe(this._onParentMenuConfigChange,A4,true);this.renderEvent.subscribe(this._onParentMenuRender,A4,true);}},_subscribeToItemEvents:function(A3){A3.destroyEvent.subscribe(this._onMenuItemDestroy,A3,this);A3.cfg.configChangedEvent.subscribe(this._onMenuItemConfigChange,A3,this);
+},_onVisibleChange:function(A5,A4){var A3=A4[0];if(A3){g.addClass(this.element,As);}else{g.removeClass(this.element,As);}},_cancelHideDelay:function(){var A3=this.getRoot()._hideDelayTimer;if(A3){A3.cancel();}},_execHideDelay:function(){this._cancelHideDelay();var A3=this.getRoot();A3._hideDelayTimer=AN.later(A3.cfg.getProperty(AX),this,function(){if(A3.activeItem){if(A3.hasFocus()){A3.activeItem.focus();}A3.clearActiveItem();}if(A3==this&&!(this instanceof YAHOO.widget.MenuBar)&&this.cfg.getProperty(Ab)==AE){this.hide();}});},_cancelShowDelay:function(){var A3=this.getRoot()._showDelayTimer;if(A3){A3.cancel();}},_execSubmenuHideDelay:function(A5,A4,A3){A5._submenuHideDelayTimer=AN.later(50,this,function(){if(this._nCurrentMouseX>(A4+10)){A5._submenuHideDelayTimer=AN.later(A3,A5,function(){this.hide();});}else{A5.hide();}});},_disableScrollHeader:function(){if(!this._bHeaderDisabled){g.addClass(this.header,P);this._bHeaderDisabled=true;}},_disableScrollFooter:function(){if(!
 !this._bFooterDisabled){g.addClass(this.footer,E);this._bFooterDisabled=true;}},_enableScrollHeader:function(){if(this._bHeaderDisabled){g.removeClass(this.header,P);this._bHeaderDisabled=false;}},_enableScrollFooter:function(){if(this._bFooterDisabled){g.removeClass(this.footer,E);this._bFooterDisabled=false;}},_onMouseOver:function(BF,A8){var BG=A8[0],BC=A8[1],A3=AB.getTarget(BG),A7=this.getRoot(),BE=this._submenuHideDelayTimer,A4,A6,BB,A5,BA,A9;var BD=function(){if(this.parent.cfg.getProperty(z)){this.show();}};if(!this._bStopMouseEventHandlers){if(!this._bHandledMouseOverEvent&&(A3==this.element||g.isAncestor(this.element,A3))){if(this._useHideDelay){this._cancelHideDelay();}this._nCurrentMouseX=0;AB.on(this.element,c,this._onMouseMove,this,true);if(!(BC&&g.isAncestor(BC.element,AB.getRelatedTarget(BG)))){this.clearActiveItem();}if(this.parent&&BE){BE.cancel();this.parent.cfg.setProperty(z,true);A4=this.parent.parent;A4._bHandledMouseOutEvent=true;A4._bHandledMouseOverE!
 vent=false;}this._bHandledMouseOverEvent=true;this._bHandledMo!
 useOutEv
ent=false;}if(BC&&!BC.handledMouseOverEvent&&!BC.cfg.getProperty(Af)&&(A3==BC.element||g.isAncestor(BC.element,A3))){A6=this.cfg.getProperty(At);BB=(A6>0);if(BB){this._cancelShowDelay();}A5=this.activeItem;if(A5){A5.cfg.setProperty(z,false);}BA=BC.cfg;BA.setProperty(z,true);if(this.hasFocus()||A7._hasFocus){BC.focus();A7._hasFocus=false;}if(this.cfg.getProperty(a)){A9=BA.getProperty(O);if(A9){if(BB){A7._showDelayTimer=AN.later(A7.cfg.getProperty(At),A9,BD);}else{A9.show();}}}BC.handledMouseOverEvent=true;BC.handledMouseOutEvent=false;}}},_onMouseOut:function(BB,A5){var BC=A5[0],A9=A5[1],A6=AB.getRelatedTarget(BC),BA=false,A8,A7,A3,A4;if(!this._bStopMouseEventHandlers){if(A9&&!A9.cfg.getProperty(Af)){A8=A9.cfg;A7=A8.getProperty(O);if(A7&&(A6==A7.element||g.isAncestor(A7.element,A6))){BA=true;}if(!A9.handledMouseOutEvent&&((A6!=A9.element&&!g.isAncestor(A9.element,A6))||BA)){if(!BA){A9.cfg.setProperty(z,false);if(A7){A3=this.cfg.getProperty(d);A4=this.cfg.getProperty(At);if(!(!
 this instanceof YAHOO.widget.MenuBar)&&A3>0&&A4>=A3){this._execSubmenuHideDelay(A7,AB.getPageX(BC),A3);}else{A7.hide();}}}A9.handledMouseOutEvent=true;A9.handledMouseOverEvent=false;}}if(!this._bHandledMouseOutEvent&&((A6!=this.element&&!g.isAncestor(this.element,A6))||BA)){if(this._useHideDelay){this._execHideDelay();}AB.removeListener(this.element,c,this._onMouseMove);this._nCurrentMouseX=AB.getPageX(BC);this._bHandledMouseOutEvent=true;this._bHandledMouseOverEvent=false;}}},_onMouseMove:function(A4,A3){if(!this._bStopMouseEventHandlers){this._nCurrentMouseX=AB.getPageX(A4);}},_onClick:function(BE,A5){var BF=A5[0],A9=A5[1],BB=false,A7,BC,A4,A3,A8,BA,BD;var A6=function(){if(!((Aq.gecko&&this.platform==Y)&&BF.button>0)){A4=this.getRoot();if(A4 instanceof YAHOO.widget.MenuBar||A4.cfg.getProperty(Ab)==C){A4.clearActiveItem();}else{A4.hide();}}};if(A9){if(A9.cfg.getProperty(Af)){AB.preventDefault(BF);A6.call(this);}else{A7=A9.cfg.getProperty(O);A8=A9.cfg.getProperty(Q);if(A8){!
 BA=A8.indexOf(M);BD=A8.length;if(BA!=-1){A8=A8.substr(BA,BD);B!
 D=A8.len
gth;if(BD>1){A3=A8.substr(1,BD);BC=YAHOO.widget.MenuManager.getMenu(A3);if(BC){BB=(this.getRoot()===BC.getRoot());}}else{if(BD===1){BB=true;}}}}if(BB&&!A9.cfg.getProperty(V)){AB.preventDefault(BF);if(Aq.webkit){A9.focus();}else{A9.focusEvent.fire();}}if(!A7&&!this.cfg.getProperty(Ap)){A6.call(this);}}}},_onKeyDown:function(BH,BB){var BE=BB[0],BD=BB[1],BA,BF,A4,A8,BI,A3,BK,A7,BG,A6,BC,BJ,A9;if(this._useHideDelay){this._cancelHideDelay();}function A5(){this._bStopMouseEventHandlers=true;AN.later(10,this,function(){this._bStopMouseEventHandlers=false;});}if(BD&&!BD.cfg.getProperty(Af)){BF=BD.cfg;A4=this.parent;switch(BE.keyCode){case 38:case 40:BI=(BE.keyCode==38)?BD.getPreviousEnabledSibling():BD.getNextEnabledSibling();if(BI){this.clearActiveItem();BI.cfg.setProperty(z,true);BI.focus();if(this.cfg.getProperty(AU)>0){A3=this.body;BK=A3.scrollTop;A7=A3.offsetHeight;BG=this.getItems();A6=BG.length-1;BC=BI.element.offsetTop;if(BE.keyCode==40){if(BC>=(A7+BK)){A3.scrollTop=BC-A7;}e!
 lse{if(BC<=BK){A3.scrollTop=0;}}if(BI==BG[A6]){A3.scrollTop=BI.element.offsetTop;}}else{if(BC<=BK){A3.scrollTop=BC-BI.element.offsetHeight;}else{if(BC>=(BK+A7)){A3.scrollTop=BC;}}if(BI==BG[0]){A3.scrollTop=0;}}BK=A3.scrollTop;BJ=A3.scrollHeight-A3.offsetHeight;if(BK===0){this._disableScrollHeader();this._enableScrollFooter();}else{if(BK==BJ){this._enableScrollHeader();this._disableScrollFooter();}else{this._enableScrollHeader();this._enableScrollFooter();}}}}AB.preventDefault(BE);A5();break;case 39:BA=BF.getProperty(O);if(BA){if(!BF.getProperty(z)){BF.setProperty(z,true);}BA.show();BA.setInitialFocus();BA.setInitialSelection();}else{A8=this.getRoot();if(A8 instanceof YAHOO.widget.MenuBar){BI=A8.activeItem.getNextEnabledSibling();if(BI){A8.clearActiveItem();BI.cfg.setProperty(z,true);BA=BI.cfg.getProperty(O);if(BA){BA.show();BA.setInitialFocus();}else{BI.focus();}}}}AB.preventDefault(BE);A5();break;case 37:if(A4){A9=A4.parent;
+if(A9 instanceof YAHOO.widget.MenuBar){BI=A9.activeItem.getPreviousEnabledSibling();if(BI){A9.clearActiveItem();BI.cfg.setProperty(z,true);BA=BI.cfg.getProperty(O);if(BA){BA.show();BA.setInitialFocus();}else{BI.focus();}}}else{this.hide();A4.focus();}}AB.preventDefault(BE);A5();break;}}if(BE.keyCode==27){if(this.cfg.getProperty(Ab)==AE){this.hide();if(this.parent){this.parent.focus();}}else{if(this.activeItem){BA=this.activeItem.cfg.getProperty(O);if(BA&&BA.cfg.getProperty(As)){BA.hide();this.activeItem.focus();}else{this.activeItem.blur();this.activeItem.cfg.setProperty(z,false);}}}AB.preventDefault(BE);}},_onKeyPress:function(A5,A4){var A3=A4[0];if(A3.keyCode==40||A3.keyCode==38){AB.preventDefault(A3);}},_onBlur:function(A4,A3){if(this._hasFocus){this._hasFocus=false;}},_onYChange:function(A4,A3){var A6=this.parent,A8,A5,A7;if(A6){A8=A6.parent.body.scrollTop;if(A8>0){A7=(this.cfg.getProperty(R)-A8);g.setY(this.element,A7);A5=this.iframe;if(A5){g.setY(A5,A7);}this.cfg.setP!
 roperty(R,A7,true);}}},_onScrollTargetMouseOver:function(A9,BC){var BB=this._bodyScrollTimer;if(BB){BB.cancel();}this._cancelHideDelay();var A5=AB.getTarget(A9),A7=this.body,A6=this.cfg.getProperty(k),A3,A4;function BA(){var BD=A7.scrollTop;if(BD<A3){A7.scrollTop=(BD+A6);this._enableScrollHeader();}else{A7.scrollTop=A3;this._bodyScrollTimer.cancel();this._disableScrollFooter();}}function A8(){var BD=A7.scrollTop;if(BD>0){A7.scrollTop=(BD-A6);this._enableScrollFooter();}else{A7.scrollTop=0;this._bodyScrollTimer.cancel();this._disableScrollHeader();}}if(g.hasClass(A5,Ay)){A4=A8;}else{A3=A7.scrollHeight-A7.offsetHeight;A4=BA;}this._bodyScrollTimer=AN.later(10,this,A4,null,true);},_onScrollTargetMouseOut:function(A5,A3){var A4=this._bodyScrollTimer;if(A4){A4.cancel();}this._cancelHideDelay();},_onInit:function(A4,A3){this.cfg.subscribeToConfigEvent(As,this._onVisibleChange);var A5=!this.parent,A6=this.lazyLoad;if(((A5&&!A6)||(A5&&(this.cfg.getProperty(As)||this.cfg.getProperty(!
 Ab)==C))||(!A5&&!A6))&&this.getItemGroups().length===0){if(thi!
 s.srcEle
ment){this._initSubTree();}if(this.itemData){this.addItems(this.itemData);}}else{if(A6){this.cfg.fireQueue();}}},_onBeforeRender:function(A6,A5){var A7=this.element,BA=this._aListElements.length,A4=true,A9=0,A3,A8;if(BA>0){do{A3=this._aListElements[A9];if(A3){if(A4){g.addClass(A3,AK);A4=false;}if(!g.isAncestor(A7,A3)){this.appendToBody(A3);}A8=this._aGroupTitleElements[A9];if(A8){if(!g.isAncestor(A7,A8)){A3.parentNode.insertBefore(A8,A3);}g.addClass(A3,D);}}A9++;}while(A9<BA);}},_onRender:function(A4,A3){if(this.cfg.getProperty(Ab)==AE){if(!this.cfg.getProperty(As)){this.positionOffScreen();}}},_onBeforeShow:function(A5,A4){var A7,BA,A6,A8=this.cfg.getProperty(h);if(this.lazyLoad&&this.getItemGroups().length===0){if(this.srcElement){this._initSubTree();}if(this.itemData){if(this.parent&&this.parent.parent&&this.parent.parent.srcElement&&this.parent.parent.srcElement.tagName.toUpperCase()==AI){A7=this.itemData.length;for(BA=0;BA<A7;BA++){if(this.itemData[BA].tagName){this.add!
 Item((new this.ITEM_TYPE(this.itemData[BA])));}}}else{this.addItems(this.itemData);}}A6=this.srcElement;if(A6){if(A6.tagName.toUpperCase()==AI){if(g.inDocument(A6)){this.render(A6.parentNode);}else{this.render(A8);}}else{this.render();}}else{if(this.parent){this.render(this.parent.element);}else{this.render(A8);}}}var A9=this.parent,A3;if(!A9&&this.cfg.getProperty(Ab)==AE){this.cfg.refireEvent(f);}if(A9){A3=A9.parent.cfg.getProperty(AP);this.cfg.setProperty(q,[A9.element,A3[0],A3[1]]);this.align();}},getConstrainedY:function(BF){var BQ=this,BM=BQ.cfg.getProperty(q),BT=BQ.cfg.getProperty(AU),BP,BE={"trbr":true,"tlbl":true,"bltl":true,"brtr":true},A8=(BM&&BE[BM[1]+BM[2]]),BA=BQ.element,BU=BA.offsetHeight,BO=AC.VIEWPORT_OFFSET,BJ=g.getViewportHeight(),BN=g.getDocumentScrollTop(),BK=(BQ.cfg.getProperty(Ah)+BO<BJ),BS,BB,BH,BI,BD=false,BC,A5,BG=BN+BO,A7=BN+BJ-BU-BO,A3=BF;var A9=function(){var BV;if((BQ.cfg.getProperty(R)-BN)>BH){BV=(BH-BU);}else{BV=(BH+BI);}BQ.cfg.setProperty(R,(!
 BV+BN),true);return BV;};var A6=function(){if((BQ.cfg.getPrope!
 rty(R)-B
N)>BH){return(A5-BO);}else{return(BC-BO);}};var BL=function(){var BV;if((BQ.cfg.getProperty(R)-BN)>BH){BV=(BH+BI);}else{BV=(BH-BA.offsetHeight);}BQ.cfg.setProperty(R,(BV+BN),true);};var A4=function(){BQ._setScrollHeight(this.cfg.getProperty(AU));BQ.hideEvent.unsubscribe(A4);};var BR=function(){var BY=A6(),BV=(BQ.getItems().length>0),BX,BW;if(BU>BY){BX=BV?BQ.cfg.getProperty(Ah):BU;if((BY>BX)&&BV){BP=BY;}else{BP=BT;}BQ._setScrollHeight(BP);BQ.hideEvent.subscribe(A4);BL();if(BY<BX){if(BD){A9();}else{A9();BD=true;BW=BR();}}}else{if(BP&&(BP!==BT)){BQ._setScrollHeight(BT);BQ.hideEvent.subscribe(A4);BL();}}return BW;};if(BF<BG||BF>A7){if(BK){if(BQ.cfg.getProperty(A2)&&A8){BB=BM[0];BI=BB.offsetHeight;BH=(g.getY(BB)-BN);BC=BH;A5=(BJ-(BH+BI));BR();A3=BQ.cfg.getProperty(R);}else{if(!(BQ instanceof YAHOO.widget.MenuBar)&&BU>=BJ){BS=(BJ-(BO*2));if(BS>BQ.cfg.getProperty(Ah)){BQ._setScrollHeight(BS);BQ.hideEvent.subscribe(A4);BL();A3=BQ.cfg.getProperty(R);}}else{if(BF<BG){A3=BG;}else{if(BF!
 >A7){A3=A7;}}}}}else{A3=BO+BN;}}return A3;},_onHide:function(A4,A3){if(this.cfg.getProperty(Ab)===AE){this.positionOffScreen();}},_onShow:function(BB,A9){var A3=this.parent,A5,A6,A8,A4;function A7(BD){var BC;if(BD.type==Ai||(BD.type==Ac&&BD.keyCode==27)){BC=AB.getTarget(BD);if(BC!=A5.element||!g.isAncestor(A5.element,BC)){A5.cfg.setProperty(a,false);AB.removeListener(document,Ai,A7);AB.removeListener(document,Ac,A7);}}}function BA(BD,BC,BE){this.cfg.setProperty(U,v);this.hideEvent.unsubscribe(BA,BE);}if(A3){A5=A3.parent;if(!A5.cfg.getProperty(a)&&(A5 instanceof YAHOO.widget.MenuBar||A5.cfg.getProperty(Ab)==C)){A5.cfg.setProperty(a,true);AB.on(document,Ai,A7);AB.on(document,Ac,A7);}if((this.cfg.getProperty("x")<A5.cfg.getProperty("x"))&&(Aq.gecko&&Aq.gecko<1.9)&&!this.cfg.getProperty(U)){A6=this.element;A8=A6.offsetWidth;A6.style.width=A8+AR;A4=(A8-(A6.offsetWidth-A8))+AR;this.cfg.setProperty(U,A4);this.hideEvent.subscribe(BA,A4);
+}}},_onBeforeHide:function(A5,A4){var A3=this.activeItem,A7=this.getRoot(),A8,A6;if(A3){A8=A3.cfg;A8.setProperty(z,false);A6=A8.getProperty(O);if(A6){A6.hide();}}if(Aq.ie&&this.cfg.getProperty(Ab)===AE&&this.parent){A7._hasFocus=this.hasFocus();}if(A7==this){A7.blur();}},_onParentMenuConfigChange:function(A4,A3,A7){var A5=A3[0][0],A6=A3[0][1];switch(A5){case AG:case x:case AX:case At:case d:case AD:case Aw:case A0:case k:case AU:case Ah:case AF:case Ae:case A2:A7.cfg.setProperty(A5,A6);break;case AP:if(!(this.parent.parent instanceof YAHOO.widget.MenuBar)){A7.cfg.setProperty(A5,A6);}break;}},_onParentMenuRender:function(A4,A3,A9){var A6=A9.parent.parent,A5=A6.cfg,A7={constraintoviewport:A5.getProperty(x),xy:[0,0],clicktohide:A5.getProperty(AD),effect:A5.getProperty(Aw),showdelay:A5.getProperty(At),hidedelay:A5.getProperty(AX),submenuhidedelay:A5.getProperty(d),classname:A5.getProperty(A0),scrollincrement:A5.getProperty(k),maxheight:A5.getProperty(AU),minscrollheight:A5.getP!
 roperty(Ah),iframe:A5.getProperty(AG),shadow:A5.getProperty(Ae),preventcontextoverlap:A5.getProperty(A2),monitorresize:A5.getProperty(AF)},A8;if(!(A6 instanceof YAHOO.widget.MenuBar)){A7[AP]=A5.getProperty(AP);}A9.cfg.applyConfig(A7);if(!this.lazyLoad){A8=this.parent.element;if(this.element.parentNode==A8){this.render();}else{this.render(A8);}}},_onMenuItemDestroy:function(A5,A4,A3){this._removeItemFromGroupByValue(A3.groupIndex,A3);},_onMenuItemConfigChange:function(A5,A4,A3){var A7=A4[0][0],A8=A4[0][1],A6;switch(A7){case z:if(A8===true){this.activeItem=A3;}break;case O:A6=A4[0][1];if(A6){this._configureSubmenu(A3);}break;}},configVisible:function(A5,A4,A6){var A3,A7;if(this.cfg.getProperty(Ab)==AE){s.superclass.configVisible.call(this,A5,A4,A6);}else{A3=A4[0];A7=g.getStyle(this.element,AW);g.setStyle(this.element,J,As);if(A3){if(A7!=AV){this.beforeShowEvent.fire();g.setStyle(this.element,AW,AV);this.showEvent.fire();}}else{if(A7==AV){this.beforeHideEvent.fire();g.setStyle!
 (this.element,AW,AY);this.hideEvent.fire();}}}},configPosition!
 :functio
n(A5,A4,A8){var A7=this.element,A6=A4[0]==C?C:AA,A9=this.cfg,A3;g.setStyle(A7,Ab,A6);if(A6==C){g.setStyle(A7,AW,AV);A9.setProperty(As,true);}else{g.setStyle(A7,J,AM);}if(A6==AA){A3=A9.getProperty(AT);if(!A3||A3===0){A9.setProperty(AT,1);}}},configIframe:function(A4,A3,A5){if(this.cfg.getProperty(Ab)==AE){s.superclass.configIframe.call(this,A4,A3,A5);}},configHideDelay:function(A4,A3,A5){var A6=A3[0];this._useHideDelay=(A6>0);},configContainer:function(A4,A3,A6){var A5=A3[0];if(AN.isString(A5)){this.cfg.setProperty(h,g.get(A5),true);}},_clearSetWidthFlag:function(){this._widthSetForScroll=false;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);},_setScrollHeight:function(BE){var BA=BE,A9=false,BF=false,A6,A7,BD,A4,BC,BG,A3,BB,A8,A5;if(this.getItems().length>0){A6=this.element;A7=this.body;BD=this.header;A4=this.footer;BC=this._onScrollTargetMouseOver;BG=this._onScrollTargetMouseOut;A3=this.cfg.getProperty(Ah);if(BA>0&&BA<A3){BA=A3;}g.setStyle(A7,Am,v);g.removeCla!
 ss(A7,m);A7.scrollTop=0;BF=((Aq.gecko&&Aq.gecko<1.9)||Aq.ie);if(BA>0&&BF&&!this.cfg.getProperty(U)){A8=A6.offsetWidth;A6.style.width=A8+AR;A5=(A8-(A6.offsetWidth-A8))+AR;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,A5);this._widthSetForScroll=true;this.cfg.subscribeToConfigEvent(U,this._clearSetWidthFlag);}if(BA>0&&(!BD&&!A4)){this.setHeader(AL);this.setFooter(AL);BD=this.header;A4=this.footer;g.addClass(BD,T);g.addClass(A4,y);A6.insertBefore(BD,A7);A6.appendChild(A4);}BB=BA;if(BD&&A4){BB=(BB-(BD.offsetHeight+A4.offsetHeight));}if((BB>0)&&(A7.offsetHeight>BA)){g.addClass(A7,m);g.setStyle(A7,Am,(BB+AR));if(!this._hasScrollEventHandlers){AB.on(BD,Ag,BC,this,true);AB.on(BD,G,BG,this,true);AB.on(A4,Ag,BC,this,true);AB.on(A4,G,BG,this,true);this._hasScrollEventHandlers=true;}this._disableScrollHeader();this._enableScrollFooter();A9=true;}else{if(BD&&A4){if(this._widthSetForScroll){this._widthSetForScroll=false;this.cfg.unsubscribeFromConf!
 igEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,v);}!
 this._en
ableScrollHeader();this._enableScrollFooter();if(this._hasScrollEventHandlers){AB.removeListener(BD,Ag,BC);AB.removeListener(BD,G,BG);AB.removeListener(A4,Ag,BC);AB.removeListener(A4,G,BG);this._hasScrollEventHandlers=false;}A6.removeChild(BD);A6.removeChild(A4);this.header=null;this.footer=null;A9=true;}}if(A9){this.cfg.refireEvent(AG);this.cfg.refireEvent(Ae);}}},_setMaxHeight:function(A4,A3,A5){this._setScrollHeight(A5);this.renderEvent.unsubscribe(this._setMaxHeight);},configMaxHeight:function(A4,A3,A5){var A6=A3[0];if(this.lazyLoad&&!this.body&&A6>0){this.renderEvent.subscribe(this._setMaxHeight,A6,this);}else{this._setScrollHeight(A6);}},configClassName:function(A5,A4,A6){var A3=A4[0];if(this._sClassName){g.removeClass(this.element,this._sClassName);}g.addClass(this.element,A3);this._sClassName=A3;},_onItemAdded:function(A4,A3){var A5=A3[0];if(A5){A5.cfg.setProperty(Af,true);}},configDisabled:function(A5,A4,A8){var A7=A4[0],A3=this.getItems(),A9,A6;if(AN.isArray(A3)){A!
 9=A3.length;if(A9>0){A6=A9-1;do{A3[A6].cfg.setProperty(Af,A7);}while(A6--);}if(A7){this.clearActiveItem(true);g.addClass(this.element,Af);this.itemAddedEvent.subscribe(this._onItemAdded);}else{g.removeClass(this.element,Af);this.itemAddedEvent.unsubscribe(this._onItemAdded);}}},configShadow:function(BB,A5,BA){var A9=function(){var BE=this.element,BD=this._shadow;if(BD&&BE){if(BD.style.width&&BD.style.height){BD.style.width=v;BD.style.height=v;}BD.style.width=(BE.offsetWidth+6)+AR;BD.style.height=(BE.offsetHeight+1)+AR;}};var BC=function(){this.element.appendChild(this._shadow);};var A7=function(){g.addClass(this._shadow,AH);};var A8=function(){g.removeClass(this._shadow,AH);};var A4=function(){var BE=this._shadow,BD;if(!BE){BD=this.element;if(!An){An=document.createElement(K);An.className=n;}BE=An.cloneNode(false);BD.appendChild(BE);this._shadow=BE;this.beforeShowEvent.subscribe(A7);this.beforeHideEvent.subscribe(A8);
+if(Aq.ie){AN.later(0,this,function(){A9.call(this);this.syncIframe();});this.cfg.subscribeToConfigEvent(U,A9);this.cfg.subscribeToConfigEvent(Am,A9);this.cfg.subscribeToConfigEvent(AU,A9);this.changeContentEvent.subscribe(A9);Au.textResizeEvent.subscribe(A9,this,true);this.destroyEvent.subscribe(function(){Au.textResizeEvent.unsubscribe(A9,this);});}this.cfg.subscribeToConfigEvent(AU,BC);}};var A6=function(){if(this._shadow){BC.call(this);if(Aq.ie){A9.call(this);}}else{A4.call(this);}this.beforeShowEvent.unsubscribe(A6);};var A3=A5[0];if(A3&&this.cfg.getProperty(Ab)==AE){if(this.cfg.getProperty(As)){if(this._shadow){BC.call(this);if(Aq.ie){A9.call(this);}}else{A4.call(this);}}else{this.beforeShowEvent.subscribe(A6);}}},initEvents:function(){s.superclass.initEvents.call(this);var A4=Aa.length-1,A5,A3;do{A5=Aa[A4];A3=this.createEvent(A5[1]);A3.signature=F.LIST;this[A5[0]]=A3;}while(A4--);},positionOffScreen:function(){var A4=this.iframe,A5=this.element,A3=this.OFF_SCREEN_POSI!
 TION;A5.style.top=v;A5.style.left=v;if(A4){A4.style.top=A3;A4.style.left=A3;}},getRoot:function(){var A5=this.parent,A4,A3;if(A5){A4=A5.parent;A3=A4?A4.getRoot():this;}else{A3=this;}return A3;},toString:function(){var A4=Ao,A3=this.id;if(A3){A4+=(Az+A3);}return A4;},setItemGroupTitle:function(A8,A7){var A6,A5,A4,A3;if(AN.isString(A8)&&A8.length>0){A6=AN.isNumber(A7)?A7:0;A5=this._aGroupTitleElements[A6];if(A5){A5.innerHTML=A8;}else{A5=document.createElement(this.GROUP_TITLE_TAG_NAME);A5.innerHTML=A8;this._aGroupTitleElements[A6]=A5;}A4=this._aGroupTitleElements.length-1;do{if(this._aGroupTitleElements[A4]){g.removeClass(this._aGroupTitleElements[A4],AK);A3=A4;}}while(A4--);if(A3!==null){g.addClass(this._aGroupTitleElements[A3],AK);}this.changeContentEvent.fire();}},addItem:function(A3,A4){return this._addItemToGroup(A4,A3);},addItems:function(A7,A6){var A9,A3,A8,A4,A5;if(AN.isArray(A7)){A9=A7.length;A3=[];for(A4=0;A4<A9;A4++){A8=A7[A4];if(A8){if(AN.isArray(A8)){A3[A3.length!
 ]=this.addItems(A8,A4);}else{A3[A3.length]=this._addItemToGrou!
 p(A6,A8)
;}}}if(A3.length){A5=A3;}}return A5;},insertItem:function(A3,A4,A5){return this._addItemToGroup(A5,A3,A4);},removeItem:function(A3,A5){var A6,A4;if(!AN.isUndefined(A3)){if(A3 instanceof YAHOO.widget.MenuItem){A6=this._removeItemFromGroupByValue(A5,A3);}else{if(AN.isNumber(A3)){A6=this._removeItemFromGroupByIndex(A5,A3);}}if(A6){A6.destroy();A4=A6;}}return A4;},getItems:function(){var A6=this._aItemGroups,A4,A5,A3=[];if(AN.isArray(A6)){A4=A6.length;A5=((A4==1)?A6[0]:(Array.prototype.concat.apply(A3,A6)));}return A5;},getItemGroups:function(){return this._aItemGroups;},getItem:function(A4,A5){var A6,A3;if(AN.isNumber(A4)){A6=this._getItemGroup(A5);if(A6){A3=A6[A4];}}return A3;},getSubmenus:function(){var A4=this.getItems(),A8=A4.length,A3,A5,A7,A6;if(A8>0){A3=[];for(A6=0;A6<A8;A6++){A7=A4[A6];if(A7){A5=A7.cfg.getProperty(O);if(A5){A3[A3.length]=A5;}}}}return A3;},clearContent:function(){var A7=this.getItems(),A4=A7.length,A5=this.element,A6=this.body,BB=this.header,A3=this.foo!
 ter,BA,A9,A8;if(A4>0){A8=A4-1;do{BA=A7[A8];if(BA){A9=BA.cfg.getProperty(O);if(A9){this.cfg.configChangedEvent.unsubscribe(this._onParentMenuConfigChange,A9);this.renderEvent.unsubscribe(this._onParentMenuRender,A9);}this.removeItem(BA,BA.groupIndex);}}while(A8--);}if(BB){AB.purgeElement(BB);A5.removeChild(BB);}if(A3){AB.purgeElement(A3);A5.removeChild(A3);}if(A6){AB.purgeElement(A6);A6.innerHTML=v;}this.activeItem=null;this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];this.cfg.setProperty(U,null);},destroy:function(){this.clearContent();this._aItemGroups=null;this._aListElements=null;this._aGroupTitleElements=null;s.superclass.destroy.call(this);},setInitialFocus:function(){var A3=this._getFirstEnabledItem();if(A3){A3.focus();}},setInitialSelection:function(){var A3=this._getFirstEnabledItem();if(A3){A3.cfg.setProperty(z,true);}},clearActiveItem:function(A5){if(this.cfg.getProperty(At)>0){this._cancelShowDelay();}var A3=this.activeItem,A6,A4;if(A3){A6!
 =A3.cfg;if(A5){A3.blur();this.getRoot()._hasFocus=true;}A6.set!
 Property
(z,false);A4=A6.getProperty(O);if(A4){A4.hide();}this.activeItem=null;}},focus:function(){if(!this.hasFocus()){this.setInitialFocus();}},blur:function(){var A3;if(this.hasFocus()){A3=A1.getFocusedMenuItem();if(A3){A3.blur();}}},hasFocus:function(){return(A1.getFocusedMenu()==this.getRoot());},subscribe:function(){function A6(BB,BA,BD){var BE=BA[0],BC=BE.cfg.getProperty(O);if(BC){BC.subscribe.apply(BC,BD);}}function A9(BB,BA,BD){var BC=this.cfg.getProperty(O);if(BC){BC.subscribe.apply(BC,BD);}}s.superclass.subscribe.apply(this,arguments);s.superclass.subscribe.call(this,AS,A6,arguments);var A3=this.getItems(),A8,A7,A4,A5;if(A3){A8=A3.length;if(A8>0){A5=A8-1;do{A7=A3[A5];A4=A7.cfg.getProperty(O);if(A4){A4.subscribe.apply(A4,arguments);}else{A7.cfg.subscribeToConfigEvent(O,A9,arguments);}}while(A5--);}}},initDefaultConfig:function(){s.superclass.initDefaultConfig.call(this);var A3=this.cfg;A3.addProperty(AZ.key,{handler:this.configVisible,value:AZ.value,validator:AZ.validator})!
 ;A3.addProperty(AQ.key,{handler:this.configConstrainToViewport,value:AQ.value,validator:AQ.validator,supercedes:AQ.supercedes});A3.addProperty(AJ.key,{value:AJ.value,validator:AJ.validator,supercedes:AJ.supercedes});A3.addProperty(S.key,{handler:this.configPosition,value:S.value,validator:S.validator,supercedes:S.supercedes});A3.addProperty(A.key,{value:A.value,suppressEvent:A.suppressEvent});A3.addProperty(u.key,{value:u.value,validator:u.validator,suppressEvent:u.suppressEvent});A3.addProperty(Z.key,{value:Z.value,validator:Z.validator,suppressEvent:Z.suppressEvent});A3.addProperty(r.key,{handler:this.configHideDelay,value:r.value,validator:r.validator,suppressEvent:r.suppressEvent});A3.addProperty(w.key,{value:w.value,validator:w.validator,suppressEvent:w.suppressEvent});A3.addProperty(p.key,{value:p.value,validator:p.validator,suppressEvent:p.suppressEvent});A3.addProperty(AO.key,{handler:this.configContainer,value:document.body,suppressEvent:AO.suppressEvent});
+A3.addProperty(Ad.key,{value:Ad.value,validator:Ad.validator,supercedes:Ad.supercedes,suppressEvent:Ad.suppressEvent});A3.addProperty(N.key,{value:N.value,validator:N.validator,supercedes:N.supercedes,suppressEvent:N.suppressEvent});A3.addProperty(X.key,{handler:this.configMaxHeight,value:X.value,validator:X.validator,suppressEvent:X.suppressEvent,supercedes:X.supercedes});A3.addProperty(W.key,{handler:this.configClassName,value:W.value,validator:W.validator,supercedes:W.supercedes});A3.addProperty(b.key,{handler:this.configDisabled,value:b.value,validator:b.validator,suppressEvent:b.suppressEvent});A3.addProperty(I.key,{handler:this.configShadow,value:I.value,validator:I.validator});A3.addProperty(Aj.key,{value:Aj.value,validator:Aj.validator});}});})();(function(){YAHOO.widget.MenuItem=function(AS,AR){if(AS){if(AR){this.parent=AR.parent;this.value=AR.value;this.id=AR.id;}this.init(AS,AR);}};var x=YAHOO.util.Dom,j=YAHOO.widget.Module,AB=YAHOO.widget.Menu,c=YAHOO.widget.Men!
 uItem,AK=YAHOO.util.CustomEvent,k=YAHOO.env.ua,AQ=YAHOO.lang,AL="text",O="#",Q="-",L="helptext",n="url",AH="target",A="emphasis",N="strongemphasis",b="checked",w="submenu",H="disabled",B="selected",P="hassubmenu",U="checked-disabled",AI="hassubmenu-disabled",AD="hassubmenu-selected",T="checked-selected",q="onclick",J="classname",AJ="",i="OPTION",v="OPTGROUP",K="LI",AE="href",r="SELECT",X="DIV",AN='<em class="helptext">',a="<em>",I="</em>",W="<strong>",y="</strong>",Y="preventcontextoverlap",h="obj",AG="scope",t="none",V="visible",E=" ",m="MenuItem",AA="click",D="show",M="hide",S="li",AF='<a href="#"></a>',p=[["mouseOverEvent","mouseover"],["mouseOutEvent","mouseout"],["mouseDownEvent","mousedown"],["mouseUpEvent","mouseup"],["clickEvent",AA],["keyPressEvent","keypress"],["keyDownEvent","keydown"],["keyUpEvent","keyup"],["focusEvent","focus"],["blurEvent","blur"],["destroyEvent","destroy"]],o={key:AL,value:AJ,validator:AQ.isString,suppressEvent:true},s={key:L,supercedes:[AL]!
 ,suppressEvent:true},G={key:n,value:O,suppressEvent:true},AO={!
 key:AH,s
uppressEvent:true},AP={key:A,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL]},d={key:N,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL]},l={key:b,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[H,B]},F={key:w,suppressEvent:true,supercedes:[H,B]},AM={key:H,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL,B]},f={key:B,value:false,validator:AQ.isBoolean,suppressEvent:true},u={key:q,suppressEvent:true},AC={key:J,value:null,validator:AQ.isString,suppressEvent:true},z={key:"keylistener",value:null,suppressEvent:true},C=null,e={};var Z=function(AU,AT){var AR=e[AU];if(!AR){e[AU]={};AR=e[AU];}var AS=AR[AT];if(!AS){AS=AU+Q+AT;AR[AT]=AS;}return AS;};var g=function(AR){x.addClass(this.element,Z(this.CSS_CLASS_NAME,AR));x.addClass(this._oAnchor,Z(this.CSS_LABEL_CLASS_NAME,AR));};var R=function(AR){x.removeClass(this.element,Z(this.CSS_CLASS_NAME,AR));x.removeClass(this._oAnchor,Z(this.CSS_LABEL_CLASS_NAME,AR!
 ));};c.prototype={CSS_CLASS_NAME:"yuimenuitem",CSS_LABEL_CLASS_NAME:"yuimenuitemlabel",SUBMENU_TYPE:null,_oAnchor:null,_oHelpTextEM:null,_oSubmenu:null,_oOnclickAttributeValue:null,_sClassName:null,constructor:c,index:null,groupIndex:null,parent:null,element:null,srcElement:null,value:null,browser:j.prototype.browser,id:null,init:function(AR,Ab){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=AB;}this.cfg=new YAHOO.util.Config(this);this.initDefaultConfig();var AX=this.cfg,AY=O,AT,Aa,AZ,AS,AV,AU,AW;if(AQ.isString(AR)){this._createRootNodeStructure();AX.queueProperty(AL,AR);}else{if(AR&&AR.tagName){switch(AR.tagName.toUpperCase()){case i:this._createRootNodeStructure();AX.queueProperty(AL,AR.text);AX.queueProperty(H,AR.disabled);this.value=AR.value;this.srcElement=AR;break;case v:this._createRootNodeStructure();AX.queueProperty(AL,AR.label);AX.queueProperty(H,AR.disabled);this.srcElement=AR;this._initSubTree();break;case K:AZ=x.getFirstChild(AR);if(AZ){AY=AZ.getAttribute(AE,2);AS=A!
 Z.getAttribute(AH);AV=AZ.innerHTML;}this.srcElement=AR;this.el!
 ement=AR
;this._oAnchor=AZ;AX.setProperty(AL,AV,true);AX.setProperty(n,AY,true);AX.setProperty(AH,AS,true);this._initSubTree();break;}}}if(this.element){AU=(this.srcElement||this.element).id;if(!AU){AU=this.id||x.generateId();this.element.id=AU;}this.id=AU;x.addClass(this.element,this.CSS_CLASS_NAME);x.addClass(this._oAnchor,this.CSS_LABEL_CLASS_NAME);AW=p.length-1;do{Aa=p[AW];AT=this.createEvent(Aa[1]);AT.signature=AK.LIST;this[Aa[0]]=AT;}while(AW--);if(Ab){AX.applyConfig(Ab);}AX.fireQueue();}},_createRootNodeStructure:function(){var AR,AS;if(!C){C=document.createElement(S);C.innerHTML=AF;}AR=C.cloneNode(true);AR.className=this.CSS_CLASS_NAME;AS=AR.firstChild;AS.className=this.CSS_LABEL_CLASS_NAME;this.element=AR;this._oAnchor=AS;},_initSubTree:function(){var AX=this.srcElement,AT=this.cfg,AV,AU,AS,AR,AW;if(AX.childNodes.length>0){if(this.parent.lazyLoad&&this.parent.srcElement&&this.parent.srcElement.tagName.toUpperCase()==r){AT.setProperty(w,{id:x.generateId(),itemdata:AX.childNod!
 es});}else{AV=AX.firstChild;AU=[];do{if(AV&&AV.tagName){switch(AV.tagName.toUpperCase()){case X:AT.setProperty(w,AV);break;case i:AU[AU.length]=AV;break;}}}while((AV=AV.nextSibling));AS=AU.length;if(AS>0){AR=new this.SUBMENU_TYPE(x.generateId());AT.setProperty(w,AR);for(AW=0;AW<AS;AW++){AR.addItem((new AR.ITEM_TYPE(AU[AW])));}}}}},configText:function(Aa,AT,AV){var AS=AT[0],AU=this.cfg,AY=this._oAnchor,AR=AU.getProperty(L),AZ=AJ,AW=AJ,AX=AJ;if(AS){if(AR){AZ=AN+AR+I;}if(AU.getProperty(A)){AW=a;AX=I;}if(AU.getProperty(N)){AW=W;AX=y;}AY.innerHTML=(AW+AS+AX+AZ);}},configHelpText:function(AT,AS,AR){this.cfg.refireEvent(AL);},configURL:function(AT,AS,AR){var AV=AS[0];if(!AV){AV=O;}var AU=this._oAnchor;if(k.opera){AU.removeAttribute(AE);}AU.setAttribute(AE,AV);},configTarget:function(AU,AT,AS){var AR=AT[0],AV=this._oAnchor;if(AR&&AR.length>0){AV.setAttribute(AH,AR);}else{AV.removeAttribute(AH);}},configEmphasis:function(AT,AS,AR){var AV=AS[0],AU=this.cfg;
+if(AV&&AU.getProperty(N)){AU.setProperty(N,false);}AU.refireEvent(AL);},configStrongEmphasis:function(AU,AT,AS){var AR=AT[0],AV=this.cfg;if(AR&&AV.getProperty(A)){AV.setProperty(A,false);}AV.refireEvent(AL);},configChecked:function(AT,AS,AR){var AV=AS[0],AU=this.cfg;if(AV){g.call(this,b);}else{R.call(this,b);}AU.refireEvent(AL);if(AU.getProperty(H)){AU.refireEvent(H);}if(AU.getProperty(B)){AU.refireEvent(B);}},configDisabled:function(AT,AS,AR){var AV=AS[0],AW=this.cfg,AU=AW.getProperty(w),AX=AW.getProperty(b);if(AV){if(AW.getProperty(B)){AW.setProperty(B,false);}g.call(this,H);if(AU){g.call(this,AI);}if(AX){g.call(this,U);}}else{R.call(this,H);if(AU){R.call(this,AI);}if(AX){R.call(this,U);}}},configSelected:function(AT,AS,AR){var AX=this.cfg,AW=this._oAnchor,AV=AS[0],AY=AX.getProperty(b),AU=AX.getProperty(w);if(k.opera){AW.blur();}if(AV&&!AX.getProperty(H)){g.call(this,B);if(AU){g.call(this,AD);}if(AY){g.call(this,T);}}else{R.call(this,B);if(AU){R.call(this,AD);}if(AY){R.ca!
 ll(this,T);}}if(this.hasFocus()&&k.opera){AW.focus();}},_onSubmenuBeforeHide:function(AU,AT){var AV=this.parent,AR;function AS(){AV._oAnchor.blur();AR.beforeHideEvent.unsubscribe(AS);}if(AV.hasFocus()){AR=AV.parent;AR.beforeHideEvent.subscribe(AS);}},configSubmenu:function(AY,AT,AW){var AV=AT[0],AU=this.cfg,AS=this.parent&&this.parent.lazyLoad,AX,AZ,AR;if(AV){if(AV instanceof AB){AX=AV;AX.parent=this;AX.lazyLoad=AS;}else{if(AQ.isObject(AV)&&AV.id&&!AV.nodeType){AZ=AV.id;AR=AV;AR.lazyload=AS;AR.parent=this;AX=new this.SUBMENU_TYPE(AZ,AR);AU.setProperty(w,AX,true);}else{AX=new this.SUBMENU_TYPE(AV,{lazyload:AS,parent:this});AU.setProperty(w,AX,true);}}if(AX){AX.cfg.setProperty(Y,true);g.call(this,P);if(AU.getProperty(n)===O){AU.setProperty(n,(O+AX.id));}this._oSubmenu=AX;if(k.opera){AX.beforeHideEvent.subscribe(this._onSubmenuBeforeHide);}}}else{R.call(this,P);if(this._oSubmenu){this._oSubmenu.destroy();}}if(AU.getProperty(H)){AU.refireEvent(H);}if(AU.getProperty(B)){AU.refir!
 eEvent(B);}},configOnClick:function(AT,AS,AR){var AU=AS[0];if(!
 this._oO
nclickAttributeValue&&(this._oOnclickAttributeValue!=AU)){this.clickEvent.unsubscribe(this._oOnclickAttributeValue.fn,this._oOnclickAttributeValue.obj);this._oOnclickAttributeValue=null;}if(!this._oOnclickAttributeValue&&AQ.isObject(AU)&&AQ.isFunction(AU.fn)){this.clickEvent.subscribe(AU.fn,((h in AU)?AU.obj:this),((AG in AU)?AU.scope:null));this._oOnclickAttributeValue=AU;}},configClassName:function(AU,AT,AS){var AR=AT[0];if(this._sClassName){x.removeClass(this.element,this._sClassName);}x.addClass(this.element,AR);this._sClassName=AR;},_dispatchClickEvent:function(){var AT=this,AS,AR;if(!AT.cfg.getProperty(H)){AS=x.getFirstChild(AT.element);if(k.ie){AS.fireEvent(q);}else{if((k.gecko&&k.gecko>=1.9)||k.opera||k.webkit){AR=document.createEvent("HTMLEvents");AR.initEvent(AA,true,true);}else{AR=document.createEvent("MouseEvents");AR.initMouseEvent(AA,true,true,window,0,0,0,0,0,false,false,false,false,0,null);}AS.dispatchEvent(AR);}}},_createKeyListener:function(AU,AT,AW){var AV!
 =this,AS=AV.parent;var AR=new YAHOO.util.KeyListener(AS.element.ownerDocument,AW,{fn:AV._dispatchClickEvent,scope:AV,correctScope:true});if(AS.cfg.getProperty(V)){AR.enable();}AS.subscribe(D,AR.enable,null,AR);AS.subscribe(M,AR.disable,null,AR);AV._keyListener=AR;AS.unsubscribe(D,AV._createKeyListener,AW);},configKeyListener:function(AT,AS){var AV=AS[0],AU=this,AR=AU.parent;if(AU._keyData){AR.unsubscribe(D,AU._createKeyListener,AU._keyData);AU._keyData=null;}if(AU._keyListener){AR.unsubscribe(D,AU._keyListener.enable);AR.unsubscribe(M,AU._keyListener.disable);AU._keyListener.disable();AU._keyListener=null;}if(AV){AU._keyData=AV;AR.subscribe(D,AU._createKeyListener,AV,AU);}},initDefaultConfig:function(){var AR=this.cfg;AR.addProperty(o.key,{handler:this.configText,value:o.value,validator:o.validator,suppressEvent:o.suppressEvent});AR.addProperty(s.key,{handler:this.configHelpText,supercedes:s.supercedes,suppressEvent:s.suppressEvent});AR.addProperty(G.key,{handler:this.confi!
 gURL,value:G.value,suppressEvent:G.suppressEvent});AR.addPrope!
 rty(AO.k
ey,{handler:this.configTarget,suppressEvent:AO.suppressEvent});AR.addProperty(AP.key,{handler:this.configEmphasis,value:AP.value,validator:AP.validator,suppressEvent:AP.suppressEvent,supercedes:AP.supercedes});AR.addProperty(d.key,{handler:this.configStrongEmphasis,value:d.value,validator:d.validator,suppressEvent:d.suppressEvent,supercedes:d.supercedes});AR.addProperty(l.key,{handler:this.configChecked,value:l.value,validator:l.validator,suppressEvent:l.suppressEvent,supercedes:l.supercedes});AR.addProperty(AM.key,{handler:this.configDisabled,value:AM.value,validator:AM.validator,suppressEvent:AM.suppressEvent});AR.addProperty(f.key,{handler:this.configSelected,value:f.value,validator:f.validator,suppressEvent:f.suppressEvent});AR.addProperty(F.key,{handler:this.configSubmenu,supercedes:F.supercedes,suppressEvent:F.suppressEvent});AR.addProperty(u.key,{handler:this.configOnClick,suppressEvent:u.suppressEvent});AR.addProperty(AC.key,{handler:this.configClassName,value:AC.val!
 ue,validator:AC.validator,suppressEvent:AC.suppressEvent});AR.addProperty(z.key,{handler:this.configKeyListener,value:z.value,suppressEvent:z.suppressEvent});},getNextEnabledSibling:function(){var AU,AX,AR,AW,AV,AS;function AT(AY,AZ){return AY[AZ]||AT(AY,(AZ+1));}if(this.parent instanceof AB){AU=this.groupIndex;AX=this.parent.getItemGroups();if(this.index<(AX[AU].length-1)){AR=AT(AX[AU],(this.index+1));}else{if(AU<(AX.length-1)){AW=AU+1;}else{AW=0;}AV=AT(AX,AW);AR=AT(AV,0);}AS=(AR.cfg.getProperty(H)||AR.element.style.display==t)?AR.getNextEnabledSibling():AR;}return AS;},getPreviousEnabledSibling:function(){var AW,AY,AS,AR,AV,AU;function AX(AZ,Aa){return AZ[Aa]||AX(AZ,(Aa-1));}function AT(AZ,Aa){return AZ[Aa]?Aa:AT(AZ,(Aa+1));}if(this.parent instanceof AB){AW=this.groupIndex;AY=this.parent.getItemGroups();if(this.index>AT(AY[AW],0)){AS=AX(AY[AW],(this.index-1));}else{if(AW>AT(AY,0)){AR=AW-1;}else{AR=AY.length-1;
+}AV=AX(AY,AR);AS=AX(AV,(AV.length-1));}AU=(AS.cfg.getProperty(H)||AS.element.style.display==t)?AS.getPreviousEnabledSibling():AS;}return AU;},focus:function(){var AU=this.parent,AT=this._oAnchor,AR=AU.activeItem;function AS(){try{if(!(k.ie&&!document.hasFocus())){if(AR){AR.blurEvent.fire();}AT.focus();this.focusEvent.fire();}}catch(AV){}}if(!this.cfg.getProperty(H)&&AU&&AU.cfg.getProperty(V)&&this.element.style.display!=t){AQ.later(0,this,AS);}},blur:function(){var AR=this.parent;if(!this.cfg.getProperty(H)&&AR&&AR.cfg.getProperty(V)){AQ.later(0,this,function(){try{this._oAnchor.blur();this.blurEvent.fire();}catch(AS){}},0);}},hasFocus:function(){return(YAHOO.widget.MenuManager.getFocusedMenuItem()==this);},destroy:function(){var AT=this.element,AS,AR,AV,AU;if(AT){AS=this.cfg.getProperty(w);if(AS){AS.destroy();}AR=AT.parentNode;if(AR){AR.removeChild(AT);this.destroyEvent.fire();}AU=p.length-1;do{AV=p[AU];this[AV[0]].unsubscribeAll();}while(AU--);this.cfg.configChangedEvent.!
 unsubscribeAll();}},toString:function(){var AS=m,AR=this.id;if(AR){AS+=(E+AR);}return AS;}};AQ.augmentProto(c,YAHOO.util.EventProvider);})();(function(){var B="xy",C="mousedown",F="ContextMenu",J=" ";YAHOO.widget.ContextMenu=function(L,K){YAHOO.widget.ContextMenu.superclass.constructor.call(this,L,K);};var I=YAHOO.util.Event,E=YAHOO.env.ua,G=YAHOO.widget.ContextMenu,A={"TRIGGER_CONTEXT_MENU":"triggerContextMenu","CONTEXT_MENU":(E.opera?C:"contextmenu"),"CLICK":"click"},H={key:"trigger",suppressEvent:true};function D(L,K,M){this.cfg.setProperty(B,M);this.beforeShowEvent.unsubscribe(D,M);}YAHOO.lang.extend(G,YAHOO.widget.Menu,{_oTrigger:null,_bCancelled:false,contextEventTarget:null,triggerContextMenuEvent:null,init:function(L,K){G.superclass.init.call(this,L);this.beforeInitEvent.fire(G);if(K){this.cfg.applyConfig(K,true);}this.initEvent.fire(G);},initEvents:function(){G.superclass.initEvents.call(this);this.triggerContextMenuEvent=this.createEvent(A.TRIGGER_CONTEXT_MENU);th!
 is.triggerContextMenuEvent.signature=YAHOO.util.CustomEvent.LI!
 ST;},can
cel:function(){this._bCancelled=true;},_removeEventHandlers:function(){var K=this._oTrigger;if(K){I.removeListener(K,A.CONTEXT_MENU,this._onTriggerContextMenu);if(E.opera){I.removeListener(K,A.CLICK,this._onTriggerClick);}}},_onTriggerClick:function(L,K){if(L.ctrlKey){I.stopEvent(L);}},_onTriggerContextMenu:function(M,K){var L;if(!(M.type==C&&!M.ctrlKey)){this.contextEventTarget=I.getTarget(M);this.triggerContextMenuEvent.fire(M);if(!this._bCancelled){I.stopEvent(M);YAHOO.widget.MenuManager.hideVisible();L=I.getXY(M);if(!YAHOO.util.Dom.inDocument(this.element)){this.beforeShowEvent.subscribe(D,L);}else{this.cfg.setProperty(B,L);}this.show();}this._bCancelled=false;}},toString:function(){var L=F,K=this.id;if(K){L+=(J+K);}return L;},initDefaultConfig:function(){G.superclass.initDefaultConfig.call(this);this.cfg.addProperty(H.key,{handler:this.configTrigger,suppressEvent:H.suppressEvent});},destroy:function(){this._removeEventHandlers();G.superclass.destroy.call(this);},configT!
 rigger:function(L,K,N){var M=K[0];if(M){if(this._oTrigger){this._removeEventHandlers();}this._oTrigger=M;I.on(M,A.CONTEXT_MENU,this._onTriggerContextMenu,this,true);if(E.opera){I.on(M,A.CLICK,this._onTriggerClick,this,true);}}else{this._removeEventHandlers();}}});}());YAHOO.widget.ContextMenuItem=YAHOO.widget.MenuItem;(function(){var D=YAHOO.lang,N="static",M="dynamic,"+N,A="disabled",F="selected",B="autosubmenudisplay",G="submenu",C="visible",Q=" ",H="submenutoggleregion",P="MenuBar";YAHOO.widget.MenuBar=function(T,S){YAHOO.widget.MenuBar.superclass.constructor.call(this,T,S);};function O(T){var S=false;if(D.isString(T)){S=(M.indexOf((T.toLowerCase()))!=-1);}return S;}var R=YAHOO.util.Event,L=YAHOO.widget.MenuBar,K={key:"position",value:N,validator:O,supercedes:[C]},E={key:"submenualignment",value:["tl","bl"]},J={key:B,value:false,validator:D.isBoolean,suppressEvent:true},I={key:H,value:false,validator:D.isBoolean};D.extend(L,YAHOO.widget.Menu,{init:function(T,S){if(!this.!
 ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuBarItem;}L.supercla!
 ss.init.
call(this,T);this.beforeInitEvent.fire(L);if(S){this.cfg.applyConfig(S,true);}this.initEvent.fire(L);},CSS_CLASS_NAME:"yuimenubar",SUBMENU_TOGGLE_REGION_WIDTH:20,_onKeyDown:function(U,T,Y){var S=T[0],Z=T[1],W,X,V;if(Z&&!Z.cfg.getProperty(A)){X=Z.cfg;switch(S.keyCode){case 37:case 39:if(Z==this.activeItem&&!X.getProperty(F)){X.setProperty(F,true);}else{V=(S.keyCode==37)?Z.getPreviousEnabledSibling():Z.getNextEnabledSibling();if(V){this.clearActiveItem();V.cfg.setProperty(F,true);W=V.cfg.getProperty(G);if(W){W.show();W.setInitialFocus();}else{V.focus();}}}R.preventDefault(S);break;case 40:if(this.activeItem!=Z){this.clearActiveItem();X.setProperty(F,true);Z.focus();}W=X.getProperty(G);if(W){if(W.cfg.getProperty(C)){W.setInitialSelection();W.setInitialFocus();}else{W.show();W.setInitialFocus();}}R.preventDefault(S);break;}}if(S.keyCode==27&&this.activeItem){W=this.activeItem.cfg.getProperty(G);if(W&&W.cfg.getProperty(C)){W.hide();this.activeItem.focus();}else{this.activeItem.cf!
 g.setProperty(F,false);this.activeItem.blur();}R.preventDefault(S);}},_onClick:function(e,Y,b){L.superclass._onClick.call(this,e,Y,b);var d=Y[1],T=true,S,f,U,W,Z,a,c,V;var X=function(){if(a.cfg.getProperty(C)){a.hide();}else{a.show();}};if(d&&!d.cfg.getProperty(A)){f=Y[0];U=R.getTarget(f);W=this.activeItem;Z=this.cfg;if(W&&W!=d){this.clearActiveItem();}d.cfg.setProperty(F,true);a=d.cfg.getProperty(G);if(a){S=d.element;c=YAHOO.util.Dom.getX(S);V=c+(S.offsetWidth-this.SUBMENU_TOGGLE_REGION_WIDTH);if(Z.getProperty(H)){if(R.getPageX(f)>V){X();R.preventDefault(f);T=false;}}else{X();}}}return T;},configSubmenuToggle:function(U,T){var S=T[0];if(S){this.cfg.setProperty(B,false);}},toString:function(){var T=P,S=this.id;if(S){T+=(Q+S);}return T;},initDefaultConfig:function(){L.superclass.initDefaultConfig.call(this);var S=this.cfg;S.addProperty(K.key,{handler:this.configPosition,value:K.value,validator:K.validator,supercedes:K.supercedes});
+S.addProperty(E.key,{value:E.value,suppressEvent:E.suppressEvent});S.addProperty(J.key,{value:J.value,validator:J.validator,suppressEvent:J.suppressEvent});S.addProperty(I.key,{value:I.value,validator:I.validator,handler:this.configSubmenuToggle});}});}());YAHOO.widget.MenuBarItem=function(B,A){YAHOO.widget.MenuBarItem.superclass.constructor.call(this,B,A);};YAHOO.lang.extend(YAHOO.widget.MenuBarItem,YAHOO.widget.MenuItem,{init:function(B,A){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=YAHOO.widget.Menu;}YAHOO.widget.MenuBarItem.superclass.init.call(this,B);var C=this.cfg;if(A){C.applyConfig(A,true);}C.fireQueue();},CSS_CLASS_NAME:"yuimenubaritem",CSS_LABEL_CLASS_NAME:"yuimenubaritemlabel",toString:function(){var A="MenuBarItem";if(this.cfg&&this.cfg.getProperty("text")){A+=(": "+this.cfg.getProperty("text"));}return A;}});YAHOO.register("menu",YAHOO.widget.Menu,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/menu/menu.js
===================================================================
--- trunk/root/static/yui/menu/menu.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/menu/menu.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 
 
@@ -1260,7 +1260,7 @@
 
 
 /** 
-* @property _bHideDelayEventHandlersAssigned
+* @property _useHideDelay
 * @description Boolean indicating if the "mouseover" and "mouseout" event 
 * handlers used for hiding the menu via a call to "YAHOO.lang.later" have 
 * already been assigned.
@@ -1268,7 +1268,7 @@
 * @private
 * @type Boolean
 */
-_bHideDelayEventHandlersAssigned: false,
+_useHideDelay: false,
 
 
 /**
@@ -1639,10 +1639,13 @@
         this.keyDownEvent.subscribe(this._onKeyDown);
         this.keyPressEvent.subscribe(this._onKeyPress);
         this.blurEvent.subscribe(this._onBlur);
-        
 
-        if (UA.gecko || UA.webkit) {
 
+		//	Fixes an issue in Firefox 2 and Webkit where Dom's "getX" and "getY" 
+		//	methods return values that don't take scrollTop into consideration 
+
+        if ((UA.gecko && UA.gecko < 1.9) || UA.webkit) {
+
             this.cfg.subscribeToConfigEvent(_Y, this._onYChange);
 
         }
@@ -2602,6 +2605,10 @@
 				Dom.isAncestor(this.element, oTarget))) {
 	
 			// Menu mouseover logic
+
+	        if (this._useHideDelay) {
+	        	this._cancelHideDelay();
+	        }
 	
 			this._nCurrentMouseX = 0;
 	
@@ -2797,7 +2804,11 @@
 			!Dom.isAncestor(this.element, oRelatedTarget)) || bMovingToSubmenu)) {
 	
 			// Menu mouseout logic
-	
+
+	        if (this._useHideDelay) {
+	        	this._execHideDelay();
+	        }
+
 			Event.removeListener(this.element, _MOUSEMOVE, this._onMouseMove);
 	
 			this._nCurrentMouseX = Event.getPageX(oEvent);
@@ -2846,6 +2857,7 @@
 		oItem = p_aArgs[1],
 		bInMenuAnchor = false,
 		oSubmenu,
+		oMenu,
 		oRoot,
 		sId,
 		sURL,
@@ -2856,16 +2868,16 @@
 	var hide = function () {
 
 		/*
-			There is an inconsistency between Firefox 2 for Mac OS X and Firefox 2 Windows 
+			There is an inconsistency between Firefox for Mac OS X and Firefox Windows 
 			regarding the triggering of the display of the browser's context menu and the 
 			subsequent firing of the "click" event. In Firefox for Windows, when the user 
 			triggers the display of the browser's context menu the "click" event also fires 
 			for the document object, even though the "click" event did not fire for the 
 			element that was the original target of the "contextmenu" event. This is unique 
-			to Firefox on Windows. For all other A-Grade browsers, including Firefox 2 for 
+			to Firefox on Windows. For all other A-Grade browsers, including Firefox for 
 			Mac OS X, the "click" event doesn't fire for the document object. 
 
-			This bug in Firefox 2 for Windows affects Menu as Menu instances listen for 
+			This bug in Firefox for Windows affects Menu as Menu instances listen for 
 			events at the document level and have an internal "click" event handler they 
 			use to hide themselves when clicked. As a result, in Firefox for Windows a 
 			Menu will hide when the user right clicks on a MenuItem to raise the browser's 
@@ -2934,8 +2946,15 @@
 	
 						sId = sURL.substr(1, nLen);
 	
-						bInMenuAnchor = Dom.isAncestor(this.element, sId);
+						oMenu = YAHOO.widget.MenuManager.getMenu(sId);
 						
+						if (oMenu) {
+
+							bInMenuAnchor = 
+								(this.getRoot() === oMenu.getRoot());
+
+						}
+						
 					}
 					else if (nLen === 1) {
 	
@@ -2947,7 +2966,6 @@
 			
 			}
 
-
 	
 			if (bInMenuAnchor && !oItem.cfg.getProperty(_TARGET)) {
 	
@@ -3008,6 +3026,11 @@
         oParentMenu;
 
 
+	if (this._useHideDelay) {
+		this._cancelHideDelay();
+	}
+
+
     /*
         This function is called to prevent a bug in Firefox.  In Firefox,
         moving a DOM element into a stationary mouse pointer will cause the 
@@ -3823,8 +3846,8 @@
 		nTopRegionHeight,
 		nBottomRegionHeight,
 
-		topConstraint,
-		bottomConstraint,
+		topConstraint = scrollY + nViewportOffset,
+		bottomConstraint = scrollY + viewPortHeight - nMenuOffsetHeight - nViewportOffset,
 
 		yNew = y;
 		
@@ -3908,8 +3931,7 @@
 		var nDisplayRegionHeight = getDisplayRegionHeight(),
 			bMenuHasItems = (oMenu.getItems().length > 0),
 			nMenuMinScrollHeight,
-			fnReturnVal,
-			nNewY;
+			fnReturnVal;
 
 
 		if (nMenuOffsetHeight > nDisplayRegionHeight) {
@@ -3962,7 +3984,7 @@
 			}
 		
 		}
-		else if (nMaxHeight && (nMaxHeight != nInitialMaxHeight)) {
+		else if (nMaxHeight && (nMaxHeight !== nInitialMaxHeight)) {
 		
 			oMenu._setScrollHeight(nInitialMaxHeight);
 			oMenu.hideEvent.subscribe(resetMaxHeight);
@@ -3979,55 +4001,76 @@
 	};
 
 
-	if (oMenu.cfg.getProperty(_PREVENT_CONTEXT_OVERLAP) && bPotentialContextOverlap) {
+	// Determine if the current value for the Menu's "y" configuration property will
+	// result in the Menu being positioned outside the boundaries of the viewport
 
-		if (bCanConstrain) {
+	if (y < topConstraint || y  > bottomConstraint) {
 
-			oContextEl = aContext[0];
-			nContextElHeight = oContextEl.offsetHeight;
-			nContextElY = (Dom.getY(oContextEl) - scrollY);
+		// The current value for the Menu's "y" configuration property WILL
+		// result in the Menu being positioned outside the boundaries of the viewport
 
-			nTopRegionHeight = nContextElY;
-			nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+		if (bCanConstrain) {
 
-			setVerticalPosition();
+			if (oMenu.cfg.getProperty(_PREVENT_CONTEXT_OVERLAP) && bPotentialContextOverlap) {
 		
-		}
+				//	SOLUTION #1:
+				//	If the "preventcontextoverlap" configuration property is set to "true", 
+				//	try to flip and/or scroll the Menu to both keep it inside the boundaries of the 
+				//	viewport AND from overlaping its context element (MenuItem or MenuBarItem).
 
-		yNew = oMenu.cfg.getProperty(_Y);
-
-	}
-    else if (!(oMenu instanceof YAHOO.widget.MenuBar) && nMenuOffsetHeight >= viewPortHeight) {
+				oContextEl = aContext[0];
+				nContextElHeight = oContextEl.offsetHeight;
+				nContextElY = (Dom.getY(oContextEl) - scrollY);
 	
-		nAvailableHeight = (viewPortHeight - (nViewportOffset * 2));
+				nTopRegionHeight = nContextElY;
+				nBottomRegionHeight = (viewPortHeight - (nContextElY + nContextElHeight));
+	
+				setVerticalPosition();
+				
+				yNew = oMenu.cfg.getProperty(_Y);
+		
+			}
+			else if (!(oMenu instanceof YAHOO.widget.MenuBar) && 
+				nMenuOffsetHeight >= viewPortHeight) {
 
-		if (nAvailableHeight > oMenu.cfg.getProperty(_MIN_SCROLL_HEIGHT)) {
+				//	SOLUTION #2:
+				//	If the Menu exceeds the height of the viewport, introduce scroll bars
+				//	to keep the Menu inside the boundaries of the viewport
 
-			oMenu._setScrollHeight(nAvailableHeight);
-			oMenu.hideEvent.subscribe(resetMaxHeight);
+				nAvailableHeight = (viewPortHeight - (nViewportOffset * 2));
+		
+				if (nAvailableHeight > oMenu.cfg.getProperty(_MIN_SCROLL_HEIGHT)) {
+		
+					oMenu._setScrollHeight(nAvailableHeight);
+					oMenu.hideEvent.subscribe(resetMaxHeight);
+		
+					alignY();
+					
+					yNew = oMenu.cfg.getProperty(_Y);
+				
+				}
+		
+			}	
+			else {
 
-			alignY();
+				//	SOLUTION #3:
 			
-			yNew = oMenu.cfg.getProperty(_Y);
-		
+				if (y < topConstraint) {
+					yNew  = topConstraint;
+				} else if (y  > bottomConstraint) {
+					yNew  = bottomConstraint;
+				}				
+			
+			}
+
 		}
-
-    }	
-	else {
-
-		if (bCanConstrain) {
-
-			topConstraint = scrollY + nViewportOffset;
-			bottomConstraint = scrollY + viewPortHeight - nMenuOffsetHeight - nViewportOffset;
-
-			if (y < topConstraint) {
-				yNew  = topConstraint;
-			} else if (y  > bottomConstraint) {
-				yNew  = bottomConstraint;
-			}
-		} else {
+		else {
+			//	The "y" configuration property cannot be set to a value that will keep
+			//	entire Menu inside the boundary of the viewport.  Therefore, set  
+			//	the "y" configuration property to scrollY to keep as much of the 
+			//	Menu inside the viewport as possible.
 			yNew = nViewportOffset + scrollY;
-		}
+		}	
 
 	}
 
@@ -4124,13 +4167,13 @@
         }
 
 
-		// The following fixes an issue with the selected state of a MenuItem not rendering 
-		// correctly when a submenu is aligned to the left of its parent Menu instance.
+		//	The following fixes an issue with the selected state of a MenuItem 
+		//	not rendering correctly when a submenu is aligned to the left of
+		//	its parent Menu instance.
 
 		if ((this.cfg.getProperty("x") < oParentMenu.cfg.getProperty("x")) && 
-			(UA.gecko < 1.9) && 
-			!this.cfg.getProperty(_WIDTH)) {
-		
+			(UA.gecko && UA.gecko < 1.9) && !this.cfg.getProperty(_WIDTH)) {
+
 			oElement = this.element;
 			nOffsetWidth = oElement.offsetWidth;
 			
@@ -4238,6 +4281,7 @@
         case _EFFECT:
         case _CLASSNAME:
         case _SCROLL_INCREMENT:
+        case _MAX_HEIGHT:
         case _MIN_SCROLL_HEIGHT:
         case _MONITOR_RESIZE:
         case _SHADOW:
@@ -4298,6 +4342,8 @@
             
             scrollincrement: oParentCfg.getProperty(_SCROLL_INCREMENT),
             
+			maxheight: oParentCfg.getProperty(_MAX_HEIGHT),
+
             minscrollheight: oParentCfg.getProperty(_MIN_SCROLL_HEIGHT),
             
             iframe: oParentCfg.getProperty(_IFRAME),
@@ -4555,39 +4601,10 @@
 */
 configHideDelay: function (p_sType, p_aArgs, p_oMenu) {
 
-    var nHideDelay = p_aArgs[0],
-        oMouseOutEvent = this.mouseOutEvent,
-        oMouseOverEvent = this.mouseOverEvent,
-        oKeyDownEvent = this.keyDownEvent;
+    var nHideDelay = p_aArgs[0];
 
-    if (nHideDelay > 0) {
+	this._useHideDelay = (nHideDelay > 0);
 
-        /*
-            Only assign event handlers once. This way the user change 
-            the value for the hidedelay as many times as they want.
-        */
-
-        if (!this._bHideDelayEventHandlersAssigned) {
-
-            oMouseOutEvent.subscribe(this._execHideDelay);
-            oMouseOverEvent.subscribe(this._cancelHideDelay);
-            oKeyDownEvent.subscribe(this._cancelHideDelay);
-
-            this._bHideDelayEventHandlersAssigned = true;
-        
-        }
-
-    }
-    else {
-
-        oMouseOutEvent.unsubscribe(this._execHideDelay);
-        oMouseOverEvent.unsubscribe(this._cancelHideDelay);
-        oKeyDownEvent.unsubscribe(this._cancelHideDelay);
-
-        this._bHideDelayEventHandlersAssigned = false;
-
-    }
-
 },
 
 
@@ -4648,7 +4665,6 @@
         oBody,
         oHeader,
         oFooter,
-		oParent,
         fnMouseOver,
         fnMouseOut,
         nMinScrollHeight,
@@ -4666,7 +4682,6 @@
         fnMouseOver = this._onScrollTargetMouseOver;
         fnMouseOut = this._onScrollTargetMouseOut;
         nMinScrollHeight = this.cfg.getProperty(_MIN_SCROLL_HEIGHT);
-        oParent = this.parent;
 
 
 		if (nScrollHeight > 0 && nScrollHeight < nMinScrollHeight) {
@@ -4681,24 +4696,26 @@
 		oBody.scrollTop = 0;
 
 
-		/*
-			There is a bug in gecko-based browsers where an element whose 
-			"position" property is set to "absolute" and "overflow" property is set 
-			to "hidden" will not render at the correct width when its 
-			offsetParent's "position" property is also set to "absolute."  It is 
-			possible to work around this bug by specifying a value for the width 
-			property in addition to overflow.
+		//	Need to set a width for the Menu to fix the following problems in 
+		//	Firefox 2 and IE:
+
+		//	#1) Scrolled Menus will render at 1px wide in Firefox 2
+
+		//	#2) There is a bug in gecko-based browsers where an element whose 
+		//	"position" property is set to "absolute" and "overflow" property is 
+		//	set to "hidden" will not render at the correct width when its 
+		//	offsetParent's "position" property is also set to "absolute."  It is 
+		//	possible to work around this bug by specifying a value for the width 
+		//	property in addition to overflow.
+
+		//	#3) In IE it is necessary to give the Menu a width before the 
+		//	scrollbars are rendered to prevent the Menu from rendering with a 
+		//	width that is 100% of the browser viewport.
 	
-			In IE it is also necessary to give the Menu a width before the scrollbars are 
-			rendered to prevent the Menu from rendering with a width that is 100% of
-			the browser viewport.
-		*/
-	
-		bSetWidth = ((UA.gecko && oParent && oParent.parent && 
-			oParent.parent.cfg.getProperty(_POSITION) == _DYNAMIC) || UA.ie);
+		bSetWidth = ((UA.gecko && UA.gecko < 1.9) || UA.ie);
 
 		if (nScrollHeight > 0 && bSetWidth && !this.cfg.getProperty(_WIDTH)) {
-	
+
 			nOffsetWidth = oElement.offsetWidth;
 	
 			/*
@@ -5111,7 +5128,7 @@
 
 
     var onBeforeShow = function () {
-    
+
     	if (this._shadow) {
 
 			// If called because the "shadow" event was refired - just append again and resize
@@ -6380,7 +6397,7 @@
     /**
     * @config keepopen
     * @description Boolean indicating if the menu should remain open when clicked.
-    * @default flase
+    * @default false
     * @type Boolean
     */
     oConfig.addProperty(
@@ -6472,9 +6489,7 @@
 	_OPTION = "OPTION",
 	_OPTGROUP = "OPTGROUP",
 	_LI_UPPERCASE = "LI",
-	_LI_LOWERCASE = "li",
 	_HREF = "href",
-	_ANCHOR_TEMPLATE = "<a href=\"#\"></a>",
 	_SELECT = "SELECT",
 	_DIV = "DIV",
 	_START_HELP_TEXT = "<em class=\"helptext\">",
@@ -6489,6 +6504,11 @@
 	_VISIBLE = "visible",
 	_SPACE = " ",
 	_MENUITEM = "MenuItem",
+	_CLICK = "click",
+	_SHOW = "show",
+	_HIDE = "hide",
+	_LI_LOWERCASE = "li",
+	_ANCHOR_TEMPLATE = "<a href=\"#\"></a>",
 
     EVENT_TYPES = [
     
@@ -6496,7 +6516,7 @@
         ["mouseOutEvent", "mouseout"],
         ["mouseDownEvent", "mousedown"],
         ["mouseUpEvent", "mouseup"],
-        ["clickEvent", "click"],
+        ["clickEvent", _CLICK],
         ["keyPressEvent", "keypress"],
         ["keyDownEvent", "keydown"],
         ["keyUpEvent", "keyup"],
@@ -6587,11 +6607,17 @@
 		suppressEvent: true
 	},
     
-    CLASS_NAMES = {},
-    
-    m_oMenuItemTemplate;
+	KEY_LISTENER_CONFIG = {
+		key: "keylistener", 
+		value: null, 
+		suppressEvent: true
+	},
 
+	m_oMenuItemTemplate = null,
 
+    CLASS_NAMES = {};
+
+
 /**
 * @method getClassNameForState
 * @description Returns a class name for the specified prefix and state.  If the class name does not 
@@ -7134,7 +7160,7 @@
 
         oAnchor = oElement.firstChild;
         oAnchor.className = this.CSS_LABEL_CLASS_NAME;
-        
+
         this.element = oElement;
         this._oAnchor = oAnchor;
 
@@ -7818,7 +7844,151 @@
     },
 
 
+    /**
+    * @method _dispatchClickEvent
+    * @description Dispatches a DOM "click" event to the anchor element of a 
+	* MenuItem instance.
+	* @private	
+    */
+	_dispatchClickEvent: function () {
 
+		var oMenuItem = this,
+			oAnchor,
+			oEvent;
+
+		if (!oMenuItem.cfg.getProperty(_DISABLED)) {
+
+			oAnchor = Dom.getFirstChild(oMenuItem.element);
+
+			//	Dispatch a "click" event to the MenuItem's anchor so that its
+			//	"click" event handlers will get called in response to the user 
+			//	pressing the keyboard shortcut defined by the "keylistener"
+			//	configuration property.
+
+			if (UA.ie) {
+				oAnchor.fireEvent(_ONCLICK);
+			}
+			else {
+
+				if ((UA.gecko && UA.gecko >= 1.9) || UA.opera || UA.webkit) {
+
+					oEvent = document.createEvent("HTMLEvents");
+					oEvent.initEvent(_CLICK, true, true);
+
+				}
+				else {
+
+					oEvent = document.createEvent("MouseEvents");
+					oEvent.initMouseEvent(_CLICK, true, true, window, 0, 0, 0, 
+						0, 0, false, false, false, false, 0, null);
+
+				}
+
+				oAnchor.dispatchEvent(oEvent);
+
+			}
+
+		}
+
+	},
+
+
+    /**
+    * @method _createKeyListener
+    * @description "show" event handler for a Menu instance - responsible for 
+	* setting up the KeyListener instance for a MenuItem.
+	* @private	
+    * @param {String} type String representing the name of the event that 
+    * was fired.
+    * @param {Array} args Array of arguments sent when the event was fired.
+    * @param {Array} keyData Array of arguments sent when the event was fired.
+    */
+	_createKeyListener: function (type, args, keyData) {
+
+		var oMenuItem = this,
+			oMenu = oMenuItem.parent;
+
+		var oKeyListener = new YAHOO.util.KeyListener(
+										oMenu.element.ownerDocument, 
+										keyData, 
+										{
+											fn: oMenuItem._dispatchClickEvent, 
+											scope: oMenuItem, 
+											correctScope: true });
+
+
+		if (oMenu.cfg.getProperty(_VISIBLE)) {
+			oKeyListener.enable();
+		}
+
+
+		oMenu.subscribe(_SHOW, oKeyListener.enable, null, oKeyListener);
+		oMenu.subscribe(_HIDE, oKeyListener.disable, null, oKeyListener);
+		
+		oMenuItem._keyListener = oKeyListener;
+		
+		oMenu.unsubscribe(_SHOW, oMenuItem._createKeyListener, keyData);
+		
+	},
+
+
+    /**
+    * @method configKeyListener
+    * @description Event handler for when the "keylistener" configuration 
+    * property of a menu item changes.
+    * @param {String} p_sType String representing the name of the event that 
+    * was fired.
+    * @param {Array} p_aArgs Array of arguments sent when the event was fired.
+    */
+    configKeyListener: function (p_sType, p_aArgs) {
+
+		var oKeyData = p_aArgs[0],
+			oMenuItem = this,
+			oMenu = oMenuItem.parent;
+
+		if (oMenuItem._keyData) {
+
+			//	Unsubscribe from the "show" event in case the keylistener 
+			//	config was changed before the Menu was ever made visible.
+
+			oMenu.unsubscribe(_SHOW, 
+					oMenuItem._createKeyListener, oMenuItem._keyData);
+
+			oMenuItem._keyData = null;					
+					
+		}
+
+
+		//	Tear down for the previous value of the "keylistener" property
+
+		if (oMenuItem._keyListener) {
+
+			oMenu.unsubscribe(_SHOW, oMenuItem._keyListener.enable);
+			oMenu.unsubscribe(_HIDE, oMenuItem._keyListener.disable);
+
+			oMenuItem._keyListener.disable();
+			oMenuItem._keyListener = null;
+
+		}
+
+
+    	if (oKeyData) {
+	
+			oMenuItem._keyData = oKeyData;
+
+			//	Defer the creation of the KeyListener instance until the 
+			//	parent Menu is visible.  This is necessary since the 
+			//	KeyListener instance needs to be bound to the document the 
+			//	Menu has been rendered into.  Deferring creation of the 
+			//	KeyListener instance also improves performance.
+
+			oMenu.subscribe(_SHOW, oMenuItem._createKeyListener, 
+				oKeyData, oMenuItem);
+		}
+    
+    },
+
+
     // Public methods
 
 
@@ -8078,6 +8248,25 @@
             }
         );
 
+
+        /**
+        * @config keylistener
+        * @description Object literal representing the key(s) that can be used 
+ 		* to trigger the MenuItem's "click" event.  Possible attributes are 
+		* shift (boolean), alt (boolean), ctrl (boolean) and keys (either an int 
+		* or an array of ints representing keycodes).
+        * @default null
+        * @type Object
+        */
+        oConfig.addProperty(
+            KEY_LISTENER_CONFIG.key, 
+            { 
+                handler: this.configKeyListener,
+                value: KEY_LISTENER_CONFIG.value, 
+                suppressEvent: KEY_LISTENER_CONFIG.suppressEvent 
+            }
+        );
+
 	},
 
 
@@ -8697,29 +8886,29 @@
     var aXY;
 
     if (!(p_oEvent.type == _MOUSEDOWN && !p_oEvent.ctrlKey)) {
-
-		/*
-			Prevent the browser's default context menu from appearing and 
-			stop the propagation of the "contextmenu" event so that 
-			other ContextMenu instances are not displayed.
-		*/
 	
-		Event.stopEvent(p_oEvent);
-	
-	
 		this.contextEventTarget = Event.getTarget(p_oEvent);
 	
 		this.triggerContextMenuEvent.fire(p_oEvent);
-	
-	
-		// Hide any other Menu instances that might be visible
-	
-		YAHOO.widget.MenuManager.hideVisible();
 		
 	
-	
 		if (!this._bCancelled) {
+
+			/*
+				Prevent the browser's default context menu from appearing and 
+				stop the propagation of the "contextmenu" event so that 
+				other ContextMenu instances are not displayed.
+			*/
+
+			Event.stopEvent(p_oEvent);
+
+
+			// Hide any other Menu instances that might be visible
+
+			YAHOO.widget.MenuManager.hideVisible();
+			
 	
+
 			// Position and display the context menu
 	
 			aXY = Event.getXY(p_oEvent);
@@ -9616,4 +9805,4 @@
 }
     
 }); // END YAHOO.lang.extend
-YAHOO.register("menu", YAHOO.widget.Menu, {version: "2.6.0", build: "1321"});
+YAHOO.register("menu", YAHOO.widget.Menu, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/paginator/README
===================================================================
--- trunk/root/static/yui/paginator/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,5 +0,0 @@
-Paginator Release Notes
-
-*** version 2.6.0 ***
-
-* Initial standalone realease (extracted from DataTable)

Modified: trunk/root/static/yui/paginator/assets/paginator-core.css
===================================================================
--- trunk/root/static/yui/paginator/assets/paginator-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/assets/paginator-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,6 +1,6 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */

Modified: trunk/root/static/yui/paginator/assets/skins/sam/paginator-skin.css
===================================================================
--- trunk/root/static/yui/paginator/assets/skins/sam/paginator-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/assets/skins/sam/paginator-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-pg-container {
     display: block;

Modified: trunk/root/static/yui/paginator/assets/skins/sam/paginator.css
===================================================================
--- trunk/root/static/yui/paginator/assets/skins/sam/paginator.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/assets/skins/sam/paginator.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-pg-container{display:block;margin:6px 0;white-space:nowrap;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous,.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last,.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-pages,.yui-skin-sam .yui-pg-page{display:inline-block;font-family:arial,helvetica,clean,sans-serif;padding:3px 6px;zoom:1;}.yui-skin-sam .yui-pg-pages{padding:0;}.yui-skin-sam .yui-pg-current{padding:3px 0;}.yui-skin-sam a.yui-pg-first:link,.yui-skin-sam a.yui-pg-first:visited,.yui-skin-sam a.yui-pg-first:active,.yui-skin-sam a.yui-pg-first:hover,.yui-skin-sam a.yui-pg-previous:link,.yui-skin-sam a.yui-pg-previous:visited,.yui-skin-sam a.yui-pg-previous:active,.yui-skin-sam a.yui-pg-previous:hover,.yui-skin-sam a.yui-pg-next:link,.yui-skin-sam a.yui-pg-next:visited,.yui-skin-sam a.yui-pg-next:active,.yui-skin-sam a.yui-pg-next:hover,.yui-skin-sam a.yui-pg-last:link,.yui-skin-sam a.yui-pg-last:visited,.yui-skin-sam a.yui-pg-last:active!
 ,.yui-skin-sam a.yui-pg-last:hover,.yui-skin-sam a.yui-pg-page:link,.yui-skin-sam a.yui-pg-page:visited,.yui-skin-sam a.yui-pg-page:active,.yui-skin-sam a.yui-pg-page:hover{color:#06c;text-decoration:underline;outline:0;}.yui-skin-sam span.yui-pg-first,.yui-skin-sam span.yui-pg-previous,.yui-skin-sam span.yui-pg-next,.yui-skin-sam span.yui-pg-last{color:#a6a6a6;}.yui-skin-sam .yui-pg-page{background-color:#fff;border:1px solid #CBCBCB;padding:2px 6px;text-decoration:none;}.yui-skin-sam .yui-pg-current-page{background-color:transparent;border:none;font-weight:bold;padding:3px 6px;}.yui-skin-sam .yui-pg-page{margin-left:1px;margin-right:1px;}.yui-skin-sam .yui-pg-first,.yui-skin-sam .yui-pg-previous{padding-left:0;}.yui-skin-sam .yui-pg-next,.yui-skin-sam .yui-pg-last{padding-right:0;}.yui-skin-sam .yui-pg-current,.yui-skin-sam .yui-pg-rpp-options{margin-left:1em;margin-right:1em;}

Modified: trunk/root/static/yui/paginator/paginator-debug.js
===================================================================
--- trunk/root/static/yui/paginator/paginator-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/paginator-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
+(function () {
 /**
  * The Paginator widget provides a set of controls to navigate through paged
  * data.
@@ -28,10 +29,10 @@
  * @param config {Object} Object literal to set instance and ui component
  * configuration.
  */
-YAHOO.widget.Paginator = function (config) {
-    var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
+function Paginator(config) {
+    var UNLIMITED = Paginator.VALUE_UNLIMITED,
         lang      = YAHOO.lang,
-        attrib, initialPage, records, perPage;
+        attrib, initialPage, records, perPage, startIndex;
 
     config = lang.isObject(config) ? config : {};
 
@@ -41,7 +42,7 @@
 
     // Set the basic config keys first
     this.set('rowsPerPage',config.rowsPerPage,true);
-    if (lang.isNumber(config.totalRecords)) {
+    if (Paginator.isNumeric(config.totalRecords)) {
         this.set('totalRecords',config.totalRecords,true);
     }
     
@@ -59,16 +60,16 @@
     records     = this.get('totalRecords');
     perPage     = this.get('rowsPerPage');
     if (initialPage > 1 && perPage !== UNLIMITED) {
-        var startIndex = (initialPage - 1) * perPage;
+        startIndex = (initialPage - 1) * perPage;
         if (records === UNLIMITED || startIndex < records) {
             this.set('recordOffset',startIndex,true);
         }
     }
-};
+}
 
 
 // Static members
-YAHOO.lang.augmentObject(YAHOO.widget.Paginator, {
+YAHOO.lang.augmentObject(Paginator, {
     /**
      * Incrementing index used to give instances unique ids.
      * @static
@@ -121,13 +122,39 @@
      * @static
      * @property ui
      */
-    ui : {}
+    ui : {},
 
+    /**
+     * Similar to YAHOO.lang.isNumber, but allows numeric strings.  This is
+     * is used for attribute validation in conjunction with getters that return
+     * numbers.
+     *
+     * @method isNumeric
+     * @param v {Number|String} value to be checked for number or numeric string
+     * @returns {Boolean} true if the input is coercable into a finite number
+     * @static
+     */
+    isNumeric : function (v) {
+        return isFinite(+v);
+    },
+
+    /**
+     * Return a number or null from input
+     *
+     * @method toNumber
+     * @param n {Number|String} a number or numeric string
+     * @return Number
+     * @static
+     */
+    toNumber : function (n) {
+        return isFinite(+n) ? +n : null;
+    }
+
 },true);
 
 
 // Instance members and methods
-YAHOO.widget.Paginator.prototype = {
+Paginator.prototype = {
 
     // Instance members
 
@@ -176,7 +203,7 @@
      */
     initConfig : function () {
 
-        var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
+        var UNLIMITED = Paginator.VALUE_UNLIMITED,
             l         = YAHOO.lang;
 
         /**
@@ -186,7 +213,8 @@
          */
         this.setAttributeConfig('rowsPerPage', {
             value     : 0,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -227,7 +255,8 @@
          */
         this.setAttributeConfig('totalRecords', {
             value     : 0,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -242,13 +271,15 @@
             value     : 0,
             validator : function (val) {
                 var total = this.get('totalRecords');
-                if (l.isNumber(val)) {
+                if (Paginator.isNumeric(val)) {
+                    val = +val;
                     return total === UNLIMITED || total > val ||
                            (total === 0 && val === 0);
                 }
 
                 return false;
-            }
+            },
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -259,7 +290,8 @@
          */
         this.setAttributeConfig('initialPage', {
             value     : 1,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -273,7 +305,7 @@
          * @type string
          */
         this.setAttributeConfig('template', {
-            value : YAHOO.widget.Paginator.TEMPLATE_DEFAULT,
+            value : Paginator.TEMPLATE_DEFAULT,
             validator : l.isString
         });
 
@@ -327,7 +359,7 @@
          * @final
          */
         this.setAttributeConfig('id', {
-            value    : YAHOO.widget.Paginator.id++,
+            value    : Paginator.id++,
             readOnly : true
         });
 
@@ -350,7 +382,7 @@
      * @private
      */
     initUIComponents : function () {
-        var ui = YAHOO.widget.Paginator.ui,
+        var ui = Paginator.ui,
             name,UIComp;
         for (name in ui) {
             if (YAHOO.lang.hasOwnProperty(ui,name)) {
@@ -369,11 +401,6 @@
      * @private
      */
     initEvents : function () {
-        this.createEvent('recordOffsetChange');
-        this.createEvent('totalRecordsChange');
-        this.createEvent('rowsPerPageChange');
-        this.createEvent('alwaysVisibleChange');
-
         /**
          * Event fired when the Paginator is initially rendered
          * @event render
@@ -458,7 +485,7 @@
     _syncRecordOffset : function (e) {
         var v = e.newValue,rpp,state;
         if (e.prevValue !== v) {
-            if (v !== YAHOO.widget.Paginator.VALUE_UNLIMITED) {
+            if (v !== Paginator.VALUE_UNLIMITED) {
                 rpp = this.get('rowsPerPage');
 
                 if (rpp && this.get('recordOffset') >= v) {
@@ -531,26 +558,26 @@
         }
 
         // Forgo rendering if only one page and alwaysVisible is off
-        var totalRecords = this.get('totalRecords');
-        if (totalRecords !== YAHOO.widget.Paginator.VALUE_UNLIMITED &&
+        var totalRecords   = this.get('totalRecords'),
+            Dom            = YAHOO.util.Dom,
+            template       = this.get('template'),
+            containerClass = this.get('containerClass'),
+            i,len,c,id_base,markers,j,jlen,m,mp,name,UIComp,comp;
+
+        if (totalRecords !== Paginator.VALUE_UNLIMITED &&
             totalRecords < this.get('rowsPerPage') &&
             !this.get('alwaysVisible')) {
             return;
         }
 
-        var Dom            = YAHOO.util.Dom,
-            template       = this.get('template'),
-            containerClass = this.get('containerClass');
-
         // add marker spans to the template html to indicate drop zones
         // for ui components
         template = template.replace(/\{([a-z0-9_ \-]+)\}/gi,
             '<span class="yui-pg-ui $1"></span>');
-        for (var i = 0, len = this._containers.length; i < len; ++i) {
-            var c       = this._containers[i],
-                // ex. yui-pg0-1 (first paginator, second container)
-                id_base = YAHOO.widget.Paginator.ID_BASE + this.get('id') +
-                          '-' + i;
+        for (i = 0, len = this._containers.length; i < len; ++i) {
+            c = this._containers[i];
+            // ex. yui-pg0-1 (first paginator, second container)
+            id_base = Paginator.ID_BASE + this.get('id') + '-' + i;
 
             if (!c) {
                 continue;
@@ -564,16 +591,16 @@
             c.innerHTML = template;
 
             // Replace each marker with the ui component's render() output
-            var markers = Dom.getElementsByClassName('yui-pg-ui','span',c);
+            markers = Dom.getElementsByClassName('yui-pg-ui','span',c);
 
-            for (var j = 0, jlen = markers.length; j < jlen; ++j) {
-                var m      = markers[j],
-                    mp     = m.parentNode,
-                    name   = m.className.replace(/\s*yui-pg-ui\s+/g,''),
-                    UIComp = YAHOO.widget.Paginator.ui[name];
+            for (j = 0, jlen = markers.length; j < jlen; ++j) {
+                m      = markers[j];
+                mp     = m.parentNode;
+                name   = m.className.replace(/\s*yui-pg-ui\s+/g,'');
+                UIComp = Paginator.ui[name];
 
                 if (YAHOO.lang.isFunction(UIComp)) {
-                    var comp = new UIComp(this);
+                    comp = new UIComp(this);
                     if (YAHOO.lang.isFunction(comp.render)) {
                         mp.replaceChild(comp.render(id_base),m);
                     }
@@ -612,13 +639,14 @@
      * @method updateVisibility
      */
     updateVisibility : function (e) {
-        var alwaysVisible = this.get('alwaysVisible');
+        var alwaysVisible = this.get('alwaysVisible'),
+            totalRecords,visible,rpp,rppOptions,i,len;
+
         if (e.type === 'alwaysVisibleChange' || !alwaysVisible) {
-            var totalRecords = this.get('totalRecords'),
-                visible = true,
-                rpp = this.get('rowsPerPage'),
-                rppOptions = this.get('rowsPerPageOptions'),
-                i,len;
+            totalRecords = this.get('totalRecords');
+            visible      = true;
+            rpp          = this.get('rowsPerPage');
+            rppOptions   = this.get('rowsPerPageOptions');
 
             if (YAHOO.lang.isArray(rppOptions)) {
                 for (i = 0, len = rppOptions.length; i < len; ++i) {
@@ -626,7 +654,7 @@
                 }
             }
 
-            if (totalRecords !== YAHOO.widget.Paginator.VALUE_UNLIMITED &&
+            if (totalRecords !== Paginator.VALUE_UNLIMITED &&
                 totalRecords <= rpp) {
                 visible = false;
             }
@@ -661,16 +689,16 @@
      * @return {number}
      */
     getTotalPages : function () {
-        var records = this.get('totalRecords');
-        var perPage = this.get('rowsPerPage');
+        var records = this.get('totalRecords'),
+            perPage = this.get('rowsPerPage');
 
         // rowsPerPage not set.  Can't calculate
         if (!perPage) {
             return null;
         }
 
-        if (records === YAHOO.widget.Paginator.VALUE_UNLIMITED) {
-            return YAHOO.widget.Paginator.VALUE_UNLIMITED;
+        if (records === Paginator.VALUE_UNLIMITED) {
+            return Paginator.VALUE_UNLIMITED;
         }
 
         return Math.ceil(records/perPage);
@@ -689,7 +717,7 @@
 
         var totalPages = this.getTotalPages();
 
-        return (totalPages === YAHOO.widget.Paginator.VALUE_UNLIMITED || totalPages >= page);
+        return (totalPages === Paginator.VALUE_UNLIMITED || totalPages >= page);
     },
 
     /**
@@ -714,7 +742,7 @@
         var currentPage = this.getCurrentPage(),
             totalPages  = this.getTotalPages();
 
-        return currentPage && (totalPages === YAHOO.widget.Paginator.VALUE_UNLIMITED || currentPage < totalPages);
+        return currentPage && (totalPages === Paginator.VALUE_UNLIMITED || currentPage < totalPages);
     },
 
     /**
@@ -766,7 +794,7 @@
         }
 
         start = (page - 1) * perPage;
-        if (records !== YAHOO.widget.Paginator.VALUE_UNLIMITED) {
+        if (records !== Paginator.VALUE_UNLIMITED) {
             if (start >= records) {
                 return null;
             }
@@ -812,13 +840,13 @@
      * changeRequest event
      */
     setRowsPerPage : function (rpp,silent) {
-        if (YAHOO.lang.isNumber(rpp) && rpp > 0 &&
-            rpp !== this.get('rowsPerPage')) {
+        if (Paginator.isNumeric(rpp) && +rpp > 0 &&
+            +rpp !== this.get('rowsPerPage')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('rowsPerPage',rpp);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'rowsPerPage':rpp}));
+                    this.getState({'rowsPerPage':+rpp}));
             }
         }
     },
@@ -839,13 +867,13 @@
      * @param silent {boolean} whether to forcibly avoid firing the changeRequest event
      */
     setTotalRecords : function (total,silent) {
-        if (YAHOO.lang.isNumber(total) && total >= 0 &&
-            total !== this.get('totalRecords')) {
+        if (Paginator.isNumeric(total) && +total >= 0 &&
+            +total !== this.get('totalRecords')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('totalRecords',total);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'totalRecords':total}));
+                    this.getState({'totalRecords':+total}));
             }
         }
     },
@@ -867,13 +895,13 @@
      * @param silent {boolean} whether to forcibly avoid firing the changeRequest event
      */
     setStartIndex : function (offset,silent) {
-        if (YAHOO.lang.isNumber(offset) && offset >= 0 &&
-            offset !== this.get('recordOffset')) {
+        if (Paginator.isNumeric(offset) && +offset >= 0 &&
+            +offset !== this.get('recordOffset')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('recordOffset',offset);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'recordOffset':offset}));
+                    this.getState({'recordOffset':+offset}));
             }
         }
     },
@@ -903,9 +931,8 @@
      * </ul>
      */
     getState : function (changes) {
-        var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
-            l         = YAHOO.lang,
-            M = Math, min = M.min, max = M.max, floor = M.floor, ceil = M.ceil,
+        var UNLIMITED = Paginator.VALUE_UNLIMITED,
+            M = Math, max = M.max, ceil = M.ceil,
             currentState, state, offset;
 
         function normalizeOffset(offset,total,rpp) {
@@ -940,19 +967,19 @@
             before       : currentState,
 
             rowsPerPage  : changes.rowsPerPage || currentState.rowsPerPage,
-            totalRecords : (l.isNumber(changes.totalRecords) ?
+            totalRecords : (Paginator.isNumeric(changes.totalRecords) ?
                                 max(changes.totalRecords,UNLIMITED) :
-                                currentState.totalRecords)
+                                +currentState.totalRecords)
         };
 
         if (state.totalRecords === 0) {
             state.recordOffset =
             state.page         = 0;
         } else {
-            offset = l.isNumber(changes.page) ?
+            offset = Paginator.isNumeric(changes.page) ?
                         (changes.page - 1) * state.rowsPerPage :
-                        l.isNumber(changes.recordOffset) ?
-                            changes.recordOffset :
+                        Paginator.isNumeric(changes.recordOffset) ?
+                            +changes.recordOffset :
                             currentState.recordOffset;
 
             state.recordOffset = normalizeOffset(offset,
@@ -1024,7 +1051,10 @@
     }
 };
 
-YAHOO.lang.augmentProto(YAHOO.widget.Paginator, YAHOO.util.AttributeProvider);
+YAHOO.lang.augmentProto(Paginator, YAHOO.util.AttributeProvider);
+
+YAHOO.widget.Paginator = Paginator;
+})();
 (function () {
 
 var Paginator = YAHOO.widget.Paginator,
@@ -1044,9 +1074,6 @@
 Paginator.ui.CurrentPageReport = function (p) {
     this.paginator = p;
 
-    p.createEvent('pageReportClassChange');
-    p.createEvent('pageReportTemplateChange');
-
     p.subscribe('recordOffsetChange', this.update,this,true);
     p.subscribe('rowsPerPageChange', this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1215,11 +1242,6 @@
 Paginator.ui.PageLinks = function (p) {
     this.paginator = p;
 
-    p.createEvent('pageLinkClassChange');
-    p.createEvent('currentPageClassChange');
-    p.createEvent('pageLinksContainerClassChange');
-    p.createEvent('pageLinksChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1278,7 +1300,7 @@
      */
     p.setAttributeConfig('pageLinks', {
         value : 10,
-        validator : l.isNumber
+        validator : Paginator.isNumeric
     });
 
     /**
@@ -1481,9 +1503,6 @@
 Paginator.ui.FirstPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('firstPageLinkLabelChange');
-    p.createEvent('firstPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1576,7 +1595,7 @@
         this.span.className = c;
         this.span.innerHTML = label;
 
-        this.current = p.get('recordOffset') < 1 ? this.span : this.link;
+        this.current = p.getCurrentPage() > 1 ? this.link : this.span;
         return this.current;
     },
 
@@ -1591,16 +1610,16 @@
         }
 
         var par = this.current ? this.current.parentNode : null;
-        if (this.paginator.get('recordOffset') < 1) {
+        if (this.paginator.getCurrentPage() > 1) {
+            if (par && this.current === this.span) {
+                par.replaceChild(this.link,this.current);
+                this.current = this.link;
+            }
+        } else {
             if (par && this.current === this.link) {
                 par.replaceChild(this.span,this.current);
                 this.current = this.span;
             }
-        } else {
-            if (par && this.current === this.span) {
-                par.replaceChild(this.link,this.current);
-                this.current = this.link;
-            }
         }
     },
 
@@ -1646,9 +1665,6 @@
 Paginator.ui.LastPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('lastPageLinkLabelChange');
-    p.createEvent('lastPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1835,9 +1851,6 @@
 Paginator.ui.NextPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('nextPageLinkLabelChange');
-    p.createEvent('nextPageLinkClassChange');
-
     p.subscribe('recordOffsetChange', this.update,this,true);
     p.subscribe('rowsPerPageChange', this.update,this,true);
     p.subscribe('totalRecordsChange', this.update,this,true);
@@ -2003,9 +2016,6 @@
 Paginator.ui.PreviousPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('previousPageLinkLabelChange');
-    p.createEvent('previousPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -2098,7 +2108,7 @@
         this.span.className = c;
         this.span.innerHTML = label;
 
-        this.current = p.get('recordOffset') < 1 ? this.span : this.link;
+        this.current = p.getCurrentPage() > 1 ? this.link : this.span;
         return this.current;
     },
 
@@ -2113,16 +2123,16 @@
         }
 
         var par = this.current ? this.current.parentNode : null;
-        if (this.paginator.get('recordOffset') < 1) {
+        if (this.paginator.getCurrentPage() > 1) {
+            if (par && this.current === this.span) {
+                par.replaceChild(this.link,this.current);
+                this.current = this.link;
+            }
+        } else {
             if (par && this.current === this.link) {
                 par.replaceChild(this.span,this.current);
                 this.current = this.span;
             }
-        } else {
-            if (par && this.current === this.span) {
-                par.replaceChild(this.link,this.current);
-                this.current = this.link;
-            }
         }
     },
 
@@ -2167,11 +2177,9 @@
 Paginator.ui.RowsPerPageDropdown = function (p) {
     this.paginator = p;
 
-    p.createEvent('rowsPerPageOptionsChange');
-    p.createEvent('rowsPerPageDropdownClassChange');
-
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('rowsPerPageOptionsChange',this.rebuild,this,true);
+    p.subscribe('totalRecordsChange',this._handleTotalRecordsChange,this,true);
     p.subscribe('destroy',this.destroy,this,true);
 
     // TODO: make this work
@@ -2222,6 +2230,15 @@
 
 
     /**
+     * option node for the optional All value
+     *
+     * @property all
+     * @type HTMLElement
+     * @protected
+     */
+    all : null,
+
+    /**
      * Generate the select and option nodes and returns the select node.
      * @method render
      * @param id_base {string} used to create unique ids for generated nodes
@@ -2241,6 +2258,41 @@
     },
 
     /**
+     * (Re)generate the select options.
+     * @method rebuild
+     */
+    rebuild : function (e) {
+        var p       = this.paginator,
+            sel     = this.select,
+            options = p.get('rowsPerPageOptions'),
+            opt,cfg,val,i,len;
+
+        this.all = null;
+
+        for (i = 0, len = options.length; i < len; ++i) {
+            cfg = options[i];
+            opt = sel.options[i] ||
+                  sel.appendChild(document.createElement('option'));
+            val = l.isValue(cfg.value) ? cfg.value : cfg;
+            opt.innerHTML = l.isValue(cfg.text) ? cfg.text : cfg;
+
+            if (l.isString(val) && val.toLowerCase() === 'all') {
+                this.all  = opt;
+                opt.value = p.get('totalRecords');
+            } else{
+                opt.value = val;
+            }
+
+        }
+
+        while (sel.options.length > options.length) {
+            sel.removeChild(sel.firstChild);
+        }
+
+        this.update();
+    },
+
+    /**
      * Select the appropriate option if changed.
      * @method update
      * @param e {CustomEvent} The calling change event
@@ -2250,42 +2302,45 @@
             return;
         }
 
-        var rpp     = this.paginator.get('rowsPerPage'),
+        var rpp     = this.paginator.get('rowsPerPage')+'',
             options = this.select.options,
             i,len;
 
         for (i = 0, len = options.length; i < len; ++i) {
-            if (parseInt(options[i].value,10) === rpp) {
+            if (options[i].value === rpp) {
                 options[i].selected = true;
+                break;
             }
         }
     },
 
+    /**
+     * Listener for the select's onchange event.  Sent to setRowsPerPage method.
+     * @method onChange
+     * @param e {DOMEvent} The change event
+     */
+    onChange : function (e) {
+        this.paginator.setRowsPerPage(
+                parseInt(this.select.options[this.select.selectedIndex].value,10));
+    },
 
     /**
-     * (Re)generate the select options.
-     * @method rebuild
+     * Updates the all option value (and Paginator's rowsPerPage attribute if
+     * necessary) in response to a change in the Paginator's totalRecords.
+     *
+     * @method _handleTotalRecordsChange
+     * @param e {Event} attribute change event
+     * @protected
      */
-    rebuild : function (e) {
-        var p       = this.paginator,
-            sel     = this.select,
-            options = p.get('rowsPerPageOptions'),
-            opt_tem = document.createElement('option'),
-            i,len;
-
-        while (sel.firstChild) {
-            sel.removeChild(sel.firstChild);
+    _handleTotalRecordsChange : function (e) {
+        if (!this.all || (e && e.prevValue === e.newValue)) {
+            return;
         }
 
-        for (i = 0, len = options.length; i < len; ++i) {
-            var node = opt_tem.cloneNode(false),
-                opt  = options[i];
-            node.value = l.isValue(opt.value) ? opt.value : opt;
-            node.innerHTML = l.isValue(opt.text) ? opt.text : opt;
-            sel.appendChild(node);
+        this.all.value = e.newValue;
+        if (this.all.selected) {
+            this.paginator.set('rowsPerPage',e.newValue);
         }
-
-        this.update();
     },
 
     /**
@@ -2297,18 +2352,8 @@
         YAHOO.util.Event.purgeElement(this.select);
         this.select.parentNode.removeChild(this.select);
         this.select = null;
-    },
-
-    /**
-     * Listener for the select's onchange event.  Sent to setRowsPerPage method.
-     * @method onChange
-     * @param e {DOMEvent} The change event
-     */
-    onChange : function (e) {
-        this.paginator.setRowsPerPage(
-                parseInt(this.select.options[this.select.selectedIndex].value,10));
     }
 };
 
 })();
-YAHOO.register("paginator", YAHOO.widget.Paginator, {version: "2.6.0", build: "1321"});
+YAHOO.register("paginator", YAHOO.widget.Paginator, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/paginator/paginator-min.js
===================================================================
--- trunk/root/static/yui/paginator/paginator-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/paginator-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,10 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.widget.Paginator=function(D){var H=YAHOO.widget.Paginator.VALUE_UNLIMITED,G=YAHOO.lang,E,A,B,C;D=G.isObject(D)?D:{};this.initConfig();this.initEvents();this.set("rowsPerPage",D.rowsPerPage,true);if(G.isNumber(D.totalRecords)){this.set("totalRecords",D.totalRecords,true);}this.initUIComponents();for(E in D){if(G.hasOwnProperty(D,E)){this.set(E,D[E],true);}}A=this.get("initialPage");B=this.get("totalRecords");C=this.get("rowsPerPage");if(A>1&&C!==H){var F=(A-1)*C;if(B===H||F<B){this.set("recordOffset",F,true);}}};YAHOO.lang.augmentObject(YAHOO.widget.Paginator,{id:0,ID_BASE:"yui-pg",VALUE_UNLIMITED:-1,TEMPLATE_DEFAULT:"{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}",TEMPLATE_ROWS_PER_PAGE:"{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}",ui:{}},true);YAHOO.widget.Paginator.prototype={_containers:[],_batch:false,_pageChanged:false,_state:null,initConfig:function(){var B=YAHOO.widget.Paginato!
 r.VALUE_UNLIMITED,A=YAHOO.lang;this.setAttributeConfig("rowsPerPage",{value:0,validator:A.isNumber});this.setAttributeConfig("containers",{value:null,validator:function(E){if(!A.isArray(E)){E=[E];}for(var D=0,C=E.length;D<C;++D){if(A.isString(E[D])||(A.isObject(E[D])&&E[D].nodeType===1)){continue;}return false;}return true;},method:function(C){C=YAHOO.util.Dom.get(C);if(!A.isArray(C)){C=[C];}this._containers=C;}});this.setAttributeConfig("totalRecords",{value:0,validator:A.isNumber});this.setAttributeConfig("recordOffset",{value:0,validator:function(D){var C=this.get("totalRecords");if(A.isNumber(D)){return C===B||C>D||(C===0&&D===0);}return false;}});this.setAttributeConfig("initialPage",{value:1,validator:A.isNumber});this.setAttributeConfig("template",{value:YAHOO.widget.Paginator.TEMPLATE_DEFAULT,validator:A.isString});this.setAttributeConfig("containerClass",{value:"yui-pg-container",validator:A.isString});this.setAttributeConfig("alwaysVisible",{value:true,validator:A!
 .isBoolean});this.setAttributeConfig("updateOnChange",{value:f!
 alse,val
idator:A.isBoolean});this.setAttributeConfig("id",{value:YAHOO.widget.Paginator.id++,readOnly:true});this.setAttributeConfig("rendered",{value:false,readOnly:true});},initUIComponents:function(){var C=YAHOO.widget.Paginator.ui,B,A;for(B in C){if(YAHOO.lang.hasOwnProperty(C,B)){A=C[B];if(YAHOO.lang.isObject(A)&&YAHOO.lang.isFunction(A.init)){A.init(this);}}}},initEvents:function(){this.createEvent("recordOffsetChange");this.createEvent("totalRecordsChange");this.createEvent("rowsPerPageChange");this.createEvent("alwaysVisibleChange");this.createEvent("render");this.createEvent("rendered");this.createEvent("changeRequest");this.createEvent("pageChange");this.createEvent("beforeDestroy");this.createEvent("destroy");this._selfSubscribe();},_selfSubscribe:function(){this.subscribe("totalRecordsChange",this.updateVisibility,this,true);this.subscribe("alwaysVisibleChange",this.updateVisibility,this,true);this.subscribe("totalRecordsChange",this._handleStateChange,this,true);this.su!
 bscribe("recordOffsetChange",this._handleStateChange,this,true);this.subscribe("rowsPerPageChange",this._handleStateChange,this,true);this.subscribe("totalRecordsChange",this._syncRecordOffset,this,true);},_syncRecordOffset:function(D){var A=D.newValue,C,B;if(D.prevValue!==A){if(A!==YAHOO.widget.Paginator.VALUE_UNLIMITED){C=this.get("rowsPerPage");if(C&&this.get("recordOffset")>=A){B=this.getState({totalRecords:D.prevValue,recordOffset:this.get("recordOffset")});this.set("recordOffset",B.before.recordOffset);this._firePageChange(B);}}}},_handleStateChange:function(B){if(B.prevValue!==B.newValue){var C=this._state||{},A;C[B.type.replace(/Change$/,"")]=B.prevValue;A=this.getState(C);if(A.page!==A.before.page){if(this._batch){this._pageChanged=true;}else{this._firePageChange(A);}}}},_firePageChange:function(A){if(YAHOO.lang.isObject(A)){var B=A.before;delete A.before;this.fireEvent("pageChange",{type:"pageChange",prevValue:A.page,newValue:B.page,prevState:A,newState:B});}},ren!
 der:function(){if(this.get("rendered")){return ;}var M=this.ge!
 t("total
Records");if(M!==YAHOO.widget.Paginator.VALUE_UNLIMITED&&M<this.get("rowsPerPage")&&!this.get("alwaysVisible")){return ;}var F=YAHOO.util.Dom,N=this.get("template"),P=this.get("containerClass");N=N.replace(/\{([a-z0-9_ \-]+)\}/gi,'<span class="yui-pg-ui $1"></span>');for(var H=0,J=this._containers.length;H<J;++H){var L=this._containers[H],G=YAHOO.widget.Paginator.ID_BASE+this.get("id")+"-"+H;if(!L){continue;}L.style.display="none";F.addClass(L,P);L.innerHTML=N;var E=F.getElementsByClassName("yui-pg-ui","span",L);for(var D=0,O=E.length;D<O;++D){var C=E[D],B=C.parentNode,A=C.className.replace(/\s*yui-pg-ui\s+/g,""),K=YAHOO.widget.Paginator.ui[A];if(YAHOO.lang.isFunction(K)){var I=new K(this);if(YAHOO.lang.isFunction(I.render)){B.replaceChild(I.render(G),C);}}}L.style.display="";}if(this._containers.length){this.setAttributeConfig("rendered",{value:true});this.fireEvent("render",this.getState());this.fireEvent("rendered",this.getState());}},destroy:function(){this.fireEvent("be!
 foreDestroy");this.fireEvent("destroy");this.setAttributeConfig("rendered",{value:false});},updateVisibility:function(F){var B=this.get("alwaysVisible");if(F.type==="alwaysVisibleChange"||!B){var H=this.get("totalRecords"),G=true,D=this.get("rowsPerPage"),E=this.get("rowsPerPageOptions"),C,A;if(YAHOO.lang.isArray(E)){for(C=0,A=E.length;C<A;++C){D=Math.min(D,E[C]);}}if(H!==YAHOO.widget.Paginator.VALUE_UNLIMITED&&H<=D){G=false;}G=G||B;for(C=0,A=this._containers.length;C<A;++C){YAHOO.util.Dom.setStyle(this._containers[C],"display",G?"":"none");}}},getContainerNodes:function(){return this._containers;},getTotalPages:function(){var A=this.get("totalRecords");var B=this.get("rowsPerPage");if(!B){return null;}if(A===YAHOO.widget.Paginator.VALUE_UNLIMITED){return YAHOO.widget.Paginator.VALUE_UNLIMITED;}return Math.ceil(A/B);},hasPage:function(B){if(!YAHOO.lang.isNumber(B)||B<1){return false;}var A=this.getTotalPages();
-return(A===YAHOO.widget.Paginator.VALUE_UNLIMITED||A>=B);},getCurrentPage:function(){var A=this.get("rowsPerPage");if(!A||!this.get("totalRecords")){return 0;}return Math.floor(this.get("recordOffset")/A)+1;},hasNextPage:function(){var A=this.getCurrentPage(),B=this.getTotalPages();return A&&(B===YAHOO.widget.Paginator.VALUE_UNLIMITED||A<B);},getNextPage:function(){return this.hasNextPage()?this.getCurrentPage()+1:null;},hasPreviousPage:function(){return(this.getCurrentPage()>1);},getPreviousPage:function(){return(this.hasPreviousPage()?this.getCurrentPage()-1:1);},getPageRecords:function(D){if(!YAHOO.lang.isNumber(D)){D=this.getCurrentPage();}var C=this.get("rowsPerPage"),B=this.get("totalRecords"),E,A;if(!D||!C){return null;}E=(D-1)*C;if(B!==YAHOO.widget.Paginator.VALUE_UNLIMITED){if(E>=B){return null;}A=Math.min(E+C,B)-1;}else{A=E+C-1;}return[E,A];},setPage:function(B,A){if(this.hasPage(B)&&B!==this.getCurrentPage()){if(this.get("updateOnChange")||A){this.set("recordOffs!
 et",(B-1)*this.get("rowsPerPage"));}else{this.fireEvent("changeRequest",this.getState({"page":B}));}}},getRowsPerPage:function(){return this.get("rowsPerPage");},setRowsPerPage:function(B,A){if(YAHOO.lang.isNumber(B)&&B>0&&B!==this.get("rowsPerPage")){if(this.get("updateOnChange")||A){this.set("rowsPerPage",B);}else{this.fireEvent("changeRequest",this.getState({"rowsPerPage":B}));}}},getTotalRecords:function(){return this.get("totalRecords");},setTotalRecords:function(B,A){if(YAHOO.lang.isNumber(B)&&B>=0&&B!==this.get("totalRecords")){if(this.get("updateOnChange")||A){this.set("totalRecords",B);}else{this.fireEvent("changeRequest",this.getState({"totalRecords":B}));}}},getStartIndex:function(){return this.get("recordOffset");},setStartIndex:function(B,A){if(YAHOO.lang.isNumber(B)&&B>=0&&B!==this.get("recordOffset")){if(this.get("updateOnChange")||A){this.set("recordOffset",B);}else{this.fireEvent("changeRequest",this.getState({"recordOffset":B}));}}},getState:function(J){va!
 r L=YAHOO.widget.Paginator.VALUE_UNLIMITED,D=YAHOO.lang,H=Math!
 ,F=H.min
,I=H.max,G=H.floor,K=H.ceil,C,A,E;function B(O,M,N){if(O<=0||M===0){return 0;}if(M===L||M>O){return O-(O%N);}return M-(M%N||N);}C={paginator:this,totalRecords:this.get("totalRecords"),rowsPerPage:this.get("rowsPerPage"),records:this.getPageRecords()};C.recordOffset=B(this.get("recordOffset"),C.totalRecords,C.rowsPerPage);C.page=K(C.recordOffset/C.rowsPerPage)+1;if(!J){return C;}A={paginator:this,before:C,rowsPerPage:J.rowsPerPage||C.rowsPerPage,totalRecords:(D.isNumber(J.totalRecords)?I(J.totalRecords,L):C.totalRecords)};if(A.totalRecords===0){A.recordOffset=A.page=0;}else{E=D.isNumber(J.page)?(J.page-1)*A.rowsPerPage:D.isNumber(J.recordOffset)?J.recordOffset:C.recordOffset;A.recordOffset=B(E,A.totalRecords,A.rowsPerPage);A.page=K(A.recordOffset/A.rowsPerPage)+1;}A.records=[A.recordOffset,A.recordOffset+A.rowsPerPage-1];if(A.totalRecords!==L&&A.recordOffset<A.totalRecords&&A.records&&A.records[1]>A.totalRecords-1){A.records[1]=A.totalRecords-1;}return A;},setState:function(B!
 ){if(YAHOO.lang.isObject(B)){this._state=this.getState({});B={page:B.page,rowsPerPage:B.rowsPerPage,totalRecords:B.totalRecords,recordOffset:B.recordOffset};if(B.page&&B.recordOffset===undefined){B.recordOffset=(B.page-1)*(B.rowsPerPage||this.get("rowsPerPage"));}this._batch=true;this._pageChanged=false;for(var A in B){if(B.hasOwnProperty(A)){this.set(A,B[A]);}}this._batch=false;if(this._pageChanged){this._pageChanged=false;this._firePageChange(this.getState(this._state));}}}};YAHOO.lang.augmentProto(YAHOO.widget.Paginator,YAHOO.util.AttributeProvider);(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.CurrentPageReport=function(C){this.paginator=C;C.createEvent("pageReportClassChange");C.createEvent("pageReportTemplateChange");C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("pageReportTemplateChange",this.update,this,true);C.subscribe("!
 destroy",this.destroy,this,true);C.subscribe("pageReportClassC!
 hange",t
his.update,this,true);};B.ui.CurrentPageReport.init=function(C){C.setAttributeConfig("pageReportClass",{value:"yui-pg-current",validator:A.isString});C.setAttributeConfig("pageReportTemplate",{value:"({currentPage} of {totalPages})",validator:A.isString});C.setAttributeConfig("pageReportValueGenerator",{value:function(F){var E=F.getCurrentPage(),D=F.getPageRecords();return{"currentPage":D?E:0,"totalPages":F.getTotalPages(),"startIndex":D?D[0]:0,"endIndex":D?D[1]:0,"startRecord":D?D[0]+1:0,"endRecord":D?D[1]+1:0,"totalRecords":F.get("totalRecords")};},validator:A.isFunction});};B.ui.CurrentPageReport.sprintf=function(D,C){return D.replace(/\{([\w\s\-]+)\}/g,function(E,F){return(F in C)?C[F]:"";});};B.ui.CurrentPageReport.prototype={span:null,render:function(C){this.span=document.createElement("span");this.span.id=C+"-page-report";this.span.className=this.paginator.get("pageReportClass");this.update();return this.span;},update:function(C){if(C&&C.prevValue===C.newValue){return!
  ;}this.span.innerHTML=B.ui.CurrentPageReport.sprintf(this.paginator.get("pageReportTemplate"),this.paginator.get("pageReportValueGenerator")(this.paginator));},destroy:function(){this.span.parentNode.removeChild(this.span);this.span=null;}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.PageLinks=function(C){this.paginator=C;C.createEvent("pageLinkClassChange");C.createEvent("currentPageClassChange");C.createEvent("pageLinksContainerClassChange");C.createEvent("pageLinksChange");C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("pageLinksChange",this.rebuild,this,true);C.subscribe("pageLinkClassChange",this.rebuild,this,true);C.subscribe("currentPageClassChange",this.rebuild,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("pageLinksContainerClassChange",this.rebuild,this,true);
-};B.ui.PageLinks.init=function(C){C.setAttributeConfig("pageLinkClass",{value:"yui-pg-page",validator:A.isString});C.setAttributeConfig("currentPageClass",{value:"yui-pg-current-page",validator:A.isString});C.setAttributeConfig("pageLinksContainerClass",{value:"yui-pg-pages",validator:A.isString});C.setAttributeConfig("pageLinks",{value:10,validator:A.isNumber});C.setAttributeConfig("pageLabelBuilder",{value:function(D,E){return D;},validator:A.isFunction});};B.ui.PageLinks.calculateRange=function(E,F,D){var I=B.VALUE_UNLIMITED,H,C,G;if(!E||D===0||F===0||(F===I&&D===I)){return[0,-1];}if(F!==I){D=D===I?F:Math.min(D,F);}H=Math.max(1,Math.ceil(E-(D/2)));if(F===I){C=H+D-1;}else{C=Math.min(F,H+D-1);}G=D-(C-H+1);H=Math.max(1,H-G);return[H,C];};B.ui.PageLinks.prototype={current:0,container:null,render:function(C){var D=this.paginator;this.container=document.createElement("span");this.container.id=C+"-pages";this.container.className=D.get("pageLinksContainerClass");YAHOO.util.Event!
 .on(this.container,"click",this.onClick,this,true);this.update({newValue:null,rebuild:true});return this.container;},update:function(J){if(J&&J.prevValue===J.newValue){return ;}var E=this.paginator,I=E.getCurrentPage();if(this.current!==I||!I||J.rebuild){var L=E.get("pageLabelBuilder"),H=B.ui.PageLinks.calculateRange(I,E.getTotalPages(),E.get("pageLinks")),D=H[0],F=H[1],K="",C,G;C='<a href="#" class="'+E.get("pageLinkClass")+'" page="';for(G=D;G<=F;++G){if(G===I){K+='<span class="'+E.get("currentPageClass")+" "+E.get("pageLinkClass")+'">'+L(G,E)+"</span>";}else{K+=C+G+'">'+L(G,E)+"</a>";}}this.container.innerHTML=K;}},rebuild:function(C){C.rebuild=true;this.update(C);},destroy:function(){YAHOO.util.Event.purgeElement(this.container,true);this.container.parentNode.removeChild(this.container);this.container=null;},onClick:function(D){var C=YAHOO.util.Event.getTarget(D);if(C&&YAHOO.util.Dom.hasClass(C,this.paginator.get("pageLinkClass"))){YAHOO.util.Event.stopEvent(D);this.pag!
 inator.setPage(parseInt(C.getAttribute("page"),10));}}};})();(!
 function
(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.FirstPageLink=function(C){this.paginator=C;C.createEvent("firstPageLinkLabelChange");C.createEvent("firstPageLinkClassChange");C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("firstPageLinkLabelChange",this.update,this,true);C.subscribe("firstPageLinkClassChange",this.update,this,true);};B.ui.FirstPageLink.init=function(C){C.setAttributeConfig("firstPageLinkLabel",{value:"<< first",validator:A.isString});C.setAttributeConfig("firstPageLinkClass",{value:"yui-pg-first",validator:A.isString});};B.ui.FirstPageLink.prototype={current:null,link:null,span:null,render:function(D){var E=this.paginator,F=E.get("firstPageLinkClass"),C=E.get("firstPageLinkLabel");this.link=document.createElement("a");this.span=document.createElement("span");this.link.id!
 =D+"-first-link";this.link.href="#";this.link.className=F;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-first-span";this.span.className=F;this.span.innerHTML=C;this.current=E.get("recordOffset")<1?this.span:this.link;return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return ;}var C=this.current?this.current.parentNode:null;if(this.paginator.get("recordOffset")<1){if(C&&this.current===this.link){C.replaceChild(this.span,this.current);this.current=this.span;}}else{if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(1);}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.LastPageLink=function(C){this.paginator=C;C.createEvent("lastPageL!
 inkLabelChange");C.createEvent("lastPageLinkClassChange");C.su!
 bscribe(
"recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("lastPageLinkLabelChange",this.update,this,true);C.subscribe("lastPageLinkClassChange",this.update,this,true);};B.ui.LastPageLink.init=function(C){C.setAttributeConfig("lastPageLinkLabel",{value:"last >>",validator:A.isString});C.setAttributeConfig("lastPageLinkClass",{value:"yui-pg-last",validator:A.isString});};B.ui.LastPageLink.prototype={current:null,link:null,span:null,na:null,render:function(D){var F=this.paginator,G=F.get("lastPageLinkClass"),C=F.get("lastPageLinkLabel"),E=F.getTotalPages();this.link=document.createElement("a");this.span=document.createElement("span");this.na=this.span.cloneNode(false);this.link.id=D+"-last-link";this.link.href="#";this.link.className=G;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,t!
 rue);this.span.id=D+"-last-span";this.span.className=G;this.span.innerHTML=C;this.na.id=D+"-last-na";switch(E){case B.VALUE_UNLIMITED:this.current=this.na;break;case F.getCurrentPage():this.current=this.span;break;default:this.current=this.link;}return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return ;}var C=this.current?this.current.parentNode:null,E=this.link;if(C){switch(this.paginator.getTotalPages()){case B.VALUE_UNLIMITED:E=this.na;break;case this.paginator.getCurrentPage():E=this.span;break;}if(this.current!==E){C.replaceChild(E,this.current);this.current=E;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(this.paginator.getTotalPages());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.NextPageLink=function(C){this.paginator=C;
-C.createEvent("nextPageLinkLabelChange");C.createEvent("nextPageLinkClassChange");C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("nextPageLinkLabelChange",this.update,this,true);C.subscribe("nextPageLinkClassChange",this.update,this,true);};B.ui.NextPageLink.init=function(C){C.setAttributeConfig("nextPageLinkLabel",{value:"next >",validator:A.isString});C.setAttributeConfig("nextPageLinkClass",{value:"yui-pg-next",validator:A.isString});};B.ui.NextPageLink.prototype={current:null,link:null,span:null,render:function(D){var F=this.paginator,G=F.get("nextPageLinkClass"),C=F.get("nextPageLinkLabel"),E=F.getTotalPages();this.link=document.createElement("a");this.span=document.createElement("span");this.link.id=D+"-next-link";this.link.href="#";this.link.className=G;this.link.innerHTML=C;YAHOO.uti!
 l.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-next-span";this.span.className=G;this.span.innerHTML=C;this.current=F.getCurrentPage()===E?this.span:this.link;return this.current;},update:function(E){if(E&&E.prevValue===E.newValue){return ;}var D=this.paginator.getTotalPages(),C=this.current?this.current.parentNode:null;if(this.paginator.getCurrentPage()!==D){if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}else{if(this.current===this.link){if(C){C.replaceChild(this.span,this.current);this.current=this.span;}}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(this.paginator.getNextPage());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.PreviousPageLink=function(C){this.paginator=C;C.createEvent("previousPageLinkLabelChange");C.c!
 reateEvent("previousPageLinkClassChange");C.subscribe("recordO!
 ffsetCha
nge",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("previousPageLinkLabelChange",this.update,this,true);C.subscribe("previousPageLinkClassChange",this.update,this,true);};B.ui.PreviousPageLink.init=function(C){C.setAttributeConfig("previousPageLinkLabel",{value:"< prev",validator:A.isString});C.setAttributeConfig("previousPageLinkClass",{value:"yui-pg-previous",validator:A.isString});};B.ui.PreviousPageLink.prototype={current:null,link:null,span:null,render:function(D){var E=this.paginator,F=E.get("previousPageLinkClass"),C=E.get("previousPageLinkLabel");this.link=document.createElement("a");this.span=document.createElement("span");this.link.id=D+"-prev-link";this.link.href="#";this.link.className=F;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-prev-span";this.span.clas!
 sName=F;this.span.innerHTML=C;this.current=E.get("recordOffset")<1?this.span:this.link;return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return ;}var C=this.current?this.current.parentNode:null;if(this.paginator.get("recordOffset")<1){if(C&&this.current===this.link){C.replaceChild(this.span,this.current);this.current=this.span;}}else{if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(this.paginator.getPreviousPage());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.RowsPerPageDropdown=function(C){this.paginator=C;C.createEvent("rowsPerPageOptionsChange");C.createEvent("rowsPerPageDropdownClassChange");C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("rowsPerPageOp!
 tionsChange",this.rebuild,this,true);C.subscribe("destroy",thi!
 s.destro
y,this,true);C.subscribe("rowsPerPageDropdownClassChange",this.rebuild,this,true);};B.ui.RowsPerPageDropdown.init=function(C){C.setAttributeConfig("rowsPerPageOptions",{value:[],validator:A.isArray});C.setAttributeConfig("rowsPerPageDropdownClass",{value:"yui-pg-rpp-options",validator:A.isString});};B.ui.RowsPerPageDropdown.prototype={select:null,render:function(C){this.select=document.createElement("select");this.select.id=C+"-rpp";this.select.className=this.paginator.get("rowsPerPageDropdownClass");this.select.title="Rows per page";YAHOO.util.Event.on(this.select,"change",this.onChange,this,true);this.rebuild();return this.select;},update:function(G){if(G&&G.prevValue===G.newValue){return ;}var F=this.paginator.get("rowsPerPage"),D=this.select.options,E,C;for(E=0,C=D.length;E<C;++E){if(parseInt(D[E].value,10)===F){D[E].selected=true;}}},rebuild:function(J){var E=this.paginator,F=this.select,K=E.get("rowsPerPageOptions"),C=document.createElement("option"),H,I;while(F.firstC!
 hild){F.removeChild(F.firstChild);}for(H=0,I=K.length;H<I;++H){var G=C.cloneNode(false),D=K[H];G.value=A.isValue(D.value)?D.value:D;G.innerHTML=A.isValue(D.text)?D.text:D;F.appendChild(G);}this.update();},destroy:function(){YAHOO.util.Event.purgeElement(this.select);this.select.parentNode.removeChild(this.select);this.select=null;},onChange:function(C){this.paginator.setRowsPerPage(parseInt(this.select.options[this.select.selectedIndex].value,10));}};})();YAHOO.register("paginator",YAHOO.widget.Paginator,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){function A(E){var I=A.VALUE_UNLIMITED,H=YAHOO.lang,F,B,C,D,G;E=H.isObject(E)?E:{};this.initConfig();this.initEvents();this.set("rowsPerPage",E.rowsPerPage,true);if(A.isNumeric(E.totalRecords)){this.set("totalRecords",E.totalRecords,true);}this.initUIComponents();for(F in E){if(H.hasOwnProperty(E,F)){this.set(F,E[F],true);}}B=this.get("initialPage");C=this.get("totalRecords");D=this.get("rowsPerPage");if(B>1&&D!==I){G=(B-1)*D;if(C===I||G<C){this.set("recordOffset",G,true);}}}YAHOO.lang.augmentObject(A,{id:0,ID_BASE:"yui-pg",VALUE_UNLIMITED:-1,TEMPLATE_DEFAULT:"{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}",TEMPLATE_ROWS_PER_PAGE:"{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}",ui:{},isNumeric:function(B){return isFinite(+B);},toNumber:function(B){return isFinite(+B)?+B:null;}},true);A.prototype={_containers:[],_batch:false,_pageChanged:false,_state:null,initConfig:function(){var C=!
 A.VALUE_UNLIMITED,B=YAHOO.lang;this.setAttributeConfig("rowsPerPage",{value:0,validator:A.isNumeric,setter:A.toNumber});this.setAttributeConfig("containers",{value:null,validator:function(F){if(!B.isArray(F)){F=[F];}for(var E=0,D=F.length;E<D;++E){if(B.isString(F[E])||(B.isObject(F[E])&&F[E].nodeType===1)){continue;}return false;}return true;},method:function(D){D=YAHOO.util.Dom.get(D);if(!B.isArray(D)){D=[D];}this._containers=D;}});this.setAttributeConfig("totalRecords",{value:0,validator:A.isNumeric,setter:A.toNumber});this.setAttributeConfig("recordOffset",{value:0,validator:function(E){var D=this.get("totalRecords");if(A.isNumeric(E)){E=+E;return D===C||D>E||(D===0&&E===0);}return false;},setter:A.toNumber});this.setAttributeConfig("initialPage",{value:1,validator:A.isNumeric,setter:A.toNumber});this.setAttributeConfig("template",{value:A.TEMPLATE_DEFAULT,validator:B.isString});this.setAttributeConfig("containerClass",{value:"yui-pg-container",validator:B.isString});thi!
 s.setAttributeConfig("alwaysVisible",{value:true,validator:B.i!
 sBoolean
});this.setAttributeConfig("updateOnChange",{value:false,validator:B.isBoolean});this.setAttributeConfig("id",{value:A.id++,readOnly:true});this.setAttributeConfig("rendered",{value:false,readOnly:true});},initUIComponents:function(){var D=A.ui,C,B;for(C in D){if(YAHOO.lang.hasOwnProperty(D,C)){B=D[C];if(YAHOO.lang.isObject(B)&&YAHOO.lang.isFunction(B.init)){B.init(this);}}}},initEvents:function(){this.createEvent("render");this.createEvent("rendered");this.createEvent("changeRequest");this.createEvent("pageChange");this.createEvent("beforeDestroy");this.createEvent("destroy");this._selfSubscribe();},_selfSubscribe:function(){this.subscribe("totalRecordsChange",this.updateVisibility,this,true);this.subscribe("alwaysVisibleChange",this.updateVisibility,this,true);this.subscribe("totalRecordsChange",this._handleStateChange,this,true);this.subscribe("recordOffsetChange",this._handleStateChange,this,true);this.subscribe("rowsPerPageChange",this._handleStateChange,this,true);this!
 .subscribe("totalRecordsChange",this._syncRecordOffset,this,true);},_syncRecordOffset:function(E){var B=E.newValue,D,C;if(E.prevValue!==B){if(B!==A.VALUE_UNLIMITED){D=this.get("rowsPerPage");if(D&&this.get("recordOffset")>=B){C=this.getState({totalRecords:E.prevValue,recordOffset:this.get("recordOffset")});this.set("recordOffset",C.before.recordOffset);this._firePageChange(C);}}}},_handleStateChange:function(C){if(C.prevValue!==C.newValue){var D=this._state||{},B;D[C.type.replace(/Change$/,"")]=C.prevValue;B=this.getState(D);if(B.page!==B.before.page){if(this._batch){this._pageChanged=true;}else{this._firePageChange(B);}}}},_firePageChange:function(B){if(YAHOO.lang.isObject(B)){var C=B.before;delete B.before;this.fireEvent("pageChange",{type:"pageChange",prevValue:B.page,newValue:C.page,prevState:B,newState:C});}},render:function(){if(this.get("rendered")){return;}var N=this.get("totalRecords"),G=YAHOO.util.Dom,O=this.get("template"),Q=this.get("containerClass"),I,K,M,H,F,E!
 ,P,D,C,B,L,J;if(N!==A.VALUE_UNLIMITED&&N<this.get("rowsPerPage!
 ")&&!thi
s.get("alwaysVisible")){return;}O=O.replace(/\{([a-z0-9_ \-]+)\}/gi,'<span class="yui-pg-ui $1"></span>');for(I=0,K=this._containers.length;I<K;++I){M=this._containers[I];H=A.ID_BASE+this.get("id")+"-"+I;if(!M){continue;}M.style.display="none";G.addClass(M,Q);M.innerHTML=O;F=G.getElementsByClassName("yui-pg-ui","span",M);for(E=0,P=F.length;E<P;++E){D=F[E];C=D.parentNode;B=D.className.replace(/\s*yui-pg-ui\s+/g,"");L=A.ui[B];if(YAHOO.lang.isFunction(L)){J=new L(this);if(YAHOO.lang.isFunction(J.render)){C.replaceChild(J.render(H),D);}}}M.style.display="";}if(this._containers.length){this.setAttributeConfig("rendered",{value:true});this.fireEvent("render",this.getState());this.fireEvent("rendered",this.getState());}},destroy:function(){this.fireEvent("beforeDestroy");this.fireEvent("destroy");this.setAttributeConfig("rendered",{value:false});},updateVisibility:function(G){var C=this.get("alwaysVisible"),I,H,E,F,D,B;if(G.type==="alwaysVisibleChange"||!C){I=this.get("totalRecords!
 ");H=true;E=this.get("rowsPerPage");F=this.get("rowsPerPageOptions");if(YAHOO.lang.isArray(F)){for(D=0,B=F.length;D<B;++D){E=Math.min(E,F[D]);}}if(I!==A.VALUE_UNLIMITED&&I<=E){H=false;}H=H||C;for(D=0,B=this._containers.length;D<B;++D){YAHOO.util.Dom.setStyle(this._containers[D],"display",H?"":"none");}}},getContainerNodes:function(){return this._containers;},getTotalPages:function(){var B=this.get("totalRecords"),C=this.get("rowsPerPage");if(!C){return null;}if(B===A.VALUE_UNLIMITED){return A.VALUE_UNLIMITED;}return Math.ceil(B/C);},hasPage:function(C){if(!YAHOO.lang.isNumber(C)||C<1){return false;}var B=this.getTotalPages();return(B===A.VALUE_UNLIMITED||B>=C);},getCurrentPage:function(){var B=this.get("rowsPerPage");if(!B||!this.get("totalRecords")){return 0;}return Math.floor(this.get("recordOffset")/B)+1;},hasNextPage:function(){var B=this.getCurrentPage(),C=this.getTotalPages();return B&&(C===A.VALUE_UNLIMITED||B<C);
+},getNextPage:function(){return this.hasNextPage()?this.getCurrentPage()+1:null;},hasPreviousPage:function(){return(this.getCurrentPage()>1);},getPreviousPage:function(){return(this.hasPreviousPage()?this.getCurrentPage()-1:1);},getPageRecords:function(E){if(!YAHOO.lang.isNumber(E)){E=this.getCurrentPage();}var D=this.get("rowsPerPage"),C=this.get("totalRecords"),F,B;if(!E||!D){return null;}F=(E-1)*D;if(C!==A.VALUE_UNLIMITED){if(F>=C){return null;}B=Math.min(F+D,C)-1;}else{B=F+D-1;}return[F,B];},setPage:function(C,B){if(this.hasPage(C)&&C!==this.getCurrentPage()){if(this.get("updateOnChange")||B){this.set("recordOffset",(C-1)*this.get("rowsPerPage"));}else{this.fireEvent("changeRequest",this.getState({"page":C}));}}},getRowsPerPage:function(){return this.get("rowsPerPage");},setRowsPerPage:function(C,B){if(A.isNumeric(C)&&+C>0&&+C!==this.get("rowsPerPage")){if(this.get("updateOnChange")||B){this.set("rowsPerPage",C);}else{this.fireEvent("changeRequest",this.getState({"rowsP!
 erPage":+C}));}}},getTotalRecords:function(){return this.get("totalRecords");},setTotalRecords:function(C,B){if(A.isNumeric(C)&&+C>=0&&+C!==this.get("totalRecords")){if(this.get("updateOnChange")||B){this.set("totalRecords",C);}else{this.fireEvent("changeRequest",this.getState({"totalRecords":+C}));}}},getStartIndex:function(){return this.get("recordOffset");},setStartIndex:function(C,B){if(A.isNumeric(C)&&+C>=0&&+C!==this.get("recordOffset")){if(this.get("updateOnChange")||B){this.set("recordOffset",C);}else{this.fireEvent("changeRequest",this.getState({"recordOffset":+C}));}}},getState:function(H){var J=A.VALUE_UNLIMITED,F=Math,G=F.max,I=F.ceil,D,B,E;function C(M,K,L){if(M<=0||K===0){return 0;}if(K===J||K>M){return M-(M%L);}return K-(K%L||L);}D={paginator:this,totalRecords:this.get("totalRecords"),rowsPerPage:this.get("rowsPerPage"),records:this.getPageRecords()};D.recordOffset=C(this.get("recordOffset"),D.totalRecords,D.rowsPerPage);D.page=I(D.recordOffset/D.rowsPerPage)!
 +1;if(!H){return D;}B={paginator:this,before:D,rowsPerPage:H.r!
 owsPerPa
ge||D.rowsPerPage,totalRecords:(A.isNumeric(H.totalRecords)?G(H.totalRecords,J):+D.totalRecords)};if(B.totalRecords===0){B.recordOffset=B.page=0;}else{E=A.isNumeric(H.page)?(H.page-1)*B.rowsPerPage:A.isNumeric(H.recordOffset)?+H.recordOffset:D.recordOffset;B.recordOffset=C(E,B.totalRecords,B.rowsPerPage);B.page=I(B.recordOffset/B.rowsPerPage)+1;}B.records=[B.recordOffset,B.recordOffset+B.rowsPerPage-1];if(B.totalRecords!==J&&B.recordOffset<B.totalRecords&&B.records&&B.records[1]>B.totalRecords-1){B.records[1]=B.totalRecords-1;}return B;},setState:function(C){if(YAHOO.lang.isObject(C)){this._state=this.getState({});C={page:C.page,rowsPerPage:C.rowsPerPage,totalRecords:C.totalRecords,recordOffset:C.recordOffset};if(C.page&&C.recordOffset===undefined){C.recordOffset=(C.page-1)*(C.rowsPerPage||this.get("rowsPerPage"));}this._batch=true;this._pageChanged=false;for(var B in C){if(C.hasOwnProperty(B)){this.set(B,C[B]);}}this._batch=false;if(this._pageChanged){this._pageChanged=fals!
 e;this._firePageChange(this.getState(this._state));}}}};YAHOO.lang.augmentProto(A,YAHOO.util.AttributeProvider);YAHOO.widget.Paginator=A;})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.CurrentPageReport=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("pageReportTemplateChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("pageReportClassChange",this.update,this,true);};B.ui.CurrentPageReport.init=function(C){C.setAttributeConfig("pageReportClass",{value:"yui-pg-current",validator:A.isString});C.setAttributeConfig("pageReportTemplate",{value:"({currentPage} of {totalPages})",validator:A.isString});C.setAttributeConfig("pageReportValueGenerator",{value:function(F){var E=F.getCurrentPage(),D=F.getPageRecords();return{"currentPage":D?E:0,"totalPages":F.getTotalPages(),"!
 startIndex":D?D[0]:0,"endIndex":D?D[1]:0,"startRecord":D?D[0]+!
 1:0,"end
Record":D?D[1]+1:0,"totalRecords":F.get("totalRecords")};},validator:A.isFunction});};B.ui.CurrentPageReport.sprintf=function(D,C){return D.replace(/\{([\w\s\-]+)\}/g,function(E,F){return(F in C)?C[F]:"";});};B.ui.CurrentPageReport.prototype={span:null,render:function(C){this.span=document.createElement("span");this.span.id=C+"-page-report";this.span.className=this.paginator.get("pageReportClass");this.update();return this.span;},update:function(C){if(C&&C.prevValue===C.newValue){return;}this.span.innerHTML=B.ui.CurrentPageReport.sprintf(this.paginator.get("pageReportTemplate"),this.paginator.get("pageReportValueGenerator")(this.paginator));},destroy:function(){this.span.parentNode.removeChild(this.span);this.span=null;}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.PageLinks=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.updat!
 e,this,true);C.subscribe("pageLinksChange",this.rebuild,this,true);C.subscribe("pageLinkClassChange",this.rebuild,this,true);C.subscribe("currentPageClassChange",this.rebuild,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("pageLinksContainerClassChange",this.rebuild,this,true);};B.ui.PageLinks.init=function(C){C.setAttributeConfig("pageLinkClass",{value:"yui-pg-page",validator:A.isString});C.setAttributeConfig("currentPageClass",{value:"yui-pg-current-page",validator:A.isString});C.setAttributeConfig("pageLinksContainerClass",{value:"yui-pg-pages",validator:A.isString});C.setAttributeConfig("pageLinks",{value:10,validator:B.isNumeric});C.setAttributeConfig("pageLabelBuilder",{value:function(D,E){return D;},validator:A.isFunction});};B.ui.PageLinks.calculateRange=function(E,F,D){var I=B.VALUE_UNLIMITED,H,C,G;if(!E||D===0||F===0||(F===I&&D===I)){return[0,-1];}if(F!==I){D=D===I?F:Math.min(D,F);
+}H=Math.max(1,Math.ceil(E-(D/2)));if(F===I){C=H+D-1;}else{C=Math.min(F,H+D-1);}G=D-(C-H+1);H=Math.max(1,H-G);return[H,C];};B.ui.PageLinks.prototype={current:0,container:null,render:function(C){var D=this.paginator;this.container=document.createElement("span");this.container.id=C+"-pages";this.container.className=D.get("pageLinksContainerClass");YAHOO.util.Event.on(this.container,"click",this.onClick,this,true);this.update({newValue:null,rebuild:true});return this.container;},update:function(J){if(J&&J.prevValue===J.newValue){return;}var E=this.paginator,I=E.getCurrentPage();if(this.current!==I||!I||J.rebuild){var L=E.get("pageLabelBuilder"),H=B.ui.PageLinks.calculateRange(I,E.getTotalPages(),E.get("pageLinks")),D=H[0],F=H[1],K="",C,G;C='<a href="#" class="'+E.get("pageLinkClass")+'" page="';for(G=D;G<=F;++G){if(G===I){K+='<span class="'+E.get("currentPageClass")+" "+E.get("pageLinkClass")+'">'+L(G,E)+"</span>";}else{K+=C+G+'">'+L(G,E)+"</a>";}}this.container.innerHTML=K;}},!
 rebuild:function(C){C.rebuild=true;this.update(C);},destroy:function(){YAHOO.util.Event.purgeElement(this.container,true);this.container.parentNode.removeChild(this.container);this.container=null;},onClick:function(D){var C=YAHOO.util.Event.getTarget(D);if(C&&YAHOO.util.Dom.hasClass(C,this.paginator.get("pageLinkClass"))){YAHOO.util.Event.stopEvent(D);this.paginator.setPage(parseInt(C.getAttribute("page"),10));}}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.FirstPageLink=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("firstPageLinkLabelChange",this.update,this,true);C.subscribe("firstPageLinkClassChange",this.update,this,true);};B.ui.FirstPageLink.init=function(C){C.setAttributeConfig("firstPageLinkLabel",{value:"<< first",validator:A.isStr!
 ing});C.setAttributeConfig("firstPageLinkClass",{value:"yui-pg!
 -first",
validator:A.isString});};B.ui.FirstPageLink.prototype={current:null,link:null,span:null,render:function(D){var E=this.paginator,F=E.get("firstPageLinkClass"),C=E.get("firstPageLinkLabel");this.link=document.createElement("a");this.span=document.createElement("span");this.link.id=D+"-first-link";this.link.href="#";this.link.className=F;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-first-span";this.span.className=F;this.span.innerHTML=C;this.current=E.getCurrentPage()>1?this.link:this.span;return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return;}var C=this.current?this.current.parentNode:null;if(this.paginator.getCurrentPage()>1){if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}else{if(C&&this.current===this.link){C.replaceChild(this.span,this.current);this.current=this.span;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.pa!
 rentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(1);}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.LastPageLink=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("lastPageLinkLabelChange",this.update,this,true);C.subscribe("lastPageLinkClassChange",this.update,this,true);};B.ui.LastPageLink.init=function(C){C.setAttributeConfig("lastPageLinkLabel",{value:"last >>",validator:A.isString});C.setAttributeConfig("lastPageLinkClass",{value:"yui-pg-last",validator:A.isString});};B.ui.LastPageLink.prototype={current:null,link:null,span:null,na:null,render:function(D){var F=this.paginator,G=F.get("lastPageLinkClass"),C=F.get("lastPageLinkLabel"),E=F.getTotalPages();th!
 is.link=document.createElement("a");this.span=document.createE!
 lement("
span");this.na=this.span.cloneNode(false);this.link.id=D+"-last-link";this.link.href="#";this.link.className=G;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-last-span";this.span.className=G;this.span.innerHTML=C;this.na.id=D+"-last-na";switch(E){case B.VALUE_UNLIMITED:this.current=this.na;break;case F.getCurrentPage():this.current=this.span;break;default:this.current=this.link;}return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return;}var C=this.current?this.current.parentNode:null,E=this.link;if(C){switch(this.paginator.getTotalPages()){case B.VALUE_UNLIMITED:E=this.na;break;case this.paginator.getCurrentPage():E=this.span;break;}if(this.current!==E){C.replaceChild(E,this.current);this.current=E;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator!
 .setPage(this.paginator.getTotalPages());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.NextPageLink=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("nextPageLinkLabelChange",this.update,this,true);C.subscribe("nextPageLinkClassChange",this.update,this,true);};B.ui.NextPageLink.init=function(C){C.setAttributeConfig("nextPageLinkLabel",{value:"next >",validator:A.isString});C.setAttributeConfig("nextPageLinkClass",{value:"yui-pg-next",validator:A.isString});};B.ui.NextPageLink.prototype={current:null,link:null,span:null,render:function(D){var F=this.paginator,G=F.get("nextPageLinkClass"),C=F.get("nextPageLinkLabel"),E=F.getTotalPages();this.link=document.createElement("a");this.span=document.createElement("span");
+this.link.id=D+"-next-link";this.link.href="#";this.link.className=G;this.link.innerHTML=C;YAHOO.util.Event.on(this.link,"click",this.onClick,this,true);this.span.id=D+"-next-span";this.span.className=G;this.span.innerHTML=C;this.current=F.getCurrentPage()===E?this.span:this.link;return this.current;},update:function(E){if(E&&E.prevValue===E.newValue){return;}var D=this.paginator.getTotalPages(),C=this.current?this.current.parentNode:null;if(this.paginator.getCurrentPage()!==D){if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}else{if(this.current===this.link){if(C){C.replaceChild(this.span,this.current);this.current=this.span;}}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(this.paginator.getNextPage());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;!
 B.ui.PreviousPageLink=function(C){this.paginator=C;C.subscribe("recordOffsetChange",this.update,this,true);C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("totalRecordsChange",this.update,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("previousPageLinkLabelChange",this.update,this,true);C.subscribe("previousPageLinkClassChange",this.update,this,true);};B.ui.PreviousPageLink.init=function(C){C.setAttributeConfig("previousPageLinkLabel",{value:"< prev",validator:A.isString});C.setAttributeConfig("previousPageLinkClass",{value:"yui-pg-previous",validator:A.isString});};B.ui.PreviousPageLink.prototype={current:null,link:null,span:null,render:function(D){var E=this.paginator,F=E.get("previousPageLinkClass"),C=E.get("previousPageLinkLabel");this.link=document.createElement("a");this.span=document.createElement("span");this.link.id=D+"-prev-link";this.link.href="#";this.link.className=F;this.link.innerHTML=C;YAHOO.util.Event.on(this!
 .link,"click",this.onClick,this,true);this.span.id=D+"-prev-sp!
 an";this
.span.className=F;this.span.innerHTML=C;this.current=E.getCurrentPage()>1?this.link:this.span;return this.current;},update:function(D){if(D&&D.prevValue===D.newValue){return;}var C=this.current?this.current.parentNode:null;if(this.paginator.getCurrentPage()>1){if(C&&this.current===this.span){C.replaceChild(this.link,this.current);this.current=this.link;}}else{if(C&&this.current===this.link){C.replaceChild(this.span,this.current);this.current=this.span;}}},destroy:function(){YAHOO.util.Event.purgeElement(this.link);this.current.parentNode.removeChild(this.current);this.link=this.span=null;},onClick:function(C){YAHOO.util.Event.stopEvent(C);this.paginator.setPage(this.paginator.getPreviousPage());}};})();(function(){var B=YAHOO.widget.Paginator,A=YAHOO.lang;B.ui.RowsPerPageDropdown=function(C){this.paginator=C;C.subscribe("rowsPerPageChange",this.update,this,true);C.subscribe("rowsPerPageOptionsChange",this.rebuild,this,true);C.subscribe("totalRecordsChange",this._handleTotalR!
 ecordsChange,this,true);C.subscribe("destroy",this.destroy,this,true);C.subscribe("rowsPerPageDropdownClassChange",this.rebuild,this,true);};B.ui.RowsPerPageDropdown.init=function(C){C.setAttributeConfig("rowsPerPageOptions",{value:[],validator:A.isArray});C.setAttributeConfig("rowsPerPageDropdownClass",{value:"yui-pg-rpp-options",validator:A.isString});};B.ui.RowsPerPageDropdown.prototype={select:null,all:null,render:function(C){this.select=document.createElement("select");this.select.id=C+"-rpp";this.select.className=this.paginator.get("rowsPerPageDropdownClass");this.select.title="Rows per page";YAHOO.util.Event.on(this.select,"change",this.onChange,this,true);this.rebuild();return this.select;},rebuild:function(J){var C=this.paginator,E=this.select,K=C.get("rowsPerPageOptions"),D,I,F,G,H;this.all=null;for(G=0,H=K.length;G<H;++G){I=K[G];D=E.options[G]||E.appendChild(document.createElement("option"));F=A.isValue(I.value)?I.value:I;D.innerHTML=A.isValue(I.text)?I.text:I;if!
 (A.isString(F)&&F.toLowerCase()==="all"){this.all=D;D.value=C.!
 get("tot
alRecords");}else{D.value=F;}}while(E.options.length>K.length){E.removeChild(E.firstChild);}this.update();},update:function(G){if(G&&G.prevValue===G.newValue){return;}var F=this.paginator.get("rowsPerPage")+"",D=this.select.options,E,C;for(E=0,C=D.length;E<C;++E){if(D[E].value===F){D[E].selected=true;break;}}},onChange:function(C){this.paginator.setRowsPerPage(parseInt(this.select.options[this.select.selectedIndex].value,10));},_handleTotalRecordsChange:function(C){if(!this.all||(C&&C.prevValue===C.newValue)){return;}this.all.value=C.newValue;if(this.all.selected){this.paginator.set("rowsPerPage",C.newValue);}},destroy:function(){YAHOO.util.Event.purgeElement(this.select);this.select.parentNode.removeChild(this.select);this.select=null;}};})();YAHOO.register("paginator",YAHOO.widget.Paginator,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/paginator/paginator.js
===================================================================
--- trunk/root/static/yui/paginator/paginator.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/paginator/paginator.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
+(function () {
 /**
  * The Paginator widget provides a set of controls to navigate through paged
  * data.
@@ -28,10 +29,10 @@
  * @param config {Object} Object literal to set instance and ui component
  * configuration.
  */
-YAHOO.widget.Paginator = function (config) {
-    var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
+function Paginator(config) {
+    var UNLIMITED = Paginator.VALUE_UNLIMITED,
         lang      = YAHOO.lang,
-        attrib, initialPage, records, perPage;
+        attrib, initialPage, records, perPage, startIndex;
 
     config = lang.isObject(config) ? config : {};
 
@@ -41,7 +42,7 @@
 
     // Set the basic config keys first
     this.set('rowsPerPage',config.rowsPerPage,true);
-    if (lang.isNumber(config.totalRecords)) {
+    if (Paginator.isNumeric(config.totalRecords)) {
         this.set('totalRecords',config.totalRecords,true);
     }
     
@@ -59,16 +60,16 @@
     records     = this.get('totalRecords');
     perPage     = this.get('rowsPerPage');
     if (initialPage > 1 && perPage !== UNLIMITED) {
-        var startIndex = (initialPage - 1) * perPage;
+        startIndex = (initialPage - 1) * perPage;
         if (records === UNLIMITED || startIndex < records) {
             this.set('recordOffset',startIndex,true);
         }
     }
-};
+}
 
 
 // Static members
-YAHOO.lang.augmentObject(YAHOO.widget.Paginator, {
+YAHOO.lang.augmentObject(Paginator, {
     /**
      * Incrementing index used to give instances unique ids.
      * @static
@@ -121,13 +122,39 @@
      * @static
      * @property ui
      */
-    ui : {}
+    ui : {},
 
+    /**
+     * Similar to YAHOO.lang.isNumber, but allows numeric strings.  This is
+     * is used for attribute validation in conjunction with getters that return
+     * numbers.
+     *
+     * @method isNumeric
+     * @param v {Number|String} value to be checked for number or numeric string
+     * @returns {Boolean} true if the input is coercable into a finite number
+     * @static
+     */
+    isNumeric : function (v) {
+        return isFinite(+v);
+    },
+
+    /**
+     * Return a number or null from input
+     *
+     * @method toNumber
+     * @param n {Number|String} a number or numeric string
+     * @return Number
+     * @static
+     */
+    toNumber : function (n) {
+        return isFinite(+n) ? +n : null;
+    }
+
 },true);
 
 
 // Instance members and methods
-YAHOO.widget.Paginator.prototype = {
+Paginator.prototype = {
 
     // Instance members
 
@@ -176,7 +203,7 @@
      */
     initConfig : function () {
 
-        var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
+        var UNLIMITED = Paginator.VALUE_UNLIMITED,
             l         = YAHOO.lang;
 
         /**
@@ -186,7 +213,8 @@
          */
         this.setAttributeConfig('rowsPerPage', {
             value     : 0,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -227,7 +255,8 @@
          */
         this.setAttributeConfig('totalRecords', {
             value     : 0,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -242,13 +271,15 @@
             value     : 0,
             validator : function (val) {
                 var total = this.get('totalRecords');
-                if (l.isNumber(val)) {
+                if (Paginator.isNumeric(val)) {
+                    val = +val;
                     return total === UNLIMITED || total > val ||
                            (total === 0 && val === 0);
                 }
 
                 return false;
-            }
+            },
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -259,7 +290,8 @@
          */
         this.setAttributeConfig('initialPage', {
             value     : 1,
-            validator : l.isNumber
+            validator : Paginator.isNumeric,
+            setter    : Paginator.toNumber
         });
 
         /**
@@ -273,7 +305,7 @@
          * @type string
          */
         this.setAttributeConfig('template', {
-            value : YAHOO.widget.Paginator.TEMPLATE_DEFAULT,
+            value : Paginator.TEMPLATE_DEFAULT,
             validator : l.isString
         });
 
@@ -327,7 +359,7 @@
          * @final
          */
         this.setAttributeConfig('id', {
-            value    : YAHOO.widget.Paginator.id++,
+            value    : Paginator.id++,
             readOnly : true
         });
 
@@ -350,7 +382,7 @@
      * @private
      */
     initUIComponents : function () {
-        var ui = YAHOO.widget.Paginator.ui,
+        var ui = Paginator.ui,
             name,UIComp;
         for (name in ui) {
             if (YAHOO.lang.hasOwnProperty(ui,name)) {
@@ -369,11 +401,6 @@
      * @private
      */
     initEvents : function () {
-        this.createEvent('recordOffsetChange');
-        this.createEvent('totalRecordsChange');
-        this.createEvent('rowsPerPageChange');
-        this.createEvent('alwaysVisibleChange');
-
         /**
          * Event fired when the Paginator is initially rendered
          * @event render
@@ -458,7 +485,7 @@
     _syncRecordOffset : function (e) {
         var v = e.newValue,rpp,state;
         if (e.prevValue !== v) {
-            if (v !== YAHOO.widget.Paginator.VALUE_UNLIMITED) {
+            if (v !== Paginator.VALUE_UNLIMITED) {
                 rpp = this.get('rowsPerPage');
 
                 if (rpp && this.get('recordOffset') >= v) {
@@ -531,26 +558,26 @@
         }
 
         // Forgo rendering if only one page and alwaysVisible is off
-        var totalRecords = this.get('totalRecords');
-        if (totalRecords !== YAHOO.widget.Paginator.VALUE_UNLIMITED &&
+        var totalRecords   = this.get('totalRecords'),
+            Dom            = YAHOO.util.Dom,
+            template       = this.get('template'),
+            containerClass = this.get('containerClass'),
+            i,len,c,id_base,markers,j,jlen,m,mp,name,UIComp,comp;
+
+        if (totalRecords !== Paginator.VALUE_UNLIMITED &&
             totalRecords < this.get('rowsPerPage') &&
             !this.get('alwaysVisible')) {
             return;
         }
 
-        var Dom            = YAHOO.util.Dom,
-            template       = this.get('template'),
-            containerClass = this.get('containerClass');
-
         // add marker spans to the template html to indicate drop zones
         // for ui components
         template = template.replace(/\{([a-z0-9_ \-]+)\}/gi,
             '<span class="yui-pg-ui $1"></span>');
-        for (var i = 0, len = this._containers.length; i < len; ++i) {
-            var c       = this._containers[i],
-                // ex. yui-pg0-1 (first paginator, second container)
-                id_base = YAHOO.widget.Paginator.ID_BASE + this.get('id') +
-                          '-' + i;
+        for (i = 0, len = this._containers.length; i < len; ++i) {
+            c = this._containers[i];
+            // ex. yui-pg0-1 (first paginator, second container)
+            id_base = Paginator.ID_BASE + this.get('id') + '-' + i;
 
             if (!c) {
                 continue;
@@ -564,16 +591,16 @@
             c.innerHTML = template;
 
             // Replace each marker with the ui component's render() output
-            var markers = Dom.getElementsByClassName('yui-pg-ui','span',c);
+            markers = Dom.getElementsByClassName('yui-pg-ui','span',c);
 
-            for (var j = 0, jlen = markers.length; j < jlen; ++j) {
-                var m      = markers[j],
-                    mp     = m.parentNode,
-                    name   = m.className.replace(/\s*yui-pg-ui\s+/g,''),
-                    UIComp = YAHOO.widget.Paginator.ui[name];
+            for (j = 0, jlen = markers.length; j < jlen; ++j) {
+                m      = markers[j];
+                mp     = m.parentNode;
+                name   = m.className.replace(/\s*yui-pg-ui\s+/g,'');
+                UIComp = Paginator.ui[name];
 
                 if (YAHOO.lang.isFunction(UIComp)) {
-                    var comp = new UIComp(this);
+                    comp = new UIComp(this);
                     if (YAHOO.lang.isFunction(comp.render)) {
                         mp.replaceChild(comp.render(id_base),m);
                     }
@@ -612,13 +639,14 @@
      * @method updateVisibility
      */
     updateVisibility : function (e) {
-        var alwaysVisible = this.get('alwaysVisible');
+        var alwaysVisible = this.get('alwaysVisible'),
+            totalRecords,visible,rpp,rppOptions,i,len;
+
         if (e.type === 'alwaysVisibleChange' || !alwaysVisible) {
-            var totalRecords = this.get('totalRecords'),
-                visible = true,
-                rpp = this.get('rowsPerPage'),
-                rppOptions = this.get('rowsPerPageOptions'),
-                i,len;
+            totalRecords = this.get('totalRecords');
+            visible      = true;
+            rpp          = this.get('rowsPerPage');
+            rppOptions   = this.get('rowsPerPageOptions');
 
             if (YAHOO.lang.isArray(rppOptions)) {
                 for (i = 0, len = rppOptions.length; i < len; ++i) {
@@ -626,7 +654,7 @@
                 }
             }
 
-            if (totalRecords !== YAHOO.widget.Paginator.VALUE_UNLIMITED &&
+            if (totalRecords !== Paginator.VALUE_UNLIMITED &&
                 totalRecords <= rpp) {
                 visible = false;
             }
@@ -661,16 +689,16 @@
      * @return {number}
      */
     getTotalPages : function () {
-        var records = this.get('totalRecords');
-        var perPage = this.get('rowsPerPage');
+        var records = this.get('totalRecords'),
+            perPage = this.get('rowsPerPage');
 
         // rowsPerPage not set.  Can't calculate
         if (!perPage) {
             return null;
         }
 
-        if (records === YAHOO.widget.Paginator.VALUE_UNLIMITED) {
-            return YAHOO.widget.Paginator.VALUE_UNLIMITED;
+        if (records === Paginator.VALUE_UNLIMITED) {
+            return Paginator.VALUE_UNLIMITED;
         }
 
         return Math.ceil(records/perPage);
@@ -689,7 +717,7 @@
 
         var totalPages = this.getTotalPages();
 
-        return (totalPages === YAHOO.widget.Paginator.VALUE_UNLIMITED || totalPages >= page);
+        return (totalPages === Paginator.VALUE_UNLIMITED || totalPages >= page);
     },
 
     /**
@@ -714,7 +742,7 @@
         var currentPage = this.getCurrentPage(),
             totalPages  = this.getTotalPages();
 
-        return currentPage && (totalPages === YAHOO.widget.Paginator.VALUE_UNLIMITED || currentPage < totalPages);
+        return currentPage && (totalPages === Paginator.VALUE_UNLIMITED || currentPage < totalPages);
     },
 
     /**
@@ -766,7 +794,7 @@
         }
 
         start = (page - 1) * perPage;
-        if (records !== YAHOO.widget.Paginator.VALUE_UNLIMITED) {
+        if (records !== Paginator.VALUE_UNLIMITED) {
             if (start >= records) {
                 return null;
             }
@@ -812,13 +840,13 @@
      * changeRequest event
      */
     setRowsPerPage : function (rpp,silent) {
-        if (YAHOO.lang.isNumber(rpp) && rpp > 0 &&
-            rpp !== this.get('rowsPerPage')) {
+        if (Paginator.isNumeric(rpp) && +rpp > 0 &&
+            +rpp !== this.get('rowsPerPage')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('rowsPerPage',rpp);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'rowsPerPage':rpp}));
+                    this.getState({'rowsPerPage':+rpp}));
             }
         }
     },
@@ -839,13 +867,13 @@
      * @param silent {boolean} whether to forcibly avoid firing the changeRequest event
      */
     setTotalRecords : function (total,silent) {
-        if (YAHOO.lang.isNumber(total) && total >= 0 &&
-            total !== this.get('totalRecords')) {
+        if (Paginator.isNumeric(total) && +total >= 0 &&
+            +total !== this.get('totalRecords')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('totalRecords',total);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'totalRecords':total}));
+                    this.getState({'totalRecords':+total}));
             }
         }
     },
@@ -867,13 +895,13 @@
      * @param silent {boolean} whether to forcibly avoid firing the changeRequest event
      */
     setStartIndex : function (offset,silent) {
-        if (YAHOO.lang.isNumber(offset) && offset >= 0 &&
-            offset !== this.get('recordOffset')) {
+        if (Paginator.isNumeric(offset) && +offset >= 0 &&
+            +offset !== this.get('recordOffset')) {
             if (this.get('updateOnChange') || silent) {
                 this.set('recordOffset',offset);
             } else {
                 this.fireEvent('changeRequest',
-                    this.getState({'recordOffset':offset}));
+                    this.getState({'recordOffset':+offset}));
             }
         }
     },
@@ -903,9 +931,8 @@
      * </ul>
      */
     getState : function (changes) {
-        var UNLIMITED = YAHOO.widget.Paginator.VALUE_UNLIMITED,
-            l         = YAHOO.lang,
-            M = Math, min = M.min, max = M.max, floor = M.floor, ceil = M.ceil,
+        var UNLIMITED = Paginator.VALUE_UNLIMITED,
+            M = Math, max = M.max, ceil = M.ceil,
             currentState, state, offset;
 
         function normalizeOffset(offset,total,rpp) {
@@ -940,19 +967,19 @@
             before       : currentState,
 
             rowsPerPage  : changes.rowsPerPage || currentState.rowsPerPage,
-            totalRecords : (l.isNumber(changes.totalRecords) ?
+            totalRecords : (Paginator.isNumeric(changes.totalRecords) ?
                                 max(changes.totalRecords,UNLIMITED) :
-                                currentState.totalRecords)
+                                +currentState.totalRecords)
         };
 
         if (state.totalRecords === 0) {
             state.recordOffset =
             state.page         = 0;
         } else {
-            offset = l.isNumber(changes.page) ?
+            offset = Paginator.isNumeric(changes.page) ?
                         (changes.page - 1) * state.rowsPerPage :
-                        l.isNumber(changes.recordOffset) ?
-                            changes.recordOffset :
+                        Paginator.isNumeric(changes.recordOffset) ?
+                            +changes.recordOffset :
                             currentState.recordOffset;
 
             state.recordOffset = normalizeOffset(offset,
@@ -1024,7 +1051,10 @@
     }
 };
 
-YAHOO.lang.augmentProto(YAHOO.widget.Paginator, YAHOO.util.AttributeProvider);
+YAHOO.lang.augmentProto(Paginator, YAHOO.util.AttributeProvider);
+
+YAHOO.widget.Paginator = Paginator;
+})();
 (function () {
 
 var Paginator = YAHOO.widget.Paginator,
@@ -1044,9 +1074,6 @@
 Paginator.ui.CurrentPageReport = function (p) {
     this.paginator = p;
 
-    p.createEvent('pageReportClassChange');
-    p.createEvent('pageReportTemplateChange');
-
     p.subscribe('recordOffsetChange', this.update,this,true);
     p.subscribe('rowsPerPageChange', this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1215,11 +1242,6 @@
 Paginator.ui.PageLinks = function (p) {
     this.paginator = p;
 
-    p.createEvent('pageLinkClassChange');
-    p.createEvent('currentPageClassChange');
-    p.createEvent('pageLinksContainerClassChange');
-    p.createEvent('pageLinksChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1278,7 +1300,7 @@
      */
     p.setAttributeConfig('pageLinks', {
         value : 10,
-        validator : l.isNumber
+        validator : Paginator.isNumeric
     });
 
     /**
@@ -1481,9 +1503,6 @@
 Paginator.ui.FirstPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('firstPageLinkLabelChange');
-    p.createEvent('firstPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1576,7 +1595,7 @@
         this.span.className = c;
         this.span.innerHTML = label;
 
-        this.current = p.get('recordOffset') < 1 ? this.span : this.link;
+        this.current = p.getCurrentPage() > 1 ? this.link : this.span;
         return this.current;
     },
 
@@ -1591,16 +1610,16 @@
         }
 
         var par = this.current ? this.current.parentNode : null;
-        if (this.paginator.get('recordOffset') < 1) {
+        if (this.paginator.getCurrentPage() > 1) {
+            if (par && this.current === this.span) {
+                par.replaceChild(this.link,this.current);
+                this.current = this.link;
+            }
+        } else {
             if (par && this.current === this.link) {
                 par.replaceChild(this.span,this.current);
                 this.current = this.span;
             }
-        } else {
-            if (par && this.current === this.span) {
-                par.replaceChild(this.link,this.current);
-                this.current = this.link;
-            }
         }
     },
 
@@ -1646,9 +1665,6 @@
 Paginator.ui.LastPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('lastPageLinkLabelChange');
-    p.createEvent('lastPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -1835,9 +1851,6 @@
 Paginator.ui.NextPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('nextPageLinkLabelChange');
-    p.createEvent('nextPageLinkClassChange');
-
     p.subscribe('recordOffsetChange', this.update,this,true);
     p.subscribe('rowsPerPageChange', this.update,this,true);
     p.subscribe('totalRecordsChange', this.update,this,true);
@@ -2003,9 +2016,6 @@
 Paginator.ui.PreviousPageLink = function (p) {
     this.paginator = p;
 
-    p.createEvent('previousPageLinkLabelChange');
-    p.createEvent('previousPageLinkClassChange');
-
     p.subscribe('recordOffsetChange',this.update,this,true);
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('totalRecordsChange',this.update,this,true);
@@ -2098,7 +2108,7 @@
         this.span.className = c;
         this.span.innerHTML = label;
 
-        this.current = p.get('recordOffset') < 1 ? this.span : this.link;
+        this.current = p.getCurrentPage() > 1 ? this.link : this.span;
         return this.current;
     },
 
@@ -2113,16 +2123,16 @@
         }
 
         var par = this.current ? this.current.parentNode : null;
-        if (this.paginator.get('recordOffset') < 1) {
+        if (this.paginator.getCurrentPage() > 1) {
+            if (par && this.current === this.span) {
+                par.replaceChild(this.link,this.current);
+                this.current = this.link;
+            }
+        } else {
             if (par && this.current === this.link) {
                 par.replaceChild(this.span,this.current);
                 this.current = this.span;
             }
-        } else {
-            if (par && this.current === this.span) {
-                par.replaceChild(this.link,this.current);
-                this.current = this.link;
-            }
         }
     },
 
@@ -2167,11 +2177,9 @@
 Paginator.ui.RowsPerPageDropdown = function (p) {
     this.paginator = p;
 
-    p.createEvent('rowsPerPageOptionsChange');
-    p.createEvent('rowsPerPageDropdownClassChange');
-
     p.subscribe('rowsPerPageChange',this.update,this,true);
     p.subscribe('rowsPerPageOptionsChange',this.rebuild,this,true);
+    p.subscribe('totalRecordsChange',this._handleTotalRecordsChange,this,true);
     p.subscribe('destroy',this.destroy,this,true);
 
     // TODO: make this work
@@ -2222,6 +2230,15 @@
 
 
     /**
+     * option node for the optional All value
+     *
+     * @property all
+     * @type HTMLElement
+     * @protected
+     */
+    all : null,
+
+    /**
      * Generate the select and option nodes and returns the select node.
      * @method render
      * @param id_base {string} used to create unique ids for generated nodes
@@ -2241,6 +2258,41 @@
     },
 
     /**
+     * (Re)generate the select options.
+     * @method rebuild
+     */
+    rebuild : function (e) {
+        var p       = this.paginator,
+            sel     = this.select,
+            options = p.get('rowsPerPageOptions'),
+            opt,cfg,val,i,len;
+
+        this.all = null;
+
+        for (i = 0, len = options.length; i < len; ++i) {
+            cfg = options[i];
+            opt = sel.options[i] ||
+                  sel.appendChild(document.createElement('option'));
+            val = l.isValue(cfg.value) ? cfg.value : cfg;
+            opt.innerHTML = l.isValue(cfg.text) ? cfg.text : cfg;
+
+            if (l.isString(val) && val.toLowerCase() === 'all') {
+                this.all  = opt;
+                opt.value = p.get('totalRecords');
+            } else{
+                opt.value = val;
+            }
+
+        }
+
+        while (sel.options.length > options.length) {
+            sel.removeChild(sel.firstChild);
+        }
+
+        this.update();
+    },
+
+    /**
      * Select the appropriate option if changed.
      * @method update
      * @param e {CustomEvent} The calling change event
@@ -2250,42 +2302,45 @@
             return;
         }
 
-        var rpp     = this.paginator.get('rowsPerPage'),
+        var rpp     = this.paginator.get('rowsPerPage')+'',
             options = this.select.options,
             i,len;
 
         for (i = 0, len = options.length; i < len; ++i) {
-            if (parseInt(options[i].value,10) === rpp) {
+            if (options[i].value === rpp) {
                 options[i].selected = true;
+                break;
             }
         }
     },
 
+    /**
+     * Listener for the select's onchange event.  Sent to setRowsPerPage method.
+     * @method onChange
+     * @param e {DOMEvent} The change event
+     */
+    onChange : function (e) {
+        this.paginator.setRowsPerPage(
+                parseInt(this.select.options[this.select.selectedIndex].value,10));
+    },
 
     /**
-     * (Re)generate the select options.
-     * @method rebuild
+     * Updates the all option value (and Paginator's rowsPerPage attribute if
+     * necessary) in response to a change in the Paginator's totalRecords.
+     *
+     * @method _handleTotalRecordsChange
+     * @param e {Event} attribute change event
+     * @protected
      */
-    rebuild : function (e) {
-        var p       = this.paginator,
-            sel     = this.select,
-            options = p.get('rowsPerPageOptions'),
-            opt_tem = document.createElement('option'),
-            i,len;
-
-        while (sel.firstChild) {
-            sel.removeChild(sel.firstChild);
+    _handleTotalRecordsChange : function (e) {
+        if (!this.all || (e && e.prevValue === e.newValue)) {
+            return;
         }
 
-        for (i = 0, len = options.length; i < len; ++i) {
-            var node = opt_tem.cloneNode(false),
-                opt  = options[i];
-            node.value = l.isValue(opt.value) ? opt.value : opt;
-            node.innerHTML = l.isValue(opt.text) ? opt.text : opt;
-            sel.appendChild(node);
+        this.all.value = e.newValue;
+        if (this.all.selected) {
+            this.paginator.set('rowsPerPage',e.newValue);
         }
-
-        this.update();
     },
 
     /**
@@ -2297,18 +2352,8 @@
         YAHOO.util.Event.purgeElement(this.select);
         this.select.parentNode.removeChild(this.select);
         this.select = null;
-    },
-
-    /**
-     * Listener for the select's onchange event.  Sent to setRowsPerPage method.
-     * @method onChange
-     * @param e {DOMEvent} The change event
-     */
-    onChange : function (e) {
-        this.paginator.setRowsPerPage(
-                parseInt(this.select.options[this.select.selectedIndex].value,10));
     }
 };
 
 })();
-YAHOO.register("paginator", YAHOO.widget.Paginator, {version: "2.6.0", build: "1321"});
+YAHOO.register("paginator", YAHOO.widget.Paginator, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/profiler/README
===================================================================
--- trunk/root/static/yui/profiler/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profiler/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +0,0 @@
-YUI Library - Profiler - Release Notes
-
-2.4.0
-
-  * Beta release
-
-2.5.0
-
-  * No changes
-  
-2.6.0
-
-  * Fixed issue with leaking global "object" variable.
-  * Out of beta

Modified: trunk/root/static/yui/profiler/profiler-debug.js
===================================================================
--- trunk/root/static/yui/profiler/profiler-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profiler/profiler-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -377,4 +377,4 @@
          
 
 };
-YAHOO.register("profiler", YAHOO.tool.Profiler, {version: "2.6.0", build: "1321"});
+YAHOO.register("profiler", YAHOO.tool.Profiler, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/profiler/profiler-min.js
===================================================================
--- trunk/root/static/yui/profiler/profiler-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profiler/profiler-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.namespace("tool");YAHOO.tool.Profiler={_container:new Object(),_report:new Object(),_saveData:function(B,C){var A=this._report[B];A.calls++;A.points.push(C);if(A.calls>1){A.avg=((A.avg*(A.calls-1))+C)/A.calls;A.min=Math.min(A.min,C);A.max=Math.max(A.max,C);}else{A.avg=C;A.min=C;A.max=C;}},getAverage:function(A){return this._report[A].avg;},getCallCount:function(A){return this._report[A].calls;},getMax:function(A){return this._report[A].max;},getMin:function(A){return this._report[A].min;},getFunctionReport:function(A){return this._report[A];},getFullReport:function(C){C=C||function(){return true;};if(YAHOO.lang.isFunction(C)){var A={};for(var B in this._report){if(C(this._report[B])){A[B]=this._report[B];}}return A;}},registerConstructor:function(B,A){this.registerFunction(B,A,true);},registerFunction:function(name,owner,registerPrototype){var funcName=(name.indexOf(".")>-1?name.substring(name.lastIndexOf(".")+1):name);if(!YAHOO.lang.isObject(owner)){owner=eval(name.s!
 ubstring(0,name.lastIndexOf(".")));}var method=owner[funcName];var prototype=method.prototype;if(YAHOO.lang.isFunction(method)&&!method.__yuiProfiled){this._container[name]=method;owner[funcName]=function(){var start=new Date();var retval=method.apply(this,arguments);var stop=new Date();YAHOO.tool.Profiler._saveData(name,stop-start);return retval;};YAHOO.lang.augmentObject(owner[funcName],method);owner[funcName].__yuiProfiled=true;owner[funcName].prototype=prototype;this._container[name].__yuiOwner=owner;this._container[name].__yuiFuncName=funcName;if(registerPrototype){this.registerObject(name+".prototype",prototype);}this._report[name]={calls:0,max:0,min:0,avg:0,points:[]};}return method;},registerObject:function(name,object,recurse){object=(YAHOO.lang.isObject(object)?object:eval(name));this._container[name]=object;for(var prop in object){if(typeof object[prop]=="function"){if(prop!="constructor"&&prop!="superclass"){this.registerFunction(name+"."+prop,object);}}else{if(!
 typeof object[prop]=="object"&&recurse){this.registerObject(na!
 me+"."+p
rop,object[prop],recurse);}}}},unregisterConstructor:function(A){if(YAHOO.lang.isFunction(this._container[A])){this.unregisterFunction(A,true);}},unregisterFunction:function(B,C){if(YAHOO.lang.isFunction(this._container[B])){if(C){this.unregisterObject(B+".prototype",this._container[B].prototype);}var A=this._container[B].__yuiOwner;var D=this._container[B].__yuiFuncName;delete this._container[B].__yuiOwner;delete this._container[B].__yuiFuncName;A[D]=this._container[B];delete this._container[B];delete this._report[B];}},unregisterObject:function(B,C){if(YAHOO.lang.isObject(this._container[B])){var A=this._container[B];for(var D in A){if(typeof A[D]=="function"){this.unregisterFunction(B+"."+D);}else{if(typeof A[D]=="object"&&C){this.unregisterObject(B+"."+D,C);}}}delete this._container[B];}}};YAHOO.register("profiler",YAHOO.tool.Profiler,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.namespace("tool");YAHOO.tool.Profiler={_container:new Object(),_report:new Object(),_saveData:function(B,C){var A=this._report[B];A.calls++;A.points.push(C);if(A.calls>1){A.avg=((A.avg*(A.calls-1))+C)/A.calls;A.min=Math.min(A.min,C);A.max=Math.max(A.max,C);}else{A.avg=C;A.min=C;A.max=C;}},getAverage:function(A){return this._report[A].avg;},getCallCount:function(A){return this._report[A].calls;},getMax:function(A){return this._report[A].max;},getMin:function(A){return this._report[A].min;},getFunctionReport:function(A){return this._report[A];},getFullReport:function(C){C=C||function(){return true;};if(YAHOO.lang.isFunction(C)){var A={};for(var B in this._report){if(C(this._report[B])){A[B]=this._report[B];}}return A;}},registerConstructor:function(B,A){this.registerFunction(B,A,true);},registerFunction:function(name,owner,registerPrototype){var funcName=(name.indexOf(".")>-1?name.substring(name.lastIndexOf(".")+1):name);if(!YAHOO.lang.isObject(owner)){owner=eval(name.s!
 ubstring(0,name.lastIndexOf(".")));}var method=owner[funcName];var prototype=method.prototype;if(YAHOO.lang.isFunction(method)&&!method.__yuiProfiled){this._container[name]=method;owner[funcName]=function(){var start=new Date();var retval=method.apply(this,arguments);var stop=new Date();YAHOO.tool.Profiler._saveData(name,stop-start);return retval;};YAHOO.lang.augmentObject(owner[funcName],method);owner[funcName].__yuiProfiled=true;owner[funcName].prototype=prototype;this._container[name].__yuiOwner=owner;this._container[name].__yuiFuncName=funcName;if(registerPrototype){this.registerObject(name+".prototype",prototype);}this._report[name]={calls:0,max:0,min:0,avg:0,points:[]};}return method;},registerObject:function(name,object,recurse){object=(YAHOO.lang.isObject(object)?object:eval(name));this._container[name]=object;for(var prop in object){if(typeof object[prop]=="function"){if(prop!="constructor"&&prop!="superclass"){this.registerFunction(name+"."+prop,object);}}else{if(!
 typeof object[prop]=="object"&&recurse){this.registerObject(na!
 me+"."+p
rop,object[prop],recurse);}}}},unregisterConstructor:function(A){if(YAHOO.lang.isFunction(this._container[A])){this.unregisterFunction(A,true);}},unregisterFunction:function(B,C){if(YAHOO.lang.isFunction(this._container[B])){if(C){this.unregisterObject(B+".prototype",this._container[B].prototype);}var A=this._container[B].__yuiOwner;var D=this._container[B].__yuiFuncName;delete this._container[B].__yuiOwner;delete this._container[B].__yuiFuncName;A[D]=this._container[B];delete this._container[B];delete this._report[B];}},unregisterObject:function(B,C){if(YAHOO.lang.isObject(this._container[B])){var A=this._container[B];for(var D in A){if(typeof A[D]=="function"){this.unregisterFunction(B+"."+D);}else{if(typeof A[D]=="object"&&C){this.unregisterObject(B+"."+D,C);}}}delete this._container[B];}}};YAHOO.register("profiler",YAHOO.tool.Profiler,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/profiler/profiler.js
===================================================================
--- trunk/root/static/yui/profiler/profiler.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profiler/profiler.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -377,4 +377,4 @@
          
 
 };
-YAHOO.register("profiler", YAHOO.tool.Profiler, {version: "2.6.0", build: "1321"});
+YAHOO.register("profiler", YAHOO.tool.Profiler, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/profilerviewer/README
===================================================================
--- trunk/root/static/yui/profilerviewer/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +0,0 @@
-ProfilerViewer Control -- Release Notes
-
-2.5.1-2.6.0
-
-  * No changes.
-
-2.5.0
-
-  * Beta release
\ No newline at end of file

Added: trunk/root/static/yui/profilerviewer/assets/profilerviewer-core.css
===================================================================
--- trunk/root/static/yui/profilerviewer/assets/profilerviewer-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/assets/profilerviewer-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,6 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/

Added: trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer-skin.css
===================================================================
--- trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,167 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+.yui-skin-sam .yui-pv {
+	background-color:#4a4a4a;
+	font:arial;
+	position:relative;
+	width:99%;
+	z-index:1000;
+	margin-bottom:1em;
+	overflow:hidden;
+}
+
+.yui-skin-sam .yui-pv .hd {
+	background:url(header_background.png) repeat-x;
+	min-height:30px;
+	overflow:hidden;
+	zoom:1;
+	padding:2px 0;
+}
+
+.yui-skin-sam .yui-pv .hd h4 {
+	padding:8px 10px;
+	margin:0;
+	font:bold 14px arial;
+	color:#fff;
+}
+	
+.yui-skin-sam .yui-pv .hd a {
+	background:#3f6bc3; 
+	font:bold 11px arial; 
+	color:#fff; 
+	padding:4px; 
+	margin:3px 10px 0 0; 
+	border:1px solid #3f567d; 
+	cursor:pointer;
+	display:block;
+	float:right;
+}
+
+.yui-skin-sam .yui-pv .hd span {
+	display:none;
+}
+
+.yui-skin-sam .yui-pv .hd span.yui-pv-busy {
+	height:18px;
+	width:18px;
+	background:url(wait.gif) no-repeat;
+	overflow:hidden;
+	display:block;
+	float:right;
+	margin:4px 10px 0 0; 
+}
+
+.yui-skin-sam .yui-pv .hd:after, 
+.yui-pv .bd:after, 
+.yui-skin-sam .yui-pv-chartlegend dl:after {
+	content:'.';visibility:hidden;clear:left;height:0;display:block;
+}
+
+.yui-skin-sam .yui-pv .bd {
+	position:relative; 
+	zoom:1; 
+	overflow-x:auto; 
+	overflow-y:hidden;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table {
+	padding:0 10px; 
+	margin:5px 0 10px 0;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td {
+	color:#eeee5c;
+	font:12px arial;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd {
+	background:#929292;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even {
+	background:#58637a;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc, 
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc {
+	background:#384970;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc, 
+.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc {
+	background:#6F6E6E;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th {
+	background-image:none;
+	background:#2E2D2D;
+}
+
+.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner {
+	background:transparent url(asc.gif) no-repeat scroll right center;
+}
+
+.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner {
+	background:transparent url(desc.gif) no-repeat scroll right center;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a {
+	color:#fff; 
+	font:bold 12px arial;
+}
+
+.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-asc, 
+.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc {
+	background:#333;
+}
+
+.yui-skin-sam .yui-pv-chartcontainer {
+	padding:0 10px;
+}
+
+.yui-skin-sam .yui-pv-chart {
+	height:250px; 
+	clear:right; 
+	margin:5px 0 0 0;
+	color:#fff;
+}
+
+.yui-skin-sam .yui-pv-chartlegend div {
+	float:right;
+	margin:0 0 0 10px;
+	_width:250px;
+}
+
+.yui-skin-sam .yui-pv-chartlegend dl {
+	border:1px solid #999;
+	padding:.2em 0 .2em .5em;
+	zoom:1;
+	margin:5px 0;
+}
+
+.yui-skin-sam .yui-pv-chartlegend dt {
+	float:left;
+	display:block; 
+	height:.7em; 
+	width:.7em;  
+	padding:0;
+}
+
+.yui-skin-sam .yui-pv-chartlegend dd {
+	float:left; 
+	display:block; 
+	color:#fff; 
+	margin:0 1em 0 .5em; 
+	padding:0; 
+	font:11px arial;
+}
+
+.yui-skin-sam .yui-pv-minimized {height:35px;}
+
+.yui-skin-sam .yui-pv-minimized .bd {top:-3000px;}
+
+.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh {display:none;}
\ No newline at end of file

Modified: trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer.css
===================================================================
--- trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/assets/skins/sam/profilerviewer.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-pv{background-color:#4a4a4a;font:arial;position:relative;width:99%;z-index:1000;margin-bottom:1em;overflow:hidden;}.yui-skin-sam .yui-pv .hd{background:url(header_background.png) repeat-x;min-height:30px;overflow:hidden;zoom:1;padding:2px 0;}.yui-skin-sam .yui-pv .hd h4{padding:8px 10px;margin:0;font:bold 14px arial;color:#fff;}.yui-skin-sam .yui-pv .hd a{background:#3f6bc3;font:bold 11px arial;color:#fff;padding:4px;margin:3px 10px 0 0;border:1px solid #3f567d;cursor:pointer;display:block;float:right;}.yui-skin-sam .yui-pv .hd span{display:none;}.yui-skin-sam .yui-pv .hd span.yui-pv-busy{height:18px;width:18px;background:url(wait.gif) no-repeat;overflow:hidden;display:block;float:right;margin:4px 10px 0 0;}.yui-skin-sam .yui-pv .hd:after,.yui-pv .bd:after,.yui-skin-sam .yui-pv-chartlegend dl:after{content:'.';visibility:hidden;clear:left;height:0;display:block;}.yui-skin-sam .yui-pv .bd{position:relative;zoom:1;overflow-x:auto;overflow-y:hidden;}.yui-ski!
 n-sam .yui-pv .yui-pv-table{padding:0 10px;margin:5px 0 10px 0;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-bd td{color:#eeee5c;font:12px arial;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd{background:#929292;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even{background:#58637a;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-even td.yui-dt-desc{background:#384970;}.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-asc,.yui-skin-sam .yui-pv .yui-pv-table tr.yui-dt-odd td.yui-dt-desc{background:#6F6E6E;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th{background-image:none;background:#2E2D2D;}.yui-skin-sam .yui-pv th.yui-dt-asc .yui-dt-liner{background:transparent url(asc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv th.yui-dt-desc .yui-dt-liner{background:transparent url(desc.gif) no-repeat scroll right center;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th a{color:#fff;font:bold 1!
 2px arial;}.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.y!
 ui-dt-as
c,.yui-skin-sam .yui-pv .yui-pv-table .yui-dt-hd th.yui-dt-desc{background:#333;}.yui-skin-sam .yui-pv-chartcontainer{padding:0 10px;}.yui-skin-sam .yui-pv-chart{height:250px;clear:right;margin:5px 0 0 0;color:#fff;}.yui-skin-sam .yui-pv-chartlegend div{float:right;margin:0 0 0 10px;_width:250px;}.yui-skin-sam .yui-pv-chartlegend dl{border:1px solid #999;padding:.2em 0 .2em .5em;zoom:1;margin:5px 0;}.yui-skin-sam .yui-pv-chartlegend dt{float:left;display:block;height:.7em;width:.7em;padding:0;}.yui-skin-sam .yui-pv-chartlegend dd{float:left;display:block;color:#fff;margin:0 1em 0 .5em;padding:0;font:11px arial;}.yui-skin-sam .yui-pv-minimized{height:35px;}.yui-skin-sam .yui-pv-minimized .bd{top:-3000px;}.yui-skin-sam .yui-pv-minimized .hd a.yui-pv-refresh{display:none;}

Deleted: trunk/root/static/yui/profilerviewer/profilerviewer-beta-debug.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer-beta-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer-beta-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1227 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function() {
-
-    /**
-     * The ProfilerViewer module provides a graphical display for viewing
-	 * the output of the YUI Profiler <http://developer.yahoo.com/yui/profiler>.
-     * @module profilerviewer
-     * @requires yahoo, dom, event, element, profiler, yuiloader
-     */
-
-    /**
-     * A widget to view YUI Profiler output.
-     * @namespace YAHOO.widget
-     * @class ProfilerViewer
-     * @extends YAHOO.util.Element
-     * @constructor
-     * @param {HTMLElement | String | Object} el(optional) The html 
-     * element into which the ProfileViewer should be rendered. 
-     * An element will be created if none provided.
-     * @param {Object} attr (optional) A key map of the ProfilerViewer's 
-     * initial attributes.  Ignored if first arg is an attributes object.
-     */
-    YAHOO.widget.ProfilerViewer = function(el, attr) {
-        attr = attr || {};
-        if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
-            attr = el;
-            el = attr.element || null;
-        }
-        if (!el && !attr.element) {
-            el = this._createProfilerViewerElement();
-        }
-
-    	YAHOO.widget.ProfilerViewer.superclass.constructor.call(this, el, attr); 
-		
-		this._init();
-		
-		YAHOO.log("ProfilerViewer instantiated.", "info", "ProfilerViewer");
-    };
-
-    YAHOO.extend(YAHOO.widget.ProfilerViewer, YAHOO.util.Element);
-	
-	// Static members of YAHOO.widget.ProfilerViewer:
-	YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer, {
-		/**
-		 * Classname for ProfilerViewer containing element.
-		 * @static
-		 * @property CLASS
-		 * @type string
-		 * @public
-		 * @default "yui-pv"
-		 */
-		CLASS: 'yui-pv',
-	
-		/**
-		 * Classname for ProfilerViewer button dashboard. 
-		 * @static
-		 * @property CLASS_DASHBOARD
-		 * @type string
-		 * @public
-		 * @default "yui-pv-dashboard"
-		 */
-		CLASS_DASHBOARD: 'yui-pv-dashboard',
-
-		/**
-		 * Classname for the "refresh data" button. 
-		 * @static
-		 * @property CLASS_REFRESH
-		 * @type string
-		 * @public
-		 * @default "yui-pv-refresh"
-		 */
-		CLASS_REFRESH: 'yui-pv-refresh',
-
-		/**
-		 * Classname for busy indicator in the dashboard. 
-		 * @static
-		 * @property CLASS_BUSY
-		 * @type string
-		 * @public
-		 * @default "yui-pv-busy"
-		 */
-		CLASS_BUSY: 'yui-pv-busy',
-	
-		/**
-		 * Classname for element containing the chart and chart
-		 * legend elements.
-		 * @static
-		 * @property CLASS_CHART_CONTAINER
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chartcontainer"
-		 */
-		CLASS_CHART_CONTAINER: 'yui-pv-chartcontainer',
-	
-		/**
-		 * Classname for element containing the chart.
-		 * @static
-		 * @property CLASS_CHART
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chart"
-		 */
-		CLASS_CHART: 'yui-pv-chart',
-		
-		/**
-		 * Classname for element containing the chart's legend. 
-		 * @static
-		 * @property CLASS_CHART_LEGEND
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chartlegend"
-		 */
-		CLASS_CHART_LEGEND: 'yui-pv-chartlegend',
-		
-		/**
-		 * Classname for element containing the datatable. 
-		 * @static
-		 * @property CLASS_TABLE
-		 * @type string
-		 * @public
-		 * @default "yui-pv-table"
-		 */
-		CLASS_TABLE: 'yui-pv-table',
-		
-		/**
-		 * Strings used in the UI.
-		 * @static
-		 * @property STRINGS
-		 * @object
-		 * @public
-		 * @default English language strings for UI.
-		 */
-		STRINGS: {
-			title: "YUI Profiler (beta)",
-			buttons: {
-				viewprofiler: "View Profiler Data",
-				hideprofiler: "Hide Profiler Report",
-				showchart: "Show Chart",
-				hidechart: "Hide Chart",
-				refreshdata: "Refresh Data"
-			},
-			colHeads: {
-				//key: [column head label, width in pixels]
-				fn: ["Function/Method", null], //must auto-size
-				calls: ["Calls", 40],
-				avg: ["Average", 80],
-				min: ["Shortest", 70],
-				max: ["Longest", 70],
-				total: ["Total Time", 70],
-				pct: ["Percent", 70]
-			},
-			millisecondsAbbrev: "ms",
-			initMessage: "initialiazing chart...",
-			installFlashMessage: "Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."
-		},
-
-		/**
-		 * Function used to format numbers in milliseconds
-		 * for chart; must be publicly accessible, per Charts spec.
-		 * @static
-		 * @property timeAxisLabelFunction
-		 * @type function
-		 * @private
-		 */
-		timeAxisLabelFunction: function(n) {
-			var a = (n === Math.floor(n)) ? n : (Math.round(n*1000))/1000;
-			return (a + " " + YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);
-		},
-
-		/**
-		 * Function used to format percent numbers for chart; must
-		 * be publicly accessible, per Charts spec.
-		 * @static
-		 * @property percentAxisLabelFunction
-		 * @type function
-		 * @private
-		 */
-		percentAxisLabelFunction: function(n) {
-			var a = (n === Math.floor(n)) ? n : (Math.round(n*100))/100;
-			return (a + "%");
-		}
-		
-	
-	},true);
-	
-
-	//
-	// STANDARD SHORTCUTS
-	//
-    var Dom = YAHOO.util.Dom;
-    var Event = YAHOO.util.Event;
-	var Profiler = YAHOO.tool.Profiler;
-	var PV = YAHOO.widget.ProfilerViewer;
-	var proto = PV.prototype;
-
-
-	//
-	// PUBLIC METHODS
-	//
-	
-	 /**
-     * Refreshes the data displayed in the ProfilerViewer. When called,
-	 * this will invoke a refresh of the DataTable and (if displayed)
-	 * the Chart.
-     * @method refreshData
-     * @return void
-	 * @public
-     */	
-	proto.refreshData = function() {
-		YAHOO.log("Data refresh requested via refreshData method.", "info", "ProfilerViewer");
-		this.fireEvent("dataRefreshEvent");
-	};
-
-	 /**
-     * Returns the element containing the console's header.
-     * @method getHeadEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getHeadEl = function() {
-		YAHOO.log("Head element requested via getHeadEl.", "info", "ProfilerViewer");
-		return (this._headEl) ? Dom.get(this._headEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's body, including
-	 * the chart and the datatable..
-     * @method getBodyEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getBodyEl = function() {
-		YAHOO.log("Body element requested via getBodyEl.", "info", "ProfilerViewer");
-		return (this._bodyEl) ? Dom.get(this._bodyEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's chart.
-     * @method getChartEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getChartEl = function() {
-		YAHOO.log("Chart element requested via getChartEl.", "info", "ProfilerViewer");
-		return (this._chartEl) ? Dom.get(this._chartEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's dataTable.
-     * @method getTableEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getTableEl = function() {
-		YAHOO.log("DataTable element requested via getTableEl.", "info", "ProfilerViewer");
-		return (this._tableEl) ? Dom.get(this._tableEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's DataTable
-	 * instance.
-     * @method getDataTable
-     * @return YAHOO.widget.DataTable
-	 * @public
-     */	
-	proto.getDataTable = function() {
-		YAHOO.log("DataTable instance requested via getDataTable.", "info", "ProfilerViewer");
-		return this._dataTable;
-	};
-
-	 /**
-     * Returns the element containing the console's Chart instance.
-     * @method getChart
-     * @return YAHOO.widget.BarChart
-	 * @public
-     */	
-	proto.getChart = function() {
-		YAHOO.log("Chart instance requested via getChart.", "info", "ProfilerViewer");
-		return this._chart;
-	};
-
-
-    //
-    // PRIVATE PROPERTIES
-    //
-    proto._rendered = false;
-	proto._headEl = null;
-	proto._bodyEl = null;
-	proto._toggleVisibleEl = null;
-	proto._busyEl = null;
-	proto._busy = false;
-	
-	proto._tableEl = null;
-	proto._dataTable = null;
-
-	proto._chartEl = null;
-	proto._chartLegendEl = null;
-	proto._chartElHeight = 250;
-	proto._chart = null;
-	proto._chartInitialized = false;
-
-    //
-    // PRIVATE METHODS
-    //
-
-	proto._init = function() {
-		/**
-		 * CUSTOM EVENTS
-		 **/
-		
-		/**
-		 * Fired when a data refresh is requested. No arguments are passed
-		 * with this event.
-		 *
-		 * @event refreshDataEvent
-		 */
-		this.createEvent("dataRefreshEvent");
-		
-		/**
-		 * Fired when the viewer canvas first renders. No arguments are passed
-		 * with this event.
-		 *
-		 * @event renderEvent
-		 */
-		this.createEvent("renderEvent");
-
-		this.on("dataRefreshEvent", this._refreshDataTable, this, true);
-		
-		this._initLauncherDOM();
-		
-		if(this.get("showChart")) {
-			this.on("sortedByChange", this._refreshChart);
-		}
-
-		YAHOO.log("ProfilerViewer instance initialization complete.", "info", "ProfilerViewer");
-	};
-
-	/**
-	 * If no element is passed in, create it as the first element
-	 * in the document.
-	 * @method _createProfilerViewerElement
-	 * @return HTMLElement
-	 * @private
-	 */
-	proto._createProfilerViewerElement = function() {
-		YAHOO.log("Creating root element...", "info", "ProfilerViewer");
-
-		var el = document.createElement("div");
-		document.body.insertBefore(el, document.body.firstChild);
-		Dom.addClass(el, this.SKIN_CLASS);
-		Dom.addClass(el, PV.CLASS);
-		YAHOO.log(el);
-		return el;
-	};
-			
-    /**
-     * Provides a readable name for the ProfilerViewer instance.
-     * @method toString
-     * @return String
-	 * @private
-	 */
-    proto.toString = function() {
-        return "ProfilerViewer " + (this.get('id') || this.get('tagName'));
-    };
-
-    /**
-     * Toggles visibility of the viewer canvas.
-     * @method _toggleVisible
-     * @return void
-	 * @private
-     */	
-	proto._toggleVisible = function() {
-		YAHOO.log("Toggling visibility to " + !this.get("visible") + ".", "info", "ProfilerViewer");
-		
-		var newVis = (this.get("visible")) ? false : true;
-		this.set("visible", newVis);
-    };
-
-    /**
-     * Shows the viewer canvas.
-     * @method show
-     * @return void
-	 * @private
-     */	
-	 proto._show = function() {
-	 	if(!this._busy) {
-			this._setBusyState(true);
-			if(!this._rendered) {
-				var loader = new YAHOO.util.YUILoader();
-				if (this.get("base")) {
-					loader.base = this.get("base");
-				}
-				
-				var modules = ["datatable"];
-				if(this.get("showChart")) {
-					modules.push("charts");
-				}
-				
-				loader.insert({ require: modules,
-								onSuccess: function() {
-									this._render();
-								},
-								scope: this});
-			} else {
-				var el = this.get("element");
-				Dom.removeClass(el, "yui-pv-minimized");
-				this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
-				
-				//The Flash Charts component can't be set to display:none,
-				//and even after positioning it offscreen the screen
-				//may fail to repaint in some browsers.  Adding an empty
-				//style rule to the console body can help force a repaint:
-				Dom.addClass(el, "yui-pv-null");
-				Dom.removeClass(el, "yui-pv-null");
-				
-				//Always refresh data when changing to visible:
-				this.refreshData();
-			}
-		}
-    };
-
-    /**
-     * Hides the viewer canvas.
-     * @method hide
-     * @return void
-	 * @private
-     */	
-	proto._hide = function() {
-		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.viewprofiler;
-		Dom.addClass(this.get("element"), "yui-pv-minimized");
-    };
-	
-	/**
-	 * Render the viewer canvas
-	 * @method _render
-	 * @return void
-	 * @private
-	 */
-	proto._render = function() {
-		YAHOO.log("Beginning to render ProfilerViewer canvas...", "info", "ProfilerViewer");
-		
-		Dom.removeClass(this.get("element"), "yui-pv-minimized");
-		
-		this._initViewerDOM();
-		this._initDataTable();
-		if(this.get("showChart")) {
-			this._initChartDOM();
-			this._initChart();
-		}
-		this._rendered = true;
-		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
-		
-		this.fireEvent("renderEvent");
-
-		YAHOO.log("ProfilerViewer rendering complete...", "info", "ProfilerViewer");
-	};
-	
-	/**
-	 * Set up the DOM structure for the ProfilerViewer launcher.
-	 * @method _initLauncherDOM
-	 * @private
-	 */
-	proto._initLauncherDOM = function() {
-		YAHOO.log("Creating the launcher...", "info", "ProfilerViewer");
-		
-		var el = this.get("element");
-		Dom.addClass(el, PV.CLASS);
-		Dom.addClass(el, "yui-pv-minimized");
-
-		this._headEl = document.createElement("div");
-		Dom.addClass(this._headEl, "hd");
-		
-		var s = PV.STRINGS.buttons;
-		var b = (this.get("visible")) ? s.hideprofiler : s.viewprofiler;
-		
-		this._toggleVisibleEl = this._createButton(b, this._headEl);
-		
-		this._refreshEl = this._createButton(s.refreshdata, this._headEl);
-		Dom.addClass(this._refreshEl, PV.CLASS_REFRESH);
-		
-		this._busyEl = document.createElement("span");
-		this._headEl.appendChild(this._busyEl);
-
-		var title = document.createElement("h4");
-		title.innerHTML = PV.STRINGS.title;
-		this._headEl.appendChild(title);
-		
-		el.appendChild(this._headEl);
-		
-		Event.on(this._toggleVisibleEl, "click", this._toggleVisible, this, true);
-		Event.on(this._refreshEl, "click", function() {
-			if(!this._busy) {
-				this._setBusyState(true);
-				this.fireEvent("dataRefreshEvent");
-			}
-		}, this, true);
-	};
-
-	/**
-	 * Set up the DOM structure for the ProfilerViewer canvas,
-	 * including the holder for the DataTable.
-	 * @method _initViewerDOM
-	 * @private
-	 */
-	proto._initViewerDOM = function() {
-		YAHOO.log("Creating DOM structure for viewer...", "info", "ProfilerViewer");
-		
-		var el = this.get("element");
-		this._bodyEl = document.createElement("div");
-		Dom.addClass(this._bodyEl, "bd");
-	 	this._tableEl = document.createElement("div");
-		Dom.addClass(this._tableEl, PV.CLASS_TABLE);
-		this._bodyEl.appendChild(this._tableEl);
-		el.appendChild(this._bodyEl);
-	};
-
-	/**
-	 * Set up the DOM structure for the ProfilerViewer canvas.
-	 * @method _initChartDOM
-	 * @private
-	 */
-	proto._initChartDOM = function() {
-		YAHOO.log("Adding DOM structure for chart...", "info", "ProfilerViewer");
-		
-		this._chartContainer = document.createElement("div");
-		Dom.addClass(this._chartContainer, PV.CLASS_CHART_CONTAINER);
-		
-		var chl = document.createElement("div");
-		Dom.addClass(chl, PV.CLASS_CHART_LEGEND);
-		
-		var chw = document.createElement("div");
-
-		this._chartLegendEl = document.createElement("dl");
-		this._chartLegendEl.innerHTML = "<dd>" + PV.STRINGS.initMessage + "</dd>";
-		
-		this._chartEl = document.createElement("div");
-		Dom.addClass(this._chartEl, PV.CLASS_CHART);
-		
-		var msg = document.createElement("p");
-		msg.innerHTML = PV.STRINGS.installFlashMessage;
-		this._chartEl.appendChild(msg);
-		
-		this._chartContainer.appendChild(chl);
-		chl.appendChild(chw);
-		chw.appendChild(this._chartLegendEl);
-		this._chartContainer.appendChild(this._chartEl);
-		this._bodyEl.insertBefore(this._chartContainer,this._tableEl);
-	};
-
-
-	/**
-	 * Create anchor elements for use as buttons. Args: label
-	 * is text to appear on the face of the button, parentEl
-	 * is the el to which the anchor will be attached, position
-	 * is true for inserting as the first node and false for
-	 * inserting as the last node of the parentEl.
-	 * @method _createButton
-	 * @private
-	 */	
-	proto._createButton = function(label, parentEl, position) {
-		var b = document.createElement("a");
-		b.innerHTML = b.title = label;
-		if(parentEl) {
-			if(!position) {
-				parentEl.appendChild(b);
-			} else {
-				parentEl.insertBefore(b, parentEl.firstChild);	
-			}
-		}
-		return b;
-	};
-	
-	/**
-	 * Set's console busy state.
-	 * @method _setBusyState
-	 * @private
-	 **/
-	proto._setBusyState = function(b) {
-		if(b) {
-			Dom.addClass(this._busyEl, PV.CLASS_BUSY);
-			this._busy = true;
-		} else {
-			Dom.removeClass(this._busyEl, PV.CLASS_BUSY);
-			this._busy = false;
-		}
-	};
-
-	/**
-	 * Generages a sorting function based on current sortedBy
-	 * values.
-	 * @method _createProfilerViewerElement
-	 * @private
-	 **/
-	proto._genSortFunction = function(key, dir) {
-		var by = key;
-		var direction = dir;
-		return function(a, b) {
-			if (direction == YAHOO.widget.DataTable.CLASS_ASC) {
-				return a[by] - b[by];	
-			} else {
-				return ((a[by] - b[by]) * -1);
-			}
-		};
-	};
-
-	/**
-	 * Utility function for array sums.
-	 * @method _arraySum
-	 * @private
-	 **/	
-	 var _arraySum = function(arr){
-		var ct = 0;
-		for(var i = 0; i < arr.length; ct+=arr[i++]){}
-		return ct;
-	};
-	
-	/**
-	 * Retrieves data from Profiler, filtering and sorting as needed
-	 * based on current widget state.  Adds calculated percentage
-	 * column and function name to data returned by Profiler.
-	 * @method _getProfilerData
-	 * @private
-	 **/
-	proto._getProfilerData = function() {
-		YAHOO.log("Profiler data requested from function DataSource.", "info", "ProfilerViewer");
-		
-		var obj = Profiler.getFullReport();
-		var arr = [];
-		var totalTime = 0;
-		for (name in obj) {
-    		if (YAHOO.lang.hasOwnProperty(obj, name)) {
-				var r = obj[name];
-				var o = {};
-				o.fn = name; //add function name to record
-				o.points = r.points.slice(); //copy live array
-				o.calls = r.calls;
-				o.min = r.min;
-				o.max = r.max;
-				o.avg = r.avg;
-				o.total = _arraySum(o.points);
-				o.points = r.points;
-				var f = this.get("filter");
-				if((!f) || (f(o))) {
-					arr.push(o);
-					totalTime += o.total;
-				}
-			}
-		}
-		
-		//add calculated percentage column
-		for (var i = 0, j = arr.length; i < j; i++) {
-			arr[i].pct = (totalTime) ? (arr[i].total * 100) / totalTime : 0;	
-		}
-
-		var sortedBy = this.get("sortedBy");
-		var key = sortedBy.key;
-		var dir = sortedBy.dir;		
-
-		arr.sort(this._genSortFunction(key, dir));
-		
-		YAHOO.log("Returning data from DataSource: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
-		
-		return arr;
-	};
-	
-	/**
-	 * Set up the DataTable.
-	 * @method _initDataTable
-	 * @private
-	 */
-	proto._initDataTable = function() {
-		YAHOO.log("Creating DataTable instance...", "info", "ProfilerViewer");
-		
-		var self = this;
-		
-		//Set up the JS Function DataSource, pulling data from
-		//the Profiler.
-		this._dataSource = new YAHOO.util.DataSource(
-			function() {
-				return self._getProfilerData.call(self);	
-			},
-			{
-				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
-				maxCacheEntries: 0
-			}
-		);
-		var ds = this._dataSource;
-
-		ds.responseSchema =
-		{
-			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct", "points"]
-		};
-		
-		//Set up the DataTable.
-		var formatTimeValue = function(elCell, oRecord, oColumn, oData) {
-			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*1000))/1000;
-			elCell.innerHTML = a + " " + PV.STRINGS.millisecondsAbbrev;
-		};
-
-		var formatPercent = function(elCell, oRecord, oColumn, oData) {
-			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*100))/100;
-			elCell.innerHTML = a + "%";
-		};
-		
-		var a = YAHOO.widget.DataTable.CLASS_ASC;
-		var d = YAHOO.widget.DataTable.CLASS_DESC;
-		var c = PV.STRINGS.colHeads;
-		var f = formatTimeValue;
-		
-		var cols = [
-			{key:"fn", sortable:true, label: c.fn[0],
-				sortOptions: {defaultDir:a}, 
-				resizeable: (YAHOO.util.DragDrop) ? true : false,
-				minWidth:c.fn[1]},
-			{key:"calls", sortable:true, label: c.calls[0],
-				sortOptions: {defaultDir:d},
-				width:c.calls[1]},
-			{key:"avg", sortable:true, label: c.avg[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.avg[1]},
-			{key:"min", sortable:true, label: c.min[0],
-				sortOptions: {defaultDir:a},
-				formatter:f,
-				width:c.min[1]}, 
-			{key:"max", sortable:true, label: c.max[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.max[1]},
-			{key:"total", sortable:true, label: c.total[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.total[1]},
-			{key:"pct", sortable:true, label: c.pct[0],
-				sortOptions: {defaultDir:d}, 
-				formatter:formatPercent,
-				width:c.pct[1]}
-		];
-
-		this._dataTable = new YAHOO.widget.DataTable(this._tableEl, cols, ds, {
-			scrollable:true,
-			height:this.get("tableHeight"),
-			initialRequest:null,
-			sortedBy: {
-				key: "total",
-				dir: YAHOO.widget.DataTable.CLASS_DESC
-			}
-		});
-		var dt = this._dataTable;
-
-		//Wire up DataTable events to drive the rest of the UI.
-		dt.subscribe("sortedByChange", this._sortedByChange, this, true);
-		dt.subscribe("renderEvent", this._dataTableRenderHandler, this, true);
-		dt.subscribe("initEvent", this._dataTableRenderHandler, this, true);
-		Event.on(this._tableEl.getElementsByTagName("th"), "click", this._thClickHandler, this, true);
-		YAHOO.log("DataTable initialized.", "info", "ProfilerViewer");
-	};
-		
-	/**
-	 * Proxy the sort event in DataTable into the ProfilerViewer
-	 * attribute.
-	 * @method _sortedByChange
-	 * @private
-	 **/
-	proto._sortedByChange = function(o) {
-		YAHOO.log("Relaying DataTable sortedBy value change; new key: " + o.newValue.key + "; new direction: " + o.newValue.dir + ".", "info", "ProfilerViewer");
-		this.set("sortedBy", {key: o.newValue.key, dir:o.newValue.dir});
-	};
-
-	/**
-	 * Proxy the render event in DataTable into the ProfilerViewer
-	 * attribute.
-	 * @method _dataTableRenderHandler
-	 * @private
-	 **/
-	proto._dataTableRenderHandler = function(o) {
-		YAHOO.log("DataTable's render event has fired.", "info", "ProfilerViewer");
-		this._setBusyState(false);
-	};
-	
-	/**
-	 * Event handler for clicks on the DataTable's sortable column
-	 * heads.
-	 * @method _thClickHandler
-	 * @private
-	 **/
-	proto._thClickHandler = function(o) {
-		YAHOO.log("DataTable's header row was clicked for sorting.", "info", "ProfilerViewer");
-		this._setBusyState(true);
-	};
-
-	/**
-	 * Refresh DataTable, getting new data from Profiler.
-	 * @method _refreshDataTable
-	 * @private
-	 **/
-	proto._refreshDataTable = function(args) {
-		YAHOO.log("Beginning to refresh DataTable contents...", "info", "ProfilerViewer");
-		var dt = this._dataTable;
-		dt.getDataSource().sendRequest("", dt.onDataReturnInitializeTable, dt);
-		YAHOO.log("DataTable refresh complete.", "info", "ProfilerViewer");
-	};
-
-	/**
-	 * Refresh chart, getting new data from table.
-	 * @method _refreshChart
-	 * @private
-	 **/
-	proto._refreshChart = function() {
-		YAHOO.log("Beginning to refresh Chart contents...", "info", "ProfilerViewer");
-		
-		switch (this.get("sortedBy").key) {
-			case "fn":
-				/*Keep the same data on the chart, but force update to 
-				  reflect new sort order on function/method name: */
-				this._chart.set("dataSource", this._chart.get("dataSource"));
-				
-				/*no further action necessary; chart redraws*/
-				return;
-			case "calls":
-				/*Null out the xAxis formatting before redrawing chart.*/
-				this._chart.set("xAxis", this._chartAxisDefinitionPlain);
-				break;
-			case "pct":
-				this._chart.set("xAxis", this._chartAxisDefinitionPercent);
-				break;
-			default:
-				/*Set the default xAxis; redraw legend; set the new series definition.*/
-				this._chart.set("xAxis", this._chartAxisDefinitionTime);
-				break;
-		}
-		
-		this._drawChartLegend();
-		this._chart.set("series", this._getSeriesDef(this.get("sortedBy").key));
-
-		YAHOO.log("Chart refresh complete.", "info", "ProfilerViewer");
-	};
-	
-	/**
-	 * Get data for the Chart from DataTable recordset
-	 * @method _getChartData
-	 * @private
-	 */
-	proto._getChartData = function() {
-		YAHOO.log("Getting data for chart from function DataSource.", "info", "ProfilerViewer");
-		var records = this._dataTable.getRecordSet().getRecords(0, this.get("maxChartFunctions"));
-		var arr = [];
-		for (var i = records.length - 1; i>-1; i--) {
-			arr.push(records[i].getData());	
-		}
-		YAHOO.log("Returning data to Chart: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
-		return arr;
-	};
-	
-	/**
-	 * Build series definition based on current configuration attributes.
-	 * @method _getSeriesDef
-	 * @private
-	 */
-	proto._getSeriesDef = function(field) {
-		var sd = this.get("chartSeriesDefinitions")[field];
-		var arr = [];
-		for(var i = 0, j = sd.group.length; i<j; i++) {
-			var c = this.get("chartSeriesDefinitions")[sd.group[i]];
-			arr.push(
-				{displayName:c.displayName,
-				 xField:c.xField,
-				 style: {color:c.style.color, size:c.style.size}
-				}
-			);
-		}
-		
-		YAHOO.log("Returning new series definition to chart: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
-		return arr;
-	};
-	
-	/**
-	 * Set up the Chart.
-	 * @method _initChart
-	 * @private
-	 */
-	proto._initChart = function() {
-		YAHOO.log("Initializing chart...", "info", "ProfilerViewer");
-		
-		this._sizeChartCanvas();
-		
-		YAHOO.widget.Chart.SWFURL = this.get("swfUrl");
-
-		var self = this;
-
-		//Create DataSource based on records currently displayed
-		//at the top of the sort list in the DataTable.
-		var ds = new YAHOO.util.DataSource(
-			//force the jsfunction DataSource to run in the scope of
-			//the ProfilerViewer, not in the YAHOO.util.DataSource scope:
-			function() {
-				return self._getChartData.call(self);
-			}, 
-			{
-				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
-				maxCacheEntries: 0
-			}
-		);
-
-		ds.responseSchema =
-		{
-			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct" ]
-		};
-		
-		ds.subscribe('responseEvent', this._sizeChartCanvas, this, true);
-		
-		//Set up the chart itself.
-		this._chartAxisDefinitionTime = new YAHOO.widget.NumericAxis();
-		this._chartAxisDefinitionTime.labelFunction = "YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";
-		
-		this._chartAxisDefinitionPercent = new YAHOO.widget.NumericAxis();
-		this._chartAxisDefinitionPercent.labelFunction = "YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";
-
-		this._chartAxisDefinitionPlain = new YAHOO.widget.NumericAxis();
-		
-		this._chart = new YAHOO.widget.BarChart( this._chartEl, ds,
-		{
-			yField: "fn",
-			series: this._getSeriesDef(this.get("sortedBy").key),
-			style: this.get("chartStyle"),
-			xAxis: this._chartAxisDefinitionTime
-		} );
-		
-		this._drawChartLegend();
-		this._chartInitialized = true;
-		this._dataTable.unsubscribe("initEvent", this._initChart, this);
-		this._dataTable.subscribe("initEvent", this._refreshChart, this, true);
-		
-		YAHOO.log("Chart initialization complete.", "info", "ProfilerViewer");
-	};
-	
-	/**
-	 * Set up the Chart's legend
-	 * @method _drawChartLegend
-	 * @private
-	 **/
-	proto._drawChartLegend = function() {
-		YAHOO.log("Drawing chart legend...", "info", "ProfilerViewer");
-		var seriesDefs = this.get("chartSeriesDefinitions");
-		var currentDef = seriesDefs[this.get("sortedBy").key];
-		var l = this._chartLegendEl;
-		l.innerHTML = "";
-		for(var i = 0, j = currentDef.group.length; i<j; i++) {
-			var c = seriesDefs[currentDef.group[i]];
-			var dt = document.createElement("dt");
-			Dom.setStyle(dt, "backgroundColor", "#" + c.style.color);
-			var dd = document.createElement("dd");
-			dd.innerHTML = c.displayName;
-			l.appendChild(dt);
-			l.appendChild(dd);
-		}
-	};
-	
-	/**
-	 * Resize the chart's canvas if based on number of records
-	 * returned from the chart's datasource.
-	 * @method _sizeChartCanvas
-	 * @private
-	 **/
-	proto._sizeChartCanvas = function(o) {
-		YAHOO.log("Resizing chart canvas...", "info", "ProfilerViewer");
-		var bars = (o) ? o.response.length : this.get("maxChartFunctions");
-		var s = (bars * 36) + 34;
-		if (s != parseInt(this._chartElHeight, 10)) {
-			this._chartElHeight = s;
-			Dom.setStyle(this._chartEl, "height", s + "px");
-		}
-	};
-
-    /**
-     * setAttributeConfigs TabView specific properties.
-     * @method initAttributes
-     * @param {Object} attr Hash of initial attributes
-	 * @method initAttributes
-	 * @private
-     */
-    proto.initAttributes = function(attr) {
-		YAHOO.log("Initializing attributes...", "info", "ProfilerViewer");
-        YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
-        /**
-         * The YUI Loader base path from which to pull YUI files needed
-		 * in the rendering of the ProfilerViewer canvas.  Passed directly
-		 * to YUI Loader.  Leave blank to draw files from
-		 * yui.yahooapis.com.
-         * @attribute base
-         * @type string
-		 * @default ""
-         */
-        this.setAttributeConfig('base', {
-            value: attr.base
-        });
-
-        /**
-         * The height of the DataTable.  The table will scroll
-		 * vertically if the content overflows the specified
-		 * height.
-         * @attribute tableHeight
-         * @type string
-		 * @default "15em"
-         */
-        this.setAttributeConfig('tableHeight', {
-            value: attr.tableHeight || "15em",
-			method: function(s) {
-				if(this._dataTable) {
-					this._dataTable.set("height", s);
-				}
-			}
-        });
-		
-        /**
-         * The default column key to sort by.  Valid keys are: fn, calls,
-		 * avg, min, max, total.  Valid dir values are: 
-		 * YAHOO.widget.DataTable.CLASS_ASC and
-		 * YAHOO.widget.DataTable.CLASS_DESC (or their
-		 * string equivalents).
-         * @attribute sortedBy
-         * @type string
-		 * @default {key:"total", dir:"yui-dt-desc"}
-         */
-        this.setAttributeConfig('sortedBy', {
-            value: attr.sortedBy || {key:"total", dir:"yui-dt-desc"}
-        });
-
-        /**
-         * A filter function to use in selecting functions that will
-		 * appear in the ProfilerViewer report.  The function is passed
-		 * a function report object and should return a boolean indicating
-		 * whether that function should be included in the ProfilerViewer
-		 * display.  The argument is structured as follows:
-		 *
-		 * {
-		 *	 	fn: <str function name>,
-		 *		calls : <n number of calls>,
-		 *		avg : <n average call duration>,
-		 *		max: <n duration of longest call>,
-		 *		min: <n duration of shortest call>,
-		 *		total: <n total time of all calls>
-		 *		points : <array time in ms of each call>
-		 *	}
-		 *
-		 * For example, you would use the follwing filter function to 
-		 * return only functions that have been called at least once:
-		 * 
-		 * 	function(o) {
-		 *		return (o.calls > 0);
-		 *	}
-		 *
-         * @attribute filter
-         * @type function
-		 * @default null
-         */
-        this.setAttributeConfig('filter', {
-            value: attr.filter || null,
-			validator: YAHOO.lang.isFunction
-        });
-
-		/**
-		 * The path to the YUI Charts swf file; must be a full URI
-		 * or a path relative to the page being profiled. Changes at runtime
-		 * not supported; pass this value in at instantiation.
-		 * @attribute swfUrl
-		 * @type string
-		 * @default "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
-		 */
-		this.setAttributeConfig('swfUrl', {
-			value: attr.swfUrl || "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
-		});
-
-        /**
-         * The maximum number of functions to profile in the chart. The
-		 * greater the number of functions, the greater the height of the
-		 * chart canvas.
-		 * height.
-         * @attribute maxChartFunctions
-         * @type int
-		 * @default 6
-         */
-        this.setAttributeConfig('maxChartFunctions', {
-            value: attr.maxChartFunctions || 6,
-			method: function(s) {
-				if(this._rendered) {
-					this._sizeChartCanvas();
-				}
-			},
-			validator: YAHOO.lang.isNumber
-        });
-		
-        /**
-         * The style object that defines the chart's visual presentation.
-		 * Conforms to the style attribute passed to the Charts Control
-		 * constructor.  See Charts Control User's Guide for more information
-		 * on how to format this object.
-         * @attribute chartStyle
-         * @type obj
-		 * @default See JS source for default definitions.
-         */
-        this.setAttributeConfig('chartStyle', {
-            value: 	attr.chartStyle || {
-				font:
-					{
-						name: "Arial",
-						color: 0xeeee5c,
-						size: 12
-					},
-					background:
-					{
-						color: "6e6e63"
-					}
-				},
-			method: function() {
-					if(this._rendered && this.get("showChart")) {
-						this._refreshChart();
-					}
-				}
-        });
-		
-        /**
-         * The series definition information to use when charting
-		 * specific fields on the chart.  displayName, xField,
-		 * and style members are used to construct the series
-		 * definition; the "group" member is the array of fields
-		 * that should be charted when the table is sorted by a
-		 * given field.
-         * @attribute chartSeriesDefinitions
-         * @type obj
-		 * @default See JS source for full default definitions.
-         */
-        this.setAttributeConfig('chartSeriesDefinitions', {
-            value: 	attr.chartSeriesDefinitions ||  {
-						total: {
-							displayName: PV.STRINGS.colHeads.total[0],
-							xField: "total",
-							style: {color:"4d95dd", size:20},
-							group: ["total"]
-						},
-						calls: {		
-							displayName: PV.STRINGS.colHeads.calls[0],
-							xField: "calls",
-							style: {color:"edff9f", size:20},
-							group: ["calls"]
-						},
-						avg: {
-							displayName: PV.STRINGS.colHeads.avg[0],
-							xField: "avg",
-							style: {color:"209daf", size:9},
-							group: ["avg", "min", "max"]
-						},
-						min: {
-							displayName: PV.STRINGS.colHeads.min[0],
-							xField: "min",
-							style: {color:"b6ecf4", size:9},
-							group: ["avg", "min", "max"]
-						},
-						max: {
-							displayName: PV.STRINGS.colHeads.max[0],
-							xField: "max",
-							style: {color:"29c7de", size:9},
-							group: ["avg", "min", "max"]
-						},
-						pct: {
-							displayName: PV.STRINGS.colHeads.pct[0],
-							xField: "pct",
-							style: {color:"C96EDB", size:20},
-							group: ["pct"]
-						}
-				},
-			method: function() {
-					if(this._rendered && this.get("showChart")) {
-						this._refreshChart();
-					}
-				}
-        });
-		
-        /**
-         * The default visibility setting for the viewer canvas. If true,
-		 * the viewer will load all necessary files and render itself
-		 * immediately upon instantiation; otherwise, the viewer will
-		 * load only minimal resources until the user toggles visibility
-		 * via the UI.
-         * @attribute visible
-         * @type boolean
-		 * @default false
-         */
-        this.setAttributeConfig('visible', {
-            value: attr.visible || false,
-			validator: YAHOO.lang.isBoolean,
-			method: function(b) {
-				if(b) {
-					this._show();
-				} else {
-					if (this._rendered) {
-						this._hide();
-					}
-				}
-			}
-        });
-
-        /**
-         * The default visibility setting for the chart.
-         * @attribute showChart
-         * @type boolean
-		 * @default true
-         */
-        this.setAttributeConfig('showChart', {
-            value: attr.showChart || true,
-			validator: YAHOO.lang.isBoolean,
-			writeOnce: true
-			
-        });
-		
-		YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
-		
-		YAHOO.log("Attributes initialized.", "info", "ProfilerViewer");
-    };
-	
-})();
-YAHOO.register("profilerviewer", YAHOO.widget.ProfilerViewer, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/profilerviewer/profilerviewer-beta-min.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer-beta-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer-beta-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function(){YAHOO.widget.ProfilerViewer=function(H,G){G=G||{};if(arguments.length==1&&!YAHOO.lang.isString(H)&&!H.nodeName){G=H;H=G.element||null;}if(!H&&!G.element){H=this._createProfilerViewerElement();}YAHOO.widget.ProfilerViewer.superclass.constructor.call(this,H,G);this._init();};YAHOO.extend(YAHOO.widget.ProfilerViewer,YAHOO.util.Element);YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer,{CLASS:"yui-pv",CLASS_DASHBOARD:"yui-pv-dashboard",CLASS_REFRESH:"yui-pv-refresh",CLASS_BUSY:"yui-pv-busy",CLASS_CHART_CONTAINER:"yui-pv-chartcontainer",CLASS_CHART:"yui-pv-chart",CLASS_CHART_LEGEND:"yui-pv-chartlegend",CLASS_TABLE:"yui-pv-table",STRINGS:{title:"YUI Profiler (beta)",buttons:{viewprofiler:"View Profiler Data",hideprofiler:"Hide Profiler Report",showchart:"Show Chart",hidechart:"Hide Chart",refreshdata:"Refresh Data"},colHeads:{fn:["Function/Method",null],calls:["Calls",40],avg:["Average",80],min:["Shortest",70],max:["Longest",70],total:["Total Time",70],pct:["Percen!
 t",70]},millisecondsAbbrev:"ms",initMessage:"initialiazing chart...",installFlashMessage:"Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."},timeAxisLabelFunction:function(H){var G=(H===Math.floor(H))?H:(Math.round(H*1000))/1000;return(G+" "+YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);},percentAxisLabelFunction:function(H){var G=(H===Math.floor(H))?H:(Math.round(H*100))/100;return(G+"%");}},true);var C=YAHOO.util.Dom;var A=YAHOO.util.Event;var B=YAHOO.tool.Profiler;var E=YAHOO.widget.ProfilerViewer;var D=E.prototype;D.refreshData=function(){this.fireEvent("dataRefreshEvent");};D.getHeadEl=function(){return(this._headEl)?C.get(this._headEl):false;};D.getBodyEl=function(){return(this._bodyEl)?C.get(this._bodyEl):false;};D.getChartEl=function(){return(this._chartEl)?C.get(th!
 is._chartEl):false;};D.getTableEl=function(){return(this._tabl!
 eEl)?C.g
et(this._tableEl):false;};D.getDataTable=function(){return this._dataTable;};D.getChart=function(){return this._chart;};D._rendered=false;D._headEl=null;D._bodyEl=null;D._toggleVisibleEl=null;D._busyEl=null;D._busy=false;D._tableEl=null;D._dataTable=null;D._chartEl=null;D._chartLegendEl=null;D._chartElHeight=250;D._chart=null;D._chartInitialized=false;D._init=function(){this.createEvent("dataRefreshEvent");this.createEvent("renderEvent");this.on("dataRefreshEvent",this._refreshDataTable,this,true);this._initLauncherDOM();if(this.get("showChart")){this.on("sortedByChange",this._refreshChart);}};D._createProfilerViewerElement=function(){var G=document.createElement("div");document.body.insertBefore(G,document.body.firstChild);C.addClass(G,this.SKIN_CLASS);C.addClass(G,E.CLASS);return G;};D.toString=function(){return"ProfilerViewer "+(this.get("id")||this.get("tagName"));};D._toggleVisible=function(){var G=(this.get("visible"))?false:true;this.set("visible",G);};D._show=functio!
 n(){if(!this._busy){this._setBusyState(true);if(!this._rendered){var G=new YAHOO.util.YUILoader();if(this.get("base")){G.base=this.get("base");}var H=["datatable"];if(this.get("showChart")){H.push("charts");}G.insert({require:H,onSuccess:function(){this._render();},scope:this});}else{var I=this.get("element");C.removeClass(I,"yui-pv-minimized");this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.hideprofiler;C.addClass(I,"yui-pv-null");C.removeClass(I,"yui-pv-null");this.refreshData();}}};D._hide=function(){this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.viewprofiler;C.addClass(this.get("element"),"yui-pv-minimized");};D._render=function(){C.removeClass(this.get("element"),"yui-pv-minimized");this._initViewerDOM();this._initDataTable();if(this.get("showChart")){this._initChartDOM();this._initChart();}this._rendered=true;this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.hideprofiler;this.fireEvent("renderEvent");};D._initLauncherDOM=function(){var I=this.get("element");C.add!
 Class(I,E.CLASS);C.addClass(I,"yui-pv-minimized");this._headEl!
 =documen
t.createElement("div");C.addClass(this._headEl,"hd");var H=E.STRINGS.buttons;var G=(this.get("visible"))?H.hideprofiler:H.viewprofiler;this._toggleVisibleEl=this._createButton(G,this._headEl);this._refreshEl=this._createButton(H.refreshdata,this._headEl);C.addClass(this._refreshEl,E.CLASS_REFRESH);this._busyEl=document.createElement("span");this._headEl.appendChild(this._busyEl);var J=document.createElement("h4");J.innerHTML=E.STRINGS.title;this._headEl.appendChild(J);I.appendChild(this._headEl);A.on(this._toggleVisibleEl,"click",this._toggleVisible,this,true);A.on(this._refreshEl,"click",function(){if(!this._busy){this._setBusyState(true);this.fireEvent("dataRefreshEvent");}},this,true);};D._initViewerDOM=function(){var G=this.get("element");this._bodyEl=document.createElement("div");C.addClass(this._bodyEl,"bd");this._tableEl=document.createElement("div");C.addClass(this._tableEl,E.CLASS_TABLE);this._bodyEl.appendChild(this._tableEl);G.appendChild(this._bodyEl);};D._initCh!
 artDOM=function(){this._chartContainer=document.createElement("div");C.addClass(this._chartContainer,E.CLASS_CHART_CONTAINER);var H=document.createElement("div");C.addClass(H,E.CLASS_CHART_LEGEND);var G=document.createElement("div");this._chartLegendEl=document.createElement("dl");this._chartLegendEl.innerHTML="<dd>"+E.STRINGS.initMessage+"</dd>";this._chartEl=document.createElement("div");C.addClass(this._chartEl,E.CLASS_CHART);var I=document.createElement("p");I.innerHTML=E.STRINGS.installFlashMessage;this._chartEl.appendChild(I);this._chartContainer.appendChild(H);H.appendChild(G);G.appendChild(this._chartLegendEl);this._chartContainer.appendChild(this._chartEl);this._bodyEl.insertBefore(this._chartContainer,this._tableEl);};D._createButton=function(I,J,H){var G=document.createElement("a");G.innerHTML=G.title=I;if(J){if(!H){J.appendChild(G);}else{J.insertBefore(G,J.firstChild);}}return G;};D._setBusyState=function(G){if(G){C.addClass(this._busyEl,E.CLASS_BUSY);
-this._busy=true;}else{C.removeClass(this._busyEl,E.CLASS_BUSY);this._busy=false;}};D._genSortFunction=function(H,G){var J=H;var I=G;return function(L,K){if(I==YAHOO.widget.DataTable.CLASS_ASC){return L[J]-K[J];}else{return((L[J]-K[J])*-1);}};};var F=function(G){var I=0;for(var H=0;H<G.length;I+=G[H++]){}return I;};D._getProfilerData=function(){var L=B.getFullReport();var N=[];var H=0;for(name in L){if(YAHOO.lang.hasOwnProperty(L,name)){var G=L[name];var I={};I.fn=name;I.points=G.points.slice();I.calls=G.calls;I.min=G.min;I.max=G.max;I.avg=G.avg;I.total=F(I.points);I.points=G.points;var P=this.get("filter");if((!P)||(P(I))){N.push(I);H+=I.total;}}}for(var M=0,K=N.length;M<K;M++){N[M].pct=(H)?(N[M].total*100)/H:0;}var O=this.get("sortedBy");var Q=O.key;var J=O.dir;N.sort(this._genSortFunction(Q,J));return N;};D._initDataTable=function(){var P=this;this._dataSource=new YAHOO.util.DataSource(function(){return P._getProfilerData.call(P);},{responseType:YAHOO.util.DataSource.TYPE!
 _JSARRAY,maxCacheEntries:0});var H=this._dataSource;H.responseSchema={fields:["fn","avg","calls","max","min","total","pct","points"]};var O=function(S,R,T,U){var Q=(U===Math.floor(U))?U:(Math.round(U*1000))/1000;S.innerHTML=Q+" "+E.STRINGS.millisecondsAbbrev;};var N=function(S,R,T,U){var Q=(U===Math.floor(U))?U:(Math.round(U*100))/100;S.innerHTML=Q+"%";};var M=YAHOO.widget.DataTable.CLASS_ASC;var J=YAHOO.widget.DataTable.CLASS_DESC;var K=E.STRINGS.colHeads;var I=O;var L=[{key:"fn",sortable:true,label:K.fn[0],sortOptions:{defaultDir:M},resizeable:(YAHOO.util.DragDrop)?true:false,minWidth:K.fn[1]},{key:"calls",sortable:true,label:K.calls[0],sortOptions:{defaultDir:J},width:K.calls[1]},{key:"avg",sortable:true,label:K.avg[0],sortOptions:{defaultDir:J},formatter:I,width:K.avg[1]},{key:"min",sortable:true,label:K.min[0],sortOptions:{defaultDir:M},formatter:I,width:K.min[1]},{key:"max",sortable:true,label:K.max[0],sortOptions:{defaultDir:J},formatter:I,width:K.max[1]},{key:"total!
 ",sortable:true,label:K.total[0],sortOptions:{defaultDir:J},fo!
 rmatter:
I,width:K.total[1]},{key:"pct",sortable:true,label:K.pct[0],sortOptions:{defaultDir:J},formatter:N,width:K.pct[1]}];this._dataTable=new YAHOO.widget.DataTable(this._tableEl,L,H,{scrollable:true,height:this.get("tableHeight"),initialRequest:null,sortedBy:{key:"total",dir:YAHOO.widget.DataTable.CLASS_DESC}});var G=this._dataTable;G.subscribe("sortedByChange",this._sortedByChange,this,true);G.subscribe("renderEvent",this._dataTableRenderHandler,this,true);G.subscribe("initEvent",this._dataTableRenderHandler,this,true);A.on(this._tableEl.getElementsByTagName("th"),"click",this._thClickHandler,this,true);};D._sortedByChange=function(G){this.set("sortedBy",{key:G.newValue.key,dir:G.newValue.dir});};D._dataTableRenderHandler=function(G){this._setBusyState(false);};D._thClickHandler=function(G){this._setBusyState(true);};D._refreshDataTable=function(G){var H=this._dataTable;H.getDataSource().sendRequest("",H.onDataReturnInitializeTable,H);};D._refreshChart=function(){switch(this.get!
 ("sortedBy").key){case"fn":this._chart.set("dataSource",this._chart.get("dataSource"));return ;case"calls":this._chart.set("xAxis",this._chartAxisDefinitionPlain);break;case"pct":this._chart.set("xAxis",this._chartAxisDefinitionPercent);break;default:this._chart.set("xAxis",this._chartAxisDefinitionTime);break;}this._drawChartLegend();this._chart.set("series",this._getSeriesDef(this.get("sortedBy").key));};D._getChartData=function(){var H=this._dataTable.getRecordSet().getRecords(0,this.get("maxChartFunctions"));var G=[];for(var I=H.length-1;I>-1;I--){G.push(H[I].getData());}return G;};D._getSeriesDef=function(K){var J=this.get("chartSeriesDefinitions")[K];var G=[];for(var I=0,H=J.group.length;I<H;I++){var L=this.get("chartSeriesDefinitions")[J.group[I]];G.push({displayName:L.displayName,xField:L.xField,style:{color:L.style.color,size:L.style.size}});}return G;};D._initChart=function(){this._sizeChartCanvas();YAHOO.widget.Chart.SWFURL=this.get("swfUrl");var G=this;var H=new!
  YAHOO.util.DataSource(function(){return G._getChartData.call(!
 G);},{re
sponseType:YAHOO.util.DataSource.TYPE_JSARRAY,maxCacheEntries:0});H.responseSchema={fields:["fn","avg","calls","max","min","total","pct"]};H.subscribe("responseEvent",this._sizeChartCanvas,this,true);this._chartAxisDefinitionTime=new YAHOO.widget.NumericAxis();this._chartAxisDefinitionTime.labelFunction="YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";this._chartAxisDefinitionPercent=new YAHOO.widget.NumericAxis();this._chartAxisDefinitionPercent.labelFunction="YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";this._chartAxisDefinitionPlain=new YAHOO.widget.NumericAxis();this._chart=new YAHOO.widget.BarChart(this._chartEl,H,{yField:"fn",series:this._getSeriesDef(this.get("sortedBy").key),style:this.get("chartStyle"),xAxis:this._chartAxisDefinitionTime});this._drawChartLegend();this._chartInitialized=true;this._dataTable.unsubscribe("initEvent",this._initChart,this);this._dataTable.subscribe("initEvent",this._refreshChart,this,true);};D._drawChartLegend=function(){var !
 M=this.get("chartSeriesDefinitions");var I=M[this.get("sortedBy").key];var H=this._chartLegendEl;H.innerHTML="";for(var K=0,J=I.group.length;K<J;K++){var N=M[I.group[K]];var L=document.createElement("dt");C.setStyle(L,"backgroundColor","#"+N.style.color);var G=document.createElement("dd");G.innerHTML=N.displayName;H.appendChild(L);H.appendChild(G);}};D._sizeChartCanvas=function(I){var G=(I)?I.response.length:this.get("maxChartFunctions");var H=(G*36)+34;if(H!=parseInt(this._chartElHeight,10)){this._chartElHeight=H;C.setStyle(this._chartEl,"height",H+"px");}};D.initAttributes=function(G){YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this,G);this.setAttributeConfig("base",{value:G.base});this.setAttributeConfig("tableHeight",{value:G.tableHeight||"15em",method:function(H){if(this._dataTable){this._dataTable.set("height",H);}}});this.setAttributeConfig("sortedBy",{value:G.sortedBy||{key:"total",dir:"yui-dt-desc"}});
-this.setAttributeConfig("filter",{value:G.filter||null,validator:YAHOO.lang.isFunction});this.setAttributeConfig("swfUrl",{value:G.swfUrl||"http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"});this.setAttributeConfig("maxChartFunctions",{value:G.maxChartFunctions||6,method:function(H){if(this._rendered){this._sizeChartCanvas();}},validator:YAHOO.lang.isNumber});this.setAttributeConfig("chartStyle",{value:G.chartStyle||{font:{name:"Arial",color:15658588,size:12},background:{color:"6e6e63"}},method:function(){if(this._rendered&&this.get("showChart")){this._refreshChart();}}});this.setAttributeConfig("chartSeriesDefinitions",{value:G.chartSeriesDefinitions||{total:{displayName:E.STRINGS.colHeads.total[0],xField:"total",style:{color:"4d95dd",size:20},group:["total"]},calls:{displayName:E.STRINGS.colHeads.calls[0],xField:"calls",style:{color:"edff9f",size:20},group:["calls"]},avg:{displayName:E.STRINGS.colHeads.avg[0],xField:"avg",style:{color:"209daf",size:9},group:!
 ["avg","min","max"]},min:{displayName:E.STRINGS.colHeads.min[0],xField:"min",style:{color:"b6ecf4",size:9},group:["avg","min","max"]},max:{displayName:E.STRINGS.colHeads.max[0],xField:"max",style:{color:"29c7de",size:9},group:["avg","min","max"]},pct:{displayName:E.STRINGS.colHeads.pct[0],xField:"pct",style:{color:"C96EDB",size:20},group:["pct"]}},method:function(){if(this._rendered&&this.get("showChart")){this._refreshChart();}}});this.setAttributeConfig("visible",{value:G.visible||false,validator:YAHOO.lang.isBoolean,method:function(H){if(H){this._show();}else{if(this._rendered){this._hide();}}}});this.setAttributeConfig("showChart",{value:G.showChart||true,validator:YAHOO.lang.isBoolean,writeOnce:true});YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this,G);};})();YAHOO.register("profilerviewer",YAHOO.widget.ProfilerViewer,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/profilerviewer/profilerviewer-beta.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer-beta.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer-beta.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1190 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function() {
-
-    /**
-     * The ProfilerViewer module provides a graphical display for viewing
-	 * the output of the YUI Profiler <http://developer.yahoo.com/yui/profiler>.
-     * @module profilerviewer
-     * @requires yahoo, dom, event, element, profiler, yuiloader
-     */
-
-    /**
-     * A widget to view YUI Profiler output.
-     * @namespace YAHOO.widget
-     * @class ProfilerViewer
-     * @extends YAHOO.util.Element
-     * @constructor
-     * @param {HTMLElement | String | Object} el(optional) The html 
-     * element into which the ProfileViewer should be rendered. 
-     * An element will be created if none provided.
-     * @param {Object} attr (optional) A key map of the ProfilerViewer's 
-     * initial attributes.  Ignored if first arg is an attributes object.
-     */
-    YAHOO.widget.ProfilerViewer = function(el, attr) {
-        attr = attr || {};
-        if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
-            attr = el;
-            el = attr.element || null;
-        }
-        if (!el && !attr.element) {
-            el = this._createProfilerViewerElement();
-        }
-
-    	YAHOO.widget.ProfilerViewer.superclass.constructor.call(this, el, attr); 
-		
-		this._init();
-		
-    };
-
-    YAHOO.extend(YAHOO.widget.ProfilerViewer, YAHOO.util.Element);
-	
-	// Static members of YAHOO.widget.ProfilerViewer:
-	YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer, {
-		/**
-		 * Classname for ProfilerViewer containing element.
-		 * @static
-		 * @property CLASS
-		 * @type string
-		 * @public
-		 * @default "yui-pv"
-		 */
-		CLASS: 'yui-pv',
-	
-		/**
-		 * Classname for ProfilerViewer button dashboard. 
-		 * @static
-		 * @property CLASS_DASHBOARD
-		 * @type string
-		 * @public
-		 * @default "yui-pv-dashboard"
-		 */
-		CLASS_DASHBOARD: 'yui-pv-dashboard',
-
-		/**
-		 * Classname for the "refresh data" button. 
-		 * @static
-		 * @property CLASS_REFRESH
-		 * @type string
-		 * @public
-		 * @default "yui-pv-refresh"
-		 */
-		CLASS_REFRESH: 'yui-pv-refresh',
-
-		/**
-		 * Classname for busy indicator in the dashboard. 
-		 * @static
-		 * @property CLASS_BUSY
-		 * @type string
-		 * @public
-		 * @default "yui-pv-busy"
-		 */
-		CLASS_BUSY: 'yui-pv-busy',
-	
-		/**
-		 * Classname for element containing the chart and chart
-		 * legend elements.
-		 * @static
-		 * @property CLASS_CHART_CONTAINER
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chartcontainer"
-		 */
-		CLASS_CHART_CONTAINER: 'yui-pv-chartcontainer',
-	
-		/**
-		 * Classname for element containing the chart.
-		 * @static
-		 * @property CLASS_CHART
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chart"
-		 */
-		CLASS_CHART: 'yui-pv-chart',
-		
-		/**
-		 * Classname for element containing the chart's legend. 
-		 * @static
-		 * @property CLASS_CHART_LEGEND
-		 * @type string
-		 * @public
-		 * @default "yui-pv-chartlegend"
-		 */
-		CLASS_CHART_LEGEND: 'yui-pv-chartlegend',
-		
-		/**
-		 * Classname for element containing the datatable. 
-		 * @static
-		 * @property CLASS_TABLE
-		 * @type string
-		 * @public
-		 * @default "yui-pv-table"
-		 */
-		CLASS_TABLE: 'yui-pv-table',
-		
-		/**
-		 * Strings used in the UI.
-		 * @static
-		 * @property STRINGS
-		 * @object
-		 * @public
-		 * @default English language strings for UI.
-		 */
-		STRINGS: {
-			title: "YUI Profiler (beta)",
-			buttons: {
-				viewprofiler: "View Profiler Data",
-				hideprofiler: "Hide Profiler Report",
-				showchart: "Show Chart",
-				hidechart: "Hide Chart",
-				refreshdata: "Refresh Data"
-			},
-			colHeads: {
-				//key: [column head label, width in pixels]
-				fn: ["Function/Method", null], //must auto-size
-				calls: ["Calls", 40],
-				avg: ["Average", 80],
-				min: ["Shortest", 70],
-				max: ["Longest", 70],
-				total: ["Total Time", 70],
-				pct: ["Percent", 70]
-			},
-			millisecondsAbbrev: "ms",
-			initMessage: "initialiazing chart...",
-			installFlashMessage: "Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."
-		},
-
-		/**
-		 * Function used to format numbers in milliseconds
-		 * for chart; must be publicly accessible, per Charts spec.
-		 * @static
-		 * @property timeAxisLabelFunction
-		 * @type function
-		 * @private
-		 */
-		timeAxisLabelFunction: function(n) {
-			var a = (n === Math.floor(n)) ? n : (Math.round(n*1000))/1000;
-			return (a + " " + YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);
-		},
-
-		/**
-		 * Function used to format percent numbers for chart; must
-		 * be publicly accessible, per Charts spec.
-		 * @static
-		 * @property percentAxisLabelFunction
-		 * @type function
-		 * @private
-		 */
-		percentAxisLabelFunction: function(n) {
-			var a = (n === Math.floor(n)) ? n : (Math.round(n*100))/100;
-			return (a + "%");
-		}
-		
-	
-	},true);
-	
-
-	//
-	// STANDARD SHORTCUTS
-	//
-    var Dom = YAHOO.util.Dom;
-    var Event = YAHOO.util.Event;
-	var Profiler = YAHOO.tool.Profiler;
-	var PV = YAHOO.widget.ProfilerViewer;
-	var proto = PV.prototype;
-
-
-	//
-	// PUBLIC METHODS
-	//
-	
-	 /**
-     * Refreshes the data displayed in the ProfilerViewer. When called,
-	 * this will invoke a refresh of the DataTable and (if displayed)
-	 * the Chart.
-     * @method refreshData
-     * @return void
-	 * @public
-     */	
-	proto.refreshData = function() {
-		this.fireEvent("dataRefreshEvent");
-	};
-
-	 /**
-     * Returns the element containing the console's header.
-     * @method getHeadEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getHeadEl = function() {
-		return (this._headEl) ? Dom.get(this._headEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's body, including
-	 * the chart and the datatable..
-     * @method getBodyEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getBodyEl = function() {
-		return (this._bodyEl) ? Dom.get(this._bodyEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's chart.
-     * @method getChartEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getChartEl = function() {
-		return (this._chartEl) ? Dom.get(this._chartEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's dataTable.
-     * @method getTableEl
-     * @return HTMLElement
-	 * @public
-     */	
-	proto.getTableEl = function() {
-		return (this._tableEl) ? Dom.get(this._tableEl) : false;
-	};
-
-	 /**
-     * Returns the element containing the console's DataTable
-	 * instance.
-     * @method getDataTable
-     * @return YAHOO.widget.DataTable
-	 * @public
-     */	
-	proto.getDataTable = function() {
-		return this._dataTable;
-	};
-
-	 /**
-     * Returns the element containing the console's Chart instance.
-     * @method getChart
-     * @return YAHOO.widget.BarChart
-	 * @public
-     */	
-	proto.getChart = function() {
-		return this._chart;
-	};
-
-
-    //
-    // PRIVATE PROPERTIES
-    //
-    proto._rendered = false;
-	proto._headEl = null;
-	proto._bodyEl = null;
-	proto._toggleVisibleEl = null;
-	proto._busyEl = null;
-	proto._busy = false;
-	
-	proto._tableEl = null;
-	proto._dataTable = null;
-
-	proto._chartEl = null;
-	proto._chartLegendEl = null;
-	proto._chartElHeight = 250;
-	proto._chart = null;
-	proto._chartInitialized = false;
-
-    //
-    // PRIVATE METHODS
-    //
-
-	proto._init = function() {
-		/**
-		 * CUSTOM EVENTS
-		 **/
-		
-		/**
-		 * Fired when a data refresh is requested. No arguments are passed
-		 * with this event.
-		 *
-		 * @event refreshDataEvent
-		 */
-		this.createEvent("dataRefreshEvent");
-		
-		/**
-		 * Fired when the viewer canvas first renders. No arguments are passed
-		 * with this event.
-		 *
-		 * @event renderEvent
-		 */
-		this.createEvent("renderEvent");
-
-		this.on("dataRefreshEvent", this._refreshDataTable, this, true);
-		
-		this._initLauncherDOM();
-		
-		if(this.get("showChart")) {
-			this.on("sortedByChange", this._refreshChart);
-		}
-
-	};
-
-	/**
-	 * If no element is passed in, create it as the first element
-	 * in the document.
-	 * @method _createProfilerViewerElement
-	 * @return HTMLElement
-	 * @private
-	 */
-	proto._createProfilerViewerElement = function() {
-
-		var el = document.createElement("div");
-		document.body.insertBefore(el, document.body.firstChild);
-		Dom.addClass(el, this.SKIN_CLASS);
-		Dom.addClass(el, PV.CLASS);
-		return el;
-	};
-			
-    /**
-     * Provides a readable name for the ProfilerViewer instance.
-     * @method toString
-     * @return String
-	 * @private
-	 */
-    proto.toString = function() {
-        return "ProfilerViewer " + (this.get('id') || this.get('tagName'));
-    };
-
-    /**
-     * Toggles visibility of the viewer canvas.
-     * @method _toggleVisible
-     * @return void
-	 * @private
-     */	
-	proto._toggleVisible = function() {
-		
-		var newVis = (this.get("visible")) ? false : true;
-		this.set("visible", newVis);
-    };
-
-    /**
-     * Shows the viewer canvas.
-     * @method show
-     * @return void
-	 * @private
-     */	
-	 proto._show = function() {
-	 	if(!this._busy) {
-			this._setBusyState(true);
-			if(!this._rendered) {
-				var loader = new YAHOO.util.YUILoader();
-				if (this.get("base")) {
-					loader.base = this.get("base");
-				}
-				
-				var modules = ["datatable"];
-				if(this.get("showChart")) {
-					modules.push("charts");
-				}
-				
-				loader.insert({ require: modules,
-								onSuccess: function() {
-									this._render();
-								},
-								scope: this});
-			} else {
-				var el = this.get("element");
-				Dom.removeClass(el, "yui-pv-minimized");
-				this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
-				
-				//The Flash Charts component can't be set to display:none,
-				//and even after positioning it offscreen the screen
-				//may fail to repaint in some browsers.  Adding an empty
-				//style rule to the console body can help force a repaint:
-				Dom.addClass(el, "yui-pv-null");
-				Dom.removeClass(el, "yui-pv-null");
-				
-				//Always refresh data when changing to visible:
-				this.refreshData();
-			}
-		}
-    };
-
-    /**
-     * Hides the viewer canvas.
-     * @method hide
-     * @return void
-	 * @private
-     */	
-	proto._hide = function() {
-		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.viewprofiler;
-		Dom.addClass(this.get("element"), "yui-pv-minimized");
-    };
-	
-	/**
-	 * Render the viewer canvas
-	 * @method _render
-	 * @return void
-	 * @private
-	 */
-	proto._render = function() {
-		
-		Dom.removeClass(this.get("element"), "yui-pv-minimized");
-		
-		this._initViewerDOM();
-		this._initDataTable();
-		if(this.get("showChart")) {
-			this._initChartDOM();
-			this._initChart();
-		}
-		this._rendered = true;
-		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
-		
-		this.fireEvent("renderEvent");
-
-	};
-	
-	/**
-	 * Set up the DOM structure for the ProfilerViewer launcher.
-	 * @method _initLauncherDOM
-	 * @private
-	 */
-	proto._initLauncherDOM = function() {
-		
-		var el = this.get("element");
-		Dom.addClass(el, PV.CLASS);
-		Dom.addClass(el, "yui-pv-minimized");
-
-		this._headEl = document.createElement("div");
-		Dom.addClass(this._headEl, "hd");
-		
-		var s = PV.STRINGS.buttons;
-		var b = (this.get("visible")) ? s.hideprofiler : s.viewprofiler;
-		
-		this._toggleVisibleEl = this._createButton(b, this._headEl);
-		
-		this._refreshEl = this._createButton(s.refreshdata, this._headEl);
-		Dom.addClass(this._refreshEl, PV.CLASS_REFRESH);
-		
-		this._busyEl = document.createElement("span");
-		this._headEl.appendChild(this._busyEl);
-
-		var title = document.createElement("h4");
-		title.innerHTML = PV.STRINGS.title;
-		this._headEl.appendChild(title);
-		
-		el.appendChild(this._headEl);
-		
-		Event.on(this._toggleVisibleEl, "click", this._toggleVisible, this, true);
-		Event.on(this._refreshEl, "click", function() {
-			if(!this._busy) {
-				this._setBusyState(true);
-				this.fireEvent("dataRefreshEvent");
-			}
-		}, this, true);
-	};
-
-	/**
-	 * Set up the DOM structure for the ProfilerViewer canvas,
-	 * including the holder for the DataTable.
-	 * @method _initViewerDOM
-	 * @private
-	 */
-	proto._initViewerDOM = function() {
-		
-		var el = this.get("element");
-		this._bodyEl = document.createElement("div");
-		Dom.addClass(this._bodyEl, "bd");
-	 	this._tableEl = document.createElement("div");
-		Dom.addClass(this._tableEl, PV.CLASS_TABLE);
-		this._bodyEl.appendChild(this._tableEl);
-		el.appendChild(this._bodyEl);
-	};
-
-	/**
-	 * Set up the DOM structure for the ProfilerViewer canvas.
-	 * @method _initChartDOM
-	 * @private
-	 */
-	proto._initChartDOM = function() {
-		
-		this._chartContainer = document.createElement("div");
-		Dom.addClass(this._chartContainer, PV.CLASS_CHART_CONTAINER);
-		
-		var chl = document.createElement("div");
-		Dom.addClass(chl, PV.CLASS_CHART_LEGEND);
-		
-		var chw = document.createElement("div");
-
-		this._chartLegendEl = document.createElement("dl");
-		this._chartLegendEl.innerHTML = "<dd>" + PV.STRINGS.initMessage + "</dd>";
-		
-		this._chartEl = document.createElement("div");
-		Dom.addClass(this._chartEl, PV.CLASS_CHART);
-		
-		var msg = document.createElement("p");
-		msg.innerHTML = PV.STRINGS.installFlashMessage;
-		this._chartEl.appendChild(msg);
-		
-		this._chartContainer.appendChild(chl);
-		chl.appendChild(chw);
-		chw.appendChild(this._chartLegendEl);
-		this._chartContainer.appendChild(this._chartEl);
-		this._bodyEl.insertBefore(this._chartContainer,this._tableEl);
-	};
-
-
-	/**
-	 * Create anchor elements for use as buttons. Args: label
-	 * is text to appear on the face of the button, parentEl
-	 * is the el to which the anchor will be attached, position
-	 * is true for inserting as the first node and false for
-	 * inserting as the last node of the parentEl.
-	 * @method _createButton
-	 * @private
-	 */	
-	proto._createButton = function(label, parentEl, position) {
-		var b = document.createElement("a");
-		b.innerHTML = b.title = label;
-		if(parentEl) {
-			if(!position) {
-				parentEl.appendChild(b);
-			} else {
-				parentEl.insertBefore(b, parentEl.firstChild);	
-			}
-		}
-		return b;
-	};
-	
-	/**
-	 * Set's console busy state.
-	 * @method _setBusyState
-	 * @private
-	 **/
-	proto._setBusyState = function(b) {
-		if(b) {
-			Dom.addClass(this._busyEl, PV.CLASS_BUSY);
-			this._busy = true;
-		} else {
-			Dom.removeClass(this._busyEl, PV.CLASS_BUSY);
-			this._busy = false;
-		}
-	};
-
-	/**
-	 * Generages a sorting function based on current sortedBy
-	 * values.
-	 * @method _createProfilerViewerElement
-	 * @private
-	 **/
-	proto._genSortFunction = function(key, dir) {
-		var by = key;
-		var direction = dir;
-		return function(a, b) {
-			if (direction == YAHOO.widget.DataTable.CLASS_ASC) {
-				return a[by] - b[by];	
-			} else {
-				return ((a[by] - b[by]) * -1);
-			}
-		};
-	};
-
-	/**
-	 * Utility function for array sums.
-	 * @method _arraySum
-	 * @private
-	 **/	
-	 var _arraySum = function(arr){
-		var ct = 0;
-		for(var i = 0; i < arr.length; ct+=arr[i++]){}
-		return ct;
-	};
-	
-	/**
-	 * Retrieves data from Profiler, filtering and sorting as needed
-	 * based on current widget state.  Adds calculated percentage
-	 * column and function name to data returned by Profiler.
-	 * @method _getProfilerData
-	 * @private
-	 **/
-	proto._getProfilerData = function() {
-		
-		var obj = Profiler.getFullReport();
-		var arr = [];
-		var totalTime = 0;
-		for (name in obj) {
-    		if (YAHOO.lang.hasOwnProperty(obj, name)) {
-				var r = obj[name];
-				var o = {};
-				o.fn = name; //add function name to record
-				o.points = r.points.slice(); //copy live array
-				o.calls = r.calls;
-				o.min = r.min;
-				o.max = r.max;
-				o.avg = r.avg;
-				o.total = _arraySum(o.points);
-				o.points = r.points;
-				var f = this.get("filter");
-				if((!f) || (f(o))) {
-					arr.push(o);
-					totalTime += o.total;
-				}
-			}
-		}
-		
-		//add calculated percentage column
-		for (var i = 0, j = arr.length; i < j; i++) {
-			arr[i].pct = (totalTime) ? (arr[i].total * 100) / totalTime : 0;	
-		}
-
-		var sortedBy = this.get("sortedBy");
-		var key = sortedBy.key;
-		var dir = sortedBy.dir;		
-
-		arr.sort(this._genSortFunction(key, dir));
-		
-		
-		return arr;
-	};
-	
-	/**
-	 * Set up the DataTable.
-	 * @method _initDataTable
-	 * @private
-	 */
-	proto._initDataTable = function() {
-		
-		var self = this;
-		
-		//Set up the JS Function DataSource, pulling data from
-		//the Profiler.
-		this._dataSource = new YAHOO.util.DataSource(
-			function() {
-				return self._getProfilerData.call(self);	
-			},
-			{
-				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
-				maxCacheEntries: 0
-			}
-		);
-		var ds = this._dataSource;
-
-		ds.responseSchema =
-		{
-			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct", "points"]
-		};
-		
-		//Set up the DataTable.
-		var formatTimeValue = function(elCell, oRecord, oColumn, oData) {
-			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*1000))/1000;
-			elCell.innerHTML = a + " " + PV.STRINGS.millisecondsAbbrev;
-		};
-
-		var formatPercent = function(elCell, oRecord, oColumn, oData) {
-			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*100))/100;
-			elCell.innerHTML = a + "%";
-		};
-		
-		var a = YAHOO.widget.DataTable.CLASS_ASC;
-		var d = YAHOO.widget.DataTable.CLASS_DESC;
-		var c = PV.STRINGS.colHeads;
-		var f = formatTimeValue;
-		
-		var cols = [
-			{key:"fn", sortable:true, label: c.fn[0],
-				sortOptions: {defaultDir:a}, 
-				resizeable: (YAHOO.util.DragDrop) ? true : false,
-				minWidth:c.fn[1]},
-			{key:"calls", sortable:true, label: c.calls[0],
-				sortOptions: {defaultDir:d},
-				width:c.calls[1]},
-			{key:"avg", sortable:true, label: c.avg[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.avg[1]},
-			{key:"min", sortable:true, label: c.min[0],
-				sortOptions: {defaultDir:a},
-				formatter:f,
-				width:c.min[1]}, 
-			{key:"max", sortable:true, label: c.max[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.max[1]},
-			{key:"total", sortable:true, label: c.total[0],
-				sortOptions: {defaultDir:d},
-				formatter:f,
-				width:c.total[1]},
-			{key:"pct", sortable:true, label: c.pct[0],
-				sortOptions: {defaultDir:d}, 
-				formatter:formatPercent,
-				width:c.pct[1]}
-		];
-
-		this._dataTable = new YAHOO.widget.DataTable(this._tableEl, cols, ds, {
-			scrollable:true,
-			height:this.get("tableHeight"),
-			initialRequest:null,
-			sortedBy: {
-				key: "total",
-				dir: YAHOO.widget.DataTable.CLASS_DESC
-			}
-		});
-		var dt = this._dataTable;
-
-		//Wire up DataTable events to drive the rest of the UI.
-		dt.subscribe("sortedByChange", this._sortedByChange, this, true);
-		dt.subscribe("renderEvent", this._dataTableRenderHandler, this, true);
-		dt.subscribe("initEvent", this._dataTableRenderHandler, this, true);
-		Event.on(this._tableEl.getElementsByTagName("th"), "click", this._thClickHandler, this, true);
-	};
-		
-	/**
-	 * Proxy the sort event in DataTable into the ProfilerViewer
-	 * attribute.
-	 * @method _sortedByChange
-	 * @private
-	 **/
-	proto._sortedByChange = function(o) {
-		this.set("sortedBy", {key: o.newValue.key, dir:o.newValue.dir});
-	};
-
-	/**
-	 * Proxy the render event in DataTable into the ProfilerViewer
-	 * attribute.
-	 * @method _dataTableRenderHandler
-	 * @private
-	 **/
-	proto._dataTableRenderHandler = function(o) {
-		this._setBusyState(false);
-	};
-	
-	/**
-	 * Event handler for clicks on the DataTable's sortable column
-	 * heads.
-	 * @method _thClickHandler
-	 * @private
-	 **/
-	proto._thClickHandler = function(o) {
-		this._setBusyState(true);
-	};
-
-	/**
-	 * Refresh DataTable, getting new data from Profiler.
-	 * @method _refreshDataTable
-	 * @private
-	 **/
-	proto._refreshDataTable = function(args) {
-		var dt = this._dataTable;
-		dt.getDataSource().sendRequest("", dt.onDataReturnInitializeTable, dt);
-	};
-
-	/**
-	 * Refresh chart, getting new data from table.
-	 * @method _refreshChart
-	 * @private
-	 **/
-	proto._refreshChart = function() {
-		
-		switch (this.get("sortedBy").key) {
-			case "fn":
-				/*Keep the same data on the chart, but force update to 
-				  reflect new sort order on function/method name: */
-				this._chart.set("dataSource", this._chart.get("dataSource"));
-				
-				/*no further action necessary; chart redraws*/
-				return;
-			case "calls":
-				/*Null out the xAxis formatting before redrawing chart.*/
-				this._chart.set("xAxis", this._chartAxisDefinitionPlain);
-				break;
-			case "pct":
-				this._chart.set("xAxis", this._chartAxisDefinitionPercent);
-				break;
-			default:
-				/*Set the default xAxis; redraw legend; set the new series definition.*/
-				this._chart.set("xAxis", this._chartAxisDefinitionTime);
-				break;
-		}
-		
-		this._drawChartLegend();
-		this._chart.set("series", this._getSeriesDef(this.get("sortedBy").key));
-
-	};
-	
-	/**
-	 * Get data for the Chart from DataTable recordset
-	 * @method _getChartData
-	 * @private
-	 */
-	proto._getChartData = function() {
-		var records = this._dataTable.getRecordSet().getRecords(0, this.get("maxChartFunctions"));
-		var arr = [];
-		for (var i = records.length - 1; i>-1; i--) {
-			arr.push(records[i].getData());	
-		}
-		return arr;
-	};
-	
-	/**
-	 * Build series definition based on current configuration attributes.
-	 * @method _getSeriesDef
-	 * @private
-	 */
-	proto._getSeriesDef = function(field) {
-		var sd = this.get("chartSeriesDefinitions")[field];
-		var arr = [];
-		for(var i = 0, j = sd.group.length; i<j; i++) {
-			var c = this.get("chartSeriesDefinitions")[sd.group[i]];
-			arr.push(
-				{displayName:c.displayName,
-				 xField:c.xField,
-				 style: {color:c.style.color, size:c.style.size}
-				}
-			);
-		}
-		
-		return arr;
-	};
-	
-	/**
-	 * Set up the Chart.
-	 * @method _initChart
-	 * @private
-	 */
-	proto._initChart = function() {
-		
-		this._sizeChartCanvas();
-		
-		YAHOO.widget.Chart.SWFURL = this.get("swfUrl");
-
-		var self = this;
-
-		//Create DataSource based on records currently displayed
-		//at the top of the sort list in the DataTable.
-		var ds = new YAHOO.util.DataSource(
-			//force the jsfunction DataSource to run in the scope of
-			//the ProfilerViewer, not in the YAHOO.util.DataSource scope:
-			function() {
-				return self._getChartData.call(self);
-			}, 
-			{
-				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
-				maxCacheEntries: 0
-			}
-		);
-
-		ds.responseSchema =
-		{
-			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct" ]
-		};
-		
-		ds.subscribe('responseEvent', this._sizeChartCanvas, this, true);
-		
-		//Set up the chart itself.
-		this._chartAxisDefinitionTime = new YAHOO.widget.NumericAxis();
-		this._chartAxisDefinitionTime.labelFunction = "YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";
-		
-		this._chartAxisDefinitionPercent = new YAHOO.widget.NumericAxis();
-		this._chartAxisDefinitionPercent.labelFunction = "YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";
-
-		this._chartAxisDefinitionPlain = new YAHOO.widget.NumericAxis();
-		
-		this._chart = new YAHOO.widget.BarChart( this._chartEl, ds,
-		{
-			yField: "fn",
-			series: this._getSeriesDef(this.get("sortedBy").key),
-			style: this.get("chartStyle"),
-			xAxis: this._chartAxisDefinitionTime
-		} );
-		
-		this._drawChartLegend();
-		this._chartInitialized = true;
-		this._dataTable.unsubscribe("initEvent", this._initChart, this);
-		this._dataTable.subscribe("initEvent", this._refreshChart, this, true);
-		
-	};
-	
-	/**
-	 * Set up the Chart's legend
-	 * @method _drawChartLegend
-	 * @private
-	 **/
-	proto._drawChartLegend = function() {
-		var seriesDefs = this.get("chartSeriesDefinitions");
-		var currentDef = seriesDefs[this.get("sortedBy").key];
-		var l = this._chartLegendEl;
-		l.innerHTML = "";
-		for(var i = 0, j = currentDef.group.length; i<j; i++) {
-			var c = seriesDefs[currentDef.group[i]];
-			var dt = document.createElement("dt");
-			Dom.setStyle(dt, "backgroundColor", "#" + c.style.color);
-			var dd = document.createElement("dd");
-			dd.innerHTML = c.displayName;
-			l.appendChild(dt);
-			l.appendChild(dd);
-		}
-	};
-	
-	/**
-	 * Resize the chart's canvas if based on number of records
-	 * returned from the chart's datasource.
-	 * @method _sizeChartCanvas
-	 * @private
-	 **/
-	proto._sizeChartCanvas = function(o) {
-		var bars = (o) ? o.response.length : this.get("maxChartFunctions");
-		var s = (bars * 36) + 34;
-		if (s != parseInt(this._chartElHeight, 10)) {
-			this._chartElHeight = s;
-			Dom.setStyle(this._chartEl, "height", s + "px");
-		}
-	};
-
-    /**
-     * setAttributeConfigs TabView specific properties.
-     * @method initAttributes
-     * @param {Object} attr Hash of initial attributes
-	 * @method initAttributes
-	 * @private
-     */
-    proto.initAttributes = function(attr) {
-        YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
-        /**
-         * The YUI Loader base path from which to pull YUI files needed
-		 * in the rendering of the ProfilerViewer canvas.  Passed directly
-		 * to YUI Loader.  Leave blank to draw files from
-		 * yui.yahooapis.com.
-         * @attribute base
-         * @type string
-		 * @default ""
-         */
-        this.setAttributeConfig('base', {
-            value: attr.base
-        });
-
-        /**
-         * The height of the DataTable.  The table will scroll
-		 * vertically if the content overflows the specified
-		 * height.
-         * @attribute tableHeight
-         * @type string
-		 * @default "15em"
-         */
-        this.setAttributeConfig('tableHeight', {
-            value: attr.tableHeight || "15em",
-			method: function(s) {
-				if(this._dataTable) {
-					this._dataTable.set("height", s);
-				}
-			}
-        });
-		
-        /**
-         * The default column key to sort by.  Valid keys are: fn, calls,
-		 * avg, min, max, total.  Valid dir values are: 
-		 * YAHOO.widget.DataTable.CLASS_ASC and
-		 * YAHOO.widget.DataTable.CLASS_DESC (or their
-		 * string equivalents).
-         * @attribute sortedBy
-         * @type string
-		 * @default {key:"total", dir:"yui-dt-desc"}
-         */
-        this.setAttributeConfig('sortedBy', {
-            value: attr.sortedBy || {key:"total", dir:"yui-dt-desc"}
-        });
-
-        /**
-         * A filter function to use in selecting functions that will
-		 * appear in the ProfilerViewer report.  The function is passed
-		 * a function report object and should return a boolean indicating
-		 * whether that function should be included in the ProfilerViewer
-		 * display.  The argument is structured as follows:
-		 *
-		 * {
-		 *	 	fn: <str function name>,
-		 *		calls : <n number of calls>,
-		 *		avg : <n average call duration>,
-		 *		max: <n duration of longest call>,
-		 *		min: <n duration of shortest call>,
-		 *		total: <n total time of all calls>
-		 *		points : <array time in ms of each call>
-		 *	}
-		 *
-		 * For example, you would use the follwing filter function to 
-		 * return only functions that have been called at least once:
-		 * 
-		 * 	function(o) {
-		 *		return (o.calls > 0);
-		 *	}
-		 *
-         * @attribute filter
-         * @type function
-		 * @default null
-         */
-        this.setAttributeConfig('filter', {
-            value: attr.filter || null,
-			validator: YAHOO.lang.isFunction
-        });
-
-		/**
-		 * The path to the YUI Charts swf file; must be a full URI
-		 * or a path relative to the page being profiled. Changes at runtime
-		 * not supported; pass this value in at instantiation.
-		 * @attribute swfUrl
-		 * @type string
-		 * @default "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
-		 */
-		this.setAttributeConfig('swfUrl', {
-			value: attr.swfUrl || "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
-		});
-
-        /**
-         * The maximum number of functions to profile in the chart. The
-		 * greater the number of functions, the greater the height of the
-		 * chart canvas.
-		 * height.
-         * @attribute maxChartFunctions
-         * @type int
-		 * @default 6
-         */
-        this.setAttributeConfig('maxChartFunctions', {
-            value: attr.maxChartFunctions || 6,
-			method: function(s) {
-				if(this._rendered) {
-					this._sizeChartCanvas();
-				}
-			},
-			validator: YAHOO.lang.isNumber
-        });
-		
-        /**
-         * The style object that defines the chart's visual presentation.
-		 * Conforms to the style attribute passed to the Charts Control
-		 * constructor.  See Charts Control User's Guide for more information
-		 * on how to format this object.
-         * @attribute chartStyle
-         * @type obj
-		 * @default See JS source for default definitions.
-         */
-        this.setAttributeConfig('chartStyle', {
-            value: 	attr.chartStyle || {
-				font:
-					{
-						name: "Arial",
-						color: 0xeeee5c,
-						size: 12
-					},
-					background:
-					{
-						color: "6e6e63"
-					}
-				},
-			method: function() {
-					if(this._rendered && this.get("showChart")) {
-						this._refreshChart();
-					}
-				}
-        });
-		
-        /**
-         * The series definition information to use when charting
-		 * specific fields on the chart.  displayName, xField,
-		 * and style members are used to construct the series
-		 * definition; the "group" member is the array of fields
-		 * that should be charted when the table is sorted by a
-		 * given field.
-         * @attribute chartSeriesDefinitions
-         * @type obj
-		 * @default See JS source for full default definitions.
-         */
-        this.setAttributeConfig('chartSeriesDefinitions', {
-            value: 	attr.chartSeriesDefinitions ||  {
-						total: {
-							displayName: PV.STRINGS.colHeads.total[0],
-							xField: "total",
-							style: {color:"4d95dd", size:20},
-							group: ["total"]
-						},
-						calls: {		
-							displayName: PV.STRINGS.colHeads.calls[0],
-							xField: "calls",
-							style: {color:"edff9f", size:20},
-							group: ["calls"]
-						},
-						avg: {
-							displayName: PV.STRINGS.colHeads.avg[0],
-							xField: "avg",
-							style: {color:"209daf", size:9},
-							group: ["avg", "min", "max"]
-						},
-						min: {
-							displayName: PV.STRINGS.colHeads.min[0],
-							xField: "min",
-							style: {color:"b6ecf4", size:9},
-							group: ["avg", "min", "max"]
-						},
-						max: {
-							displayName: PV.STRINGS.colHeads.max[0],
-							xField: "max",
-							style: {color:"29c7de", size:9},
-							group: ["avg", "min", "max"]
-						},
-						pct: {
-							displayName: PV.STRINGS.colHeads.pct[0],
-							xField: "pct",
-							style: {color:"C96EDB", size:20},
-							group: ["pct"]
-						}
-				},
-			method: function() {
-					if(this._rendered && this.get("showChart")) {
-						this._refreshChart();
-					}
-				}
-        });
-		
-        /**
-         * The default visibility setting for the viewer canvas. If true,
-		 * the viewer will load all necessary files and render itself
-		 * immediately upon instantiation; otherwise, the viewer will
-		 * load only minimal resources until the user toggles visibility
-		 * via the UI.
-         * @attribute visible
-         * @type boolean
-		 * @default false
-         */
-        this.setAttributeConfig('visible', {
-            value: attr.visible || false,
-			validator: YAHOO.lang.isBoolean,
-			method: function(b) {
-				if(b) {
-					this._show();
-				} else {
-					if (this._rendered) {
-						this._hide();
-					}
-				}
-			}
-        });
-
-        /**
-         * The default visibility setting for the chart.
-         * @attribute showChart
-         * @type boolean
-		 * @default true
-         */
-        this.setAttributeConfig('showChart', {
-            value: attr.showChart || true,
-			validator: YAHOO.lang.isBoolean,
-			writeOnce: true
-			
-        });
-		
-		YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
-		
-    };
-	
-})();
-YAHOO.register("profilerviewer", YAHOO.widget.ProfilerViewer, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/profilerviewer/profilerviewer-debug.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1229 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function() {
+
+    /**
+     * The ProfilerViewer module provides a graphical display for viewing
+	 * the output of the YUI Profiler <http://developer.yahoo.com/yui/profiler>.
+     * @module profilerviewer
+     * @requires yahoo, dom, event, element, profiler, yuiloader
+     */
+
+    /**
+     * A widget to view YUI Profiler output.
+     * @namespace YAHOO.widget
+     * @class ProfilerViewer
+     * @extends YAHOO.util.Element
+     * @constructor
+     * @param {HTMLElement | String | Object} el(optional) The html 
+     * element into which the ProfileViewer should be rendered. 
+     * An element will be created if none provided.
+     * @param {Object} attr (optional) A key map of the ProfilerViewer's 
+     * initial attributes.  Ignored if first arg is an attributes object.
+     */
+    YAHOO.widget.ProfilerViewer = function(el, attr) {
+        attr = attr || {};
+        if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
+            attr = el;
+            el = attr.element || null;
+        }
+        if (!el && !attr.element) {
+            el = this._createProfilerViewerElement();
+        }
+
+    	YAHOO.widget.ProfilerViewer.superclass.constructor.call(this, el, attr); 
+		
+		this._init();
+		
+		YAHOO.log("ProfilerViewer instantiated.", "info", "ProfilerViewer");
+    };
+
+    YAHOO.extend(YAHOO.widget.ProfilerViewer, YAHOO.util.Element);
+	
+	// Static members of YAHOO.widget.ProfilerViewer:
+	YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer, {
+		/**
+		 * Classname for ProfilerViewer containing element.
+		 * @static
+		 * @property CLASS
+		 * @type string
+		 * @public
+		 * @default "yui-pv"
+		 */
+		CLASS: 'yui-pv',
+	
+		/**
+		 * Classname for ProfilerViewer button dashboard. 
+		 * @static
+		 * @property CLASS_DASHBOARD
+		 * @type string
+		 * @public
+		 * @default "yui-pv-dashboard"
+		 */
+		CLASS_DASHBOARD: 'yui-pv-dashboard',
+
+		/**
+		 * Classname for the "refresh data" button. 
+		 * @static
+		 * @property CLASS_REFRESH
+		 * @type string
+		 * @public
+		 * @default "yui-pv-refresh"
+		 */
+		CLASS_REFRESH: 'yui-pv-refresh',
+
+		/**
+		 * Classname for busy indicator in the dashboard. 
+		 * @static
+		 * @property CLASS_BUSY
+		 * @type string
+		 * @public
+		 * @default "yui-pv-busy"
+		 */
+		CLASS_BUSY: 'yui-pv-busy',
+	
+		/**
+		 * Classname for element containing the chart and chart
+		 * legend elements.
+		 * @static
+		 * @property CLASS_CHART_CONTAINER
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chartcontainer"
+		 */
+		CLASS_CHART_CONTAINER: 'yui-pv-chartcontainer',
+	
+		/**
+		 * Classname for element containing the chart.
+		 * @static
+		 * @property CLASS_CHART
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chart"
+		 */
+		CLASS_CHART: 'yui-pv-chart',
+		
+		/**
+		 * Classname for element containing the chart's legend. 
+		 * @static
+		 * @property CLASS_CHART_LEGEND
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chartlegend"
+		 */
+		CLASS_CHART_LEGEND: 'yui-pv-chartlegend',
+		
+		/**
+		 * Classname for element containing the datatable. 
+		 * @static
+		 * @property CLASS_TABLE
+		 * @type string
+		 * @public
+		 * @default "yui-pv-table"
+		 */
+		CLASS_TABLE: 'yui-pv-table',
+		
+		/**
+		 * Strings used in the UI.
+		 * @static
+		 * @property STRINGS
+		 * @object
+		 * @public
+		 * @default English language strings for UI.
+		 */
+		STRINGS: {
+			title: "YUI Profiler (beta)",
+			buttons: {
+				viewprofiler: "View Profiler Data",
+				hideprofiler: "Hide Profiler Report",
+				showchart: "Show Chart",
+				hidechart: "Hide Chart",
+				refreshdata: "Refresh Data"
+			},
+			colHeads: {
+				//key: [column head label, width in pixels]
+				fn: ["Function/Method", null], //must auto-size
+				calls: ["Calls", 40],
+				avg: ["Average", 80],
+				min: ["Shortest", 70],
+				max: ["Longest", 70],
+				total: ["Total Time", 70],
+				pct: ["Percent", 70]
+			},
+			millisecondsAbbrev: "ms",
+			initMessage: "initialiazing chart...",
+			installFlashMessage: "Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."
+		},
+
+		/**
+		 * Function used to format numbers in milliseconds
+		 * for chart; must be publicly accessible, per Charts spec.
+		 * @static
+		 * @property timeAxisLabelFunction
+		 * @type function
+		 * @private
+		 */
+		timeAxisLabelFunction: function(n) {
+			var a = (n === Math.floor(n)) ? n : (Math.round(n*1000))/1000;
+			return (a + " " + YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);
+		},
+
+		/**
+		 * Function used to format percent numbers for chart; must
+		 * be publicly accessible, per Charts spec.
+		 * @static
+		 * @property percentAxisLabelFunction
+		 * @type function
+		 * @private
+		 */
+		percentAxisLabelFunction: function(n) {
+			var a = (n === Math.floor(n)) ? n : (Math.round(n*100))/100;
+			return (a + "%");
+		}
+		
+	
+	},true);
+	
+
+	//
+	// STANDARD SHORTCUTS
+	//
+    var Dom = YAHOO.util.Dom;
+    var Event = YAHOO.util.Event;
+	var Profiler = YAHOO.tool.Profiler;
+	var PV = YAHOO.widget.ProfilerViewer;
+	var proto = PV.prototype;
+
+
+	//
+	// PUBLIC METHODS
+	//
+	
+	 /**
+     * Refreshes the data displayed in the ProfilerViewer. When called,
+	 * this will invoke a refresh of the DataTable and (if displayed)
+	 * the Chart.
+     * @method refreshData
+     * @return void
+	 * @public
+     */	
+	proto.refreshData = function() {
+		YAHOO.log("Data refresh requested via refreshData method.", "info", "ProfilerViewer");
+		this.fireEvent("dataRefreshEvent");
+	};
+
+	 /**
+     * Returns the element containing the console's header.
+     * @method getHeadEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getHeadEl = function() {
+		YAHOO.log("Head element requested via getHeadEl.", "info", "ProfilerViewer");
+		return (this._headEl) ? Dom.get(this._headEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's body, including
+	 * the chart and the datatable..
+     * @method getBodyEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getBodyEl = function() {
+		YAHOO.log("Body element requested via getBodyEl.", "info", "ProfilerViewer");
+		return (this._bodyEl) ? Dom.get(this._bodyEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's chart.
+     * @method getChartEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getChartEl = function() {
+		YAHOO.log("Chart element requested via getChartEl.", "info", "ProfilerViewer");
+		return (this._chartEl) ? Dom.get(this._chartEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's dataTable.
+     * @method getTableEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getTableEl = function() {
+		YAHOO.log("DataTable element requested via getTableEl.", "info", "ProfilerViewer");
+		return (this._tableEl) ? Dom.get(this._tableEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's DataTable
+	 * instance.
+     * @method getDataTable
+     * @return YAHOO.widget.DataTable
+	 * @public
+     */	
+	proto.getDataTable = function() {
+		YAHOO.log("DataTable instance requested via getDataTable.", "info", "ProfilerViewer");
+		return this._dataTable;
+	};
+
+	 /**
+     * Returns the element containing the console's Chart instance.
+     * @method getChart
+     * @return YAHOO.widget.BarChart
+	 * @public
+     */	
+	proto.getChart = function() {
+		YAHOO.log("Chart instance requested via getChart.", "info", "ProfilerViewer");
+		return this._chart;
+	};
+
+
+    //
+    // PRIVATE PROPERTIES
+    //
+    proto._rendered = false;
+	proto._headEl = null;
+	proto._bodyEl = null;
+	proto._toggleVisibleEl = null;
+	proto._busyEl = null;
+	proto._busy = false;
+	
+	proto._tableEl = null;
+	proto._dataTable = null;
+
+	proto._chartEl = null;
+	proto._chartLegendEl = null;
+	proto._chartElHeight = 250;
+	proto._chart = null;
+	proto._chartInitialized = false;
+
+    //
+    // PRIVATE METHODS
+    //
+
+	proto._init = function() {
+		/**
+		 * CUSTOM EVENTS
+		 **/
+		
+		/**
+		 * Fired when a data refresh is requested. No arguments are passed
+		 * with this event.
+		 *
+		 * @event refreshDataEvent
+		 */
+		this.createEvent("dataRefreshEvent");
+		
+		/**
+		 * Fired when the viewer canvas first renders. No arguments are passed
+		 * with this event.
+		 *
+		 * @event renderEvent
+		 */
+		this.createEvent("renderEvent");
+
+		this.on("dataRefreshEvent", this._refreshDataTable, this, true);
+		
+		this._initLauncherDOM();
+		
+		if(this.get("showChart")) {
+			this.on("sortedByChange", this._refreshChart);
+		}
+
+		YAHOO.log("ProfilerViewer instance initialization complete.", "info", "ProfilerViewer");
+	};
+
+	/**
+	 * If no element is passed in, create it as the first element
+	 * in the document.
+	 * @method _createProfilerViewerElement
+	 * @return HTMLElement
+	 * @private
+	 */
+	proto._createProfilerViewerElement = function() {
+		YAHOO.log("Creating root element...", "info", "ProfilerViewer");
+
+		var el = document.createElement("div");
+		document.body.insertBefore(el, document.body.firstChild);
+		Dom.addClass(el, this.SKIN_CLASS);
+		Dom.addClass(el, PV.CLASS);
+		YAHOO.log(el);
+		return el;
+	};
+			
+    /**
+     * Provides a readable name for the ProfilerViewer instance.
+     * @method toString
+     * @return String
+	 * @private
+	 */
+    proto.toString = function() {
+        return "ProfilerViewer " + (this.get('id') || this.get('tagName'));
+    };
+
+    /**
+     * Toggles visibility of the viewer canvas.
+     * @method _toggleVisible
+     * @return void
+	 * @private
+     */	
+	proto._toggleVisible = function() {
+		YAHOO.log("Toggling visibility to " + !this.get("visible") + ".", "info", "ProfilerViewer");
+		
+		var newVis = (this.get("visible")) ? false : true;
+		this.set("visible", newVis);
+    };
+
+    /**
+     * Shows the viewer canvas.
+     * @method show
+     * @return void
+	 * @private
+     */	
+	 proto._show = function() {
+	 	if(!this._busy) {
+			this._setBusyState(true);
+			if(!this._rendered) {
+				var loader = new YAHOO.util.YUILoader();
+				if (this.get("base")) {
+					loader.base = this.get("base");
+				}
+				
+				var modules = ["datatable"];
+				if(this.get("showChart")) {
+					modules.push("charts");
+				}
+				
+				loader.insert({ require: modules,
+								onSuccess: function() {
+									this._render();
+								},
+								scope: this});
+			} else {
+				var el = this.get("element");
+				Dom.removeClass(el, "yui-pv-minimized");
+				this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
+				
+				//The Flash Charts component can't be set to display:none,
+				//and even after positioning it offscreen the screen
+				//may fail to repaint in some browsers.  Adding an empty
+				//style rule to the console body can help force a repaint:
+				Dom.addClass(el, "yui-pv-null");
+				Dom.removeClass(el, "yui-pv-null");
+				
+				//Always refresh data when changing to visible:
+				this.refreshData();
+			}
+		}
+    };
+
+    /**
+     * Hides the viewer canvas.
+     * @method hide
+     * @return void
+	 * @private
+     */	
+	proto._hide = function() {
+		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.viewprofiler;
+		Dom.addClass(this.get("element"), "yui-pv-minimized");
+    };
+	
+	/**
+	 * Render the viewer canvas
+	 * @method _render
+	 * @return void
+	 * @private
+	 */
+	proto._render = function() {
+		YAHOO.log("Beginning to render ProfilerViewer canvas...", "info", "ProfilerViewer");
+		
+		Dom.removeClass(this.get("element"), "yui-pv-minimized");
+		
+		this._initViewerDOM();
+		this._initDataTable();
+		if(this.get("showChart")) {
+			this._initChartDOM();
+			this._initChart();
+		}
+		this._rendered = true;
+		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
+		
+		this.fireEvent("renderEvent");
+
+		YAHOO.log("ProfilerViewer rendering complete...", "info", "ProfilerViewer");
+	};
+	
+	/**
+	 * Set up the DOM structure for the ProfilerViewer launcher.
+	 * @method _initLauncherDOM
+	 * @private
+	 */
+	proto._initLauncherDOM = function() {
+		YAHOO.log("Creating the launcher...", "info", "ProfilerViewer");
+		
+		var el = this.get("element");
+		Dom.addClass(el, PV.CLASS);
+		Dom.addClass(el, "yui-pv-minimized");
+
+		this._headEl = document.createElement("div");
+		Dom.addClass(this._headEl, "hd");
+		
+		var s = PV.STRINGS.buttons;
+		var b = (this.get("visible")) ? s.hideprofiler : s.viewprofiler;
+		
+		this._toggleVisibleEl = this._createButton(b, this._headEl);
+		
+		this._refreshEl = this._createButton(s.refreshdata, this._headEl);
+		Dom.addClass(this._refreshEl, PV.CLASS_REFRESH);
+		
+		this._busyEl = document.createElement("span");
+		this._headEl.appendChild(this._busyEl);
+
+		var title = document.createElement("h4");
+		title.innerHTML = PV.STRINGS.title;
+		this._headEl.appendChild(title);
+		
+		el.appendChild(this._headEl);
+		
+		Event.on(this._toggleVisibleEl, "click", this._toggleVisible, this, true);
+		Event.on(this._refreshEl, "click", function() {
+			if(!this._busy) {
+				this._setBusyState(true);
+				this.fireEvent("dataRefreshEvent");
+			}
+		}, this, true);
+	};
+
+	/**
+	 * Set up the DOM structure for the ProfilerViewer canvas,
+	 * including the holder for the DataTable.
+	 * @method _initViewerDOM
+	 * @private
+	 */
+	proto._initViewerDOM = function() {
+		YAHOO.log("Creating DOM structure for viewer...", "info", "ProfilerViewer");
+		
+		var el = this.get("element");
+		this._bodyEl = document.createElement("div");
+		Dom.addClass(this._bodyEl, "bd");
+	 	this._tableEl = document.createElement("div");
+		Dom.addClass(this._tableEl, PV.CLASS_TABLE);
+		this._bodyEl.appendChild(this._tableEl);
+		el.appendChild(this._bodyEl);
+	};
+
+	/**
+	 * Set up the DOM structure for the ProfilerViewer canvas.
+	 * @method _initChartDOM
+	 * @private
+	 */
+	proto._initChartDOM = function() {
+		YAHOO.log("Adding DOM structure for chart...", "info", "ProfilerViewer");
+		
+		this._chartContainer = document.createElement("div");
+		Dom.addClass(this._chartContainer, PV.CLASS_CHART_CONTAINER);
+		
+		var chl = document.createElement("div");
+		Dom.addClass(chl, PV.CLASS_CHART_LEGEND);
+		
+		var chw = document.createElement("div");
+
+		this._chartLegendEl = document.createElement("dl");
+		this._chartLegendEl.innerHTML = "<dd>" + PV.STRINGS.initMessage + "</dd>";
+		
+		this._chartEl = document.createElement("div");
+		Dom.addClass(this._chartEl, PV.CLASS_CHART);
+		
+		var msg = document.createElement("p");
+		msg.innerHTML = PV.STRINGS.installFlashMessage;
+		this._chartEl.appendChild(msg);
+		
+		this._chartContainer.appendChild(chl);
+		chl.appendChild(chw);
+		chw.appendChild(this._chartLegendEl);
+		this._chartContainer.appendChild(this._chartEl);
+		this._bodyEl.insertBefore(this._chartContainer,this._tableEl);
+	};
+
+
+	/**
+	 * Create anchor elements for use as buttons. Args: label
+	 * is text to appear on the face of the button, parentEl
+	 * is the el to which the anchor will be attached, position
+	 * is true for inserting as the first node and false for
+	 * inserting as the last node of the parentEl.
+	 * @method _createButton
+	 * @private
+	 */	
+	proto._createButton = function(label, parentEl, position) {
+		var b = document.createElement("a");
+		b.innerHTML = b.title = label;
+		if(parentEl) {
+			if(!position) {
+				parentEl.appendChild(b);
+			} else {
+				parentEl.insertBefore(b, parentEl.firstChild);	
+			}
+		}
+		return b;
+	};
+	
+	/**
+	 * Set's console busy state.
+	 * @method _setBusyState
+	 * @private
+	 **/
+	proto._setBusyState = function(b) {
+		if(b) {
+			Dom.addClass(this._busyEl, PV.CLASS_BUSY);
+			this._busy = true;
+		} else {
+			Dom.removeClass(this._busyEl, PV.CLASS_BUSY);
+			this._busy = false;
+		}
+	};
+
+	/**
+	 * Generages a sorting function based on current sortedBy
+	 * values.
+	 * @method _createProfilerViewerElement
+	 * @private
+	 **/
+	proto._genSortFunction = function(key, dir) {
+		var by = key;
+		var direction = dir;
+		return function(a, b) {
+			if (direction == YAHOO.widget.DataTable.CLASS_ASC) {
+				return a[by] - b[by];	
+			} else {
+				return ((a[by] - b[by]) * -1);
+			}
+		};
+	};
+
+	/**
+	 * Utility function for array sums.
+	 * @method _arraySum
+	 * @private
+	 **/	
+	 var _arraySum = function(arr){
+		var ct = 0;
+		for(var i = 0; i < arr.length; ct+=arr[i++]){}
+		return ct;
+	};
+	
+	/**
+	 * Retrieves data from Profiler, filtering and sorting as needed
+	 * based on current widget state.  Adds calculated percentage
+	 * column and function name to data returned by Profiler.
+	 * @method _getProfilerData
+	 * @private
+	 **/
+	proto._getProfilerData = function() {
+		YAHOO.log("Profiler data requested from function DataSource.", "info", "ProfilerViewer");
+		
+		var obj = Profiler.getFullReport();
+		var arr = [];
+		var totalTime = 0;
+		for (name in obj) {
+    		if (YAHOO.lang.hasOwnProperty(obj, name)) {
+				var r = obj[name];
+				var o = {};
+				o.fn = name; //add function name to record
+				o.points = r.points.slice(); //copy live array
+				o.calls = r.calls;
+				o.min = r.min;
+				o.max = r.max;
+				o.avg = r.avg;
+				o.total = _arraySum(o.points);
+				o.points = r.points;
+				var f = this.get("filter");
+				if((!f) || (f(o))) {
+					arr.push(o);
+					totalTime += o.total;
+				}
+			}
+		}
+		
+		//add calculated percentage column
+		for (var i = 0, j = arr.length; i < j; i++) {
+			arr[i].pct = (totalTime) ? (arr[i].total * 100) / totalTime : 0;	
+		}
+
+		var sortedBy = this.get("sortedBy");
+		var key = sortedBy.key;
+		var dir = sortedBy.dir;		
+
+		arr.sort(this._genSortFunction(key, dir));
+		
+		YAHOO.log("Returning data from DataSource: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
+		
+		return arr;
+	};
+	
+	/**
+	 * Set up the DataTable.
+	 * @method _initDataTable
+	 * @private
+	 */
+	proto._initDataTable = function() {
+		YAHOO.log("Creating DataTable instance...", "info", "ProfilerViewer");
+		
+		var self = this;
+		
+		//Set up the JS Function DataSource, pulling data from
+		//the Profiler.
+		this._dataSource = new YAHOO.util.DataSource(
+			function() {
+				return self._getProfilerData.call(self);	
+			},
+			{
+				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
+				maxCacheEntries: 0
+			}
+		);
+		var ds = this._dataSource;
+
+		ds.responseSchema =
+		{
+			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct", "points"]
+		};
+		
+		//Set up the DataTable.
+		var formatTimeValue = function(elCell, oRecord, oColumn, oData) {
+			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*1000))/1000;
+			elCell.innerHTML = a + " " + PV.STRINGS.millisecondsAbbrev;
+		};
+
+		var formatPercent = function(elCell, oRecord, oColumn, oData) {
+			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*100))/100;
+			elCell.innerHTML = a + "%";
+		};
+		
+		var a = YAHOO.widget.DataTable.CLASS_ASC;
+		var d = YAHOO.widget.DataTable.CLASS_DESC;
+		var c = PV.STRINGS.colHeads;
+		var f = formatTimeValue;
+		
+		var cols = [
+			{key:"fn", sortable:true, label: c.fn[0],
+				sortOptions: {defaultDir:a}, 
+				resizeable: (YAHOO.util.DragDrop) ? true : false,
+				minWidth:c.fn[1]},
+			{key:"calls", sortable:true, label: c.calls[0],
+				sortOptions: {defaultDir:d},
+				width:c.calls[1]},
+			{key:"avg", sortable:true, label: c.avg[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.avg[1]},
+			{key:"min", sortable:true, label: c.min[0],
+				sortOptions: {defaultDir:a},
+				formatter:f,
+				width:c.min[1]}, 
+			{key:"max", sortable:true, label: c.max[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.max[1]},
+			{key:"total", sortable:true, label: c.total[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.total[1]},
+			{key:"pct", sortable:true, label: c.pct[0],
+				sortOptions: {defaultDir:d}, 
+				formatter:formatPercent,
+				width:c.pct[1]}
+		];
+
+		this._dataTable = new YAHOO.widget.DataTable(this._tableEl, cols, ds, {
+			scrollable:true,
+			height:this.get("tableHeight"),
+			initialRequest:null,
+			sortedBy: {
+				key: "total",
+				dir: YAHOO.widget.DataTable.CLASS_DESC
+			}
+		});
+		var dt = this._dataTable;
+
+		//Wire up DataTable events to drive the rest of the UI.
+		dt.subscribe("sortedByChange", this._sortedByChange, this, true);
+		dt.subscribe("renderEvent", this._dataTableRenderHandler, this, true);
+		dt.subscribe("initEvent", this._dataTableRenderHandler, this, true);
+		Event.on(this._tableEl.getElementsByTagName("th"), "click", this._thClickHandler, this, true);
+		YAHOO.log("DataTable initialized.", "info", "ProfilerViewer");
+	};
+		
+	/**
+	 * Proxy the sort event in DataTable into the ProfilerViewer
+	 * attribute.
+	 * @method _sortedByChange
+	 * @private
+	 **/
+	proto._sortedByChange = function(o) {
+		if(o.newValue && o.newValue.key) {
+			YAHOO.log("Relaying DataTable sortedBy value change; new key: " + o.newValue.key + "; new direction: " + o.newValue.dir + ".", "info", "ProfilerViewer");
+			this.set("sortedBy", {key: o.newValue.key, dir:o.newValue.dir});
+		}
+	};
+	
+	/**
+	 * Proxy the render event in DataTable into the ProfilerViewer
+	 * attribute.
+	 * @method _dataTableRenderHandler
+	 * @private
+	 **/
+	proto._dataTableRenderHandler = function(o) {
+		YAHOO.log("DataTable's render event has fired.", "info", "ProfilerViewer");
+		this._setBusyState(false);
+	};
+	
+	/**
+	 * Event handler for clicks on the DataTable's sortable column
+	 * heads.
+	 * @method _thClickHandler
+	 * @private
+	 **/
+	proto._thClickHandler = function(o) {
+		YAHOO.log("DataTable's header row was clicked for sorting.", "info", "ProfilerViewer");
+		this._setBusyState(true);
+	};
+
+	/**
+	 * Refresh DataTable, getting new data from Profiler.
+	 * @method _refreshDataTable
+	 * @private
+	 **/
+	proto._refreshDataTable = function(args) {
+		YAHOO.log("Beginning to refresh DataTable contents...", "info", "ProfilerViewer");
+		var dt = this._dataTable;
+		dt.getDataSource().sendRequest("", dt.onDataReturnInitializeTable, dt);
+		YAHOO.log("DataTable refresh complete.", "info", "ProfilerViewer");
+	};
+
+	/**
+	 * Refresh chart, getting new data from table.
+	 * @method _refreshChart
+	 * @private
+	 **/
+	proto._refreshChart = function() {
+		YAHOO.log("Beginning to refresh Chart contents...", "info", "ProfilerViewer");
+		
+		switch (this.get("sortedBy").key) {
+			case "fn":
+				/*Keep the same data on the chart, but force update to 
+				  reflect new sort order on function/method name: */
+				this._chart.set("dataSource", this._chart.get("dataSource"));
+				/*no further action necessary; chart redraws*/
+				return;
+			case "calls":
+				/*Null out the xAxis formatting before redrawing chart.*/
+				this._chart.set("xAxis", this._chartAxisDefinitionPlain);
+				break;
+			case "pct":
+				this._chart.set("xAxis", this._chartAxisDefinitionPercent);
+				break;
+			default:
+				/*Set the default xAxis; redraw legend; set the new series definition.*/
+				this._chart.set("xAxis", this._chartAxisDefinitionTime);
+				break;
+		}
+		
+		this._drawChartLegend();
+		this._chart.set("series", this._getSeriesDef(this.get("sortedBy").key));
+
+		YAHOO.log("Chart refresh complete.", "info", "ProfilerViewer");
+	};
+	
+	/**
+	 * Get data for the Chart from DataTable recordset
+	 * @method _getChartData
+	 * @private
+	 */
+	proto._getChartData = function() {
+		YAHOO.log("Getting data for chart from function DataSource.", "info", "ProfilerViewer");
+		//var records = this._getProfilerData();
+		var records = this._dataTable.getRecordSet().getRecords(0, this.get("maxChartFunctions"));
+		var arr = [];
+		for (var i = 0, j = records.length; i<j; i++) {
+			arr.push(records[i].getData());	
+		}
+		YAHOO.log("Returning data to Chart: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
+		return arr;
+	};
+	
+	/**
+	 * Build series definition based on current configuration attributes.
+	 * @method _getSeriesDef
+	 * @private
+	 */
+	proto._getSeriesDef = function(field) {
+		var sd = this.get("chartSeriesDefinitions")[field];
+		var arr = [];
+		for(var i = 0, j = sd.group.length; i<j; i++) {
+			var c = this.get("chartSeriesDefinitions")[sd.group[i]];
+			arr.push(
+				{displayName:c.displayName,
+				 xField:c.xField,
+				 style: {color:c.style.color, size:c.style.size}
+				}
+			);
+		}
+		
+		YAHOO.log("Returning new series definition to chart: " + YAHOO.lang.dump(arr), "info", "ProfilerViewer");
+		return arr;
+	};
+	
+	/**
+	 * Set up the Chart.
+	 * @method _initChart
+	 * @private
+	 */
+	proto._initChart = function() {
+		YAHOO.log("Initializing chart...", "info", "ProfilerViewer");
+		
+		this._sizeChartCanvas();
+		
+		YAHOO.widget.Chart.SWFURL = this.get("swfUrl");
+
+		var self = this;
+
+		//Create DataSource based on records currently displayed
+		//at the top of the sort list in the DataTable.
+		var ds = new YAHOO.util.DataSource(
+			//force the jsfunction DataSource to run in the scope of
+			//the ProfilerViewer, not in the YAHOO.util.DataSource scope:
+			function() {
+				return self._getChartData.call(self);
+			}, 
+			{
+				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
+				maxCacheEntries: 0
+			}
+		);
+
+		ds.responseSchema =
+		{
+			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct" ]
+		};
+		
+		ds.subscribe('responseEvent', this._sizeChartCanvas, this, true);
+		
+		//Set up the chart itself.
+		this._chartAxisDefinitionTime = new YAHOO.widget.NumericAxis();
+		this._chartAxisDefinitionTime.labelFunction = "YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";
+		
+		this._chartAxisDefinitionPercent = new YAHOO.widget.NumericAxis();
+		this._chartAxisDefinitionPercent.labelFunction = "YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";
+
+		this._chartAxisDefinitionPlain = new YAHOO.widget.NumericAxis();
+		
+		this._chart = new YAHOO.widget.BarChart( this._chartEl, ds,
+		{
+			yField: "fn",
+			series: this._getSeriesDef(this.get("sortedBy").key),
+			style: this.get("chartStyle"),
+			xAxis: this._chartAxisDefinitionTime
+		} );
+		
+		this._drawChartLegend();
+		this._chartInitialized = true;
+		this._dataTable.unsubscribe("initEvent", this._initChart, this);
+		this._dataTable.subscribe("initEvent", this._refreshChart, this, true);
+		
+		YAHOO.log("Chart initialization complete.", "info", "ProfilerViewer");
+	};
+	
+	/**
+	 * Set up the Chart's legend
+	 * @method _drawChartLegend
+	 * @private
+	 **/
+	proto._drawChartLegend = function() {
+		YAHOO.log("Drawing chart legend...", "info", "ProfilerViewer");
+		var seriesDefs = this.get("chartSeriesDefinitions");
+		var currentDef = seriesDefs[this.get("sortedBy").key];
+		var l = this._chartLegendEl;
+		l.innerHTML = "";
+		for(var i = 0, j = currentDef.group.length; i<j; i++) {
+			var c = seriesDefs[currentDef.group[i]];
+			var dt = document.createElement("dt");
+			Dom.setStyle(dt, "backgroundColor", "#" + c.style.color);
+			var dd = document.createElement("dd");
+			dd.innerHTML = c.displayName;
+			l.appendChild(dt);
+			l.appendChild(dd);
+		}
+	};
+	
+	/**
+	 * Resize the chart's canvas if based on number of records
+	 * returned from the chart's datasource.
+	 * @method _sizeChartCanvas
+	 * @private
+	 **/
+	proto._sizeChartCanvas = function(o) {
+		YAHOO.log("Resizing chart canvas...", "info", "ProfilerViewer");
+		var bars = (o) ? o.response.length : this.get("maxChartFunctions");
+		var s = (bars * 36) + 34;
+		if (s != parseInt(this._chartElHeight, 10)) {
+			this._chartElHeight = s;
+			Dom.setStyle(this._chartEl, "height", s + "px");
+		}
+	};
+
+    /**
+     * setAttributeConfigs TabView specific properties.
+     * @method initAttributes
+     * @param {Object} attr Hash of initial attributes
+	 * @method initAttributes
+	 * @private
+     */
+    proto.initAttributes = function(attr) {
+		YAHOO.log("Initializing attributes...", "info", "ProfilerViewer");
+        YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
+        /**
+         * The YUI Loader base path from which to pull YUI files needed
+		 * in the rendering of the ProfilerViewer canvas.  Passed directly
+		 * to YUI Loader.  Leave blank to draw files from
+		 * yui.yahooapis.com.
+         * @attribute base
+         * @type string
+		 * @default ""
+         */
+        this.setAttributeConfig('base', {
+            value: attr.base
+        });
+
+        /**
+         * The height of the DataTable.  The table will scroll
+		 * vertically if the content overflows the specified
+		 * height.
+         * @attribute tableHeight
+         * @type string
+		 * @default "15em"
+         */
+        this.setAttributeConfig('tableHeight', {
+            value: attr.tableHeight || "15em",
+			method: function(s) {
+				if(this._dataTable) {
+					this._dataTable.set("height", s);
+				}
+			}
+        });
+		
+        /**
+         * The default column key to sort by.  Valid keys are: fn, calls,
+		 * avg, min, max, total.  Valid dir values are: 
+		 * YAHOO.widget.DataTable.CLASS_ASC and
+		 * YAHOO.widget.DataTable.CLASS_DESC (or their
+		 * string equivalents).
+         * @attribute sortedBy
+         * @type string
+		 * @default {key:"total", dir:"yui-dt-desc"}
+         */
+        this.setAttributeConfig('sortedBy', {
+            value: attr.sortedBy || {key:"total", dir:"yui-dt-desc"}
+        });
+
+        /**
+         * A filter function to use in selecting functions that will
+		 * appear in the ProfilerViewer report.  The function is passed
+		 * a function report object and should return a boolean indicating
+		 * whether that function should be included in the ProfilerViewer
+		 * display.  The argument is structured as follows:
+		 *
+		 * {
+		 *	 	fn: <str function name>,
+		 *		calls : <n number of calls>,
+		 *		avg : <n average call duration>,
+		 *		max: <n duration of longest call>,
+		 *		min: <n duration of shortest call>,
+		 *		total: <n total time of all calls>
+		 *		points : <array time in ms of each call>
+		 *	}
+		 *
+		 * For example, you would use the follwing filter function to 
+		 * return only functions that have been called at least once:
+		 * 
+		 * 	function(o) {
+		 *		return (o.calls > 0);
+		 *	}
+		 *
+         * @attribute filter
+         * @type function
+		 * @default null
+         */
+        this.setAttributeConfig('filter', {
+            value: attr.filter || null,
+			validator: YAHOO.lang.isFunction
+        });
+
+		/**
+		 * The path to the YUI Charts swf file; must be a full URI
+		 * or a path relative to the page being profiled. Changes at runtime
+		 * not supported; pass this value in at instantiation.
+		 * @attribute swfUrl
+		 * @type string
+		 * @default "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
+		 */
+		this.setAttributeConfig('swfUrl', {
+			value: attr.swfUrl || "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
+		});
+
+        /**
+         * The maximum number of functions to profile in the chart. The
+		 * greater the number of functions, the greater the height of the
+		 * chart canvas.
+		 * height.
+         * @attribute maxChartFunctions
+         * @type int
+		 * @default 6
+         */
+        this.setAttributeConfig('maxChartFunctions', {
+            value: attr.maxChartFunctions || 6,
+			method: function(s) {
+				if(this._rendered) {
+					this._sizeChartCanvas();
+				}
+			},
+			validator: YAHOO.lang.isNumber
+        });
+		
+        /**
+         * The style object that defines the chart's visual presentation.
+		 * Conforms to the style attribute passed to the Charts Control
+		 * constructor.  See Charts Control User's Guide for more information
+		 * on how to format this object.
+         * @attribute chartStyle
+         * @type obj
+		 * @default See JS source for default definitions.
+         */
+        this.setAttributeConfig('chartStyle', {
+            value: 	attr.chartStyle || {
+				font:
+					{
+						name: "Arial",
+						color: 0xeeee5c,
+						size: 12
+					},
+					background:
+					{
+						color: "6e6e63"
+					}
+				},
+			method: function() {
+					if(this._rendered && this.get("showChart")) {
+						this._refreshChart();
+					}
+				}
+        });
+		
+        /**
+         * The series definition information to use when charting
+		 * specific fields on the chart.  displayName, xField,
+		 * and style members are used to construct the series
+		 * definition; the "group" member is the array of fields
+		 * that should be charted when the table is sorted by a
+		 * given field.
+         * @attribute chartSeriesDefinitions
+         * @type obj
+		 * @default See JS source for full default definitions.
+         */
+        this.setAttributeConfig('chartSeriesDefinitions', {
+            value: 	attr.chartSeriesDefinitions ||  {
+						total: {
+							displayName: PV.STRINGS.colHeads.total[0],
+							xField: "total",
+							style: {color:"4d95dd", size:20},
+							group: ["total"]
+						},
+						calls: {		
+							displayName: PV.STRINGS.colHeads.calls[0],
+							xField: "calls",
+							style: {color:"edff9f", size:20},
+							group: ["calls"]
+						},
+						avg: {
+							displayName: PV.STRINGS.colHeads.avg[0],
+							xField: "avg",
+							style: {color:"209daf", size:9},
+							group: ["avg", "min", "max"]
+						},
+						min: {
+							displayName: PV.STRINGS.colHeads.min[0],
+							xField: "min",
+							style: {color:"b6ecf4", size:9},
+							group: ["avg", "min", "max"]
+						},
+						max: {
+							displayName: PV.STRINGS.colHeads.max[0],
+							xField: "max",
+							style: {color:"29c7de", size:9},
+							group: ["avg", "min", "max"]
+						},
+						pct: {
+							displayName: PV.STRINGS.colHeads.pct[0],
+							xField: "pct",
+							style: {color:"C96EDB", size:20},
+							group: ["pct"]
+						}
+				},
+			method: function() {
+					if(this._rendered && this.get("showChart")) {
+						this._refreshChart();
+					}
+				}
+        });
+		
+        /**
+         * The default visibility setting for the viewer canvas. If true,
+		 * the viewer will load all necessary files and render itself
+		 * immediately upon instantiation; otherwise, the viewer will
+		 * load only minimal resources until the user toggles visibility
+		 * via the UI.
+         * @attribute visible
+         * @type boolean
+		 * @default false
+         */
+        this.setAttributeConfig('visible', {
+            value: attr.visible || false,
+			validator: YAHOO.lang.isBoolean,
+			method: function(b) {
+				if(b) {
+					this._show();
+				} else {
+					if (this._rendered) {
+						this._hide();
+					}
+				}
+			}
+        });
+
+        /**
+         * The default visibility setting for the chart.
+         * @attribute showChart
+         * @type boolean
+		 * @default true
+         */
+        this.setAttributeConfig('showChart', {
+            value: attr.showChart || true,
+			validator: YAHOO.lang.isBoolean,
+			writeOnce: true
+			
+        });
+		
+		YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
+		
+		YAHOO.log("Attributes initialized.", "info", "ProfilerViewer");
+    };
+	
+})();
+YAHOO.register("profilerviewer", YAHOO.widget.ProfilerViewer, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/profilerviewer/profilerviewer-min.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,9 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){YAHOO.widget.ProfilerViewer=function(H,G){G=G||{};if(arguments.length==1&&!YAHOO.lang.isString(H)&&!H.nodeName){G=H;H=G.element||null;}if(!H&&!G.element){H=this._createProfilerViewerElement();}YAHOO.widget.ProfilerViewer.superclass.constructor.call(this,H,G);this._init();};YAHOO.extend(YAHOO.widget.ProfilerViewer,YAHOO.util.Element);YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer,{CLASS:"yui-pv",CLASS_DASHBOARD:"yui-pv-dashboard",CLASS_REFRESH:"yui-pv-refresh",CLASS_BUSY:"yui-pv-busy",CLASS_CHART_CONTAINER:"yui-pv-chartcontainer",CLASS_CHART:"yui-pv-chart",CLASS_CHART_LEGEND:"yui-pv-chartlegend",CLASS_TABLE:"yui-pv-table",STRINGS:{title:"YUI Profiler (beta)",buttons:{viewprofiler:"View Profiler Data",hideprofiler:"Hide Profiler Report",showchart:"Show Chart",hidechart:"Hide Chart",refreshdata:"Refresh Data"},colHeads:{fn:["Function/Method",null],calls:["Calls",40],avg:["Average",80],min:["Shortest",70],max:["Longest",70],total:["Total Time",70],pct:["Percen!
 t",70]},millisecondsAbbrev:"ms",initMessage:"initialiazing chart...",installFlashMessage:"Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."},timeAxisLabelFunction:function(H){var G=(H===Math.floor(H))?H:(Math.round(H*1000))/1000;return(G+" "+YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);},percentAxisLabelFunction:function(H){var G=(H===Math.floor(H))?H:(Math.round(H*100))/100;return(G+"%");}},true);var C=YAHOO.util.Dom;var A=YAHOO.util.Event;var B=YAHOO.tool.Profiler;var E=YAHOO.widget.ProfilerViewer;var D=E.prototype;D.refreshData=function(){this.fireEvent("dataRefreshEvent");};D.getHeadEl=function(){return(this._headEl)?C.get(this._headEl):false;};D.getBodyEl=function(){return(this._bodyEl)?C.get(this._bodyEl):false;};D.getChartEl=function(){return(this._chartEl)?C.get(th!
 is._chartEl):false;};D.getTableEl=function(){return(this._tabl!
 eEl)?C.g
et(this._tableEl):false;};D.getDataTable=function(){return this._dataTable;};D.getChart=function(){return this._chart;};D._rendered=false;D._headEl=null;D._bodyEl=null;D._toggleVisibleEl=null;D._busyEl=null;D._busy=false;D._tableEl=null;D._dataTable=null;D._chartEl=null;D._chartLegendEl=null;D._chartElHeight=250;D._chart=null;D._chartInitialized=false;D._init=function(){this.createEvent("dataRefreshEvent");this.createEvent("renderEvent");this.on("dataRefreshEvent",this._refreshDataTable,this,true);this._initLauncherDOM();if(this.get("showChart")){this.on("sortedByChange",this._refreshChart);}};D._createProfilerViewerElement=function(){var G=document.createElement("div");document.body.insertBefore(G,document.body.firstChild);C.addClass(G,this.SKIN_CLASS);C.addClass(G,E.CLASS);return G;};D.toString=function(){return"ProfilerViewer "+(this.get("id")||this.get("tagName"));};D._toggleVisible=function(){var G=(this.get("visible"))?false:true;this.set("visible",G);};D._show=functio!
 n(){if(!this._busy){this._setBusyState(true);if(!this._rendered){var G=new YAHOO.util.YUILoader();if(this.get("base")){G.base=this.get("base");}var H=["datatable"];if(this.get("showChart")){H.push("charts");}G.insert({require:H,onSuccess:function(){this._render();},scope:this});}else{var I=this.get("element");C.removeClass(I,"yui-pv-minimized");this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.hideprofiler;C.addClass(I,"yui-pv-null");C.removeClass(I,"yui-pv-null");this.refreshData();}}};D._hide=function(){this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.viewprofiler;C.addClass(this.get("element"),"yui-pv-minimized");};D._render=function(){C.removeClass(this.get("element"),"yui-pv-minimized");this._initViewerDOM();this._initDataTable();if(this.get("showChart")){this._initChartDOM();this._initChart();}this._rendered=true;this._toggleVisibleEl.innerHTML=E.STRINGS.buttons.hideprofiler;this.fireEvent("renderEvent");};D._initLauncherDOM=function(){var I=this.get("element");C.add!
 Class(I,E.CLASS);C.addClass(I,"yui-pv-minimized");this._headEl!
 =documen
t.createElement("div");C.addClass(this._headEl,"hd");var H=E.STRINGS.buttons;var G=(this.get("visible"))?H.hideprofiler:H.viewprofiler;this._toggleVisibleEl=this._createButton(G,this._headEl);this._refreshEl=this._createButton(H.refreshdata,this._headEl);C.addClass(this._refreshEl,E.CLASS_REFRESH);this._busyEl=document.createElement("span");this._headEl.appendChild(this._busyEl);var J=document.createElement("h4");J.innerHTML=E.STRINGS.title;this._headEl.appendChild(J);I.appendChild(this._headEl);A.on(this._toggleVisibleEl,"click",this._toggleVisible,this,true);A.on(this._refreshEl,"click",function(){if(!this._busy){this._setBusyState(true);this.fireEvent("dataRefreshEvent");}},this,true);};D._initViewerDOM=function(){var G=this.get("element");this._bodyEl=document.createElement("div");C.addClass(this._bodyEl,"bd");this._tableEl=document.createElement("div");C.addClass(this._tableEl,E.CLASS_TABLE);this._bodyEl.appendChild(this._tableEl);G.appendChild(this._bodyEl);};D._initCh!
 artDOM=function(){this._chartContainer=document.createElement("div");C.addClass(this._chartContainer,E.CLASS_CHART_CONTAINER);var H=document.createElement("div");C.addClass(H,E.CLASS_CHART_LEGEND);var G=document.createElement("div");this._chartLegendEl=document.createElement("dl");this._chartLegendEl.innerHTML="<dd>"+E.STRINGS.initMessage+"</dd>";this._chartEl=document.createElement("div");C.addClass(this._chartEl,E.CLASS_CHART);var I=document.createElement("p");I.innerHTML=E.STRINGS.installFlashMessage;this._chartEl.appendChild(I);this._chartContainer.appendChild(H);H.appendChild(G);G.appendChild(this._chartLegendEl);this._chartContainer.appendChild(this._chartEl);this._bodyEl.insertBefore(this._chartContainer,this._tableEl);};D._createButton=function(I,J,H){var G=document.createElement("a");G.innerHTML=G.title=I;if(J){if(!H){J.appendChild(G);}else{J.insertBefore(G,J.firstChild);}}return G;};D._setBusyState=function(G){if(G){C.addClass(this._busyEl,E.CLASS_BUSY);
+this._busy=true;}else{C.removeClass(this._busyEl,E.CLASS_BUSY);this._busy=false;}};D._genSortFunction=function(H,G){var J=H;var I=G;return function(L,K){if(I==YAHOO.widget.DataTable.CLASS_ASC){return L[J]-K[J];}else{return((L[J]-K[J])*-1);}};};var F=function(G){var I=0;for(var H=0;H<G.length;I+=G[H++]){}return I;};D._getProfilerData=function(){var L=B.getFullReport();var N=[];var H=0;for(name in L){if(YAHOO.lang.hasOwnProperty(L,name)){var G=L[name];var I={};I.fn=name;I.points=G.points.slice();I.calls=G.calls;I.min=G.min;I.max=G.max;I.avg=G.avg;I.total=F(I.points);I.points=G.points;var P=this.get("filter");if((!P)||(P(I))){N.push(I);H+=I.total;}}}for(var M=0,K=N.length;M<K;M++){N[M].pct=(H)?(N[M].total*100)/H:0;}var O=this.get("sortedBy");var Q=O.key;var J=O.dir;N.sort(this._genSortFunction(Q,J));return N;};D._initDataTable=function(){var P=this;this._dataSource=new YAHOO.util.DataSource(function(){return P._getProfilerData.call(P);},{responseType:YAHOO.util.DataSource.TYPE!
 _JSARRAY,maxCacheEntries:0});var H=this._dataSource;H.responseSchema={fields:["fn","avg","calls","max","min","total","pct","points"]};var O=function(S,R,T,U){var Q=(U===Math.floor(U))?U:(Math.round(U*1000))/1000;S.innerHTML=Q+" "+E.STRINGS.millisecondsAbbrev;};var N=function(S,R,T,U){var Q=(U===Math.floor(U))?U:(Math.round(U*100))/100;S.innerHTML=Q+"%";};var M=YAHOO.widget.DataTable.CLASS_ASC;var J=YAHOO.widget.DataTable.CLASS_DESC;var K=E.STRINGS.colHeads;var I=O;var L=[{key:"fn",sortable:true,label:K.fn[0],sortOptions:{defaultDir:M},resizeable:(YAHOO.util.DragDrop)?true:false,minWidth:K.fn[1]},{key:"calls",sortable:true,label:K.calls[0],sortOptions:{defaultDir:J},width:K.calls[1]},{key:"avg",sortable:true,label:K.avg[0],sortOptions:{defaultDir:J},formatter:I,width:K.avg[1]},{key:"min",sortable:true,label:K.min[0],sortOptions:{defaultDir:M},formatter:I,width:K.min[1]},{key:"max",sortable:true,label:K.max[0],sortOptions:{defaultDir:J},formatter:I,width:K.max[1]},{key:"total!
 ",sortable:true,label:K.total[0],sortOptions:{defaultDir:J},fo!
 rmatter:
I,width:K.total[1]},{key:"pct",sortable:true,label:K.pct[0],sortOptions:{defaultDir:J},formatter:N,width:K.pct[1]}];this._dataTable=new YAHOO.widget.DataTable(this._tableEl,L,H,{scrollable:true,height:this.get("tableHeight"),initialRequest:null,sortedBy:{key:"total",dir:YAHOO.widget.DataTable.CLASS_DESC}});var G=this._dataTable;G.subscribe("sortedByChange",this._sortedByChange,this,true);G.subscribe("renderEvent",this._dataTableRenderHandler,this,true);G.subscribe("initEvent",this._dataTableRenderHandler,this,true);A.on(this._tableEl.getElementsByTagName("th"),"click",this._thClickHandler,this,true);};D._sortedByChange=function(G){if(G.newValue&&G.newValue.key){this.set("sortedBy",{key:G.newValue.key,dir:G.newValue.dir});}};D._dataTableRenderHandler=function(G){this._setBusyState(false);};D._thClickHandler=function(G){this._setBusyState(true);};D._refreshDataTable=function(G){var H=this._dataTable;H.getDataSource().sendRequest("",H.onDataReturnInitializeTable,H);};D._refresh!
 Chart=function(){switch(this.get("sortedBy").key){case"fn":this._chart.set("dataSource",this._chart.get("dataSource"));return;case"calls":this._chart.set("xAxis",this._chartAxisDefinitionPlain);break;case"pct":this._chart.set("xAxis",this._chartAxisDefinitionPercent);break;default:this._chart.set("xAxis",this._chartAxisDefinitionTime);break;}this._drawChartLegend();this._chart.set("series",this._getSeriesDef(this.get("sortedBy").key));};D._getChartData=function(){var H=this._dataTable.getRecordSet().getRecords(0,this.get("maxChartFunctions"));var G=[];for(var J=0,I=H.length;J<I;J++){G.push(H[J].getData());}return G;};D._getSeriesDef=function(K){var J=this.get("chartSeriesDefinitions")[K];var G=[];for(var I=0,H=J.group.length;I<H;I++){var L=this.get("chartSeriesDefinitions")[J.group[I]];G.push({displayName:L.displayName,xField:L.xField,style:{color:L.style.color,size:L.style.size}});}return G;};D._initChart=function(){this._sizeChartCanvas();YAHOO.widget.Chart.SWFURL=this.ge!
 t("swfUrl");var G=this;var H=new YAHOO.util.DataSource(functio!
 n(){retu
rn G._getChartData.call(G);},{responseType:YAHOO.util.DataSource.TYPE_JSARRAY,maxCacheEntries:0});H.responseSchema={fields:["fn","avg","calls","max","min","total","pct"]};H.subscribe("responseEvent",this._sizeChartCanvas,this,true);this._chartAxisDefinitionTime=new YAHOO.widget.NumericAxis();this._chartAxisDefinitionTime.labelFunction="YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";this._chartAxisDefinitionPercent=new YAHOO.widget.NumericAxis();this._chartAxisDefinitionPercent.labelFunction="YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";this._chartAxisDefinitionPlain=new YAHOO.widget.NumericAxis();this._chart=new YAHOO.widget.BarChart(this._chartEl,H,{yField:"fn",series:this._getSeriesDef(this.get("sortedBy").key),style:this.get("chartStyle"),xAxis:this._chartAxisDefinitionTime});this._drawChartLegend();this._chartInitialized=true;this._dataTable.unsubscribe("initEvent",this._initChart,this);this._dataTable.subscribe("initEvent",this._refreshChart,this,true);};D.!
 _drawChartLegend=function(){var M=this.get("chartSeriesDefinitions");var I=M[this.get("sortedBy").key];var H=this._chartLegendEl;H.innerHTML="";for(var K=0,J=I.group.length;K<J;K++){var N=M[I.group[K]];var L=document.createElement("dt");C.setStyle(L,"backgroundColor","#"+N.style.color);var G=document.createElement("dd");G.innerHTML=N.displayName;H.appendChild(L);H.appendChild(G);}};D._sizeChartCanvas=function(I){var G=(I)?I.response.length:this.get("maxChartFunctions");var H=(G*36)+34;if(H!=parseInt(this._chartElHeight,10)){this._chartElHeight=H;C.setStyle(this._chartEl,"height",H+"px");}};D.initAttributes=function(G){YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this,G);this.setAttributeConfig("base",{value:G.base});this.setAttributeConfig("tableHeight",{value:G.tableHeight||"15em",method:function(H){if(this._dataTable){this._dataTable.set("height",H);}}});this.setAttributeConfig("sortedBy",{value:G.sortedBy||{key:"total",dir:"yui-dt-desc"}});
+this.setAttributeConfig("filter",{value:G.filter||null,validator:YAHOO.lang.isFunction});this.setAttributeConfig("swfUrl",{value:G.swfUrl||"http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"});this.setAttributeConfig("maxChartFunctions",{value:G.maxChartFunctions||6,method:function(H){if(this._rendered){this._sizeChartCanvas();}},validator:YAHOO.lang.isNumber});this.setAttributeConfig("chartStyle",{value:G.chartStyle||{font:{name:"Arial",color:15658588,size:12},background:{color:"6e6e63"}},method:function(){if(this._rendered&&this.get("showChart")){this._refreshChart();}}});this.setAttributeConfig("chartSeriesDefinitions",{value:G.chartSeriesDefinitions||{total:{displayName:E.STRINGS.colHeads.total[0],xField:"total",style:{color:"4d95dd",size:20},group:["total"]},calls:{displayName:E.STRINGS.colHeads.calls[0],xField:"calls",style:{color:"edff9f",size:20},group:["calls"]},avg:{displayName:E.STRINGS.colHeads.avg[0],xField:"avg",style:{color:"209daf",size:9},group:!
 ["avg","min","max"]},min:{displayName:E.STRINGS.colHeads.min[0],xField:"min",style:{color:"b6ecf4",size:9},group:["avg","min","max"]},max:{displayName:E.STRINGS.colHeads.max[0],xField:"max",style:{color:"29c7de",size:9},group:["avg","min","max"]},pct:{displayName:E.STRINGS.colHeads.pct[0],xField:"pct",style:{color:"C96EDB",size:20},group:["pct"]}},method:function(){if(this._rendered&&this.get("showChart")){this._refreshChart();}}});this.setAttributeConfig("visible",{value:G.visible||false,validator:YAHOO.lang.isBoolean,method:function(H){if(H){this._show();}else{if(this._rendered){this._hide();}}}});this.setAttributeConfig("showChart",{value:G.showChart||true,validator:YAHOO.lang.isBoolean,writeOnce:true});YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this,G);};})();YAHOO.register("profilerviewer",YAHOO.widget.ProfilerViewer,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/profilerviewer/profilerviewer.js
===================================================================
--- trunk/root/static/yui/profilerviewer/profilerviewer.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/profilerviewer/profilerviewer.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1192 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function() {
+
+    /**
+     * The ProfilerViewer module provides a graphical display for viewing
+	 * the output of the YUI Profiler <http://developer.yahoo.com/yui/profiler>.
+     * @module profilerviewer
+     * @requires yahoo, dom, event, element, profiler, yuiloader
+     */
+
+    /**
+     * A widget to view YUI Profiler output.
+     * @namespace YAHOO.widget
+     * @class ProfilerViewer
+     * @extends YAHOO.util.Element
+     * @constructor
+     * @param {HTMLElement | String | Object} el(optional) The html 
+     * element into which the ProfileViewer should be rendered. 
+     * An element will be created if none provided.
+     * @param {Object} attr (optional) A key map of the ProfilerViewer's 
+     * initial attributes.  Ignored if first arg is an attributes object.
+     */
+    YAHOO.widget.ProfilerViewer = function(el, attr) {
+        attr = attr || {};
+        if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
+            attr = el;
+            el = attr.element || null;
+        }
+        if (!el && !attr.element) {
+            el = this._createProfilerViewerElement();
+        }
+
+    	YAHOO.widget.ProfilerViewer.superclass.constructor.call(this, el, attr); 
+		
+		this._init();
+		
+    };
+
+    YAHOO.extend(YAHOO.widget.ProfilerViewer, YAHOO.util.Element);
+	
+	// Static members of YAHOO.widget.ProfilerViewer:
+	YAHOO.lang.augmentObject(YAHOO.widget.ProfilerViewer, {
+		/**
+		 * Classname for ProfilerViewer containing element.
+		 * @static
+		 * @property CLASS
+		 * @type string
+		 * @public
+		 * @default "yui-pv"
+		 */
+		CLASS: 'yui-pv',
+	
+		/**
+		 * Classname for ProfilerViewer button dashboard. 
+		 * @static
+		 * @property CLASS_DASHBOARD
+		 * @type string
+		 * @public
+		 * @default "yui-pv-dashboard"
+		 */
+		CLASS_DASHBOARD: 'yui-pv-dashboard',
+
+		/**
+		 * Classname for the "refresh data" button. 
+		 * @static
+		 * @property CLASS_REFRESH
+		 * @type string
+		 * @public
+		 * @default "yui-pv-refresh"
+		 */
+		CLASS_REFRESH: 'yui-pv-refresh',
+
+		/**
+		 * Classname for busy indicator in the dashboard. 
+		 * @static
+		 * @property CLASS_BUSY
+		 * @type string
+		 * @public
+		 * @default "yui-pv-busy"
+		 */
+		CLASS_BUSY: 'yui-pv-busy',
+	
+		/**
+		 * Classname for element containing the chart and chart
+		 * legend elements.
+		 * @static
+		 * @property CLASS_CHART_CONTAINER
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chartcontainer"
+		 */
+		CLASS_CHART_CONTAINER: 'yui-pv-chartcontainer',
+	
+		/**
+		 * Classname for element containing the chart.
+		 * @static
+		 * @property CLASS_CHART
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chart"
+		 */
+		CLASS_CHART: 'yui-pv-chart',
+		
+		/**
+		 * Classname for element containing the chart's legend. 
+		 * @static
+		 * @property CLASS_CHART_LEGEND
+		 * @type string
+		 * @public
+		 * @default "yui-pv-chartlegend"
+		 */
+		CLASS_CHART_LEGEND: 'yui-pv-chartlegend',
+		
+		/**
+		 * Classname for element containing the datatable. 
+		 * @static
+		 * @property CLASS_TABLE
+		 * @type string
+		 * @public
+		 * @default "yui-pv-table"
+		 */
+		CLASS_TABLE: 'yui-pv-table',
+		
+		/**
+		 * Strings used in the UI.
+		 * @static
+		 * @property STRINGS
+		 * @object
+		 * @public
+		 * @default English language strings for UI.
+		 */
+		STRINGS: {
+			title: "YUI Profiler (beta)",
+			buttons: {
+				viewprofiler: "View Profiler Data",
+				hideprofiler: "Hide Profiler Report",
+				showchart: "Show Chart",
+				hidechart: "Hide Chart",
+				refreshdata: "Refresh Data"
+			},
+			colHeads: {
+				//key: [column head label, width in pixels]
+				fn: ["Function/Method", null], //must auto-size
+				calls: ["Calls", 40],
+				avg: ["Average", 80],
+				min: ["Shortest", 70],
+				max: ["Longest", 70],
+				total: ["Total Time", 70],
+				pct: ["Percent", 70]
+			},
+			millisecondsAbbrev: "ms",
+			initMessage: "initialiazing chart...",
+			installFlashMessage: "Unable to load Flash content. The YUI Charts Control requires Flash Player 9.0.45 or higher. You can download the latest version of Flash Player from the <a href='http://www.adobe.com/go/getflashplayer'>Adobe Flash Player Download Center</a>."
+		},
+
+		/**
+		 * Function used to format numbers in milliseconds
+		 * for chart; must be publicly accessible, per Charts spec.
+		 * @static
+		 * @property timeAxisLabelFunction
+		 * @type function
+		 * @private
+		 */
+		timeAxisLabelFunction: function(n) {
+			var a = (n === Math.floor(n)) ? n : (Math.round(n*1000))/1000;
+			return (a + " " + YAHOO.widget.ProfilerViewer.STRINGS.millisecondsAbbrev);
+		},
+
+		/**
+		 * Function used to format percent numbers for chart; must
+		 * be publicly accessible, per Charts spec.
+		 * @static
+		 * @property percentAxisLabelFunction
+		 * @type function
+		 * @private
+		 */
+		percentAxisLabelFunction: function(n) {
+			var a = (n === Math.floor(n)) ? n : (Math.round(n*100))/100;
+			return (a + "%");
+		}
+		
+	
+	},true);
+	
+
+	//
+	// STANDARD SHORTCUTS
+	//
+    var Dom = YAHOO.util.Dom;
+    var Event = YAHOO.util.Event;
+	var Profiler = YAHOO.tool.Profiler;
+	var PV = YAHOO.widget.ProfilerViewer;
+	var proto = PV.prototype;
+
+
+	//
+	// PUBLIC METHODS
+	//
+	
+	 /**
+     * Refreshes the data displayed in the ProfilerViewer. When called,
+	 * this will invoke a refresh of the DataTable and (if displayed)
+	 * the Chart.
+     * @method refreshData
+     * @return void
+	 * @public
+     */	
+	proto.refreshData = function() {
+		this.fireEvent("dataRefreshEvent");
+	};
+
+	 /**
+     * Returns the element containing the console's header.
+     * @method getHeadEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getHeadEl = function() {
+		return (this._headEl) ? Dom.get(this._headEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's body, including
+	 * the chart and the datatable..
+     * @method getBodyEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getBodyEl = function() {
+		return (this._bodyEl) ? Dom.get(this._bodyEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's chart.
+     * @method getChartEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getChartEl = function() {
+		return (this._chartEl) ? Dom.get(this._chartEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's dataTable.
+     * @method getTableEl
+     * @return HTMLElement
+	 * @public
+     */	
+	proto.getTableEl = function() {
+		return (this._tableEl) ? Dom.get(this._tableEl) : false;
+	};
+
+	 /**
+     * Returns the element containing the console's DataTable
+	 * instance.
+     * @method getDataTable
+     * @return YAHOO.widget.DataTable
+	 * @public
+     */	
+	proto.getDataTable = function() {
+		return this._dataTable;
+	};
+
+	 /**
+     * Returns the element containing the console's Chart instance.
+     * @method getChart
+     * @return YAHOO.widget.BarChart
+	 * @public
+     */	
+	proto.getChart = function() {
+		return this._chart;
+	};
+
+
+    //
+    // PRIVATE PROPERTIES
+    //
+    proto._rendered = false;
+	proto._headEl = null;
+	proto._bodyEl = null;
+	proto._toggleVisibleEl = null;
+	proto._busyEl = null;
+	proto._busy = false;
+	
+	proto._tableEl = null;
+	proto._dataTable = null;
+
+	proto._chartEl = null;
+	proto._chartLegendEl = null;
+	proto._chartElHeight = 250;
+	proto._chart = null;
+	proto._chartInitialized = false;
+
+    //
+    // PRIVATE METHODS
+    //
+
+	proto._init = function() {
+		/**
+		 * CUSTOM EVENTS
+		 **/
+		
+		/**
+		 * Fired when a data refresh is requested. No arguments are passed
+		 * with this event.
+		 *
+		 * @event refreshDataEvent
+		 */
+		this.createEvent("dataRefreshEvent");
+		
+		/**
+		 * Fired when the viewer canvas first renders. No arguments are passed
+		 * with this event.
+		 *
+		 * @event renderEvent
+		 */
+		this.createEvent("renderEvent");
+
+		this.on("dataRefreshEvent", this._refreshDataTable, this, true);
+		
+		this._initLauncherDOM();
+		
+		if(this.get("showChart")) {
+			this.on("sortedByChange", this._refreshChart);
+		}
+
+	};
+
+	/**
+	 * If no element is passed in, create it as the first element
+	 * in the document.
+	 * @method _createProfilerViewerElement
+	 * @return HTMLElement
+	 * @private
+	 */
+	proto._createProfilerViewerElement = function() {
+
+		var el = document.createElement("div");
+		document.body.insertBefore(el, document.body.firstChild);
+		Dom.addClass(el, this.SKIN_CLASS);
+		Dom.addClass(el, PV.CLASS);
+		return el;
+	};
+			
+    /**
+     * Provides a readable name for the ProfilerViewer instance.
+     * @method toString
+     * @return String
+	 * @private
+	 */
+    proto.toString = function() {
+        return "ProfilerViewer " + (this.get('id') || this.get('tagName'));
+    };
+
+    /**
+     * Toggles visibility of the viewer canvas.
+     * @method _toggleVisible
+     * @return void
+	 * @private
+     */	
+	proto._toggleVisible = function() {
+		
+		var newVis = (this.get("visible")) ? false : true;
+		this.set("visible", newVis);
+    };
+
+    /**
+     * Shows the viewer canvas.
+     * @method show
+     * @return void
+	 * @private
+     */	
+	 proto._show = function() {
+	 	if(!this._busy) {
+			this._setBusyState(true);
+			if(!this._rendered) {
+				var loader = new YAHOO.util.YUILoader();
+				if (this.get("base")) {
+					loader.base = this.get("base");
+				}
+				
+				var modules = ["datatable"];
+				if(this.get("showChart")) {
+					modules.push("charts");
+				}
+				
+				loader.insert({ require: modules,
+								onSuccess: function() {
+									this._render();
+								},
+								scope: this});
+			} else {
+				var el = this.get("element");
+				Dom.removeClass(el, "yui-pv-minimized");
+				this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
+				
+				//The Flash Charts component can't be set to display:none,
+				//and even after positioning it offscreen the screen
+				//may fail to repaint in some browsers.  Adding an empty
+				//style rule to the console body can help force a repaint:
+				Dom.addClass(el, "yui-pv-null");
+				Dom.removeClass(el, "yui-pv-null");
+				
+				//Always refresh data when changing to visible:
+				this.refreshData();
+			}
+		}
+    };
+
+    /**
+     * Hides the viewer canvas.
+     * @method hide
+     * @return void
+	 * @private
+     */	
+	proto._hide = function() {
+		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.viewprofiler;
+		Dom.addClass(this.get("element"), "yui-pv-minimized");
+    };
+	
+	/**
+	 * Render the viewer canvas
+	 * @method _render
+	 * @return void
+	 * @private
+	 */
+	proto._render = function() {
+		
+		Dom.removeClass(this.get("element"), "yui-pv-minimized");
+		
+		this._initViewerDOM();
+		this._initDataTable();
+		if(this.get("showChart")) {
+			this._initChartDOM();
+			this._initChart();
+		}
+		this._rendered = true;
+		this._toggleVisibleEl.innerHTML = PV.STRINGS.buttons.hideprofiler;
+		
+		this.fireEvent("renderEvent");
+
+	};
+	
+	/**
+	 * Set up the DOM structure for the ProfilerViewer launcher.
+	 * @method _initLauncherDOM
+	 * @private
+	 */
+	proto._initLauncherDOM = function() {
+		
+		var el = this.get("element");
+		Dom.addClass(el, PV.CLASS);
+		Dom.addClass(el, "yui-pv-minimized");
+
+		this._headEl = document.createElement("div");
+		Dom.addClass(this._headEl, "hd");
+		
+		var s = PV.STRINGS.buttons;
+		var b = (this.get("visible")) ? s.hideprofiler : s.viewprofiler;
+		
+		this._toggleVisibleEl = this._createButton(b, this._headEl);
+		
+		this._refreshEl = this._createButton(s.refreshdata, this._headEl);
+		Dom.addClass(this._refreshEl, PV.CLASS_REFRESH);
+		
+		this._busyEl = document.createElement("span");
+		this._headEl.appendChild(this._busyEl);
+
+		var title = document.createElement("h4");
+		title.innerHTML = PV.STRINGS.title;
+		this._headEl.appendChild(title);
+		
+		el.appendChild(this._headEl);
+		
+		Event.on(this._toggleVisibleEl, "click", this._toggleVisible, this, true);
+		Event.on(this._refreshEl, "click", function() {
+			if(!this._busy) {
+				this._setBusyState(true);
+				this.fireEvent("dataRefreshEvent");
+			}
+		}, this, true);
+	};
+
+	/**
+	 * Set up the DOM structure for the ProfilerViewer canvas,
+	 * including the holder for the DataTable.
+	 * @method _initViewerDOM
+	 * @private
+	 */
+	proto._initViewerDOM = function() {
+		
+		var el = this.get("element");
+		this._bodyEl = document.createElement("div");
+		Dom.addClass(this._bodyEl, "bd");
+	 	this._tableEl = document.createElement("div");
+		Dom.addClass(this._tableEl, PV.CLASS_TABLE);
+		this._bodyEl.appendChild(this._tableEl);
+		el.appendChild(this._bodyEl);
+	};
+
+	/**
+	 * Set up the DOM structure for the ProfilerViewer canvas.
+	 * @method _initChartDOM
+	 * @private
+	 */
+	proto._initChartDOM = function() {
+		
+		this._chartContainer = document.createElement("div");
+		Dom.addClass(this._chartContainer, PV.CLASS_CHART_CONTAINER);
+		
+		var chl = document.createElement("div");
+		Dom.addClass(chl, PV.CLASS_CHART_LEGEND);
+		
+		var chw = document.createElement("div");
+
+		this._chartLegendEl = document.createElement("dl");
+		this._chartLegendEl.innerHTML = "<dd>" + PV.STRINGS.initMessage + "</dd>";
+		
+		this._chartEl = document.createElement("div");
+		Dom.addClass(this._chartEl, PV.CLASS_CHART);
+		
+		var msg = document.createElement("p");
+		msg.innerHTML = PV.STRINGS.installFlashMessage;
+		this._chartEl.appendChild(msg);
+		
+		this._chartContainer.appendChild(chl);
+		chl.appendChild(chw);
+		chw.appendChild(this._chartLegendEl);
+		this._chartContainer.appendChild(this._chartEl);
+		this._bodyEl.insertBefore(this._chartContainer,this._tableEl);
+	};
+
+
+	/**
+	 * Create anchor elements for use as buttons. Args: label
+	 * is text to appear on the face of the button, parentEl
+	 * is the el to which the anchor will be attached, position
+	 * is true for inserting as the first node and false for
+	 * inserting as the last node of the parentEl.
+	 * @method _createButton
+	 * @private
+	 */	
+	proto._createButton = function(label, parentEl, position) {
+		var b = document.createElement("a");
+		b.innerHTML = b.title = label;
+		if(parentEl) {
+			if(!position) {
+				parentEl.appendChild(b);
+			} else {
+				parentEl.insertBefore(b, parentEl.firstChild);	
+			}
+		}
+		return b;
+	};
+	
+	/**
+	 * Set's console busy state.
+	 * @method _setBusyState
+	 * @private
+	 **/
+	proto._setBusyState = function(b) {
+		if(b) {
+			Dom.addClass(this._busyEl, PV.CLASS_BUSY);
+			this._busy = true;
+		} else {
+			Dom.removeClass(this._busyEl, PV.CLASS_BUSY);
+			this._busy = false;
+		}
+	};
+
+	/**
+	 * Generages a sorting function based on current sortedBy
+	 * values.
+	 * @method _createProfilerViewerElement
+	 * @private
+	 **/
+	proto._genSortFunction = function(key, dir) {
+		var by = key;
+		var direction = dir;
+		return function(a, b) {
+			if (direction == YAHOO.widget.DataTable.CLASS_ASC) {
+				return a[by] - b[by];	
+			} else {
+				return ((a[by] - b[by]) * -1);
+			}
+		};
+	};
+
+	/**
+	 * Utility function for array sums.
+	 * @method _arraySum
+	 * @private
+	 **/	
+	 var _arraySum = function(arr){
+		var ct = 0;
+		for(var i = 0; i < arr.length; ct+=arr[i++]){}
+		return ct;
+	};
+	
+	/**
+	 * Retrieves data from Profiler, filtering and sorting as needed
+	 * based on current widget state.  Adds calculated percentage
+	 * column and function name to data returned by Profiler.
+	 * @method _getProfilerData
+	 * @private
+	 **/
+	proto._getProfilerData = function() {
+		
+		var obj = Profiler.getFullReport();
+		var arr = [];
+		var totalTime = 0;
+		for (name in obj) {
+    		if (YAHOO.lang.hasOwnProperty(obj, name)) {
+				var r = obj[name];
+				var o = {};
+				o.fn = name; //add function name to record
+				o.points = r.points.slice(); //copy live array
+				o.calls = r.calls;
+				o.min = r.min;
+				o.max = r.max;
+				o.avg = r.avg;
+				o.total = _arraySum(o.points);
+				o.points = r.points;
+				var f = this.get("filter");
+				if((!f) || (f(o))) {
+					arr.push(o);
+					totalTime += o.total;
+				}
+			}
+		}
+		
+		//add calculated percentage column
+		for (var i = 0, j = arr.length; i < j; i++) {
+			arr[i].pct = (totalTime) ? (arr[i].total * 100) / totalTime : 0;	
+		}
+
+		var sortedBy = this.get("sortedBy");
+		var key = sortedBy.key;
+		var dir = sortedBy.dir;		
+
+		arr.sort(this._genSortFunction(key, dir));
+		
+		
+		return arr;
+	};
+	
+	/**
+	 * Set up the DataTable.
+	 * @method _initDataTable
+	 * @private
+	 */
+	proto._initDataTable = function() {
+		
+		var self = this;
+		
+		//Set up the JS Function DataSource, pulling data from
+		//the Profiler.
+		this._dataSource = new YAHOO.util.DataSource(
+			function() {
+				return self._getProfilerData.call(self);	
+			},
+			{
+				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
+				maxCacheEntries: 0
+			}
+		);
+		var ds = this._dataSource;
+
+		ds.responseSchema =
+		{
+			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct", "points"]
+		};
+		
+		//Set up the DataTable.
+		var formatTimeValue = function(elCell, oRecord, oColumn, oData) {
+			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*1000))/1000;
+			elCell.innerHTML = a + " " + PV.STRINGS.millisecondsAbbrev;
+		};
+
+		var formatPercent = function(elCell, oRecord, oColumn, oData) {
+			var a = (oData === Math.floor(oData)) ? oData : (Math.round(oData*100))/100;
+			elCell.innerHTML = a + "%";
+		};
+		
+		var a = YAHOO.widget.DataTable.CLASS_ASC;
+		var d = YAHOO.widget.DataTable.CLASS_DESC;
+		var c = PV.STRINGS.colHeads;
+		var f = formatTimeValue;
+		
+		var cols = [
+			{key:"fn", sortable:true, label: c.fn[0],
+				sortOptions: {defaultDir:a}, 
+				resizeable: (YAHOO.util.DragDrop) ? true : false,
+				minWidth:c.fn[1]},
+			{key:"calls", sortable:true, label: c.calls[0],
+				sortOptions: {defaultDir:d},
+				width:c.calls[1]},
+			{key:"avg", sortable:true, label: c.avg[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.avg[1]},
+			{key:"min", sortable:true, label: c.min[0],
+				sortOptions: {defaultDir:a},
+				formatter:f,
+				width:c.min[1]}, 
+			{key:"max", sortable:true, label: c.max[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.max[1]},
+			{key:"total", sortable:true, label: c.total[0],
+				sortOptions: {defaultDir:d},
+				formatter:f,
+				width:c.total[1]},
+			{key:"pct", sortable:true, label: c.pct[0],
+				sortOptions: {defaultDir:d}, 
+				formatter:formatPercent,
+				width:c.pct[1]}
+		];
+
+		this._dataTable = new YAHOO.widget.DataTable(this._tableEl, cols, ds, {
+			scrollable:true,
+			height:this.get("tableHeight"),
+			initialRequest:null,
+			sortedBy: {
+				key: "total",
+				dir: YAHOO.widget.DataTable.CLASS_DESC
+			}
+		});
+		var dt = this._dataTable;
+
+		//Wire up DataTable events to drive the rest of the UI.
+		dt.subscribe("sortedByChange", this._sortedByChange, this, true);
+		dt.subscribe("renderEvent", this._dataTableRenderHandler, this, true);
+		dt.subscribe("initEvent", this._dataTableRenderHandler, this, true);
+		Event.on(this._tableEl.getElementsByTagName("th"), "click", this._thClickHandler, this, true);
+	};
+		
+	/**
+	 * Proxy the sort event in DataTable into the ProfilerViewer
+	 * attribute.
+	 * @method _sortedByChange
+	 * @private
+	 **/
+	proto._sortedByChange = function(o) {
+		if(o.newValue && o.newValue.key) {
+			this.set("sortedBy", {key: o.newValue.key, dir:o.newValue.dir});
+		}
+	};
+	
+	/**
+	 * Proxy the render event in DataTable into the ProfilerViewer
+	 * attribute.
+	 * @method _dataTableRenderHandler
+	 * @private
+	 **/
+	proto._dataTableRenderHandler = function(o) {
+		this._setBusyState(false);
+	};
+	
+	/**
+	 * Event handler for clicks on the DataTable's sortable column
+	 * heads.
+	 * @method _thClickHandler
+	 * @private
+	 **/
+	proto._thClickHandler = function(o) {
+		this._setBusyState(true);
+	};
+
+	/**
+	 * Refresh DataTable, getting new data from Profiler.
+	 * @method _refreshDataTable
+	 * @private
+	 **/
+	proto._refreshDataTable = function(args) {
+		var dt = this._dataTable;
+		dt.getDataSource().sendRequest("", dt.onDataReturnInitializeTable, dt);
+	};
+
+	/**
+	 * Refresh chart, getting new data from table.
+	 * @method _refreshChart
+	 * @private
+	 **/
+	proto._refreshChart = function() {
+		
+		switch (this.get("sortedBy").key) {
+			case "fn":
+				/*Keep the same data on the chart, but force update to 
+				  reflect new sort order on function/method name: */
+				this._chart.set("dataSource", this._chart.get("dataSource"));
+				/*no further action necessary; chart redraws*/
+				return;
+			case "calls":
+				/*Null out the xAxis formatting before redrawing chart.*/
+				this._chart.set("xAxis", this._chartAxisDefinitionPlain);
+				break;
+			case "pct":
+				this._chart.set("xAxis", this._chartAxisDefinitionPercent);
+				break;
+			default:
+				/*Set the default xAxis; redraw legend; set the new series definition.*/
+				this._chart.set("xAxis", this._chartAxisDefinitionTime);
+				break;
+		}
+		
+		this._drawChartLegend();
+		this._chart.set("series", this._getSeriesDef(this.get("sortedBy").key));
+
+	};
+	
+	/**
+	 * Get data for the Chart from DataTable recordset
+	 * @method _getChartData
+	 * @private
+	 */
+	proto._getChartData = function() {
+		//var records = this._getProfilerData();
+		var records = this._dataTable.getRecordSet().getRecords(0, this.get("maxChartFunctions"));
+		var arr = [];
+		for (var i = 0, j = records.length; i<j; i++) {
+			arr.push(records[i].getData());	
+		}
+		return arr;
+	};
+	
+	/**
+	 * Build series definition based on current configuration attributes.
+	 * @method _getSeriesDef
+	 * @private
+	 */
+	proto._getSeriesDef = function(field) {
+		var sd = this.get("chartSeriesDefinitions")[field];
+		var arr = [];
+		for(var i = 0, j = sd.group.length; i<j; i++) {
+			var c = this.get("chartSeriesDefinitions")[sd.group[i]];
+			arr.push(
+				{displayName:c.displayName,
+				 xField:c.xField,
+				 style: {color:c.style.color, size:c.style.size}
+				}
+			);
+		}
+		
+		return arr;
+	};
+	
+	/**
+	 * Set up the Chart.
+	 * @method _initChart
+	 * @private
+	 */
+	proto._initChart = function() {
+		
+		this._sizeChartCanvas();
+		
+		YAHOO.widget.Chart.SWFURL = this.get("swfUrl");
+
+		var self = this;
+
+		//Create DataSource based on records currently displayed
+		//at the top of the sort list in the DataTable.
+		var ds = new YAHOO.util.DataSource(
+			//force the jsfunction DataSource to run in the scope of
+			//the ProfilerViewer, not in the YAHOO.util.DataSource scope:
+			function() {
+				return self._getChartData.call(self);
+			}, 
+			{
+				responseType: YAHOO.util.DataSource.TYPE_JSARRAY,
+				maxCacheEntries: 0
+			}
+		);
+
+		ds.responseSchema =
+		{
+			fields: [ "fn", "avg", "calls", "max", "min", "total", "pct" ]
+		};
+		
+		ds.subscribe('responseEvent', this._sizeChartCanvas, this, true);
+		
+		//Set up the chart itself.
+		this._chartAxisDefinitionTime = new YAHOO.widget.NumericAxis();
+		this._chartAxisDefinitionTime.labelFunction = "YAHOO.widget.ProfilerViewer.timeAxisLabelFunction";
+		
+		this._chartAxisDefinitionPercent = new YAHOO.widget.NumericAxis();
+		this._chartAxisDefinitionPercent.labelFunction = "YAHOO.widget.ProfilerViewer.percentAxisLabelFunction";
+
+		this._chartAxisDefinitionPlain = new YAHOO.widget.NumericAxis();
+		
+		this._chart = new YAHOO.widget.BarChart( this._chartEl, ds,
+		{
+			yField: "fn",
+			series: this._getSeriesDef(this.get("sortedBy").key),
+			style: this.get("chartStyle"),
+			xAxis: this._chartAxisDefinitionTime
+		} );
+		
+		this._drawChartLegend();
+		this._chartInitialized = true;
+		this._dataTable.unsubscribe("initEvent", this._initChart, this);
+		this._dataTable.subscribe("initEvent", this._refreshChart, this, true);
+		
+	};
+	
+	/**
+	 * Set up the Chart's legend
+	 * @method _drawChartLegend
+	 * @private
+	 **/
+	proto._drawChartLegend = function() {
+		var seriesDefs = this.get("chartSeriesDefinitions");
+		var currentDef = seriesDefs[this.get("sortedBy").key];
+		var l = this._chartLegendEl;
+		l.innerHTML = "";
+		for(var i = 0, j = currentDef.group.length; i<j; i++) {
+			var c = seriesDefs[currentDef.group[i]];
+			var dt = document.createElement("dt");
+			Dom.setStyle(dt, "backgroundColor", "#" + c.style.color);
+			var dd = document.createElement("dd");
+			dd.innerHTML = c.displayName;
+			l.appendChild(dt);
+			l.appendChild(dd);
+		}
+	};
+	
+	/**
+	 * Resize the chart's canvas if based on number of records
+	 * returned from the chart's datasource.
+	 * @method _sizeChartCanvas
+	 * @private
+	 **/
+	proto._sizeChartCanvas = function(o) {
+		var bars = (o) ? o.response.length : this.get("maxChartFunctions");
+		var s = (bars * 36) + 34;
+		if (s != parseInt(this._chartElHeight, 10)) {
+			this._chartElHeight = s;
+			Dom.setStyle(this._chartEl, "height", s + "px");
+		}
+	};
+
+    /**
+     * setAttributeConfigs TabView specific properties.
+     * @method initAttributes
+     * @param {Object} attr Hash of initial attributes
+	 * @method initAttributes
+	 * @private
+     */
+    proto.initAttributes = function(attr) {
+        YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
+        /**
+         * The YUI Loader base path from which to pull YUI files needed
+		 * in the rendering of the ProfilerViewer canvas.  Passed directly
+		 * to YUI Loader.  Leave blank to draw files from
+		 * yui.yahooapis.com.
+         * @attribute base
+         * @type string
+		 * @default ""
+         */
+        this.setAttributeConfig('base', {
+            value: attr.base
+        });
+
+        /**
+         * The height of the DataTable.  The table will scroll
+		 * vertically if the content overflows the specified
+		 * height.
+         * @attribute tableHeight
+         * @type string
+		 * @default "15em"
+         */
+        this.setAttributeConfig('tableHeight', {
+            value: attr.tableHeight || "15em",
+			method: function(s) {
+				if(this._dataTable) {
+					this._dataTable.set("height", s);
+				}
+			}
+        });
+		
+        /**
+         * The default column key to sort by.  Valid keys are: fn, calls,
+		 * avg, min, max, total.  Valid dir values are: 
+		 * YAHOO.widget.DataTable.CLASS_ASC and
+		 * YAHOO.widget.DataTable.CLASS_DESC (or their
+		 * string equivalents).
+         * @attribute sortedBy
+         * @type string
+		 * @default {key:"total", dir:"yui-dt-desc"}
+         */
+        this.setAttributeConfig('sortedBy', {
+            value: attr.sortedBy || {key:"total", dir:"yui-dt-desc"}
+        });
+
+        /**
+         * A filter function to use in selecting functions that will
+		 * appear in the ProfilerViewer report.  The function is passed
+		 * a function report object and should return a boolean indicating
+		 * whether that function should be included in the ProfilerViewer
+		 * display.  The argument is structured as follows:
+		 *
+		 * {
+		 *	 	fn: <str function name>,
+		 *		calls : <n number of calls>,
+		 *		avg : <n average call duration>,
+		 *		max: <n duration of longest call>,
+		 *		min: <n duration of shortest call>,
+		 *		total: <n total time of all calls>
+		 *		points : <array time in ms of each call>
+		 *	}
+		 *
+		 * For example, you would use the follwing filter function to 
+		 * return only functions that have been called at least once:
+		 * 
+		 * 	function(o) {
+		 *		return (o.calls > 0);
+		 *	}
+		 *
+         * @attribute filter
+         * @type function
+		 * @default null
+         */
+        this.setAttributeConfig('filter', {
+            value: attr.filter || null,
+			validator: YAHOO.lang.isFunction
+        });
+
+		/**
+		 * The path to the YUI Charts swf file; must be a full URI
+		 * or a path relative to the page being profiled. Changes at runtime
+		 * not supported; pass this value in at instantiation.
+		 * @attribute swfUrl
+		 * @type string
+		 * @default "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
+		 */
+		this.setAttributeConfig('swfUrl', {
+			value: attr.swfUrl || "http://yui.yahooapis.com/2.5.0/build/charts/assets/charts.swf"
+		});
+
+        /**
+         * The maximum number of functions to profile in the chart. The
+		 * greater the number of functions, the greater the height of the
+		 * chart canvas.
+		 * height.
+         * @attribute maxChartFunctions
+         * @type int
+		 * @default 6
+         */
+        this.setAttributeConfig('maxChartFunctions', {
+            value: attr.maxChartFunctions || 6,
+			method: function(s) {
+				if(this._rendered) {
+					this._sizeChartCanvas();
+				}
+			},
+			validator: YAHOO.lang.isNumber
+        });
+		
+        /**
+         * The style object that defines the chart's visual presentation.
+		 * Conforms to the style attribute passed to the Charts Control
+		 * constructor.  See Charts Control User's Guide for more information
+		 * on how to format this object.
+         * @attribute chartStyle
+         * @type obj
+		 * @default See JS source for default definitions.
+         */
+        this.setAttributeConfig('chartStyle', {
+            value: 	attr.chartStyle || {
+				font:
+					{
+						name: "Arial",
+						color: 0xeeee5c,
+						size: 12
+					},
+					background:
+					{
+						color: "6e6e63"
+					}
+				},
+			method: function() {
+					if(this._rendered && this.get("showChart")) {
+						this._refreshChart();
+					}
+				}
+        });
+		
+        /**
+         * The series definition information to use when charting
+		 * specific fields on the chart.  displayName, xField,
+		 * and style members are used to construct the series
+		 * definition; the "group" member is the array of fields
+		 * that should be charted when the table is sorted by a
+		 * given field.
+         * @attribute chartSeriesDefinitions
+         * @type obj
+		 * @default See JS source for full default definitions.
+         */
+        this.setAttributeConfig('chartSeriesDefinitions', {
+            value: 	attr.chartSeriesDefinitions ||  {
+						total: {
+							displayName: PV.STRINGS.colHeads.total[0],
+							xField: "total",
+							style: {color:"4d95dd", size:20},
+							group: ["total"]
+						},
+						calls: {		
+							displayName: PV.STRINGS.colHeads.calls[0],
+							xField: "calls",
+							style: {color:"edff9f", size:20},
+							group: ["calls"]
+						},
+						avg: {
+							displayName: PV.STRINGS.colHeads.avg[0],
+							xField: "avg",
+							style: {color:"209daf", size:9},
+							group: ["avg", "min", "max"]
+						},
+						min: {
+							displayName: PV.STRINGS.colHeads.min[0],
+							xField: "min",
+							style: {color:"b6ecf4", size:9},
+							group: ["avg", "min", "max"]
+						},
+						max: {
+							displayName: PV.STRINGS.colHeads.max[0],
+							xField: "max",
+							style: {color:"29c7de", size:9},
+							group: ["avg", "min", "max"]
+						},
+						pct: {
+							displayName: PV.STRINGS.colHeads.pct[0],
+							xField: "pct",
+							style: {color:"C96EDB", size:20},
+							group: ["pct"]
+						}
+				},
+			method: function() {
+					if(this._rendered && this.get("showChart")) {
+						this._refreshChart();
+					}
+				}
+        });
+		
+        /**
+         * The default visibility setting for the viewer canvas. If true,
+		 * the viewer will load all necessary files and render itself
+		 * immediately upon instantiation; otherwise, the viewer will
+		 * load only minimal resources until the user toggles visibility
+		 * via the UI.
+         * @attribute visible
+         * @type boolean
+		 * @default false
+         */
+        this.setAttributeConfig('visible', {
+            value: attr.visible || false,
+			validator: YAHOO.lang.isBoolean,
+			method: function(b) {
+				if(b) {
+					this._show();
+				} else {
+					if (this._rendered) {
+						this._hide();
+					}
+				}
+			}
+        });
+
+        /**
+         * The default visibility setting for the chart.
+         * @attribute showChart
+         * @type boolean
+		 * @default true
+         */
+        this.setAttributeConfig('showChart', {
+            value: attr.showChart || true,
+			validator: YAHOO.lang.isBoolean,
+			writeOnce: true
+			
+        });
+		
+		YAHOO.widget.ProfilerViewer.superclass.initAttributes.call(this, attr);
+		
+    };
+	
+})();
+YAHOO.register("profilerviewer", YAHOO.widget.ProfilerViewer, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/reset/README
===================================================================
--- trunk/root/static/yui/reset/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,64 +0,0 @@
-YUI Library - Reset - Release Notes
-
-Version 2.6.0 
-
-  * Added del,ins{text-decoration:none;} per SF-1957908
-  * KNOWN ISSUE:
-    Beginning in Opera 9.5, a padding value of 0 on radio 
-    buttons and checkboxes prevents Opera from rendering 
-    their visually attractive checkmarks and filled circles 
-    for the radios. This has NOT been addressed in 2.6.0, 
-    however you can apply this patch if you desire:
-   	input[type="checkbox"],input[type="radio"] {padding:1px;}
-
-Version 2.5.2
-
-  * No changes.
-
-Version 2.5.1
-
-  * No changes.
-
-Version 2.5.0
-
-  * Added input,textarea,select{*font-size:100%;} to enable resizing on IE
-
-Version 2.4.0
-
-  * Moved background and default font color to HTML from BODY
-  * Removed invalid sub/sup negative line-height values because they
-    were invalid and because they weren't have a big impact.
-  * Added legend element color to accommodate IE6 issues.
-
-Version 2.3.0
-
-  * Removed: ul,ol {list-style:none;}
-  * Added: li {list-style:none;} because it's less impactful (easier to rebuild) and shorter
-  * Added: acronym {font-variant:normal;} to reset the "small-caps" variant that Opera displays
-  * Added: body {color:#000;background:#FFF;}
-  * Added: sup,sub {line-height:-1px;vertical-align: text-top;}sub{vertical-align:text-bottom;}
-  * Added: input, textarea, select{font-family:inherit;font-size:inherit;font-weight:inherit;} (doesn't fix textareas in Opera/Win+Mac, IE6/7
-  * Added: padding:0;margin:0; for the legend element which wasn't fully reset before (has 2px lateral padding on some browsers)
-  
-  
-Version 2.2.0 - 2.2.2
-
-  * No changes.
-
-Version 0.12.1 - 0.12.2
-
-  * No changes.
-
-Version 0.12.0
-
-  * Added: h1,h2,h3,h4,h5,h6{font-weight:normal;}
-  * Added: abbr,acronym {border:0;}
-  * Added: textarea {padding:0;margin:0;}
-
-Version 0.11.0
-
-  * No changes.
-
-Version 0.10.0
-
-  * Initial release.
\ No newline at end of file

Modified: trunk/root/static/yui/reset/reset-min.css
===================================================================
--- trunk/root/static/yui/reset/reset-min.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset/reset-min.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}
\ No newline at end of file
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}
\ No newline at end of file

Modified: trunk/root/static/yui/reset/reset.css
===================================================================
--- trunk/root/static/yui/reset/reset.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset/reset.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,25 +1,142 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-html{color:#000;background:#FFF;}
-body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}
-table{border-collapse:collapse;border-spacing:0;}
-fieldset,img{border:0;}
-address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}
-li{list-style:none;}
-caption,th{text-align:left;}
-h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}
-q:before,q:after{content:'';}
-abbr,acronym {border:0;font-variant:normal;}
-/* to preserve line-height and selector appearance */
-sup {vertical-align:text-top;}
-sub {vertical-align:text-bottom;}
-input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}
-/*to enable resizing for IE*/
-input,textarea,select{*font-size:100%;}
+/**
+ * YUI Reset
+ * @module reset
+ * @namespace
+ * @requires 
+ */
+html {
+	color: #000;
+	background: #FFF;
+}
+
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+pre,
+code,
+form,
+fieldset,
+legend,
+input,
+button,
+textarea,
+p,
+blockquote,
+th,
+td {
+	margin: 0;
+	padding: 0;
+}
+
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+}
+
+fieldset,
+img {
+	border: 0;
+}
+
+address,
+caption,
+cite,
+code,
+dfn,
+em,
+strong,
+th,
+var,
+optgroup {
+	font-style: inherit;
+	font-weight: inherit;
+}
+
+del,
+ins {
+	text-decoration: none;
+}
+
+li {
+	list-style: none;
+}
+
+caption,
+th {
+	text-align: left;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+	font-size: 100%;
+	font-weight: normal;
+}
+
+q:before,
+q:after {
+	content: '';
+}
+
+abbr,
+acronym {
+	border: 0;
+	font-variant: normal;
+}
+
+sup {
+	vertical-align: baseline;
+}
+
+sub {
+	vertical-align: baseline;
+}
+
 /*because legend doesn't inherit in IE */
-legend{color:#000;}
-del,ins{text-decoration:none;}
+legend {
+	color: #000;
+}
+
+input,
+button,
+textarea,
+select,
+optgroup,
+option {
+	font-family: inherit;
+	font-size: inherit;
+	font-style: inherit;
+	font-weight: inherit;
+}
+
+/*@purpose To enable resizing for IE */
+/*@branch For IE6-Win, IE7-Win */
+input,
+button,
+textarea,
+select {
+	*font-size: 100%;
+}
+
+
+

Deleted: trunk/root/static/yui/reset-fonts/README
===================================================================
--- trunk/root/static/yui/reset-fonts/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset-fonts/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,19 +0,0 @@
-YUI Library - Reset+Fonts (RF) - Release Notes
-
-*** NOTE ***
-
-This document is not updated with each release.  Changes to
-the reset-fonts.css source are noted in the README
-file for each component that comprises this aggregate:
-
-reset/README
-fonts/README
-
-************
-
-Version 2.4.0
-
-  * Initial release.
-
-  * This file is a convenience file containing an in-order 
-    concatonation of Reset and Fonts.

Modified: trunk/root/static/yui/reset-fonts/reset-fonts.css
===================================================================
--- trunk/root/static/yui/reset-fonts/reset-fonts.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset-fonts/reset-fonts.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:10!
 0%;}
\ No newline at end of file
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pr!
 e,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}
\ No newline at end of file

Deleted: trunk/root/static/yui/reset-fonts-grids/README
===================================================================
--- trunk/root/static/yui/reset-fonts-grids/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset-fonts-grids/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,32 +0,0 @@
-YUI Library - Reset+Fonts+Grids (RFG) - Release Notes
-
-*** NOTE ***
-
-This document is not updated with each release.  Changes to
-the reset-fonts-grids.css source are noted in the README
-file for each component that comprises this aggregate:
-
-reset/README
-fonts/README
-grids/README
-
-************
-
-Version 2.3.1
-
-  * Fixed bug in Grids. See Grids 2.3.1 README for info.
-
-Version 2.3.0
-
-  * Changes to all three components.
-
-Version 2.2.0 - 2.2.2
-
-  * No changes.
-
-Version 0.12.0
-
-  * Initial release.
-  
-  * This file is a convenience file containing an in-order 
-    concatonation of Reset, Fonts, and Grids.
\ No newline at end of file

Modified: trunk/root/static/yui/reset-fonts-grids/reset-fonts-grids.css
===================================================================
--- trunk/root/static/yui/reset-fonts-grids/reset-fonts-grids.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/reset-fonts-grids/reset-fonts-grids.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:text-top;}sub{vertical-align:text-bottom;}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit;}input,textarea,select{*font-size:100%;}legend{color:#000;}del,ins{text-decoration:none;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pre,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:10!
 0%;}body{text-align:center;}#ft{clear:both;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;min-width:750px;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin-left:24.0769em;*margin-le!
 ft:23.62em;}.yui-t4 .yui-b{float:right;width:13.8456em;*width:!
 13.50em;
}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .yui-gc div.first,.yui-g .yu!
 i-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%;_width:31.7%;}.yui-g .yui!
 -gc div.first,.yui-gd .yui-g{width:66%;}.yui-gb .yui-g div.fir!
 st{*marg
in-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;} .yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.first{float:left;}.yui-gb!
  .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#bd:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#bd,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file
+html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup{font-style:inherit;font-weight:inherit;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select,optgroup,option{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;}input,button,textarea,select{*font-size:100%;}body{font:13px/1.231 arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}select,input,button,textarea,button{font:99% arial,helvetica,clean,sans-serif;}table{font-size:inherit;font:100%;}pr!
 e,code,kbd,samp,tt{font-family:monospace;*font-size:108%;line-height:100%;}body{text-align:center;}#doc,#doc2,#doc3,#doc4,.yui-t1,.yui-t2,.yui-t3,.yui-t4,.yui-t5,.yui-t6,.yui-t7{margin:auto;text-align:left;width:57.69em;*width:56.25em;}#doc2{width:73.076em;*width:71.25em;}#doc3{margin:auto 10px;width:auto;}#doc4{width:74.923em;*width:73.05em;}.yui-b{position:relative;}.yui-b{_position:static;}#yui-main .yui-b{position:static;}#yui-main,.yui-g .yui-u .yui-g{width:100%;}.yui-t1 #yui-main,.yui-t2 #yui-main,.yui-t3 #yui-main{float:right;margin-left:-25em;}.yui-t4 #yui-main,.yui-t5 #yui-main,.yui-t6 #yui-main{float:left;margin-right:-25em;}.yui-t1 .yui-b{float:left;width:12.30769em;*width:12.00em;}.yui-t1 #yui-main .yui-b{margin-left:13.30769em;*margin-left:13.05em;}.yui-t2 .yui-b{float:left;width:13.8461em;*width:13.50em;}.yui-t2 #yui-main .yui-b{margin-left:14.8461em;*margin-left:14.55em;}.yui-t3 .yui-b{float:left;width:23.0769em;*width:22.50em;}.yui-t3 #yui-main .yui-b{margin!
 -left:24.0769em;*margin-left:23.62em;}.yui-t4 .yui-b{float:rig!
 ht;width
:13.8456em;*width:13.50em;}.yui-t4 #yui-main .yui-b{margin-right:14.8456em;*margin-right:14.55em;}.yui-t5 .yui-b{float:right;width:18.4615em;*width:18.00em;}.yui-t5 #yui-main .yui-b{margin-right:19.4615em;*margin-right:19.125em;}.yui-t6 .yui-b{float:right;width:23.0769em;*width:22.50em;}.yui-t6 #yui-main .yui-b{margin-right:24.0769em;*margin-right:23.62em;}.yui-t7 #yui-main .yui-b{display:block;margin:0 0 1em 0;}#yui-main .yui-b{float:none;width:auto;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf,.yui-gc .yui-u,.yui-gd .yui-g,.yui-g .yui-gc .yui-u,.yui-ge .yui-u,.yui-ge .yui-g,.yui-gf .yui-g,.yui-gf .yui-u{float:right;}.yui-g div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first,.yui-ge div.first,.yui-gf div.first,.yui-g .y!
 ui-gc div.first,.yui-g .yui-ge div.first,.yui-gc div.first div.first{float:left;}.yui-g .yui-u,.yui-g .yui-g,.yui-g .yui-gb,.yui-g .yui-gc,.yui-g .yui-gd,.yui-g .yui-ge,.yui-g .yui-gf{width:49.1%;}.yui-gb .yui-u,.yui-g .yui-gb .yui-u,.yui-gb .yui-g,.yui-gb .yui-gb,.yui-gb .yui-gc,.yui-gb .yui-gd,.yui-gb .yui-ge,.yui-gb .yui-gf,.yui-gc .yui-u,.yui-gc .yui-g,.yui-gd .yui-u{width:32%;margin-left:1.99%;}.yui-gb .yui-u{*margin-left:1.9%;*width:31.9%;}.yui-gc div.first,.yui-gd .yui-u{width:66%;}.yui-gd div.first{width:32%;}.yui-ge div.first,.yui-gf .yui-u{width:74.2%;}.yui-ge .yui-u,.yui-gf div.first{width:24%;}.yui-g .yui-gb div.first,.yui-gb div.first,.yui-gc div.first,.yui-gd div.first{margin-left:0;}.yui-g .yui-g .yui-u,.yui-gb .yui-g .yui-u,.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u,.yui-ge .yui-g .yui-u,.yui-gf .yui-g .yui-u{width:49%;*width:48.1%;*margin-left:0;}.yui-g .yui-g .yui-u{width:48.1%;}.yui-g .yui-gb div.first,.yui-gb .yui-gb div.first{*margin-right:0;*width:32%!
 ;_width:31.7%;}.yui-g .yui-gc div.first,.yui-gd .yui-g{width:6!
 6%;}.yui
-gb .yui-g div.first{*margin-right:4%;_margin-right:1.3%;}.yui-gb .yui-gc div.first,.yui-gb .yui-gd div.first{*margin-right:0;}.yui-gb .yui-gb .yui-u,.yui-gb .yui-gc .yui-u{*margin-left:1.8%;_margin-left:4%;}.yui-g .yui-gb .yui-u{_margin-left:1.0%;}.yui-gb .yui-gd .yui-u{*width:66%;_width:61.2%;}.yui-gb .yui-gd div.first{*width:31%;_width:29.5%;}.yui-g .yui-gc .yui-u,.yui-gb .yui-gc .yui-u{width:32%;_float:right;margin-right:0;_margin-left:0;}.yui-gb .yui-gc div.first{width:66%;*float:left;*margin-left:0;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf .yui-u{margin:0;}.yui-gb .yui-gb .yui-u{_margin-left:.7%;}.yui-gb .yui-g div.first,.yui-gb .yui-gb div.first{*margin-left:0;}.yui-gc .yui-g .yui-u,.yui-gd .yui-g .yui-u{*width:48.1%;*margin-left:0;}.yui-gb .yui-gd div.first{width:32%;}.yui-g .yui-gd div.first{_width:29.9%;}.yui-ge .yui-g{width:24%;}.yui-gf .yui-g{width:74.2%;}.yui-gb .yui-ge div.yui-u,.yui-gb .yui-gf div.yui-u{float:right;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf div.!
 first{float:left;}.yui-gb .yui-ge .yui-u,.yui-gb .yui-gf div.first{*width:24%;_width:20%;}.yui-gb .yui-ge div.first,.yui-gb .yui-gf .yui-u{*width:73.5%;_width:65.5%;}.yui-ge div.first .yui-gd .yui-u{width:65%;}.yui-ge div.first .yui-gd div.first{width:32%;}#hd:after,#bd:after,#ft:after,.yui-g:after,.yui-gb:after,.yui-gc:after,.yui-gd:after,.yui-ge:after,.yui-gf:after{content:".";display:block;height:0;clear:both;visibility:hidden;}#hd,#bd,#ft,.yui-g,.yui-gb,.yui-gc,.yui-gd,.yui-ge,.yui-gf{zoom:1;}
\ No newline at end of file

Deleted: trunk/root/static/yui/resize/README
===================================================================
--- trunk/root/static/yui/resize/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,24 +0,0 @@
-**** version 2.6.0 ***
-
-    * Widget promoted to GA - beta flag removed
-    * Added support for the new useShim config on Resize objects    
-
-    Bug Fixes:
- 	    * 2000116 - [SF 1993048] YAHOO.util.Easing is undefined (without optional Animation)
-	    * 2086450 - [SF 2020779] [doc] endResize event not documented
-	    * 2119091 - [SF 2034517] Bottom drifts on top drag in IE7/FF3
-	    * 2166985 - [SF 2074283] Splitter fails when dragged over RTE I-frame
-        
-
-**** version 2.5.2 ***
-    * Added an endResize event
-
-**** version 2.5.1 ***
-    
-    Bug Fixes
-        * 1766923 - [SF 1899888] Resize.destroy() not removing status
-        * 1784371 - Status div tracks on resize cancel
-
-**** version 2.5.0 ***
-
-Initial Release

Modified: trunk/root/static/yui/resize/assets/resize-core.css
===================================================================
--- trunk/root/static/yui/resize/assets/resize-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/assets/resize-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-resize {
     position: relative;

Modified: trunk/root/static/yui/resize/assets/skins/sam/resize-skin.css
===================================================================
--- trunk/root/static/yui/resize/assets/skins/sam/resize-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/assets/skins/sam/resize-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,12 +1,13 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* Give the handle a background color */
 .yui-skin-sam .yui-resize .yui-resize-handle {
     background-color: #F2F2F2;
+    zoom: 1;
 }
 /* Give the active handle a different color */
 .yui-skin-sam .yui-resize .yui-resize-handle-active {
@@ -18,6 +19,7 @@
 .yui-skin-sam .yui-resize .yui-resize-handle-l-active,
 .yui-skin-sam .yui-resize .yui-resize-handle-r-active {
     height: 100%;
+    zoom: 1;
 }
 /* Give a border to the 8-way knob style handles */
 .yui-skin-sam .yui-resize-knob .yui-resize-handle {
@@ -127,3 +129,14 @@
     height: 6px;
     width: 6px;
 }
+
+.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r {
+    right: -8px;
+}
+.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b {
+    bottom: -8px;
+}
+.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br {
+    right: -8px;
+    bottom: -8px;
+}

Modified: trunk/root/static/yui/resize/assets/skins/sam/resize.css
===================================================================
--- trunk/root/static/yui/resize/assets/skins/sam/resize.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/assets/skins/sam/resize.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transparent url( layo!
 ut_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url( layout_sprite.png );background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-knob !
 .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resiz!
 e-handle
-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{height:6p!
 x;width:6px;}
+.yui-resize{position:relative;zoom:1;z-index:0;}.yui-resize-wrap{zoom:1;}.yui-draggable{cursor:move;}.yui-resize .yui-resize-handle{position:absolute;z-index:1;font-size:0;margin:0;padding:0;zoom:1;height:1px;width:1px;}.yui-resize .yui-resize-handle-br{height:5px;width:5px;bottom:0;right:0;cursor:se-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-bl{height:5px;width:5px;bottom:0;left:0;cursor:sw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tl{height:5px;width:5px;top:0;left:0;cursor:nw-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-tr{height:5px;width:5px;top:0;right:0;cursor:ne-resize;z-index:2;zoom:1;}.yui-resize .yui-resize-handle-r{width:5px;height:100%;top:0;right:0;cursor:e-resize;zoom:1;}.yui-resize .yui-resize-handle-l{height:100%;width:5px;top:0;left:0;cursor:w-resize;zoom:1;}.yui-resize .yui-resize-handle-b{width:100%;height:5px;bottom:0;right:0;cursor:s-resize;zoom:1;}.yui-resize .yui-resize-handle-t{width:100%;height:5px;top:0;right:!
 0;cursor:n-resize;zoom:1;}.yui-resize-proxy{position:absolute;border:1px dashed #000;visibility:hidden;z-index:1000;}.yui-resize-hover .yui-resize-handle,.yui-resize-hidden .yui-resize-handle{opacity:0;filter:alpha(opacity=0);}.yui-resize-ghost{opacity:.5;filter:alpha(opacity=50);}.yui-resize-knob .yui-resize-handle{height:6px;width:6px;}.yui-resize-knob .yui-resize-handle-tr{right:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-tl{left:-3px;top:-3px;}.yui-resize-knob .yui-resize-handle-bl{left:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-br{right:-3px;bottom:-3px;}.yui-resize-knob .yui-resize-handle-t{left:45%;top:-3px;}.yui-resize-knob .yui-resize-handle-r{right:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-l{left:-3px;top:45%;}.yui-resize-knob .yui-resize-handle-b{left:45%;bottom:-3px;}.yui-resize-status{position:absolute;top:-999px;left:-999px;padding:2px;font-size:80%;display:none;zoom:1;z-index:9999;}.yui-resize-status strong,.yui-resize-status em{font!
 -weight:normal;font-style:normal;padding:1px;zoom:1;}.yui-skin!
 -sam .yu
i-resize .yui-resize-handle{background-color:#F2F2F2;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-active{background-color:#7D98B8;zoom:1;}.yui-skin-sam .yui-resize .yui-resize-handle-l,.yui-skin-sam .yui-resize .yui-resize-handle-r,.yui-skin-sam .yui-resize .yui-resize-handle-l-active,.yui-skin-sam .yui-resize .yui-resize-handle-r-active{height:100%;zoom:1;}.yui-skin-sam .yui-resize-knob .yui-resize-handle{border:1px solid #808080;}.yui-skin-sam .yui-resize-hover .yui-resize-handle-active{opacity:1;filter:alpha(opacity=100);}.yui-skin-sam .yui-resize-proxy{border:1px dashed #426FD9;}.yui-skin-sam .yui-resize-status{border:1px solid #A6982B;border-top:1px solid #D4C237;background-color:#FFEE69;color:#000;}.yui-skin-sam .yui-resize-status strong,.yui-skin-sam .yui-resize-status em{float:left;display:block;clear:both;padding:1px;text-align:center;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize .yui-resize-handle-inner-l{background:transpa!
 rent url(layout_sprite.png) no-repeat 0 -5px;height:16px;width:5px;position:absolute;top:45%;}.yui-skin-sam .yui-resize .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize .yui-resize-handle-inner-b{background:transparent url(layout_sprite.png) no-repeat -20px 0;height:5px;width:16px;position:absolute;left:50%;}.yui-skin-sam .yui-resize .yui-resize-handle-br{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -62px;}.yui-skin-sam .yui-resize .yui-resize-handle-tr{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -42px;}.yui-skin-sam .yui-resize .yui-resize-handle-tl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -82px;}.yui-skin-sam .yui-resize .yui-resize-handle-bl{background-image:url(layout_sprite.png);background-repeat:no-repeat;background-position:-22px -23px;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-t,.yui-skin-sam .yui-resize-!
 knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-!
 resize-h
andle-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-br,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-t,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-b,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-tr,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-bl,.yui-skin-sam .yui-resize-knob .yui-resize-handle-inner-br{background-image:none;}.yui-skin-sam .yui-resize-knob .yui-resize-handle-l,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r,.yui-skin-sam .yui-resize-knob .yui-resize-handle-l-active,.yui-skin-sam .yui-resize-knob .yui-resize-handle-r-active{heig!
 ht:6px;width:6px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-r{right:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-b{bottom:-8px;}.yui-skin-sam .yui-resize-textarea .yui-resize-handle-br{right:-8px;bottom:-8px;}

Modified: trunk/root/static/yui/resize/resize-debug.js
===================================================================
--- trunk/root/static/yui/resize/resize-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/resize-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * @description <p>Makes an element resizable</p>
@@ -10,7 +10,6 @@
  * @requires yahoo, dom, dragdrop, element, event
  * @optional animation
  * @module resize
- * @beta
  */
 (function() {
 var D = YAHOO.util.Dom,
@@ -254,21 +253,26 @@
             YAHOO.log('Create the wrap element', 'info', 'Resize');
             this._positioned = false;
             //Force wrap for elements that can't have children 
-            switch (this.get('element').tagName.toLowerCase()) {
-                case 'img':
-                case 'textarea':
-                case 'input':
-                case 'iframe':
-                case 'select':
-                    this.set('wrap', true);
-                    YAHOO.log('Auto-wrapping the element (' + this.get('element').tagName.toLowerCase() + ')', 'warn', 'Resize');
-                    break;
+            if (this.get('wrap') === false) {
+                switch (this.get('element').tagName.toLowerCase()) {
+                    case 'img':
+                    case 'textarea':
+                    case 'input':
+                    case 'iframe':
+                    case 'select':
+                        YAHOO.log('Auto-wrapping the element (' + this.get('element').tagName.toLowerCase() + ')', 'warn', 'Resize');
+                        this.set('wrap', true);
+                        break;
+                }
             }
             if (this.get('wrap') === true) {
                 YAHOO.log('Creating the wrap element', 'info', 'Resize');
                 this._wrap = document.createElement('div');
                 this._wrap.id = this.get('element').id + '_wrap';
                 this._wrap.className = this.CSS_WRAP;
+                if (this.get('element').tagName.toLowerCase() == 'textarea') {
+                    D.addClass(this._wrap, 'yui-resize-textarea');
+                }
                 D.setStyle(this._wrap, 'width', this.get('width') + 'px');
                 D.setStyle(this._wrap, 'height', this.get('height') + 'px');
                 D.setStyle(this._wrap, 'z-index', this.getStyle('z-index'));
@@ -417,8 +421,8 @@
                 YAHOO.log('Resize Locked', 'info', 'Resize');
                 return false;
             }
-            //Internet Explorer needs this
             D.removeClass(this._wrap, this.CSS_RESIZE);
+
             if (this.get('hover')) {
                 D.removeClass(this._wrap, this.CSS_HOVER);
             }
@@ -438,7 +442,6 @@
                 }
             }
 
-            //Internet Explorer needs this
             D.addClass(this._wrap, this.CSS_RESIZE);
         },
         /** 
@@ -448,7 +451,6 @@
         * @description Removes CSS class names to the handles
         */
         _handleMouseOut: function(ev) {
-            //Internet Explorer needs this
             D.removeClass(this._wrap, this.CSS_RESIZE);
             if (this.get('hover') && !this._active) {
                 D.addClass(this._wrap, this.CSS_HOVER);
@@ -468,7 +470,6 @@
                     }
                 }
             }
-            //Internet Explorer needs this
             D.addClass(this._wrap, this.CSS_RESIZE);
         },
         /** 
@@ -719,10 +720,6 @@
         _updateStatus: function(h, w, t, l) {
             if (this._resizeEvent && (!Lang.isString(this._resizeEvent))) {
                 YAHOO.log('Updating Status Box', 'info', 'Resize');
-                if (this.get('status')) {
-                    YAHOO.log('Showing Status Box', 'info', 'Resize');
-                    D.setStyle(this._status, 'display', 'inline');
-                }
                 h = ((h === 0) ? this._cache.start.height : h);
                 w = ((w === 0) ? this._cache.start.width : w);
                 var h1 = parseInt(this.get('height'), 10),
@@ -738,8 +735,13 @@
                 var diffW = (parseInt(w, 10) - w1);
                 this._cache.offsetHeight = diffH;
                 this._cache.offsetWidth = diffW;
-                this._status.innerHTML = '<strong>' + parseInt(h, 10) + ' x ' + parseInt(w, 10) + '</strong><em>' + ((diffH > 0) ? '+' : '') + diffH + ' x ' + ((diffW > 0) ? '+' : '') + diffW + '</em>';
-                D.setXY(this._status, [Event.getPageX(this._resizeEvent) + 12, Event.getPageY(this._resizeEvent) + 12]);
+                if (this.get('status')) {
+                    YAHOO.log('Showing Status Box', 'info', 'Resize');
+                    D.setStyle(this._status, 'display', 'inline');
+                    //This will cause IE8 to crash if the status box is hidden..
+                    this._status.innerHTML = '<strong>' + parseInt(h, 10) + ' x ' + parseInt(w, 10) + '</strong><em>' + ((diffH > 0) ? '+' : '') + diffH + ' x ' + ((diffW > 0) ? '+' : '') + diffW + '</em>';
+                    D.setXY(this._status, [Event.getPageX(this._resizeEvent) + 12, Event.getPageY(this._resizeEvent) + 12]);
+                }
             }
         },
         /** 
@@ -820,13 +822,14 @@
                     l = this._cache.left - l;
                 }
             }
-
+            
+            
             var ratio = this._setRatio(h, w, t, l);
             h = parseInt(ratio[0], 10);
             w = parseInt(ratio[1], 10);
             t = parseInt(ratio[2], 10);
             l = parseInt(ratio[3], 10);
-
+            
             if (t == 0) {
                 //No Offset, get from cache
                 t = D.getY(el);
@@ -889,6 +892,7 @@
 
             this._updateStatus(h, w, t, l);
 
+
             if (this._positioned) {
                 if (this._proxy && force) {
                     //Do nothing
@@ -912,11 +916,6 @@
                         }
                     }
                     if (set) {
-                        if (this.browser.ie > 6) {
-                            if (h === this._cache.height) {
-                                h = h + 1;
-                            }
-                        }
                         el.style.height = h + 'px';
                     }
                     if ((this._proxy && force) || !this._proxy) {
@@ -1006,7 +1005,7 @@
             YAHOO.log('Handle BR', 'info', 'Resize');
             var newW = this._setWidth(args.e);
             var newH = this._setHeight(args.e);
-            this.resize(args.e, (newH + 1), newW, 0, 0);
+            this.resize(args.e, newH, newW, 0, 0);
         },
         /** 
         * @private
@@ -1117,7 +1116,7 @@
                     nw = (xy - x) + parseInt(this.get('width'), 10);
                 }
                 
-                nw = this._snapTick(nw, this.get('yTicks'));
+                nw = this._snapTick(nw, this.get('xTicks'));
                 nw = this._checkWidth(nw);
             return nw;
         },
@@ -1185,7 +1184,7 @@
                 if (flip) {
                     nh = (xy - y) + parseInt(this.get('height'), 10);
                 }
-                nh = this._snapTick(nh, this.get('xTicks'));
+                nh = this._snapTick(nh, this.get('yTicks'));
                 nh = this._checkHeight(nh);
                 
             return nh;
@@ -1244,9 +1243,19 @@
 
             if (p_oAttributes.height) {
                 this.set('height', parseInt(p_oAttributes.height, 10));
+            } else {
+                var h = this.getStyle('height');
+                if (h == 'auto') {
+                    this.set('height', parseInt(this.get('element').offsetHeight, 10));
+                }
             }
             if (p_oAttributes.width) {
                 this.set('width', parseInt(p_oAttributes.width, 10));
+            } else {
+                var w = this.getStyle('width');
+                if (w == 'auto') {
+                    this.set('width', parseInt(this.get('element').offsetWidth, 10));
+                }
             }
             
             var id = p_oElement;
@@ -1313,7 +1322,7 @@
             Resize.superclass.initAttributes.call(this, attr);
 
             /**
-            * @attribute useShime
+            * @attribute useShim
             * @description This setting will be passed to the DragDrop instances on the resize handles and for the draggable property.
             * This property should be used if you want the resize handles to work over iframe and other elements.
             * @type Boolean
@@ -1737,4 +1746,4 @@
 
 })();
 
-YAHOO.register("resize", YAHOO.util.Resize, {version: "2.6.0", build: "1321"});
+YAHOO.register("resize", YAHOO.util.Resize, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/resize/resize-min.js
===================================================================
--- trunk/root/static/yui/resize/resize-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/resize-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,10 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var E=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;var B=function(F,D){var G={element:F,attributes:D||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getResizeById=function(D){if(B._instances[D]){return B._instances[D];}return false;};YAHOO.extend(B,YAHOO.util.Element,{CSS_RESIZE:"yui-resize",CSS_DRAG:"yui-draggable",CSS_HOVER:"yui-resize-hover",CSS_PROXY:"yui-resize-proxy",CSS_WRAP:"yui-resize-wrap",CSS_KNOB:"yui-resize-knob",CSS_HIDDEN:"yui-resize-hidden",CSS_HANDLE:"yui-resize-handle",CSS_STATUS:"yui-resize-status",CSS_GHOST:"yui-resize-ghost",CSS_RESIZING:"yui-resize-resizing",_resizeEvent:null,dd:null,browser:YAHOO.env.ua,_locked:null,_positioned:null,_dds:null,_wrap:null,_proxy:null,_handles:null,_currentHandle:null,_currentDD:null,_cache:null,_active:null,_createProxy:function(){if(this.get("proxy")){this._proxy=document.createElement("div");this._proxy.className=this.CSS_PROXY;this._proxy.style.height=this.get("elemen!
 t").clientHeight+"px";this._proxy.style.width=this.get("element").clientWidth+"px";this._wrap.parentNode.appendChild(this._proxy);}else{this.set("animate",false);}},_createWrap:function(){this._positioned=false;switch(this.get("element").tagName.toLowerCase()){case"img":case"textarea":case"input":case"iframe":case"select":this.set("wrap",true);break;}if(this.get("wrap")===true){this._wrap=document.createElement("div");this._wrap.id=this.get("element").id+"_wrap";this._wrap.className=this.CSS_WRAP;E.setStyle(this._wrap,"width",this.get("width")+"px");E.setStyle(this._wrap,"height",this.get("height")+"px");E.setStyle(this._wrap,"z-index",this.getStyle("z-index"));this.setStyle("z-index",0);var F=E.getStyle(this.get("element"),"position");E.setStyle(this._wrap,"position",((F=="static")?"relative":F));E.setStyle(this._wrap,"top",E.getStyle(this.get("element"),"top"));E.setStyle(this._wrap,"left",E.getStyle(this.get("element"),"left"));if(E.getStyle(this.get("element"),"position!
 ")=="absolute"){this._positioned=true;E.setStyle(this.get("ele!
 ment"),"
position","relative");E.setStyle(this.get("element"),"top","0");E.setStyle(this.get("element"),"left","0");}var D=this.get("element").parentNode;D.replaceChild(this._wrap,this.get("element"));this._wrap.appendChild(this.get("element"));}else{this._wrap=this.get("element");if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}}if(this.get("draggable")){this._setupDragDrop();}if(this.get("hover")){E.addClass(this._wrap,this.CSS_HOVER);}if(this.get("knobHandles")){E.addClass(this._wrap,this.CSS_KNOB);}if(this.get("hiddenHandles")){E.addClass(this._wrap,this.CSS_HIDDEN);}E.addClass(this._wrap,this.CSS_RESIZE);},_setupDragDrop:function(){E.addClass(this._wrap,this.CSS_DRAG);this.dd=new YAHOO.util.DD(this._wrap,this.get("id")+"-resize",{dragOnly:true,useShim:this.get("useShim")});this.dd.on("dragEvent",function(){this.fireEvent("dragEvent",arguments);},this,true);},_createHandles:function(){this._handles={};this._dds={};var G=this.get("handles");for(var F=0;F<G.!
 length;F++){this._handles[G[F]]=document.createElement("div");this._handles[G[F]].id=E.generateId(this._handles[G[F]]);this._handles[G[F]].className=this.CSS_HANDLE+" "+this.CSS_HANDLE+"-"+G[F];var D=document.createElement("div");D.className=this.CSS_HANDLE+"-inner-"+G[F];this._handles[G[F]].appendChild(D);this._wrap.appendChild(this._handles[G[F]]);A.on(this._handles[G[F]],"mouseover",this._handleMouseOver,this,true);A.on(this._handles[G[F]],"mouseout",this._handleMouseOut,this,true);this._dds[G[F]]=new YAHOO.util.DragDrop(this._handles[G[F]],this.get("id")+"-handle-"+G,{useShim:this.get("useShim")});this._dds[G[F]].setPadding(15,15,15,15);this._dds[G[F]].on("startDragEvent",this._handleStartDrag,this._dds[G[F]],this);this._dds[G[F]].on("mouseDownEvent",this._handleMouseDown,this._dds[G[F]],this);}this._status=document.createElement("span");this._status.className=this.CSS_STATUS;document.body.insertBefore(this._status,document.body.firstChild);},_ieSelectFix:function(){ret!
 urn false;},_ieSelectBack:null,_setAutoRatio:function(D){if(th!
 is.get("
autoRatio")){if(D&&D.shiftKey){this.set("ratio",true);}else{this.set("ratio",this._configs.ratio._initialConfig.value);}}},_handleMouseDown:function(D){if(this._locked){return false;}if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}if(D){this._setAutoRatio(D);}if(this.browser.ie){this._ieSelectBack=document.body.onselectstart;document.body.onselectstart=this._ieSelectFix;}},_handleMouseOver:function(G){if(this._locked){return false;}E.removeClass(this._wrap,this.CSS_RESIZE);if(this.get("hover")){E.removeClass(this._wrap,this.CSS_HOVER);}var D=A.getTarget(G);if(!E.hasClass(D,this.CSS_HANDLE)){D=D.parentNode;}if(E.hasClass(D,this.CSS_HANDLE)&&!this._active){E.addClass(D,this.CSS_HANDLE+"-active");for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){if(this._handles[F]==D){E.addClass(D,this.CSS_HANDLE+"-"+F+"-active");break;}}}}E.addClass(this._wrap,this.CSS_RESIZE);},_handleMouseOut:function(G){E.removeClass(this._wrap,this.CSS_RESIZE);if(t!
 his.get("hover")&&!this._active){E.addClass(this._wrap,this.CSS_HOVER);}var D=A.getTarget(G);if(!E.hasClass(D,this.CSS_HANDLE)){D=D.parentNode;}if(E.hasClass(D,this.CSS_HANDLE)&&!this._active){E.removeClass(D,this.CSS_HANDLE+"-active");for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){if(this._handles[F]==D){E.removeClass(D,this.CSS_HANDLE+"-"+F+"-active");break;}}}}E.addClass(this._wrap,this.CSS_RESIZE);},_handleStartDrag:function(G,F){var D=F.getDragEl();if(E.hasClass(D,this.CSS_HANDLE)){if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}this._active=true;this._currentDD=F;if(this._proxy){this._proxy.style.visibility="visible";this._proxy.style.zIndex="1000";this._proxy.style.height=this.get("element").clientHeight+"px";this._proxy.style.width=this.get("element").clientWidth+"px";}for(var H in this._handles){if(C.hasOwnProperty(this._handles,H)){if(this._handles[H]==D){this._currentHandle=H;
-var I="_handle_for_"+H;E.addClass(D,this.CSS_HANDLE+"-"+H+"-active");F.on("dragEvent",this[I],this,true);F.on("mouseUpEvent",this._handleMouseUp,this,true);break;}}}E.addClass(D,this.CSS_HANDLE+"-active");if(this.get("proxy")){var J=E.getXY(this.get("element"));E.setXY(this._proxy,J);if(this.get("ghost")){this.addClass(this.CSS_GHOST);}}E.addClass(this._wrap,this.CSS_RESIZING);this._setCache();this._updateStatus(this._cache.height,this._cache.width,this._cache.top,this._cache.left);this.fireEvent("startResize",{type:"startresize",target:this});}},_setCache:function(){this._cache.xy=E.getXY(this._wrap);E.setXY(this._wrap,this._cache.xy);this._cache.height=this.get("clientHeight");this._cache.width=this.get("clientWidth");this._cache.start.height=this._cache.height;this._cache.start.width=this._cache.width;this._cache.start.top=this._cache.xy[1];this._cache.start.left=this._cache.xy[0];this._cache.top=this._cache.xy[1];this._cache.left=this._cache.xy[0];this.set("height",this!
 ._cache.height,true);this.set("width",this._cache.width,true);},_handleMouseUp:function(F){this._active=false;var G="_handle_for_"+this._currentHandle;this._currentDD.unsubscribe("dragEvent",this[G],this,true);this._currentDD.unsubscribe("mouseUpEvent",this._handleMouseUp,this,true);if(this._proxy){this._proxy.style.visibility="hidden";this._proxy.style.zIndex="-1";if(this.get("setSize")){this.resize(F,this._cache.height,this._cache.width,this._cache.top,this._cache.left,true);}else{this.fireEvent("resize",{ev:"resize",target:this,height:this._cache.height,width:this._cache.width,top:this._cache.top,left:this._cache.left});}if(this.get("ghost")){this.removeClass(this.CSS_GHOST);}}if(this.get("hover")){E.addClass(this._wrap,this.CSS_HOVER);}if(this._status){E.setStyle(this._status,"display","none");}if(this.browser.ie){document.body.onselectstart=this._ieSelectBack;}if(this.browser.ie){E.removeClass(this._wrap,this.CSS_RESIZE);}for(var D in this._handles){if(C.hasOwnProperty!
 (this._handles,D)){E.removeClass(this._handles[D],this.CSS_HAN!
 DLE+"-ac
tive");}}if(this.get("hover")&&!this._active){E.addClass(this._wrap,this.CSS_HOVER);}E.removeClass(this._wrap,this.CSS_RESIZING);E.removeClass(this._handles[this._currentHandle],this.CSS_HANDLE+"-"+this._currentHandle+"-active");E.removeClass(this._handles[this._currentHandle],this.CSS_HANDLE+"-active");if(this.browser.ie){E.addClass(this._wrap,this.CSS_RESIZE);}this._resizeEvent=null;this._currentHandle=null;if(!this.get("animate")){this.set("height",this._cache.height,true);this.set("width",this._cache.width,true);}this.fireEvent("endResize",{ev:"endResize",target:this,height:this._cache.height,width:this._cache.width,top:this._cache.top,left:this._cache.left});},_setRatio:function(K,N,Q,I){var O=K,G=N;if(this.get("ratio")){var P=this._cache.height,H=this._cache.width,F=parseInt(this.get("height"),10),L=parseInt(this.get("width"),10),M=this.get("maxHeight"),R=this.get("minHeight"),D=this.get("maxWidth"),J=this.get("minWidth");switch(this._currentHandle){case"l":K=F*(N/L);K!
 =Math.min(Math.max(R,K),M);N=L*(K/F);Q=(this._cache.start.top-(-((F-K)/2)));I=(this._cache.start.left-(-((L-N))));break;case"r":K=F*(N/L);K=Math.min(Math.max(R,K),M);N=L*(K/F);Q=(this._cache.start.top-(-((F-K)/2)));break;case"t":N=L*(K/F);K=F*(N/L);I=(this._cache.start.left-(-((L-N)/2)));Q=(this._cache.start.top-(-((F-K))));break;case"b":N=L*(K/F);K=F*(N/L);I=(this._cache.start.left-(-((L-N)/2)));break;case"bl":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left-(-((L-N))));break;case"br":K=F*(N/L);N=L*(K/F);break;case"tl":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left-(-((L-N))));Q=(this._cache.start.top-(-((F-K))));break;case"tr":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left);Q=(this._cache.start.top-(-((F-K))));break;}O=this._checkHeight(K);G=this._checkWidth(N);if((O!=K)||(G!=N)){Q=0;I=0;if(O!=K){G=this._cache.width;}if(G!=N){O=this._cache.height;}}}return[O,G,Q,I];},_updateStatus:function(K,G,J,F){if(this._resizeEvent&&(!C.isString(this._resizeEvent))){if(this.get("status")){!
 E.setStyle(this._status,"display","inline");}K=((K===0)?this._!
 cache.st
art.height:K);G=((G===0)?this._cache.start.width:G);var I=parseInt(this.get("height"),10),D=parseInt(this.get("width"),10);if(isNaN(I)){I=parseInt(K,10);}if(isNaN(D)){D=parseInt(G,10);}var L=(parseInt(K,10)-I);var H=(parseInt(G,10)-D);this._cache.offsetHeight=L;this._cache.offsetWidth=H;this._status.innerHTML="<strong>"+parseInt(K,10)+" x "+parseInt(G,10)+"</strong><em>"+((L>0)?"+":"")+L+" x "+((H>0)?"+":"")+H+"</em>";E.setXY(this._status,[A.getPageX(this._resizeEvent)+12,A.getPageY(this._resizeEvent)+12]);}},lock:function(D){this._locked=true;if(D&&this.dd){E.removeClass(this._wrap,"yui-draggable");this.dd.lock();}return this;},unlock:function(D){this._locked=false;if(D&&this.dd){E.addClass(this._wrap,"yui-draggable");this.dd.unlock();}return this;},isLocked:function(){return this._locked;},reset:function(){this.resize(null,this._cache.start.height,this._cache.start.width,this._cache.start.top,this._cache.start.left,true);return this;},resize:function(M,J,P,Q,H,F,K){if(this!
 ._locked){return false;}this._resizeEvent=M;var G=this._wrap,I=this.get("animate"),O=true;if(this._proxy&&!F){G=this._proxy;I=false;}this._setAutoRatio(M);if(this._positioned){if(this._proxy){Q=this._cache.top-Q;H=this._cache.left-H;}}var L=this._setRatio(J,P,Q,H);J=parseInt(L[0],10);P=parseInt(L[1],10);Q=parseInt(L[2],10);H=parseInt(L[3],10);if(Q==0){Q=E.getY(G);}if(H==0){H=E.getX(G);}if(this._positioned){if(this._proxy&&F){if(!I){G.style.top=this._proxy.style.top;G.style.left=this._proxy.style.left;}else{Q=this._proxy.style.top;H=this._proxy.style.left;}}else{if(!this.get("ratio")&&!this._proxy){Q=this._cache.top+-(Q);H=this._cache.left+-(H);}if(Q){if(this.get("minY")){if(Q<this.get("minY")){Q=this.get("minY");}}if(this.get("maxY")){if(Q>this.get("maxY")){Q=this.get("maxY");}}}if(H){if(this.get("minX")){if(H<this.get("minX")){H=this.get("minX");}}if(this.get("maxX")){if((H+P)>this.get("maxX")){H=(this.get("maxX")-P);
-}}}}}if(!K){var N=this.fireEvent("beforeResize",{ev:"beforeResize",target:this,height:J,width:P,top:Q,left:H});if(N===false){return false;}}this._updateStatus(J,P,Q,H);if(this._positioned){if(this._proxy&&F){}else{if(Q){E.setY(G,Q);this._cache.top=Q;}if(H){E.setX(G,H);this._cache.left=H;}}}if(J){if(!I){O=true;if(this._proxy&&F){if(!this.get("setSize")){O=false;}}if(O){if(this.browser.ie>6){if(J===this._cache.height){J=J+1;}}G.style.height=J+"px";}if((this._proxy&&F)||!this._proxy){if(this._wrap!=this.get("element")){this.get("element").style.height=J+"px";}}}this._cache.height=J;}if(P){this._cache.width=P;if(!I){O=true;if(this._proxy&&F){if(!this.get("setSize")){O=false;}}if(O){G.style.width=P+"px";}if((this._proxy&&F)||!this._proxy){if(this._wrap!=this.get("element")){this.get("element").style.width=P+"px";}}}}if(I){if(YAHOO.util.Anim){var D=new YAHOO.util.Anim(G,{height:{to:this._cache.height},width:{to:this._cache.width}},this.get("animateDuration"),this.get("animateEasi!
 ng"));if(this._positioned){if(Q){D.attributes.top={to:parseInt(Q,10)};}if(H){D.attributes.left={to:parseInt(H,10)};}}if(this._wrap!=this.get("element")){D.onTween.subscribe(function(){this.get("element").style.height=G.style.height;this.get("element").style.width=G.style.width;},this,true);}D.onComplete.subscribe(function(){this.set("height",J);this.set("width",P);this.fireEvent("resize",{ev:"resize",target:this,height:J,width:P,top:Q,left:H});},this,true);D.animate();}}else{if(this._proxy&&!F){this.fireEvent("proxyResize",{ev:"proxyresize",target:this,height:J,width:P,top:Q,left:H});}else{this.fireEvent("resize",{ev:"resize",target:this,height:J,width:P,top:Q,left:H});}}return this;},_handle_for_br:function(F){var G=this._setWidth(F.e);var D=this._setHeight(F.e);this.resize(F.e,(D+1),G,0,0);},_handle_for_bl:function(G){var H=this._setWidth(G.e,true);var F=this._setHeight(G.e);var D=(H-this._cache.width);this.resize(G.e,F,H,0,D);},_handle_for_tl:function(G){var I=this._setW!
 idth(G.e,true);var F=this._setHeight(G.e,true);var H=(F-this._!
 cache.he
ight);var D=(I-this._cache.width);this.resize(G.e,F,I,H,D);},_handle_for_tr:function(F){var H=this._setWidth(F.e);var D=this._setHeight(F.e,true);var G=(D-this._cache.height);this.resize(F.e,D,H,G,0);},_handle_for_r:function(D){this._dds.r.setYConstraint(0,0);var F=this._setWidth(D.e);this.resize(D.e,0,F,0,0);},_handle_for_l:function(F){this._dds.l.setYConstraint(0,0);var G=this._setWidth(F.e,true);var D=(G-this._cache.width);this.resize(F.e,0,G,0,D);},_handle_for_b:function(F){this._dds.b.setXConstraint(0,0);var D=this._setHeight(F.e);this.resize(F.e,D,0,0,0);},_handle_for_t:function(F){this._dds.t.setXConstraint(0,0);var D=this._setHeight(F.e,true);var G=(D-this._cache.height);this.resize(F.e,D,0,G,0);},_setWidth:function(H,J){var I=this._cache.xy[0],G=this._cache.width,D=A.getPageX(H),F=(D-I);if(J){F=(I-D)+parseInt(this.get("width"),10);}F=this._snapTick(F,this.get("yTicks"));F=this._checkWidth(F);return F;},_checkWidth:function(D){if(this.get("minWidth")){if(D<=this.get(!
 "minWidth")){D=this.get("minWidth");}}if(this.get("maxWidth")){if(D>=this.get("maxWidth")){D=this.get("maxWidth");}}return D;},_checkHeight:function(D){if(this.get("minHeight")){if(D<=this.get("minHeight")){D=this.get("minHeight");}}if(this.get("maxHeight")){if(D>=this.get("maxHeight")){D=this.get("maxHeight");}}return D;},_setHeight:function(G,I){var H=this._cache.xy[1],F=this._cache.height,J=A.getPageY(G),D=(J-H);if(I){D=(H-J)+parseInt(this.get("height"),10);}D=this._snapTick(D,this.get("xTicks"));D=this._checkHeight(D);return D;},_snapTick:function(G,F){if(!G||!F){return G;}var H=G;var D=G%F;if(D>0){if(D>(F/2)){H=G+(F-D);}else{H=G-D;}}return H;},init:function(F,D){this._locked=false;this._cache={xy:[],height:0,width:0,top:0,left:0,offsetHeight:0,offsetWidth:0,start:{height:0,width:0,top:0,left:0}};B.superclass.init.call(this,F,D);this.set("setSize",this.get("setSize"));if(D.height){this.set("height",parseInt(D.height,10));}if(D.width){this.set("width",parseInt(D.width,10!
 ));}var G=F;if(!C.isString(G)){G=E.generateId(G);}B._instances!
 [G]=this
;this._active=false;this._createWrap();this._createProxy();this._createHandles();},getProxyEl:function(){return this._proxy;},getWrapEl:function(){return this._wrap;},getStatusEl:function(){return this._status;},getActiveHandleEl:function(){return this._handles[this._currentHandle];},isActive:function(){return((this._active)?true:false);},initAttributes:function(D){B.superclass.initAttributes.call(this,D);this.setAttributeConfig("useShim",{value:((D.useShim===true)?true:false),validator:YAHOO.lang.isBoolean,method:function(F){for(var G in this._dds){if(C.hasOwnProperty(this._dds,G)){this._dds[G].useShim=F;}}if(this.dd){this.dd.useShim=F;}}});this.setAttributeConfig("setSize",{value:((D.setSize===false)?false:true),validator:YAHOO.lang.isBoolean});this.setAttributeConfig("wrap",{writeOnce:true,validator:YAHOO.lang.isBoolean,value:D.wrap||false});this.setAttributeConfig("handles",{writeOnce:true,value:D.handles||["r","b","br"],validator:function(F){if(C.isString(F)&&F.toLowerC!
 ase()=="all"){F=["t","b","r","l","bl","br","tl","tr"];}if(!C.isArray(F)){F=F.replace(/, /g,",");F=F.split(",");}this._configs.handles.value=F;}});this.setAttributeConfig("width",{value:D.width||parseInt(this.getStyle("width"),10),validator:YAHOO.lang.isNumber,method:function(F){F=parseInt(F,10);if(F>0){if(this.get("setSize")){this.setStyle("width",F+"px");}this._cache.width=F;this._configs.width.value=F;}}});this.setAttributeConfig("height",{value:D.height||parseInt(this.getStyle("height"),10),validator:YAHOO.lang.isNumber,method:function(F){F=parseInt(F,10);if(F>0){if(this.get("setSize")){this.setStyle("height",F+"px");}this._cache.height=F;this._configs.height.value=F;}}});this.setAttributeConfig("minWidth",{value:D.minWidth||15,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minHeight",{value:D.minHeight||15,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxWidth",{value:D.maxWidth||10000,validator:YAHOO.lang.isNumber});
-this.setAttributeConfig("maxHeight",{value:D.maxHeight||10000,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minY",{value:D.minY||false});this.setAttributeConfig("minX",{value:D.minX||false});this.setAttributeConfig("maxY",{value:D.maxY||false});this.setAttributeConfig("maxX",{value:D.maxX||false});this.setAttributeConfig("animate",{value:D.animate||false,validator:function(G){var F=true;if(!YAHOO.util.Anim){F=false;}return F;}});this.setAttributeConfig("animateEasing",{value:D.animateEasing||function(){var F=false;if(YAHOO.util.Easing&&YAHOO.util.Easing.easeOut){F=YAHOO.util.Easing.easeOut;}return F;}()});this.setAttributeConfig("animateDuration",{value:D.animateDuration||0.5});this.setAttributeConfig("proxy",{value:D.proxy||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("ratio",{value:D.ratio||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("ghost",{value:D.ghost||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("drag!
 gable",{value:D.draggable||false,validator:YAHOO.lang.isBoolean,method:function(F){if(F&&this._wrap){this._setupDragDrop();}else{if(this.dd){E.removeClass(this._wrap,this.CSS_DRAG);this.dd.unreg();}}}});this.setAttributeConfig("hover",{value:D.hover||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("hiddenHandles",{value:D.hiddenHandles||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("knobHandles",{value:D.knobHandles||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("xTicks",{value:D.xTicks||false});this.setAttributeConfig("yTicks",{value:D.yTicks||false});this.setAttributeConfig("status",{value:D.status||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("autoRatio",{value:D.autoRatio||false,validator:YAHOO.lang.isBoolean});},destroy:function(){for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){A.purgeElement(this._handles[F]);this._handles[F].parentNode.removeChild(this._handles[F]);}}if(this._proxy){!
 this._proxy.parentNode.removeChild(this._proxy);}if(this._stat!
 us){this
._status.parentNode.removeChild(this._status);}if(this.dd){this.dd.unreg();E.removeClass(this._wrap,this.CSS_DRAG);}if(this._wrap!=this.get("element")){this.setStyle("position","");this.setStyle("top","");this.setStyle("left","");this._wrap.parentNode.replaceChild(this.get("element"),this._wrap);}this.removeClass(this.CSS_RESIZE);delete YAHOO.util.Resize._instances[this.get("id")];for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;delete this[D];}}},toString:function(){if(this.get){return"Resize (#"+this.get("id")+")";}return"Resize Utility";}});YAHOO.util.Resize=B;})();YAHOO.register("resize",YAHOO.util.Resize,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var E=YAHOO.util.Dom,A=YAHOO.util.Event,C=YAHOO.lang;var B=function(F,D){var G={element:F,attributes:D||{}};B.superclass.constructor.call(this,G.element,G.attributes);};B._instances={};B.getResizeById=function(D){if(B._instances[D]){return B._instances[D];}return false;};YAHOO.extend(B,YAHOO.util.Element,{CSS_RESIZE:"yui-resize",CSS_DRAG:"yui-draggable",CSS_HOVER:"yui-resize-hover",CSS_PROXY:"yui-resize-proxy",CSS_WRAP:"yui-resize-wrap",CSS_KNOB:"yui-resize-knob",CSS_HIDDEN:"yui-resize-hidden",CSS_HANDLE:"yui-resize-handle",CSS_STATUS:"yui-resize-status",CSS_GHOST:"yui-resize-ghost",CSS_RESIZING:"yui-resize-resizing",_resizeEvent:null,dd:null,browser:YAHOO.env.ua,_locked:null,_positioned:null,_dds:null,_wrap:null,_proxy:null,_handles:null,_currentHandle:null,_currentDD:null,_cache:null,_active:null,_createProxy:function(){if(this.get("proxy")){this._proxy=document.createElement("div");this._proxy.className=this.CSS_PROXY;this._proxy.style.height=this.get("elemen!
 t").clientHeight+"px";this._proxy.style.width=this.get("element").clientWidth+"px";this._wrap.parentNode.appendChild(this._proxy);}else{this.set("animate",false);}},_createWrap:function(){this._positioned=false;if(this.get("wrap")===false){switch(this.get("element").tagName.toLowerCase()){case"img":case"textarea":case"input":case"iframe":case"select":this.set("wrap",true);break;}}if(this.get("wrap")===true){this._wrap=document.createElement("div");this._wrap.id=this.get("element").id+"_wrap";this._wrap.className=this.CSS_WRAP;if(this.get("element").tagName.toLowerCase()=="textarea"){E.addClass(this._wrap,"yui-resize-textarea");}E.setStyle(this._wrap,"width",this.get("width")+"px");E.setStyle(this._wrap,"height",this.get("height")+"px");E.setStyle(this._wrap,"z-index",this.getStyle("z-index"));this.setStyle("z-index",0);var F=E.getStyle(this.get("element"),"position");E.setStyle(this._wrap,"position",((F=="static")?"relative":F));E.setStyle(this._wrap,"top",E.getStyle(this.g!
 et("element"),"top"));E.setStyle(this._wrap,"left",E.getStyle(!
 this.get
("element"),"left"));if(E.getStyle(this.get("element"),"position")=="absolute"){this._positioned=true;E.setStyle(this.get("element"),"position","relative");E.setStyle(this.get("element"),"top","0");E.setStyle(this.get("element"),"left","0");}var D=this.get("element").parentNode;D.replaceChild(this._wrap,this.get("element"));this._wrap.appendChild(this.get("element"));}else{this._wrap=this.get("element");if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}}if(this.get("draggable")){this._setupDragDrop();}if(this.get("hover")){E.addClass(this._wrap,this.CSS_HOVER);}if(this.get("knobHandles")){E.addClass(this._wrap,this.CSS_KNOB);}if(this.get("hiddenHandles")){E.addClass(this._wrap,this.CSS_HIDDEN);}E.addClass(this._wrap,this.CSS_RESIZE);},_setupDragDrop:function(){E.addClass(this._wrap,this.CSS_DRAG);this.dd=new YAHOO.util.DD(this._wrap,this.get("id")+"-resize",{dragOnly:true,useShim:this.get("useShim")});this.dd.on("dragEvent",function(){this.fireEvent("d!
 ragEvent",arguments);},this,true);},_createHandles:function(){this._handles={};this._dds={};var G=this.get("handles");for(var F=0;F<G.length;F++){this._handles[G[F]]=document.createElement("div");this._handles[G[F]].id=E.generateId(this._handles[G[F]]);this._handles[G[F]].className=this.CSS_HANDLE+" "+this.CSS_HANDLE+"-"+G[F];var D=document.createElement("div");D.className=this.CSS_HANDLE+"-inner-"+G[F];this._handles[G[F]].appendChild(D);this._wrap.appendChild(this._handles[G[F]]);A.on(this._handles[G[F]],"mouseover",this._handleMouseOver,this,true);A.on(this._handles[G[F]],"mouseout",this._handleMouseOut,this,true);this._dds[G[F]]=new YAHOO.util.DragDrop(this._handles[G[F]],this.get("id")+"-handle-"+G,{useShim:this.get("useShim")});this._dds[G[F]].setPadding(15,15,15,15);this._dds[G[F]].on("startDragEvent",this._handleStartDrag,this._dds[G[F]],this);this._dds[G[F]].on("mouseDownEvent",this._handleMouseDown,this._dds[G[F]],this);}this._status=document.createElement("span");!
 this._status.className=this.CSS_STATUS;document.body.insertBef!
 ore(this
._status,document.body.firstChild);},_ieSelectFix:function(){return false;},_ieSelectBack:null,_setAutoRatio:function(D){if(this.get("autoRatio")){if(D&&D.shiftKey){this.set("ratio",true);}else{this.set("ratio",this._configs.ratio._initialConfig.value);}}},_handleMouseDown:function(D){if(this._locked){return false;}if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}if(D){this._setAutoRatio(D);}if(this.browser.ie){this._ieSelectBack=document.body.onselectstart;document.body.onselectstart=this._ieSelectFix;}},_handleMouseOver:function(G){if(this._locked){return false;}E.removeClass(this._wrap,this.CSS_RESIZE);if(this.get("hover")){E.removeClass(this._wrap,this.CSS_HOVER);}var D=A.getTarget(G);if(!E.hasClass(D,this.CSS_HANDLE)){D=D.parentNode;}if(E.hasClass(D,this.CSS_HANDLE)&&!this._active){E.addClass(D,this.CSS_HANDLE+"-active");for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){if(this._handles[F]==D){E.addClass(D,this.CSS_HANDLE+"-"+F+"-!
 active");break;}}}}E.addClass(this._wrap,this.CSS_RESIZE);},_handleMouseOut:function(G){E.removeClass(this._wrap,this.CSS_RESIZE);if(this.get("hover")&&!this._active){E.addClass(this._wrap,this.CSS_HOVER);}var D=A.getTarget(G);if(!E.hasClass(D,this.CSS_HANDLE)){D=D.parentNode;}if(E.hasClass(D,this.CSS_HANDLE)&&!this._active){E.removeClass(D,this.CSS_HANDLE+"-active");for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){if(this._handles[F]==D){E.removeClass(D,this.CSS_HANDLE+"-"+F+"-active");break;}}}}E.addClass(this._wrap,this.CSS_RESIZE);},_handleStartDrag:function(G,F){var D=F.getDragEl();if(E.hasClass(D,this.CSS_HANDLE)){if(E.getStyle(this._wrap,"position")=="absolute"){this._positioned=true;}this._active=true;this._currentDD=F;if(this._proxy){this._proxy.style.visibility="visible";this._proxy.style.zIndex="1000";this._proxy.style.height=this.get("element").clientHeight+"px";this._proxy.style.width=this.get("element").clientWidth+"px";
+}for(var H in this._handles){if(C.hasOwnProperty(this._handles,H)){if(this._handles[H]==D){this._currentHandle=H;var I="_handle_for_"+H;E.addClass(D,this.CSS_HANDLE+"-"+H+"-active");F.on("dragEvent",this[I],this,true);F.on("mouseUpEvent",this._handleMouseUp,this,true);break;}}}E.addClass(D,this.CSS_HANDLE+"-active");if(this.get("proxy")){var J=E.getXY(this.get("element"));E.setXY(this._proxy,J);if(this.get("ghost")){this.addClass(this.CSS_GHOST);}}E.addClass(this._wrap,this.CSS_RESIZING);this._setCache();this._updateStatus(this._cache.height,this._cache.width,this._cache.top,this._cache.left);this.fireEvent("startResize",{type:"startresize",target:this});}},_setCache:function(){this._cache.xy=E.getXY(this._wrap);E.setXY(this._wrap,this._cache.xy);this._cache.height=this.get("clientHeight");this._cache.width=this.get("clientWidth");this._cache.start.height=this._cache.height;this._cache.start.width=this._cache.width;this._cache.start.top=this._cache.xy[1];this._cache.start.l!
 eft=this._cache.xy[0];this._cache.top=this._cache.xy[1];this._cache.left=this._cache.xy[0];this.set("height",this._cache.height,true);this.set("width",this._cache.width,true);},_handleMouseUp:function(F){this._active=false;var G="_handle_for_"+this._currentHandle;this._currentDD.unsubscribe("dragEvent",this[G],this,true);this._currentDD.unsubscribe("mouseUpEvent",this._handleMouseUp,this,true);if(this._proxy){this._proxy.style.visibility="hidden";this._proxy.style.zIndex="-1";if(this.get("setSize")){this.resize(F,this._cache.height,this._cache.width,this._cache.top,this._cache.left,true);}else{this.fireEvent("resize",{ev:"resize",target:this,height:this._cache.height,width:this._cache.width,top:this._cache.top,left:this._cache.left});}if(this.get("ghost")){this.removeClass(this.CSS_GHOST);}}if(this.get("hover")){E.addClass(this._wrap,this.CSS_HOVER);}if(this._status){E.setStyle(this._status,"display","none");}if(this.browser.ie){document.body.onselectstart=this._ieSelectBac!
 k;}if(this.browser.ie){E.removeClass(this._wrap,this.CSS_RESIZ!
 E);}for(
var D in this._handles){if(C.hasOwnProperty(this._handles,D)){E.removeClass(this._handles[D],this.CSS_HANDLE+"-active");}}if(this.get("hover")&&!this._active){E.addClass(this._wrap,this.CSS_HOVER);}E.removeClass(this._wrap,this.CSS_RESIZING);E.removeClass(this._handles[this._currentHandle],this.CSS_HANDLE+"-"+this._currentHandle+"-active");E.removeClass(this._handles[this._currentHandle],this.CSS_HANDLE+"-active");if(this.browser.ie){E.addClass(this._wrap,this.CSS_RESIZE);}this._resizeEvent=null;this._currentHandle=null;if(!this.get("animate")){this.set("height",this._cache.height,true);this.set("width",this._cache.width,true);}this.fireEvent("endResize",{ev:"endResize",target:this,height:this._cache.height,width:this._cache.width,top:this._cache.top,left:this._cache.left});},_setRatio:function(K,N,Q,I){var O=K,G=N;if(this.get("ratio")){var P=this._cache.height,H=this._cache.width,F=parseInt(this.get("height"),10),L=parseInt(this.get("width"),10),M=this.get("maxHeight"),R=th!
 is.get("minHeight"),D=this.get("maxWidth"),J=this.get("minWidth");switch(this._currentHandle){case"l":K=F*(N/L);K=Math.min(Math.max(R,K),M);N=L*(K/F);Q=(this._cache.start.top-(-((F-K)/2)));I=(this._cache.start.left-(-((L-N))));break;case"r":K=F*(N/L);K=Math.min(Math.max(R,K),M);N=L*(K/F);Q=(this._cache.start.top-(-((F-K)/2)));break;case"t":N=L*(K/F);K=F*(N/L);I=(this._cache.start.left-(-((L-N)/2)));Q=(this._cache.start.top-(-((F-K))));break;case"b":N=L*(K/F);K=F*(N/L);I=(this._cache.start.left-(-((L-N)/2)));break;case"bl":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left-(-((L-N))));break;case"br":K=F*(N/L);N=L*(K/F);break;case"tl":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left-(-((L-N))));Q=(this._cache.start.top-(-((F-K))));break;case"tr":K=F*(N/L);N=L*(K/F);I=(this._cache.start.left);Q=(this._cache.start.top-(-((F-K))));break;}O=this._checkHeight(K);G=this._checkWidth(N);if((O!=K)||(G!=N)){Q=0;I=0;if(O!=K){G=this._cache.width;}if(G!=N){O=this._cache.height;}}}return[O,G,Q,I];!
 },_updateStatus:function(K,G,J,F){if(this._resizeEvent&&(!C.is!
 String(t
his._resizeEvent))){K=((K===0)?this._cache.start.height:K);G=((G===0)?this._cache.start.width:G);var I=parseInt(this.get("height"),10),D=parseInt(this.get("width"),10);if(isNaN(I)){I=parseInt(K,10);}if(isNaN(D)){D=parseInt(G,10);}var L=(parseInt(K,10)-I);var H=(parseInt(G,10)-D);this._cache.offsetHeight=L;this._cache.offsetWidth=H;if(this.get("status")){E.setStyle(this._status,"display","inline");this._status.innerHTML="<strong>"+parseInt(K,10)+" x "+parseInt(G,10)+"</strong><em>"+((L>0)?"+":"")+L+" x "+((H>0)?"+":"")+H+"</em>";E.setXY(this._status,[A.getPageX(this._resizeEvent)+12,A.getPageY(this._resizeEvent)+12]);}}},lock:function(D){this._locked=true;if(D&&this.dd){E.removeClass(this._wrap,"yui-draggable");this.dd.lock();}return this;},unlock:function(D){this._locked=false;if(D&&this.dd){E.addClass(this._wrap,"yui-draggable");this.dd.unlock();}return this;},isLocked:function(){return this._locked;},reset:function(){this.resize(null,this._cache.start.height,this._cache.st!
 art.width,this._cache.start.top,this._cache.start.left,true);return this;},resize:function(M,J,P,Q,H,F,K){if(this._locked){return false;}this._resizeEvent=M;var G=this._wrap,I=this.get("animate"),O=true;if(this._proxy&&!F){G=this._proxy;I=false;}this._setAutoRatio(M);if(this._positioned){if(this._proxy){Q=this._cache.top-Q;H=this._cache.left-H;}}var L=this._setRatio(J,P,Q,H);J=parseInt(L[0],10);P=parseInt(L[1],10);Q=parseInt(L[2],10);H=parseInt(L[3],10);if(Q==0){Q=E.getY(G);}if(H==0){H=E.getX(G);}if(this._positioned){if(this._proxy&&F){if(!I){G.style.top=this._proxy.style.top;G.style.left=this._proxy.style.left;}else{Q=this._proxy.style.top;H=this._proxy.style.left;}}else{if(!this.get("ratio")&&!this._proxy){Q=this._cache.top+-(Q);H=this._cache.left+-(H);}if(Q){if(this.get("minY")){if(Q<this.get("minY")){Q=this.get("minY");}}if(this.get("maxY")){if(Q>this.get("maxY")){Q=this.get("maxY");}}}if(H){if(this.get("minX")){if(H<this.get("minX")){H=this.get("minX");
+}}if(this.get("maxX")){if((H+P)>this.get("maxX")){H=(this.get("maxX")-P);}}}}}if(!K){var N=this.fireEvent("beforeResize",{ev:"beforeResize",target:this,height:J,width:P,top:Q,left:H});if(N===false){return false;}}this._updateStatus(J,P,Q,H);if(this._positioned){if(this._proxy&&F){}else{if(Q){E.setY(G,Q);this._cache.top=Q;}if(H){E.setX(G,H);this._cache.left=H;}}}if(J){if(!I){O=true;if(this._proxy&&F){if(!this.get("setSize")){O=false;}}if(O){G.style.height=J+"px";}if((this._proxy&&F)||!this._proxy){if(this._wrap!=this.get("element")){this.get("element").style.height=J+"px";}}}this._cache.height=J;}if(P){this._cache.width=P;if(!I){O=true;if(this._proxy&&F){if(!this.get("setSize")){O=false;}}if(O){G.style.width=P+"px";}if((this._proxy&&F)||!this._proxy){if(this._wrap!=this.get("element")){this.get("element").style.width=P+"px";}}}}if(I){if(YAHOO.util.Anim){var D=new YAHOO.util.Anim(G,{height:{to:this._cache.height},width:{to:this._cache.width}},this.get("animateDuration"),this.!
 get("animateEasing"));if(this._positioned){if(Q){D.attributes.top={to:parseInt(Q,10)};}if(H){D.attributes.left={to:parseInt(H,10)};}}if(this._wrap!=this.get("element")){D.onTween.subscribe(function(){this.get("element").style.height=G.style.height;this.get("element").style.width=G.style.width;},this,true);}D.onComplete.subscribe(function(){this.set("height",J);this.set("width",P);this.fireEvent("resize",{ev:"resize",target:this,height:J,width:P,top:Q,left:H});},this,true);D.animate();}}else{if(this._proxy&&!F){this.fireEvent("proxyResize",{ev:"proxyresize",target:this,height:J,width:P,top:Q,left:H});}else{this.fireEvent("resize",{ev:"resize",target:this,height:J,width:P,top:Q,left:H});}}return this;},_handle_for_br:function(F){var G=this._setWidth(F.e);var D=this._setHeight(F.e);this.resize(F.e,D,G,0,0);},_handle_for_bl:function(G){var H=this._setWidth(G.e,true);var F=this._setHeight(G.e);var D=(H-this._cache.width);this.resize(G.e,F,H,0,D);},_handle_for_tl:function(G){var !
 I=this._setWidth(G.e,true);var F=this._setHeight(G.e,true);var!
  H=(F-th
is._cache.height);var D=(I-this._cache.width);this.resize(G.e,F,I,H,D);},_handle_for_tr:function(F){var H=this._setWidth(F.e);var D=this._setHeight(F.e,true);var G=(D-this._cache.height);this.resize(F.e,D,H,G,0);},_handle_for_r:function(D){this._dds.r.setYConstraint(0,0);var F=this._setWidth(D.e);this.resize(D.e,0,F,0,0);},_handle_for_l:function(F){this._dds.l.setYConstraint(0,0);var G=this._setWidth(F.e,true);var D=(G-this._cache.width);this.resize(F.e,0,G,0,D);},_handle_for_b:function(F){this._dds.b.setXConstraint(0,0);var D=this._setHeight(F.e);this.resize(F.e,D,0,0,0);},_handle_for_t:function(F){this._dds.t.setXConstraint(0,0);var D=this._setHeight(F.e,true);var G=(D-this._cache.height);this.resize(F.e,D,0,G,0);},_setWidth:function(H,J){var I=this._cache.xy[0],G=this._cache.width,D=A.getPageX(H),F=(D-I);if(J){F=(I-D)+parseInt(this.get("width"),10);}F=this._snapTick(F,this.get("xTicks"));F=this._checkWidth(F);return F;},_checkWidth:function(D){if(this.get("minWidth")){if(!
 D<=this.get("minWidth")){D=this.get("minWidth");}}if(this.get("maxWidth")){if(D>=this.get("maxWidth")){D=this.get("maxWidth");}}return D;},_checkHeight:function(D){if(this.get("minHeight")){if(D<=this.get("minHeight")){D=this.get("minHeight");}}if(this.get("maxHeight")){if(D>=this.get("maxHeight")){D=this.get("maxHeight");}}return D;},_setHeight:function(G,I){var H=this._cache.xy[1],F=this._cache.height,J=A.getPageY(G),D=(J-H);if(I){D=(H-J)+parseInt(this.get("height"),10);}D=this._snapTick(D,this.get("yTicks"));D=this._checkHeight(D);return D;},_snapTick:function(G,F){if(!G||!F){return G;}var H=G;var D=G%F;if(D>0){if(D>(F/2)){H=G+(F-D);}else{H=G-D;}}return H;},init:function(H,F){this._locked=false;this._cache={xy:[],height:0,width:0,top:0,left:0,offsetHeight:0,offsetWidth:0,start:{height:0,width:0,top:0,left:0}};B.superclass.init.call(this,H,F);this.set("setSize",this.get("setSize"));if(F.height){this.set("height",parseInt(F.height,10));}else{var G=this.getStyle("height");i!
 f(G=="auto"){this.set("height",parseInt(this.get("element").of!
 fsetHeig
ht,10));}}if(F.width){this.set("width",parseInt(F.width,10));}else{var D=this.getStyle("width");if(D=="auto"){this.set("width",parseInt(this.get("element").offsetWidth,10));}}var I=H;if(!C.isString(I)){I=E.generateId(I);}B._instances[I]=this;this._active=false;this._createWrap();this._createProxy();this._createHandles();},getProxyEl:function(){return this._proxy;},getWrapEl:function(){return this._wrap;},getStatusEl:function(){return this._status;},getActiveHandleEl:function(){return this._handles[this._currentHandle];},isActive:function(){return((this._active)?true:false);},initAttributes:function(D){B.superclass.initAttributes.call(this,D);this.setAttributeConfig("useShim",{value:((D.useShim===true)?true:false),validator:YAHOO.lang.isBoolean,method:function(F){for(var G in this._dds){if(C.hasOwnProperty(this._dds,G)){this._dds[G].useShim=F;}}if(this.dd){this.dd.useShim=F;}}});this.setAttributeConfig("setSize",{value:((D.setSize===false)?false:true),validator:YAHOO.lang.isB!
 oolean});this.setAttributeConfig("wrap",{writeOnce:true,validator:YAHOO.lang.isBoolean,value:D.wrap||false});this.setAttributeConfig("handles",{writeOnce:true,value:D.handles||["r","b","br"],validator:function(F){if(C.isString(F)&&F.toLowerCase()=="all"){F=["t","b","r","l","bl","br","tl","tr"];}if(!C.isArray(F)){F=F.replace(/, /g,",");F=F.split(",");}this._configs.handles.value=F;}});this.setAttributeConfig("width",{value:D.width||parseInt(this.getStyle("width"),10),validator:YAHOO.lang.isNumber,method:function(F){F=parseInt(F,10);if(F>0){if(this.get("setSize")){this.setStyle("width",F+"px");}this._cache.width=F;this._configs.width.value=F;}}});this.setAttributeConfig("height",{value:D.height||parseInt(this.getStyle("height"),10),validator:YAHOO.lang.isNumber,method:function(F){F=parseInt(F,10);if(F>0){if(this.get("setSize")){this.setStyle("height",F+"px");}this._cache.height=F;this._configs.height.value=F;
+}}});this.setAttributeConfig("minWidth",{value:D.minWidth||15,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minHeight",{value:D.minHeight||15,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxWidth",{value:D.maxWidth||10000,validator:YAHOO.lang.isNumber});this.setAttributeConfig("maxHeight",{value:D.maxHeight||10000,validator:YAHOO.lang.isNumber});this.setAttributeConfig("minY",{value:D.minY||false});this.setAttributeConfig("minX",{value:D.minX||false});this.setAttributeConfig("maxY",{value:D.maxY||false});this.setAttributeConfig("maxX",{value:D.maxX||false});this.setAttributeConfig("animate",{value:D.animate||false,validator:function(G){var F=true;if(!YAHOO.util.Anim){F=false;}return F;}});this.setAttributeConfig("animateEasing",{value:D.animateEasing||function(){var F=false;if(YAHOO.util.Easing&&YAHOO.util.Easing.easeOut){F=YAHOO.util.Easing.easeOut;}return F;}()});this.setAttributeConfig("animateDuration",{value:D.animateDuration||0.5});this.setAttri!
 buteConfig("proxy",{value:D.proxy||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("ratio",{value:D.ratio||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("ghost",{value:D.ghost||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("draggable",{value:D.draggable||false,validator:YAHOO.lang.isBoolean,method:function(F){if(F&&this._wrap){this._setupDragDrop();}else{if(this.dd){E.removeClass(this._wrap,this.CSS_DRAG);this.dd.unreg();}}}});this.setAttributeConfig("hover",{value:D.hover||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("hiddenHandles",{value:D.hiddenHandles||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("knobHandles",{value:D.knobHandles||false,validator:YAHOO.lang.isBoolean});this.setAttributeConfig("xTicks",{value:D.xTicks||false});this.setAttributeConfig("yTicks",{value:D.yTicks||false});this.setAttributeConfig("status",{value:D.status||false,validator:YAHOO.lang.isBoolean});this.setAttrib!
 uteConfig("autoRatio",{value:D.autoRatio||false,validator:YAHO!
 O.lang.i
sBoolean});},destroy:function(){for(var F in this._handles){if(C.hasOwnProperty(this._handles,F)){A.purgeElement(this._handles[F]);this._handles[F].parentNode.removeChild(this._handles[F]);}}if(this._proxy){this._proxy.parentNode.removeChild(this._proxy);}if(this._status){this._status.parentNode.removeChild(this._status);}if(this.dd){this.dd.unreg();E.removeClass(this._wrap,this.CSS_DRAG);}if(this._wrap!=this.get("element")){this.setStyle("position","");this.setStyle("top","");this.setStyle("left","");this._wrap.parentNode.replaceChild(this.get("element"),this._wrap);}this.removeClass(this.CSS_RESIZE);delete YAHOO.util.Resize._instances[this.get("id")];for(var D in this){if(C.hasOwnProperty(this,D)){this[D]=null;delete this[D];}}},toString:function(){if(this.get){return"Resize (#"+this.get("id")+")";}return"Resize Utility";}});YAHOO.util.Resize=B;})();YAHOO.register("resize",YAHOO.util.Resize,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/resize/resize.js
===================================================================
--- trunk/root/static/yui/resize/resize.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/resize/resize.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * @description <p>Makes an element resizable</p>
@@ -10,7 +10,6 @@
  * @requires yahoo, dom, dragdrop, element, event
  * @optional animation
  * @module resize
- * @beta
  */
 (function() {
 var D = YAHOO.util.Dom,
@@ -249,19 +248,24 @@
         _createWrap: function() {
             this._positioned = false;
             //Force wrap for elements that can't have children 
-            switch (this.get('element').tagName.toLowerCase()) {
-                case 'img':
-                case 'textarea':
-                case 'input':
-                case 'iframe':
-                case 'select':
-                    this.set('wrap', true);
-                    break;
+            if (this.get('wrap') === false) {
+                switch (this.get('element').tagName.toLowerCase()) {
+                    case 'img':
+                    case 'textarea':
+                    case 'input':
+                    case 'iframe':
+                    case 'select':
+                        this.set('wrap', true);
+                        break;
+                }
             }
             if (this.get('wrap') === true) {
                 this._wrap = document.createElement('div');
                 this._wrap.id = this.get('element').id + '_wrap';
                 this._wrap.className = this.CSS_WRAP;
+                if (this.get('element').tagName.toLowerCase() == 'textarea') {
+                    D.addClass(this._wrap, 'yui-resize-textarea');
+                }
                 D.setStyle(this._wrap, 'width', this.get('width') + 'px');
                 D.setStyle(this._wrap, 'height', this.get('height') + 'px');
                 D.setStyle(this._wrap, 'z-index', this.getStyle('z-index'));
@@ -400,8 +404,8 @@
             if (this._locked) {
                 return false;
             }
-            //Internet Explorer needs this
             D.removeClass(this._wrap, this.CSS_RESIZE);
+
             if (this.get('hover')) {
                 D.removeClass(this._wrap, this.CSS_HOVER);
             }
@@ -421,7 +425,6 @@
                 }
             }
 
-            //Internet Explorer needs this
             D.addClass(this._wrap, this.CSS_RESIZE);
         },
         /** 
@@ -431,7 +434,6 @@
         * @description Removes CSS class names to the handles
         */
         _handleMouseOut: function(ev) {
-            //Internet Explorer needs this
             D.removeClass(this._wrap, this.CSS_RESIZE);
             if (this.get('hover') && !this._active) {
                 D.addClass(this._wrap, this.CSS_HOVER);
@@ -451,7 +453,6 @@
                     }
                 }
             }
-            //Internet Explorer needs this
             D.addClass(this._wrap, this.CSS_RESIZE);
         },
         /** 
@@ -687,9 +688,6 @@
         */
         _updateStatus: function(h, w, t, l) {
             if (this._resizeEvent && (!Lang.isString(this._resizeEvent))) {
-                if (this.get('status')) {
-                    D.setStyle(this._status, 'display', 'inline');
-                }
                 h = ((h === 0) ? this._cache.start.height : h);
                 w = ((w === 0) ? this._cache.start.width : w);
                 var h1 = parseInt(this.get('height'), 10),
@@ -705,8 +703,12 @@
                 var diffW = (parseInt(w, 10) - w1);
                 this._cache.offsetHeight = diffH;
                 this._cache.offsetWidth = diffW;
-                this._status.innerHTML = '<strong>' + parseInt(h, 10) + ' x ' + parseInt(w, 10) + '</strong><em>' + ((diffH > 0) ? '+' : '') + diffH + ' x ' + ((diffW > 0) ? '+' : '') + diffW + '</em>';
-                D.setXY(this._status, [Event.getPageX(this._resizeEvent) + 12, Event.getPageY(this._resizeEvent) + 12]);
+                if (this.get('status')) {
+                    D.setStyle(this._status, 'display', 'inline');
+                    //This will cause IE8 to crash if the status box is hidden..
+                    this._status.innerHTML = '<strong>' + parseInt(h, 10) + ' x ' + parseInt(w, 10) + '</strong><em>' + ((diffH > 0) ? '+' : '') + diffH + ' x ' + ((diffW > 0) ? '+' : '') + diffW + '</em>';
+                    D.setXY(this._status, [Event.getPageX(this._resizeEvent) + 12, Event.getPageY(this._resizeEvent) + 12]);
+                }
             }
         },
         /** 
@@ -784,13 +786,14 @@
                     l = this._cache.left - l;
                 }
             }
-
+            
+            
             var ratio = this._setRatio(h, w, t, l);
             h = parseInt(ratio[0], 10);
             w = parseInt(ratio[1], 10);
             t = parseInt(ratio[2], 10);
             l = parseInt(ratio[3], 10);
-
+            
             if (t == 0) {
                 //No Offset, get from cache
                 t = D.getY(el);
@@ -851,6 +854,7 @@
 
             this._updateStatus(h, w, t, l);
 
+
             if (this._positioned) {
                 if (this._proxy && force) {
                     //Do nothing
@@ -874,11 +878,6 @@
                         }
                     }
                     if (set) {
-                        if (this.browser.ie > 6) {
-                            if (h === this._cache.height) {
-                                h = h + 1;
-                            }
-                        }
                         el.style.height = h + 'px';
                     }
                     if ((this._proxy && force) || !this._proxy) {
@@ -964,7 +963,7 @@
         _handle_for_br: function(args) {
             var newW = this._setWidth(args.e);
             var newH = this._setHeight(args.e);
-            this.resize(args.e, (newH + 1), newW, 0, 0);
+            this.resize(args.e, newH, newW, 0, 0);
         },
         /** 
         * @private
@@ -1067,7 +1066,7 @@
                     nw = (xy - x) + parseInt(this.get('width'), 10);
                 }
                 
-                nw = this._snapTick(nw, this.get('yTicks'));
+                nw = this._snapTick(nw, this.get('xTicks'));
                 nw = this._checkWidth(nw);
             return nw;
         },
@@ -1128,7 +1127,7 @@
                 if (flip) {
                     nh = (xy - y) + parseInt(this.get('height'), 10);
                 }
-                nh = this._snapTick(nh, this.get('xTicks'));
+                nh = this._snapTick(nh, this.get('yTicks'));
                 nh = this._checkHeight(nh);
                 
             return nh;
@@ -1185,9 +1184,19 @@
 
             if (p_oAttributes.height) {
                 this.set('height', parseInt(p_oAttributes.height, 10));
+            } else {
+                var h = this.getStyle('height');
+                if (h == 'auto') {
+                    this.set('height', parseInt(this.get('element').offsetHeight, 10));
+                }
             }
             if (p_oAttributes.width) {
                 this.set('width', parseInt(p_oAttributes.width, 10));
+            } else {
+                var w = this.getStyle('width');
+                if (w == 'auto') {
+                    this.set('width', parseInt(this.get('element').offsetWidth, 10));
+                }
             }
             
             var id = p_oElement;
@@ -1254,7 +1263,7 @@
             Resize.superclass.initAttributes.call(this, attr);
 
             /**
-            * @attribute useShime
+            * @attribute useShim
             * @description This setting will be passed to the DragDrop instances on the resize handles and for the draggable property.
             * This property should be used if you want the resize handles to work over iframe and other elements.
             * @type Boolean
@@ -1677,4 +1686,4 @@
 
 })();
 
-YAHOO.register("resize", YAHOO.util.Resize, {version: "2.6.0", build: "1321"});
+YAHOO.register("resize", YAHOO.util.Resize, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/selector/README
===================================================================
--- trunk/root/static/yui/selector/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,23 +0,0 @@
-YUI Library - Selector - Release Notes
-
-2.6.0
-  * now supporting cross-browser "for" attribute 
-  * gracefully handling non-existant IDs 
-
-2.5.2
-  * no change
-
-2.5.1
-
-  * query() returns null when firstOnly and no result 
-  * correctly handle quoted attributes 
-
-2.5.0
-
-  * query() now returns single node (not array) when firstOnly is true
-  * filter() now works with ID input
-  * pseudos and attributes correctly handle spaces
-
-2.4.0
-
-  * Beta release

Deleted: trunk/root/static/yui/selector/selector-beta-debug.js
===================================================================
--- trunk/root/static/yui/selector/selector-beta-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector-beta-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,673 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * The selector module provides helper methods allowing CSS3 Selectors to be used with DOM elements.
- * @module selector
- * @title Selector Utility
- * @namespace YAHOO.util
- * @requires yahoo, dom
- */
-
-(function() {
-/**
- * Provides helper methods for collecting and filtering DOM elements.
- * @namespace YAHOO.util
- * @class Selector
- * @static
- */
-var Selector = function() {};
-
-var Y = YAHOO.util;
-
-var reNth = /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/;
-
-Selector.prototype = {
-    /**
-     * Default document for use queries 
-     * @property document
-     * @type object
-     * @default window.document
-     */
-    document: window.document,
-    /**
-     * Mapping of attributes to aliases, normally to work around HTMLAttributes
-     * that conflict with JS reserved words.
-     * @property attrAliases
-     * @type object
-     */
-    attrAliases: {
-    },
-
-    /**
-     * Mapping of shorthand tokens to corresponding attribute selector 
-     * @property shorthand
-     * @type object
-     */
-    shorthand: {
-        //'(?:(?:[^\\)\\]\\s*>+~,]+)(?:-?[_a-z]+[-\\w]))+#(-?[_a-z]+[-\\w]*)': '[id=$1]',
-        '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
-        '\\.(-?[_a-z]+[-\\w]*)': '[class~=$1]'
-    },
-
-    /**
-     * List of operators and corresponding boolean functions. 
-     * These functions are passed the attribute and the current node's value of the attribute.
-     * @property operators
-     * @type object
-     */
-    operators: {
-        '=': function(attr, val) { return attr === val; }, // Equality
-        '!=': function(attr, val) { return attr !== val; }, // Inequality
-        '~=': function(attr, val) { // Match one of space seperated words 
-            var s = ' ';
-            return (s + attr + s).indexOf((s + val + s)) > -1;
-        },
-        '|=': function(attr, val) { return getRegExp('^' + val + '[-]?').test(attr); }, // Match start with value followed by optional hyphen
-        '^=': function(attr, val) { return attr.indexOf(val) === 0; }, // Match starts with value
-        '$=': function(attr, val) { return attr.lastIndexOf(val) === attr.length - val.length; }, // Match ends with value
-        '*=': function(attr, val) { return attr.indexOf(val) > -1; }, // Match contains value as substring 
-        '': function(attr, val) { return attr; } // Just test for existence of attribute
-    },
-
-    /**
-     * List of pseudo-classes and corresponding boolean functions. 
-     * These functions are called with the current node, and any value that was parsed with the pseudo regex.
-     * @property pseudos
-     * @type object
-     */
-    pseudos: {
-        'root': function(node) {
-            return node === node.ownerDocument.documentElement;
-        },
-
-        'nth-child': function(node, val) {
-            return getNth(node, val);
-        },
-
-        'nth-last-child': function(node, val) {
-            return getNth(node, val, null, true);
-        },
-
-        'nth-of-type': function(node, val) {
-            return getNth(node, val, node.tagName);
-        },
-         
-        'nth-last-of-type': function(node, val) {
-            return getNth(node, val, node.tagName, true);
-        },
-         
-        'first-child': function(node) {
-            return getChildren(node.parentNode)[0] === node;
-        },
-
-        'last-child': function(node) {
-            var children = getChildren(node.parentNode);
-            return children[children.length - 1] === node;
-        },
-
-        'first-of-type': function(node, val) {
-            return getChildren(node.parentNode, node.tagName.toLowerCase())[0];
-        },
-         
-        'last-of-type': function(node, val) {
-            var children = getChildren(node.parentNode, node.tagName.toLowerCase());
-            return children[children.length - 1];
-        },
-         
-        'only-child': function(node) {
-            var children = getChildren(node.parentNode);
-            return children.length === 1 && children[0] === node;
-        },
-
-        'only-of-type': function(node) {
-            return getChildren(node.parentNode, node.tagName.toLowerCase()).length === 1;
-        },
-
-        'empty': function(node) {
-            return node.childNodes.length === 0;
-        },
-
-        'not': function(node, simple) {
-            return !Selector.test(node, simple);
-        },
-
-        'contains': function(node, str) {
-            var text = node.innerText || node.textContent || '';
-            return text.indexOf(str) > -1;
-        },
-        'checked': function(node) {
-            return node.checked === true;
-        }
-    },
-
-    /**
-     * Test if the supplied node matches the supplied selector.
-     * @method test
-     *
-     * @param {HTMLElement | String} node An id or node reference to the HTMLElement being tested.
-     * @param {string} selector The CSS Selector to test the node against.
-     * @return{boolean} Whether or not the node matches the selector.
-     * @static
-    
-     */
-    test: function(node, selector) {
-        node = Selector.document.getElementById(node) || node;
-
-        if (!node) {
-            return false;
-        }
-
-        var groups = selector ? selector.split(',') : [];
-        if (groups.length) {
-            for (var i = 0, len = groups.length; i < len; ++i) {
-                if ( rTestNode(node, groups[i]) ) { // passes if ANY group matches
-                    return true;
-                }
-            }
-            return false;
-        }
-        return rTestNode(node, selector);
-    },
-
-    /**
-     * Filters a set of nodes based on a given CSS selector. 
-     * @method filter
-     *
-     * @param {array} nodes A set of nodes/ids to filter. 
-     * @param {string} selector The selector used to test each node.
-     * @return{array} An array of nodes from the supplied array that match the given selector.
-     * @static
-     */
-    filter: function(nodes, selector) {
-        nodes = nodes || [];
-
-        var node,
-            result = [],
-            tokens = tokenize(selector);
-
-        if (!nodes.item) { // if not HTMLCollection, handle arrays of ids and/or nodes
-            YAHOO.log('filter: scanning input for HTMLElements/IDs', 'info', 'Selector');
-            for (var i = 0, len = nodes.length; i < len; ++i) {
-                if (!nodes[i].tagName) { // tagName limits to HTMLElements 
-                    node = Selector.document.getElementById(nodes[i]);
-                    if (node) { // skip IDs that return null 
-                        nodes[i] = node;
-                    } else {
-                        YAHOO.log('filter: skipping invalid node', 'warn', 'Selector');
-                    }
-                }
-            }
-        }
-        result = rFilter(nodes, tokenize(selector)[0]);
-        clearParentCache();
-        YAHOO.log('filter: returning:' + result.length, 'info', 'Selector');
-        return result;
-    },
-
-    /**
-     * Retrieves a set of nodes based on a given CSS selector. 
-     * @method query
-     *
-     * @param {string} selector The CSS Selector to test the node against.
-     * @param {HTMLElement | String} root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
-     * @param {Boolean} firstOnly optional Whether or not to return only the first match.
-     * @return {Array} An array of nodes that match the given selector.
-     * @static
-     */
-    query: function(selector, root, firstOnly) {
-        var result = query(selector, root, firstOnly);
-        YAHOO.log('query: returning ' + result, 'info', 'Selector');
-        return result;
-    }
-};
-
-var query = function(selector, root, firstOnly, deDupe) {
-    var result =  (firstOnly) ? null : [];
-    if (!selector) {
-        return result;
-    }
-
-    var groups = selector.split(','); // TODO: handle comma in attribute/pseudo
-
-    if (groups.length > 1) {
-        var found;
-        for (var i = 0, len = groups.length; i < len; ++i) {
-            found = arguments.callee(groups[i], root, firstOnly, true);
-            result = firstOnly ? found : result.concat(found); 
-        }
-        clearFoundCache();
-        return result;
-    }
-
-    if (root && !root.nodeName) { // assume ID
-        root = Selector.document.getElementById(root);
-        if (!root) {
-            YAHOO.log('invalid root node provided', 'warn', 'Selector');
-            return result;
-        }
-    }
-
-    root = root || Selector.document;
-    var tokens = tokenize(selector);
-    var idToken = tokens[getIdTokenIndex(tokens)],
-        nodes = [],
-        node,
-        id,
-        token = tokens.pop() || {};
-        
-    if (idToken) {
-        id = getId(idToken.attributes);
-    }
-
-    // use id shortcut when possible
-    if (id) {
-        node = Selector.document.getElementById(id);
-
-        if (node && (root.nodeName == '#document' || contains(node, root))) {
-            if ( rTestNode(node, null, idToken) ) {
-                if (idToken === token) {
-                    nodes = [node]; // simple selector
-                } else {
-                    root = node; // start from here
-                }
-            }
-        } else {
-            return result;
-        }
-    }
-
-    if (root && !nodes.length) {
-        nodes = root.getElementsByTagName(token.tag);
-    }
-
-    if (nodes.length) {
-        result = rFilter(nodes, token, firstOnly, deDupe); 
-    }
-
-    clearParentCache();
-    return result;
-};
-
-var contains = function() {
-    if (document.documentElement.contains && !YAHOO.env.ua.webkit < 422)  { // IE & Opera, Safari < 3 contains is broken
-        return function(needle, haystack) {
-            return haystack.contains(needle);
-        };
-    } else if ( document.documentElement.compareDocumentPosition ) { // gecko
-        return function(needle, haystack) {
-            return !!(haystack.compareDocumentPosition(needle) & 16);
-        };
-    } else  { // Safari < 3
-        return function(needle, haystack) {
-            var parent = needle.parentNode;
-            while (parent) {
-                if (needle === parent) {
-                    return true;
-                }
-                parent = parent.parentNode;
-            } 
-            return false;
-        }; 
-    }
-}();
-
-var rFilter = function(nodes, token, firstOnly, deDupe) {
-    var result = firstOnly ? null : [];
-
-    for (var i = 0, len = nodes.length; i < len; i++) {
-        if (! rTestNode(nodes[i], '', token, deDupe)) {
-            continue;
-        }
-
-        if (firstOnly) {
-            return nodes[i];
-        }
-        if (deDupe) {
-            if (nodes[i]._found) {
-                continue;
-            }
-            nodes[i]._found = true;
-            foundCache[foundCache.length] = nodes[i];
-        }
-
-        result[result.length] = nodes[i];
-    }
-
-    return result;
-};
-
-var rTestNode = function(node, selector, token, deDupe) {
-    token = token || tokenize(selector).pop() || {};
-
-    if (!node.tagName ||
-        (token.tag !== '*' && node.tagName.toUpperCase() !== token.tag) ||
-        (deDupe && node._found) ) {
-        return false;
-    }
-
-    if (token.attributes.length) {
-        var attribute;
-        for (var i = 0, len = token.attributes.length; i < len; ++i) {
-            attribute = node.getAttribute(token.attributes[i][0], 2);
-            if (attribute === null || attribute === undefined) {
-                return false;
-            }
-            if ( Selector.operators[token.attributes[i][1]] &&
-                    !Selector.operators[token.attributes[i][1]](attribute, token.attributes[i][2])) {
-                return false;
-            }
-        }
-    }
-
-    if (token.pseudos.length) {
-        for (var i = 0, len = token.pseudos.length; i < len; ++i) {
-            if (Selector.pseudos[token.pseudos[i][0]] &&
-                    !Selector.pseudos[token.pseudos[i][0]](node, token.pseudos[i][1])) {
-                return false;
-            }
-        }
-    }
-
-    return (token.previous && token.previous.combinator !== ',') ?
-            combinators[token.previous.combinator](node, token) :
-            true;
-};
-
-
-var foundCache = [];
-var parentCache = [];
-var regexCache = {};
-
-var clearFoundCache = function() {
-    YAHOO.log('getBySelector: clearing found cache of ' + foundCache.length + ' elements');
-    for (var i = 0, len = foundCache.length; i < len; ++i) {
-        try { // IE no like delete
-            delete foundCache[i]._found;
-        } catch(e) {
-            foundCache[i].removeAttribute('_found');
-        }
-    }
-    foundCache = [];
-    YAHOO.log('getBySelector: done clearing foundCache');
-};
-
-var clearParentCache = function() {
-    if (!document.documentElement.children) { // caching children lookups for gecko
-        return function() {
-            for (var i = 0, len = parentCache.length; i < len; ++i) {
-                delete parentCache[i]._children;
-            }
-            parentCache = [];
-        };
-    } else return function() {}; // do nothing
-}();
-
-var getRegExp = function(str, flags) {
-    flags = flags || '';
-    if (!regexCache[str + flags]) {
-        regexCache[str + flags] = new RegExp(str, flags);
-    }
-    return regexCache[str + flags];
-};
-
-var combinators = {
-    ' ': function(node, token) {
-        while (node = node.parentNode) {
-            if (rTestNode(node, '', token.previous)) {
-                return true;
-            }
-        }  
-        return false;
-    },
-
-    '>': function(node, token) {
-        return rTestNode(node.parentNode, null, token.previous);
-    },
-
-    '+': function(node, token) {
-        var sib = node.previousSibling;
-        while (sib && sib.nodeType !== 1) {
-            sib = sib.previousSibling;
-        }
-
-        if (sib && rTestNode(sib, null, token.previous)) {
-            return true; 
-        }
-        return false;
-    },
-
-    '~': function(node, token) {
-        var sib = node.previousSibling;
-        while (sib) {
-            if (sib.nodeType === 1 && rTestNode(sib, null, token.previous)) {
-                return true;
-            }
-            sib = sib.previousSibling;
-        }
-
-        return false;
-    }
-};
-
-var getChildren = function() {
-    if (document.documentElement.children) { // document for capability test
-        return function(node, tag) {
-            return (tag) ? node.children.tags(tag) : node.children || [];
-        };
-    } else {
-        return function(node, tag) {
-            if (node._children) {
-                return node._children;
-            }
-            var children = [],
-                childNodes = node.childNodes;
-
-            for (var i = 0, len = childNodes.length; i < len; ++i) {
-                if (childNodes[i].tagName) {
-                    if (!tag || childNodes[i].tagName.toLowerCase() === tag) {
-                        children[children.length] = childNodes[i];
-                    }
-                }
-            }
-            node._children = children;
-            parentCache[parentCache.length] = node;
-            return children;
-        };
-    }
-}();
-
-/*
-    an+b = get every _a_th node starting at the _b_th
-    0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
-    1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
-    an+0 = get every _a_th element, "0" may be omitted 
-*/
-var getNth = function(node, expr, tag, reverse) {
-    if (tag) tag = tag.toLowerCase();
-    reNth.test(expr);
-    var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
-        n = RegExp.$2, // "n"
-        oddeven = RegExp.$3, // "odd" or "even"
-        b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
-        result = [];
-
-    var siblings = getChildren(node.parentNode, tag);
-
-    if (oddeven) {
-        a = 2; // always every other
-        op = '+';
-        n = 'n';
-        b = (oddeven === 'odd') ? 1 : 0;
-    } else if ( isNaN(a) ) {
-        a = (n) ? 1 : 0; // start from the first or no repeat
-    }
-
-    if (a === 0) { // just the first
-        if (reverse) {
-            b = siblings.length - b + 1; 
-        }
-
-        if (siblings[b - 1] === node) {
-            return true;
-        } else {
-            return false;
-        }
-
-    } else if (a < 0) {
-        reverse = !!reverse;
-        a = Math.abs(a);
-    }
-
-    if (!reverse) {
-        for (var i = b - 1, len = siblings.length; i < len; i += a) {
-            if ( i >= 0 && siblings[i] === node ) {
-                return true;
-            }
-        }
-    } else {
-        for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
-            if ( i < len && siblings[i] === node ) {
-                return true;
-            }
-        }
-    }
-    return false;
-};
-
-var getId = function(attr) {
-    for (var i = 0, len = attr.length; i < len; ++i) {
-        if (attr[i][0] == 'id' && attr[i][1] === '=') {
-            return attr[i][2];
-        }
-    }
-};
-
-var getIdTokenIndex = function(tokens) {
-    for (var i = 0, len = tokens.length; i < len; ++i) {
-        if (getId(tokens[i].attributes)) {
-            return i;
-        }
-    }
-    return -1;
-};
-
-var patterns = {
-    tag: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
-    attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
-    //attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^'"\]]*)['"]?\]*/i,
-    pseudos: /^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
-    combinator: /^\s*([>+~]|\s)\s*/
-};
-
-/**
-    Break selector into token units per simple selector.
-    Combinator is attached to left-hand selector.
- */
-var tokenize = function(selector) {
-    var token = {},     // one token per simple selector (left selector holds combinator)
-        tokens = [],    // array of tokens
-        id,             // unique id for the simple selector (if found)
-        found = false,  // whether or not any matches were found this pass
-        match;          // the regex match
-
-    selector = replaceShorthand(selector); // convert ID and CLASS shortcuts to attributes
-
-    /*
-        Search for selector patterns, store, and strip them from the selector string
-        until no patterns match (invalid selector) or we run out of chars.
-
-        Multiple attributes and pseudos are allowed, in any order.
-        for example:
-            'form:first-child[type=button]:not(button)[lang|=en]'
-    */
-    do {
-        found = false; // reset after full pass
-        for (var re in patterns) {
-                if (!YAHOO.lang.hasOwnProperty(patterns, re)) {
-                    continue;
-                }
-                if (re != 'tag' && re != 'combinator') { // only one allowed
-                    token[re] = token[re] || [];
-                }
-            if (match = patterns[re].exec(selector)) { // note assignment
-                found = true;
-                if (re != 'tag' && re != 'combinator') { // only one allowed
-                    //token[re] = token[re] || [];
-
-                    // capture ID for fast path to element
-                    if (re === 'attributes' && match[1] === 'id') {
-                        token.id = match[3];
-                    }
-
-                    token[re].push(match.slice(1));
-                } else { // single selector (tag, combinator)
-                    token[re] = match[1];
-                }
-                selector = selector.replace(match[0], ''); // strip current match from selector
-                if (re === 'combinator' || !selector.length) { // next token or done
-                    token.attributes = fixAttributes(token.attributes);
-                    token.pseudos = token.pseudos || [];
-                    token.tag = token.tag ? token.tag.toUpperCase() : '*';
-                    tokens.push(token);
-
-                    token = { // prep next token
-                        previous: token
-                    };
-                }
-            }
-        }
-    } while (found);
-
-    return tokens;
-};
-
-var fixAttributes = function(attr) {
-    var aliases = Selector.attrAliases;
-    attr = attr || [];
-    for (var i = 0, len = attr.length; i < len; ++i) {
-        if (aliases[attr[i][0]]) { // convert reserved words, etc
-            attr[i][0] = aliases[attr[i][0]];
-        }
-        if (!attr[i][1]) { // use exists operator
-            attr[i][1] = '';
-        }
-    }
-    return attr;
-};
-
-var replaceShorthand = function(selector) {
-    var shorthand = Selector.shorthand;
-    var attrs = selector.match(patterns.attributes); // pull attributes to avoid false pos on "." and "#"
-    if (attrs) {
-        selector = selector.replace(patterns.attributes, 'REPLACED_ATTRIBUTE');
-    }
-    for (var re in shorthand) {
-        if (!YAHOO.lang.hasOwnProperty(shorthand, re)) {
-            continue;
-        }
-        selector = selector.replace(getRegExp(re, 'gi'), shorthand[re]);
-    }
-
-    if (attrs) {
-        for (var i = 0, len = attrs.length; i < len; ++i) {
-            selector = selector.replace('REPLACED_ATTRIBUTE', attrs[i]);
-        }
-    }
-    return selector;
-};
-
-Selector = new Selector();
-Selector.patterns = patterns;
-Y.Selector = Selector;
-
-if (YAHOO.env.ua.ie) { // rewrite class for IE (others use getAttribute('class')
-    Y.Selector.attrAliases['class'] = 'className';
-    Y.Selector.attrAliases['for'] = 'htmlFor';
-}
-
-})();
-YAHOO.register("selector", YAHOO.util.Selector, {version: "2.6.0", build: "1321"});

Deleted: trunk/root/static/yui/selector/selector-beta-min.js
===================================================================
--- trunk/root/static/yui/selector/selector-beta-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector-beta-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-(function(){var T=function(){};var E=YAHOO.util;var U=/^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/;T.prototype={document:window.document,attrAliases:{},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[class~=$1]"},operators:{"=":function(W,X){return W===X;},"!=":function(W,X){return W!==X;},"~=":function(W,Y){var X=" ";return(X+W+X).indexOf((X+Y+X))>-1;},"|=":function(W,X){return G("^"+X+"[-]?").test(W);},"^=":function(W,X){return W.indexOf(X)===0;},"$=":function(W,X){return W.lastIndexOf(X)===W.length-X.length;},"*=":function(W,X){return W.indexOf(X)>-1;},"":function(W,X){return W;}},pseudos:{"root":function(W){return W===W.ownerDocument.documentElement;},"nth-child":function(W,X){return R(W,X);},"nth-last-child":function(W,X){return R(W,X,null,true);},"nth-of-type":function(W,X){return R(W,X,W.tagName);},"nth-last-of-type":function(W,X){return R(W,X,W.tagName,true);},"first-child":function(W){return F(W.parentNode)[0]===W;},"last-child":function(X)!
 {var W=F(X.parentNode);return W[W.length-1]===X;},"first-of-type":function(W,X){return F(W.parentNode,W.tagName.toLowerCase())[0];},"last-of-type":function(X,Y){var W=F(X.parentNode,X.tagName.toLowerCase());return W[W.length-1];},"only-child":function(X){var W=F(X.parentNode);return W.length===1&&W[0]===X;},"only-of-type":function(W){return F(W.parentNode,W.tagName.toLowerCase()).length===1;},"empty":function(W){return W.childNodes.length===0;},"not":function(W,X){return !T.test(W,X);},"contains":function(W,Y){var X=W.innerText||W.textContent||"";return X.indexOf(Y)>-1;},"checked":function(W){return W.checked===true;}},test:function(a,Y){a=T.document.getElementById(a)||a;if(!a){return false;}var X=Y?Y.split(","):[];if(X.length){for(var Z=0,W=X.length;Z<W;++Z){if(V(a,X[Z])){return true;}}return false;}return V(a,Y);},filter:function(Z,Y){Z=Z||[];var b,X=[],c=C(Y);if(!Z.item){for(var a=0,W=Z.length;a<W;++a){if(!Z[a].tagName){b=T.document.getElementById(Z[a]);if(b){Z[a]=b;}els!
 e{}}}}X=Q(Z,C(Y)[0]);B();return X;},query:function(X,Y,Z){var !
 W=H(X,Y,
Z);return W;}};var H=function(c,h,j,a){var l=(j)?null:[];if(!c){return l;}var Y=c.split(",");if(Y.length>1){var k;for(var d=0,e=Y.length;d<e;++d){k=arguments.callee(Y[d],h,j,true);l=j?k:l.concat(k);}I();return l;}if(h&&!h.nodeName){h=T.document.getElementById(h);if(!h){return l;}}h=h||T.document;var g=C(c);var f=g[N(g)],W=[],Z,X,b=g.pop()||{};if(f){X=P(f.attributes);}if(X){Z=T.document.getElementById(X);if(Z&&(h.nodeName=="#document"||L(Z,h))){if(V(Z,null,f)){if(f===b){W=[Z];}else{h=Z;}}}else{return l;}}if(h&&!W.length){W=h.getElementsByTagName(b.tag);}if(W.length){l=Q(W,b,j,a);}B();return l;};var L=function(){if(document.documentElement.contains&&!YAHOO.env.ua.webkit<422){return function(X,W){return W.contains(X);};}else{if(document.documentElement.compareDocumentPosition){return function(X,W){return !!(W.compareDocumentPosition(X)&16);};}else{return function(Y,X){var W=Y.parentNode;while(W){if(Y===W){return true;}W=W.parentNode;}return false;};}}}();var Q=function(Z,b,c,Y)!
 {var X=c?null:[];for(var a=0,W=Z.length;a<W;a++){if(!V(Z[a],"",b,Y)){continue;}if(c){return Z[a];}if(Y){if(Z[a]._found){continue;}Z[a]._found=true;M[M.length]=Z[a];}X[X.length]=Z[a];}return X;};var V=function(c,X,a,Y){a=a||C(X).pop()||{};if(!c.tagName||(a.tag!=="*"&&c.tagName.toUpperCase()!==a.tag)||(Y&&c._found)){return false;}if(a.attributes.length){var b;for(var Z=0,W=a.attributes.length;Z<W;++Z){b=c.getAttribute(a.attributes[Z][0],2);if(b===null||b===undefined){return false;}if(T.operators[a.attributes[Z][1]]&&!T.operators[a.attributes[Z][1]](b,a.attributes[Z][2])){return false;}}}if(a.pseudos.length){for(var Z=0,W=a.pseudos.length;Z<W;++Z){if(T.pseudos[a.pseudos[Z][0]]&&!T.pseudos[a.pseudos[Z][0]](c,a.pseudos[Z][1])){return false;}}}return(a.previous&&a.previous.combinator!==",")?O[a.previous.combinator](c,a):true;};var M=[];var K=[];var S={};var I=function(){for(var X=0,W=M.length;X<W;++X){try{delete M[X]._found;}catch(Y){M[X].removeAttribute("_found");}}M=[];};var B=!
 function(){if(!document.documentElement.children){return funct!
 ion(){fo
r(var X=0,W=K.length;X<W;++X){delete K[X]._children;}K=[];};}else{return function(){};}}();var G=function(X,W){W=W||"";if(!S[X+W]){S[X+W]=new RegExp(X,W);}return S[X+W];};var O={" ":function(X,W){while(X=X.parentNode){if(V(X,"",W.previous)){return true;}}return false;},">":function(X,W){return V(X.parentNode,null,W.previous);},"+":function(Y,X){var W=Y.previousSibling;while(W&&W.nodeType!==1){W=W.previousSibling;}if(W&&V(W,null,X.previous)){return true;}return false;},"~":function(Y,X){var W=Y.previousSibling;while(W){if(W.nodeType===1&&V(W,null,X.previous)){return true;}W=W.previousSibling;}return false;}};var F=function(){if(document.documentElement.children){return function(X,W){return(W)?X.children.tags(W):X.children||[];};}else{return function(a,X){if(a._children){return a._children;}var Z=[],b=a.childNodes;for(var Y=0,W=b.length;Y<W;++Y){if(b[Y].tagName){if(!X||b[Y].tagName.toLowerCase()===X){Z[Z.length]=b[Y];}}}a._children=Z;K[K.length]=a;return Z;};}}();var R=functio!
 n(X,h,k,c){if(k){k=k.toLowerCase();}U.test(h);var g=parseInt(RegExp.$1,10),W=RegExp.$2,d=RegExp.$3,e=parseInt(RegExp.$4,10)||0,j=[];var f=F(X.parentNode,k);if(d){g=2;op="+";W="n";e=(d==="odd")?1:0;}else{if(isNaN(g)){g=(W)?1:0;}}if(g===0){if(c){e=f.length-e+1;}if(f[e-1]===X){return true;}else{return false;}}else{if(g<0){c=!!c;g=Math.abs(g);}}if(!c){for(var Y=e-1,Z=f.length;Y<Z;Y+=g){if(Y>=0&&f[Y]===X){return true;}}}else{for(var Y=f.length-e,Z=f.length;Y>=0;Y-=g){if(Y<Z&&f[Y]===X){return true;}}}return false;};var P=function(X){for(var Y=0,W=X.length;Y<W;++Y){if(X[Y][0]=="id"&&X[Y][1]==="="){return X[Y][2];}}};var N=function(Y){for(var X=0,W=Y.length;X<W;++X){if(P(Y[X].attributes)){return X;}}return -1;};var D={tag:/^((?:-?[_a-z]+[\w-]*)|\*)/i,attributes:/^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,pseudos:/^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,combinator:/^\s*([>+~]|\s)\s*/};var C=function(W){var Y={},b=[],c,a=false,X;
-W=A(W);do{a=false;for(var Z in D){if(!YAHOO.lang.hasOwnProperty(D,Z)){continue;}if(Z!="tag"&&Z!="combinator"){Y[Z]=Y[Z]||[];}if(X=D[Z].exec(W)){a=true;if(Z!="tag"&&Z!="combinator"){if(Z==="attributes"&&X[1]==="id"){Y.id=X[3];}Y[Z].push(X.slice(1));}else{Y[Z]=X[1];}W=W.replace(X[0],"");if(Z==="combinator"||!W.length){Y.attributes=J(Y.attributes);Y.pseudos=Y.pseudos||[];Y.tag=Y.tag?Y.tag.toUpperCase():"*";b.push(Y);Y={previous:Y};}}}}while(a);return b;};var J=function(X){var Y=T.attrAliases;X=X||[];for(var Z=0,W=X.length;Z<W;++Z){if(Y[X[Z][0]]){X[Z][0]=Y[X[Z][0]];}if(!X[Z][1]){X[Z][1]="";}}return X;};var A=function(X){var Y=T.shorthand;var Z=X.match(D.attributes);if(Z){X=X.replace(D.attributes,"REPLACED_ATTRIBUTE");}for(var b in Y){if(!YAHOO.lang.hasOwnProperty(Y,b)){continue;}X=X.replace(G(b,"gi"),Y[b]);}if(Z){for(var a=0,W=Z.length;a<W;++a){X=X.replace("REPLACED_ATTRIBUTE",Z[a]);}}return X;};T=new T();T.patterns=D;E.Selector=T;if(YAHOO.env.ua.ie){E.Selector.attrAliases["cla!
 ss"]="className";E.Selector.attrAliases["for"]="htmlFor";}})();YAHOO.register("selector",YAHOO.util.Selector,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/selector/selector-beta.js
===================================================================
--- trunk/root/static/yui/selector/selector-beta.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector-beta.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,666 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/**
- * The selector module provides helper methods allowing CSS3 Selectors to be used with DOM elements.
- * @module selector
- * @title Selector Utility
- * @namespace YAHOO.util
- * @requires yahoo, dom
- */
-
-(function() {
-/**
- * Provides helper methods for collecting and filtering DOM elements.
- * @namespace YAHOO.util
- * @class Selector
- * @static
- */
-var Selector = function() {};
-
-var Y = YAHOO.util;
-
-var reNth = /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/;
-
-Selector.prototype = {
-    /**
-     * Default document for use queries 
-     * @property document
-     * @type object
-     * @default window.document
-     */
-    document: window.document,
-    /**
-     * Mapping of attributes to aliases, normally to work around HTMLAttributes
-     * that conflict with JS reserved words.
-     * @property attrAliases
-     * @type object
-     */
-    attrAliases: {
-    },
-
-    /**
-     * Mapping of shorthand tokens to corresponding attribute selector 
-     * @property shorthand
-     * @type object
-     */
-    shorthand: {
-        //'(?:(?:[^\\)\\]\\s*>+~,]+)(?:-?[_a-z]+[-\\w]))+#(-?[_a-z]+[-\\w]*)': '[id=$1]',
-        '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
-        '\\.(-?[_a-z]+[-\\w]*)': '[class~=$1]'
-    },
-
-    /**
-     * List of operators and corresponding boolean functions. 
-     * These functions are passed the attribute and the current node's value of the attribute.
-     * @property operators
-     * @type object
-     */
-    operators: {
-        '=': function(attr, val) { return attr === val; }, // Equality
-        '!=': function(attr, val) { return attr !== val; }, // Inequality
-        '~=': function(attr, val) { // Match one of space seperated words 
-            var s = ' ';
-            return (s + attr + s).indexOf((s + val + s)) > -1;
-        },
-        '|=': function(attr, val) { return getRegExp('^' + val + '[-]?').test(attr); }, // Match start with value followed by optional hyphen
-        '^=': function(attr, val) { return attr.indexOf(val) === 0; }, // Match starts with value
-        '$=': function(attr, val) { return attr.lastIndexOf(val) === attr.length - val.length; }, // Match ends with value
-        '*=': function(attr, val) { return attr.indexOf(val) > -1; }, // Match contains value as substring 
-        '': function(attr, val) { return attr; } // Just test for existence of attribute
-    },
-
-    /**
-     * List of pseudo-classes and corresponding boolean functions. 
-     * These functions are called with the current node, and any value that was parsed with the pseudo regex.
-     * @property pseudos
-     * @type object
-     */
-    pseudos: {
-        'root': function(node) {
-            return node === node.ownerDocument.documentElement;
-        },
-
-        'nth-child': function(node, val) {
-            return getNth(node, val);
-        },
-
-        'nth-last-child': function(node, val) {
-            return getNth(node, val, null, true);
-        },
-
-        'nth-of-type': function(node, val) {
-            return getNth(node, val, node.tagName);
-        },
-         
-        'nth-last-of-type': function(node, val) {
-            return getNth(node, val, node.tagName, true);
-        },
-         
-        'first-child': function(node) {
-            return getChildren(node.parentNode)[0] === node;
-        },
-
-        'last-child': function(node) {
-            var children = getChildren(node.parentNode);
-            return children[children.length - 1] === node;
-        },
-
-        'first-of-type': function(node, val) {
-            return getChildren(node.parentNode, node.tagName.toLowerCase())[0];
-        },
-         
-        'last-of-type': function(node, val) {
-            var children = getChildren(node.parentNode, node.tagName.toLowerCase());
-            return children[children.length - 1];
-        },
-         
-        'only-child': function(node) {
-            var children = getChildren(node.parentNode);
-            return children.length === 1 && children[0] === node;
-        },
-
-        'only-of-type': function(node) {
-            return getChildren(node.parentNode, node.tagName.toLowerCase()).length === 1;
-        },
-
-        'empty': function(node) {
-            return node.childNodes.length === 0;
-        },
-
-        'not': function(node, simple) {
-            return !Selector.test(node, simple);
-        },
-
-        'contains': function(node, str) {
-            var text = node.innerText || node.textContent || '';
-            return text.indexOf(str) > -1;
-        },
-        'checked': function(node) {
-            return node.checked === true;
-        }
-    },
-
-    /**
-     * Test if the supplied node matches the supplied selector.
-     * @method test
-     *
-     * @param {HTMLElement | String} node An id or node reference to the HTMLElement being tested.
-     * @param {string} selector The CSS Selector to test the node against.
-     * @return{boolean} Whether or not the node matches the selector.
-     * @static
-    
-     */
-    test: function(node, selector) {
-        node = Selector.document.getElementById(node) || node;
-
-        if (!node) {
-            return false;
-        }
-
-        var groups = selector ? selector.split(',') : [];
-        if (groups.length) {
-            for (var i = 0, len = groups.length; i < len; ++i) {
-                if ( rTestNode(node, groups[i]) ) { // passes if ANY group matches
-                    return true;
-                }
-            }
-            return false;
-        }
-        return rTestNode(node, selector);
-    },
-
-    /**
-     * Filters a set of nodes based on a given CSS selector. 
-     * @method filter
-     *
-     * @param {array} nodes A set of nodes/ids to filter. 
-     * @param {string} selector The selector used to test each node.
-     * @return{array} An array of nodes from the supplied array that match the given selector.
-     * @static
-     */
-    filter: function(nodes, selector) {
-        nodes = nodes || [];
-
-        var node,
-            result = [],
-            tokens = tokenize(selector);
-
-        if (!nodes.item) { // if not HTMLCollection, handle arrays of ids and/or nodes
-            for (var i = 0, len = nodes.length; i < len; ++i) {
-                if (!nodes[i].tagName) { // tagName limits to HTMLElements 
-                    node = Selector.document.getElementById(nodes[i]);
-                    if (node) { // skip IDs that return null 
-                        nodes[i] = node;
-                    } else {
-                    }
-                }
-            }
-        }
-        result = rFilter(nodes, tokenize(selector)[0]);
-        clearParentCache();
-        return result;
-    },
-
-    /**
-     * Retrieves a set of nodes based on a given CSS selector. 
-     * @method query
-     *
-     * @param {string} selector The CSS Selector to test the node against.
-     * @param {HTMLElement | String} root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
-     * @param {Boolean} firstOnly optional Whether or not to return only the first match.
-     * @return {Array} An array of nodes that match the given selector.
-     * @static
-     */
-    query: function(selector, root, firstOnly) {
-        var result = query(selector, root, firstOnly);
-        return result;
-    }
-};
-
-var query = function(selector, root, firstOnly, deDupe) {
-    var result =  (firstOnly) ? null : [];
-    if (!selector) {
-        return result;
-    }
-
-    var groups = selector.split(','); // TODO: handle comma in attribute/pseudo
-
-    if (groups.length > 1) {
-        var found;
-        for (var i = 0, len = groups.length; i < len; ++i) {
-            found = arguments.callee(groups[i], root, firstOnly, true);
-            result = firstOnly ? found : result.concat(found); 
-        }
-        clearFoundCache();
-        return result;
-    }
-
-    if (root && !root.nodeName) { // assume ID
-        root = Selector.document.getElementById(root);
-        if (!root) {
-            return result;
-        }
-    }
-
-    root = root || Selector.document;
-    var tokens = tokenize(selector);
-    var idToken = tokens[getIdTokenIndex(tokens)],
-        nodes = [],
-        node,
-        id,
-        token = tokens.pop() || {};
-        
-    if (idToken) {
-        id = getId(idToken.attributes);
-    }
-
-    // use id shortcut when possible
-    if (id) {
-        node = Selector.document.getElementById(id);
-
-        if (node && (root.nodeName == '#document' || contains(node, root))) {
-            if ( rTestNode(node, null, idToken) ) {
-                if (idToken === token) {
-                    nodes = [node]; // simple selector
-                } else {
-                    root = node; // start from here
-                }
-            }
-        } else {
-            return result;
-        }
-    }
-
-    if (root && !nodes.length) {
-        nodes = root.getElementsByTagName(token.tag);
-    }
-
-    if (nodes.length) {
-        result = rFilter(nodes, token, firstOnly, deDupe); 
-    }
-
-    clearParentCache();
-    return result;
-};
-
-var contains = function() {
-    if (document.documentElement.contains && !YAHOO.env.ua.webkit < 422)  { // IE & Opera, Safari < 3 contains is broken
-        return function(needle, haystack) {
-            return haystack.contains(needle);
-        };
-    } else if ( document.documentElement.compareDocumentPosition ) { // gecko
-        return function(needle, haystack) {
-            return !!(haystack.compareDocumentPosition(needle) & 16);
-        };
-    } else  { // Safari < 3
-        return function(needle, haystack) {
-            var parent = needle.parentNode;
-            while (parent) {
-                if (needle === parent) {
-                    return true;
-                }
-                parent = parent.parentNode;
-            } 
-            return false;
-        }; 
-    }
-}();
-
-var rFilter = function(nodes, token, firstOnly, deDupe) {
-    var result = firstOnly ? null : [];
-
-    for (var i = 0, len = nodes.length; i < len; i++) {
-        if (! rTestNode(nodes[i], '', token, deDupe)) {
-            continue;
-        }
-
-        if (firstOnly) {
-            return nodes[i];
-        }
-        if (deDupe) {
-            if (nodes[i]._found) {
-                continue;
-            }
-            nodes[i]._found = true;
-            foundCache[foundCache.length] = nodes[i];
-        }
-
-        result[result.length] = nodes[i];
-    }
-
-    return result;
-};
-
-var rTestNode = function(node, selector, token, deDupe) {
-    token = token || tokenize(selector).pop() || {};
-
-    if (!node.tagName ||
-        (token.tag !== '*' && node.tagName.toUpperCase() !== token.tag) ||
-        (deDupe && node._found) ) {
-        return false;
-    }
-
-    if (token.attributes.length) {
-        var attribute;
-        for (var i = 0, len = token.attributes.length; i < len; ++i) {
-            attribute = node.getAttribute(token.attributes[i][0], 2);
-            if (attribute === null || attribute === undefined) {
-                return false;
-            }
-            if ( Selector.operators[token.attributes[i][1]] &&
-                    !Selector.operators[token.attributes[i][1]](attribute, token.attributes[i][2])) {
-                return false;
-            }
-        }
-    }
-
-    if (token.pseudos.length) {
-        for (var i = 0, len = token.pseudos.length; i < len; ++i) {
-            if (Selector.pseudos[token.pseudos[i][0]] &&
-                    !Selector.pseudos[token.pseudos[i][0]](node, token.pseudos[i][1])) {
-                return false;
-            }
-        }
-    }
-
-    return (token.previous && token.previous.combinator !== ',') ?
-            combinators[token.previous.combinator](node, token) :
-            true;
-};
-
-
-var foundCache = [];
-var parentCache = [];
-var regexCache = {};
-
-var clearFoundCache = function() {
-    for (var i = 0, len = foundCache.length; i < len; ++i) {
-        try { // IE no like delete
-            delete foundCache[i]._found;
-        } catch(e) {
-            foundCache[i].removeAttribute('_found');
-        }
-    }
-    foundCache = [];
-};
-
-var clearParentCache = function() {
-    if (!document.documentElement.children) { // caching children lookups for gecko
-        return function() {
-            for (var i = 0, len = parentCache.length; i < len; ++i) {
-                delete parentCache[i]._children;
-            }
-            parentCache = [];
-        };
-    } else return function() {}; // do nothing
-}();
-
-var getRegExp = function(str, flags) {
-    flags = flags || '';
-    if (!regexCache[str + flags]) {
-        regexCache[str + flags] = new RegExp(str, flags);
-    }
-    return regexCache[str + flags];
-};
-
-var combinators = {
-    ' ': function(node, token) {
-        while (node = node.parentNode) {
-            if (rTestNode(node, '', token.previous)) {
-                return true;
-            }
-        }  
-        return false;
-    },
-
-    '>': function(node, token) {
-        return rTestNode(node.parentNode, null, token.previous);
-    },
-
-    '+': function(node, token) {
-        var sib = node.previousSibling;
-        while (sib && sib.nodeType !== 1) {
-            sib = sib.previousSibling;
-        }
-
-        if (sib && rTestNode(sib, null, token.previous)) {
-            return true; 
-        }
-        return false;
-    },
-
-    '~': function(node, token) {
-        var sib = node.previousSibling;
-        while (sib) {
-            if (sib.nodeType === 1 && rTestNode(sib, null, token.previous)) {
-                return true;
-            }
-            sib = sib.previousSibling;
-        }
-
-        return false;
-    }
-};
-
-var getChildren = function() {
-    if (document.documentElement.children) { // document for capability test
-        return function(node, tag) {
-            return (tag) ? node.children.tags(tag) : node.children || [];
-        };
-    } else {
-        return function(node, tag) {
-            if (node._children) {
-                return node._children;
-            }
-            var children = [],
-                childNodes = node.childNodes;
-
-            for (var i = 0, len = childNodes.length; i < len; ++i) {
-                if (childNodes[i].tagName) {
-                    if (!tag || childNodes[i].tagName.toLowerCase() === tag) {
-                        children[children.length] = childNodes[i];
-                    }
-                }
-            }
-            node._children = children;
-            parentCache[parentCache.length] = node;
-            return children;
-        };
-    }
-}();
-
-/*
-    an+b = get every _a_th node starting at the _b_th
-    0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
-    1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
-    an+0 = get every _a_th element, "0" may be omitted 
-*/
-var getNth = function(node, expr, tag, reverse) {
-    if (tag) tag = tag.toLowerCase();
-    reNth.test(expr);
-    var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
-        n = RegExp.$2, // "n"
-        oddeven = RegExp.$3, // "odd" or "even"
-        b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
-        result = [];
-
-    var siblings = getChildren(node.parentNode, tag);
-
-    if (oddeven) {
-        a = 2; // always every other
-        op = '+';
-        n = 'n';
-        b = (oddeven === 'odd') ? 1 : 0;
-    } else if ( isNaN(a) ) {
-        a = (n) ? 1 : 0; // start from the first or no repeat
-    }
-
-    if (a === 0) { // just the first
-        if (reverse) {
-            b = siblings.length - b + 1; 
-        }
-
-        if (siblings[b - 1] === node) {
-            return true;
-        } else {
-            return false;
-        }
-
-    } else if (a < 0) {
-        reverse = !!reverse;
-        a = Math.abs(a);
-    }
-
-    if (!reverse) {
-        for (var i = b - 1, len = siblings.length; i < len; i += a) {
-            if ( i >= 0 && siblings[i] === node ) {
-                return true;
-            }
-        }
-    } else {
-        for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
-            if ( i < len && siblings[i] === node ) {
-                return true;
-            }
-        }
-    }
-    return false;
-};
-
-var getId = function(attr) {
-    for (var i = 0, len = attr.length; i < len; ++i) {
-        if (attr[i][0] == 'id' && attr[i][1] === '=') {
-            return attr[i][2];
-        }
-    }
-};
-
-var getIdTokenIndex = function(tokens) {
-    for (var i = 0, len = tokens.length; i < len; ++i) {
-        if (getId(tokens[i].attributes)) {
-            return i;
-        }
-    }
-    return -1;
-};
-
-var patterns = {
-    tag: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
-    attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
-    //attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^'"\]]*)['"]?\]*/i,
-    pseudos: /^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
-    combinator: /^\s*([>+~]|\s)\s*/
-};
-
-/**
-    Break selector into token units per simple selector.
-    Combinator is attached to left-hand selector.
- */
-var tokenize = function(selector) {
-    var token = {},     // one token per simple selector (left selector holds combinator)
-        tokens = [],    // array of tokens
-        id,             // unique id for the simple selector (if found)
-        found = false,  // whether or not any matches were found this pass
-        match;          // the regex match
-
-    selector = replaceShorthand(selector); // convert ID and CLASS shortcuts to attributes
-
-    /*
-        Search for selector patterns, store, and strip them from the selector string
-        until no patterns match (invalid selector) or we run out of chars.
-
-        Multiple attributes and pseudos are allowed, in any order.
-        for example:
-            'form:first-child[type=button]:not(button)[lang|=en]'
-    */
-    do {
-        found = false; // reset after full pass
-        for (var re in patterns) {
-                if (!YAHOO.lang.hasOwnProperty(patterns, re)) {
-                    continue;
-                }
-                if (re != 'tag' && re != 'combinator') { // only one allowed
-                    token[re] = token[re] || [];
-                }
-            if (match = patterns[re].exec(selector)) { // note assignment
-                found = true;
-                if (re != 'tag' && re != 'combinator') { // only one allowed
-                    //token[re] = token[re] || [];
-
-                    // capture ID for fast path to element
-                    if (re === 'attributes' && match[1] === 'id') {
-                        token.id = match[3];
-                    }
-
-                    token[re].push(match.slice(1));
-                } else { // single selector (tag, combinator)
-                    token[re] = match[1];
-                }
-                selector = selector.replace(match[0], ''); // strip current match from selector
-                if (re === 'combinator' || !selector.length) { // next token or done
-                    token.attributes = fixAttributes(token.attributes);
-                    token.pseudos = token.pseudos || [];
-                    token.tag = token.tag ? token.tag.toUpperCase() : '*';
-                    tokens.push(token);
-
-                    token = { // prep next token
-                        previous: token
-                    };
-                }
-            }
-        }
-    } while (found);
-
-    return tokens;
-};
-
-var fixAttributes = function(attr) {
-    var aliases = Selector.attrAliases;
-    attr = attr || [];
-    for (var i = 0, len = attr.length; i < len; ++i) {
-        if (aliases[attr[i][0]]) { // convert reserved words, etc
-            attr[i][0] = aliases[attr[i][0]];
-        }
-        if (!attr[i][1]) { // use exists operator
-            attr[i][1] = '';
-        }
-    }
-    return attr;
-};
-
-var replaceShorthand = function(selector) {
-    var shorthand = Selector.shorthand;
-    var attrs = selector.match(patterns.attributes); // pull attributes to avoid false pos on "." and "#"
-    if (attrs) {
-        selector = selector.replace(patterns.attributes, 'REPLACED_ATTRIBUTE');
-    }
-    for (var re in shorthand) {
-        if (!YAHOO.lang.hasOwnProperty(shorthand, re)) {
-            continue;
-        }
-        selector = selector.replace(getRegExp(re, 'gi'), shorthand[re]);
-    }
-
-    if (attrs) {
-        for (var i = 0, len = attrs.length; i < len; ++i) {
-            selector = selector.replace('REPLACED_ATTRIBUTE', attrs[i]);
-        }
-    }
-    return selector;
-};
-
-Selector = new Selector();
-Selector.patterns = patterns;
-Y.Selector = Selector;
-
-if (YAHOO.env.ua.ie) { // rewrite class for IE (others use getAttribute('class')
-    Y.Selector.attrAliases['class'] = 'className';
-    Y.Selector.attrAliases['for'] = 'htmlFor';
-}
-
-})();
-YAHOO.register("selector", YAHOO.util.Selector, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/selector/selector-debug.js
===================================================================
--- trunk/root/static/yui/selector/selector-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,655 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The selector module provides helper methods allowing CSS3 Selectors to be used with DOM elements.
+ * @module selector
+ * @title Selector Utility
+ * @namespace YAHOO.util
+ * @requires yahoo, dom
+ */
+
+(function() {
+var Y = YAHOO.util;
+
+/**
+ * Provides helper methods for collecting and filtering DOM elements.
+ * @namespace YAHOO.util
+ * @class Selector
+ * @static
+ */
+
+Y.Selector = {
+    _foundCache: [],
+    _regexCache: {},
+
+    _re: {
+        nth: /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/,
+        attr: /(\[.*\])/g,
+        urls: /^(?:href|src)/
+    },
+
+    /**
+     * Default document for use queries 
+     * @property document
+     * @type object
+     * @default window.document
+     */
+    document: window.document,
+    /**
+     * Mapping of attributes to aliases, normally to work around HTMLAttributes
+     * that conflict with JS reserved words.
+     * @property attrAliases
+     * @type object
+     */
+    attrAliases: {
+    },
+
+    /**
+     * Mapping of shorthand tokens to corresponding attribute selector 
+     * @property shorthand
+     * @type object
+     */
+    shorthand: {
+        //'(?:(?:[^\\)\\]\\s*>+~,]+)(?:-?[_a-z]+[-\\w]))+#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+        '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+        '\\.(-?[_a-z]+[-\\w]*)': '[class~=$1]'
+    },
+
+    /**
+     * List of operators and corresponding boolean functions. 
+     * These functions are passed the attribute and the current node's value of the attribute.
+     * @property operators
+     * @type object
+     */
+    operators: {
+        '=': function(attr, val) { return attr === val; }, // Equality
+        '!=': function(attr, val) { return attr !== val; }, // Inequality
+        '~=': function(attr, val) { // Match one of space seperated words 
+            var s = ' ';
+            return (s + attr + s).indexOf((s + val + s)) > -1;
+        },
+        '|=': function(attr, val) { return attr === val || attr.slice(0, val.length + 1) === val + '-'; }, // Matches value followed by optional hyphen
+        '^=': function(attr, val) { return attr.indexOf(val) === 0; }, // Match starts with value
+        '$=': function(attr, val) { return attr.slice(-val.length) === val; }, // Match ends with value
+        '*=': function(attr, val) { return attr.indexOf(val) > -1; }, // Match contains value as substring 
+        '': function(attr, val) { return attr; } // Just test for existence of attribute
+    },
+
+    /**
+     * List of pseudo-classes and corresponding boolean functions. 
+     * These functions are called with the current node, and any value that was parsed with the pseudo regex.
+     * @property pseudos
+     * @type object
+     */
+    pseudos: {
+        'root': function(node) {
+            return node === node.ownerDocument.documentElement;
+        },
+
+        'nth-child': function(node, val) {
+            return Y.Selector._getNth(node, val);
+        },
+
+        'nth-last-child': function(node, val) {
+            return Y.Selector._getNth(node, val, null, true);
+        },
+
+        'nth-of-type': function(node, val) {
+            return Y.Selector._getNth(node, val, node.tagName);
+        },
+         
+        'nth-last-of-type': function(node, val) {
+            return Y.Selector._getNth(node, val, node.tagName, true);
+        },
+         
+        'first-child': function(node) {
+            return Y.Selector._getChildren(node.parentNode)[0] === node;
+        },
+
+        'last-child': function(node) {
+            var children = Y.Selector._getChildren(node.parentNode);
+            return children[children.length - 1] === node;
+        },
+
+        'first-of-type': function(node, val) {
+            return Y.Selector._getChildren(node.parentNode, node.tagName)[0];
+        },
+         
+        'last-of-type': function(node, val) {
+            var children = Y.Selector._getChildren(node.parentNode, node.tagName);
+            return children[children.length - 1];
+        },
+         
+        'only-child': function(node) {
+            var children = Y.Selector._getChildren(node.parentNode);
+            return children.length === 1 && children[0] === node;
+        },
+
+        'only-of-type': function(node) {
+            return Y.Selector._getChildren(node.parentNode, node.tagName).length === 1;
+        },
+
+        'empty': function(node) {
+            return node.childNodes.length === 0;
+        },
+
+        'not': function(node, simple) {
+            return !Y.Selector.test(node, simple);
+        },
+
+        'contains': function(node, str) {
+            var text = node.innerText || node.textContent || '';
+            return text.indexOf(str) > -1;
+        },
+        'checked': function(node) {
+            return node.checked === true;
+        }
+    },
+
+    /**
+     * Test if the supplied node matches the supplied selector.
+     * @method test
+     *
+     * @param {HTMLElement | String} node An id or node reference to the HTMLElement being tested.
+     * @param {string} selector The CSS Selector to test the node against.
+     * @return{boolean} Whether or not the node matches the selector.
+     * @static
+    
+     */
+    test: function(node, selector) {
+        node = Y.Selector.document.getElementById(node) || node;
+
+        if (!node) {
+            return false;
+        }
+
+        var groups = selector ? selector.split(',') : [];
+        if (groups.length) {
+            for (var i = 0, len = groups.length; i < len; ++i) {
+                if ( Y.Selector._test(node, groups[i]) ) { // passes if ANY group matches
+                    return true;
+                }
+            }
+            return false;
+        }
+        return Y.Selector._test(node, selector);
+    },
+
+    _test: function(node, selector, token, deDupe) {
+        token = token || Y.Selector._tokenize(selector).pop() || {};
+
+        if (!node.tagName ||
+            (token.tag !== '*' && node.tagName !== token.tag) ||
+            (deDupe && node._found) ) {
+            return false;
+        }
+
+        if (token.attributes.length) {
+            var val,
+                ieFlag,
+                re_urls = Y.Selector._re.urls;
+
+            if (!node.attributes || !node.attributes.length) {
+                return false;
+            }
+            for (var i = 0, attr; attr = token.attributes[i++];) {
+                ieFlag = (re_urls.test(attr[0])) ? 2 : 0;
+                val = node.getAttribute(attr[0], ieFlag);
+                if (val === null || val === undefined) {
+                    return false;
+                }
+                if ( Y.Selector.operators[attr[1]] &&
+                        !Y.Selector.operators[attr[1]](val, attr[2])) {
+                    return false;
+                }
+            }
+        }
+
+        if (token.pseudos.length) {
+            for (var i = 0, len = token.pseudos.length; i < len; ++i) {
+                if (Y.Selector.pseudos[token.pseudos[i][0]] &&
+                        !Y.Selector.pseudos[token.pseudos[i][0]](node, token.pseudos[i][1])) {
+                    return false;
+                }
+            }
+        }
+
+        return (token.previous && token.previous.combinator !== ',') ?
+                Y.Selector._combinators[token.previous.combinator](node, token) :
+                true;
+    },
+
+    /**
+     * Filters a set of nodes based on a given CSS selector. 
+     * @method filter
+     *
+     * @param {array} nodes A set of nodes/ids to filter. 
+     * @param {string} selector The selector used to test each node.
+     * @return{array} An array of nodes from the supplied array that match the given selector.
+     * @static
+     */
+    filter: function(nodes, selector) {
+        nodes = nodes || [];
+
+        var node,
+            result = [],
+            tokens = Y.Selector._tokenize(selector);
+
+        if (!nodes.item) { // if not HTMLCollection, handle arrays of ids and/or nodes
+            YAHOO.log('filter: scanning input for HTMLElements/IDs', 'info', 'Selector');
+            for (var i = 0, len = nodes.length; i < len; ++i) {
+                if (!nodes[i].tagName) { // tagName limits to HTMLElements 
+                    node = Y.Selector.document.getElementById(nodes[i]);
+                    if (node) { // skip IDs that return null 
+                        nodes[i] = node;
+                    } else {
+                        YAHOO.log('filter: skipping invalid node', 'warn', 'Selector');
+                    }
+                }
+            }
+        }
+        result = Y.Selector._filter(nodes, Y.Selector._tokenize(selector)[0]);
+        YAHOO.log('filter: returning:' + result.length, 'info', 'Selector');
+        return result;
+    },
+
+    _filter: function(nodes, token, firstOnly, deDupe) {
+        var result = firstOnly ? null : [],
+            foundCache = Y.Selector._foundCache;
+
+        for (var i = 0, len = nodes.length; i < len; i++) {
+            if (! Y.Selector._test(nodes[i], '', token, deDupe)) {
+                continue;
+            }
+
+            if (firstOnly) {
+                return nodes[i];
+            }
+            if (deDupe) {
+                if (nodes[i]._found) {
+                    continue;
+                }
+                nodes[i]._found = true;
+                foundCache[foundCache.length] = nodes[i];
+            }
+
+            result[result.length] = nodes[i];
+        }
+
+        return result;
+    },
+
+    /**
+     * Retrieves a set of nodes based on a given CSS selector. 
+     * @method query
+     *
+     * @param {string} selector The CSS Selector to test the node against.
+     * @param {HTMLElement | String} root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
+     * @param {Boolean} firstOnly optional Whether or not to return only the first match.
+     * @return {Array} An array of nodes that match the given selector.
+     * @static
+     */
+    query: function(selector, root, firstOnly) {
+        var result = Y.Selector._query(selector, root, firstOnly);
+        YAHOO.log('query: returning ' + result, 'info', 'Selector');
+        return result;
+    },
+
+
+    _query: function(selector, root, firstOnly, deDupe) {
+        var result =  (firstOnly) ? null : [],
+            node;
+
+        if (!selector) {
+            return result;
+        }
+
+        var groups = selector.split(','); // TODO: handle comma in attribute/pseudo
+
+        if (groups.length > 1) {
+            var found;
+            for (var i = 0, len = groups.length; i < len; ++i) {
+                found = arguments.callee(groups[i], root, firstOnly, true);
+                result = firstOnly ? found : result.concat(found); 
+            }
+            Y.Selector._clearFoundCache();
+            return result;
+        }
+
+        if (root && !root.nodeName) { // assume ID
+            root = Y.Selector.document.getElementById(root);
+            if (!root) {
+                YAHOO.log('invalid root node provided', 'warn', 'Selector');
+                return result;
+            }
+        }
+
+        root = root || Y.Selector.document;
+
+        if (root.nodeName !== '#document') { // prepend with root selector
+            Y.Dom.generateId(root); // TODO: cleanup after?
+            selector = root.tagName + '#' + root.id + ' ' + selector;
+            node = root;
+            root = root.ownerDocument;
+        }
+
+        var tokens = Y.Selector._tokenize(selector);
+        var idToken = tokens[Y.Selector._getIdTokenIndex(tokens)],
+            nodes = [],
+            id,
+            token = tokens.pop() || {};
+            
+        if (idToken) {
+            id = Y.Selector._getId(idToken.attributes);
+        }
+
+        // use id shortcut when possible
+        if (id) {
+            node = node || Y.Selector.document.getElementById(id);
+
+            if (node && (root.nodeName === '#document' || Y.Dom.isAncestor(root, node))) {
+                if ( Y.Selector._test(node, null, idToken) ) {
+                    if (idToken === token) {
+                        nodes = [node]; // simple selector
+                    } else if (idToken.combinator === ' ' || idToken.combinator === '>') {
+                        root = node; // start from here
+                    }
+                }
+            } else {
+                return result;
+            }
+        }
+
+        if (root && !nodes.length) {
+            nodes = root.getElementsByTagName(token.tag);
+        }
+
+        if (nodes.length) {
+            result = Y.Selector._filter(nodes, token, firstOnly, deDupe); 
+        }
+
+        return result;
+    },
+
+
+    _clearFoundCache: function() {
+        var foundCache = Y.Selector._foundCache;
+        YAHOO.log('getBySelector: clearing found cache of ' + foundCache.length + ' elements');
+        for (var i = 0, len = foundCache.length; i < len; ++i) {
+            try { // IE no like delete
+                delete foundCache[i]._found;
+            } catch(e) {
+                foundCache[i].removeAttribute('_found');
+            }
+        }
+        foundCache = [];
+        YAHOO.log('getBySelector: done clearing foundCache');
+    },
+
+
+    _getRegExp: function(str, flags) {
+        var regexCache = Y.Selector._regexCache;
+        flags = flags || '';
+        if (!regexCache[str + flags]) {
+            regexCache[str + flags] = new RegExp(str, flags);
+        }
+        return regexCache[str + flags];
+    },
+
+    _getChildren: function() {
+        if (document.documentElement.children) { // document for capability test
+            return function(node, tag) {
+                return (tag) ? node.children.tags(tag) : node.children || [];
+            };
+        } else {
+            return function(node, tag) {
+                if (node._children) {
+                    return node._children;
+                }
+                var children = [],
+                    childNodes = node.childNodes;
+
+                for (var i = 0, len = childNodes.length; i < len; ++i) {
+                    if (childNodes[i].tagName) {
+                        if (!tag || childNodes[i].tagName === tag) {
+                            children[children.length] = childNodes[i];
+                        }
+                    }
+                }
+                node._children = children;
+                return children;
+            };
+        }
+    }(),
+
+    _combinators: {
+        ' ': function(node, token) {
+            while ( (node = node.parentNode) ) {
+                if (Y.Selector._test(node, '', token.previous)) {
+                    return true;
+                }
+            }  
+            return false;
+        },
+
+        '>': function(node, token) {
+            return Y.Selector._test(node.parentNode, null, token.previous);
+        },
+
+        '+': function(node, token) {
+            var sib = node.previousSibling;
+            while (sib && sib.nodeType !== 1) {
+                sib = sib.previousSibling;
+            }
+
+            if (sib && Y.Selector._test(sib, null, token.previous)) {
+                return true; 
+            }
+            return false;
+        },
+
+        '~': function(node, token) {
+            var sib = node.previousSibling;
+            while (sib) {
+                if (sib.nodeType === 1 && Y.Selector._test(sib, null, token.previous)) {
+                    return true;
+                }
+                sib = sib.previousSibling;
+            }
+
+            return false;
+        }
+    },
+
+
+    /*
+        an+b = get every _a_th node starting at the _b_th
+        0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
+        1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
+        an+0 = get every _a_th element, "0" may be omitted 
+    */
+    _getNth: function(node, expr, tag, reverse) {
+        Y.Selector._re.nth.test(expr);
+        var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
+            n = RegExp.$2, // "n"
+            oddeven = RegExp.$3, // "odd" or "even"
+            b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
+            result = [],
+            op;
+
+        var siblings = Y.Selector._getChildren(node.parentNode, tag);
+
+        if (oddeven) {
+            a = 2; // always every other
+            op = '+';
+            n = 'n';
+            b = (oddeven === 'odd') ? 1 : 0;
+        } else if ( isNaN(a) ) {
+            a = (n) ? 1 : 0; // start from the first or no repeat
+        }
+
+        if (a === 0) { // just the first
+            if (reverse) {
+                b = siblings.length - b + 1; 
+            }
+
+            if (siblings[b - 1] === node) {
+                return true;
+            } else {
+                return false;
+            }
+
+        } else if (a < 0) {
+            reverse = !!reverse;
+            a = Math.abs(a);
+        }
+
+        if (!reverse) {
+            for (var i = b - 1, len = siblings.length; i < len; i += a) {
+                if ( i >= 0 && siblings[i] === node ) {
+                    return true;
+                }
+            }
+        } else {
+            for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
+                if ( i < len && siblings[i] === node ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    },
+
+    _getId: function(attr) {
+        for (var i = 0, len = attr.length; i < len; ++i) {
+            if (attr[i][0] == 'id' && attr[i][1] === '=') {
+                return attr[i][2];
+            }
+        }
+    },
+
+    _getIdTokenIndex: function(tokens) {
+        for (var i = 0, len = tokens.length; i < len; ++i) {
+            if (Y.Selector._getId(tokens[i].attributes)) {
+                return i;
+            }
+        }
+        return -1;
+    },
+
+    _patterns: {
+        tag: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
+        attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
+        pseudos: /^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
+        combinator: /^\s*([>+~]|\s)\s*/
+    },
+
+    /**
+        Break selector into token units per simple selector.
+        Combinator is attached to left-hand selector.
+     */
+    _tokenize: function(selector) {
+        var token = {},     // one token per simple selector (left selector holds combinator)
+            tokens = [],    // array of tokens
+            id,             // unique id for the simple selector (if found)
+            found = false,  // whether or not any matches were found this pass
+            patterns = Y.Selector._patterns,
+            match;          // the regex match
+
+        selector = Y.Selector._replaceShorthand(selector); // convert ID and CLASS shortcuts to attributes
+
+        /*
+            Search for selector patterns, store, and strip them from the selector string
+            until no patterns match (invalid selector) or we run out of chars.
+
+            Multiple attributes and pseudos are allowed, in any order.
+            for example:
+                'form:first-child[type=button]:not(button)[lang|=en]'
+        */
+        do {
+            found = false; // reset after full pass
+            for (var re in patterns) {
+                if (YAHOO.lang.hasOwnProperty(patterns, re)) {
+                    if (re != 'tag' && re != 'combinator') { // only one allowed
+                        token[re] = token[re] || [];
+                    }
+                    if ( (match = patterns[re].exec(selector)) ) { // note assignment
+                        found = true;
+                        if (re != 'tag' && re != 'combinator') { // only one allowed
+                            // capture ID for fast path to element
+                            if (re === 'attributes' && match[1] === 'id') {
+                                token.id = match[3];
+                            }
+
+                            token[re].push(match.slice(1));
+                        } else { // single selector (tag, combinator)
+                            token[re] = match[1];
+                        }
+                        selector = selector.replace(match[0], ''); // strip current match from selector
+                        if (re === 'combinator' || !selector.length) { // next token or done
+                            token.attributes = Y.Selector._fixAttributes(token.attributes);
+                            token.pseudos = token.pseudos || [];
+                            token.tag = token.tag ? token.tag.toUpperCase() : '*';
+                            tokens.push(token);
+
+                            token = { // prep next token
+                                previous: token
+                            };
+                        }
+                    }
+                }
+            }
+        } while (found);
+
+        return tokens;
+    },
+
+
+    _fixAttributes: function(attr) {
+        var aliases = Y.Selector.attrAliases;
+        attr = attr || [];
+        for (var i = 0, len = attr.length; i < len; ++i) {
+            if (aliases[attr[i][0]]) { // convert reserved words, etc
+                attr[i][0] = aliases[attr[i][0]];
+            }
+            if (!attr[i][1]) { // use exists operator
+                attr[i][1] = '';
+            }
+        }
+        return attr;
+    },
+
+    _replaceShorthand: function(selector) {
+        var shorthand = Y.Selector.shorthand;
+
+        //var attrs = selector.match(Y.Selector._patterns.attributes); // pull attributes to avoid false pos on "." and "#"
+        var attrs = selector.match(Y.Selector._re.attr); // pull attributes to avoid false pos on "." and "#"
+        if (attrs) {
+            selector = selector.replace(Y.Selector._re.attr, 'REPLACED_ATTRIBUTE');
+        }
+        for (var re in shorthand) {
+            if (YAHOO.lang.hasOwnProperty(shorthand, re)) {
+                selector = selector.replace(Y.Selector._getRegExp(re, 'gi'), shorthand[re]);
+            }
+        }
+
+        if (attrs) {
+            for (var i = 0, len = attrs.length; i < len; ++i) {
+                selector = selector.replace('REPLACED_ATTRIBUTE', attrs[i]);
+            }
+        }
+        return selector;
+    }
+};
+
+if (YAHOO.env.ua.ie && YAHOO.env.ua.ie < 8) { // rewrite class for IE < 8
+    Y.Selector.attrAliases['class'] = 'className';
+    Y.Selector.attrAliases['for'] = 'htmlFor';
+}
+
+})();
+YAHOO.register("selector", YAHOO.util.Selector, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/selector/selector-min.js
===================================================================
--- trunk/root/static/yui/selector/selector-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,8 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var A=YAHOO.util;A.Selector={_foundCache:[],_regexCache:{},_re:{nth:/^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/,attr:/(\[.*\])/g,urls:/^(?:href|src)/},document:window.document,attrAliases:{},shorthand:{"\\#(-?[_a-z]+[-\\w]*)":"[id=$1]","\\.(-?[_a-z]+[-\\w]*)":"[class~=$1]"},operators:{"=":function(B,C){return B===C;},"!=":function(B,C){return B!==C;},"~=":function(B,D){var C=" ";return(C+B+C).indexOf((C+D+C))>-1;},"|=":function(B,C){return B===C||B.slice(0,C.length+1)===C+"-";},"^=":function(B,C){return B.indexOf(C)===0;},"$=":function(B,C){return B.slice(-C.length)===C;},"*=":function(B,C){return B.indexOf(C)>-1;},"":function(B,C){return B;}},pseudos:{"root":function(B){return B===B.ownerDocument.documentElement;},"nth-child":function(B,C){return A.Selector._getNth(B,C);},"nth-last-child":function(B,C){return A.Selector._getNth(B,C,null,true);},"nth-of-type":function(B,C){return A.Selector._getNth(B,C,B.tagName);},"nth-last-of-type":function(B,C){return A.Se!
 lector._getNth(B,C,B.tagName,true);},"first-child":function(B){return A.Selector._getChildren(B.parentNode)[0]===B;},"last-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B[B.length-1]===C;},"first-of-type":function(B,C){return A.Selector._getChildren(B.parentNode,B.tagName)[0];},"last-of-type":function(C,D){var B=A.Selector._getChildren(C.parentNode,C.tagName);return B[B.length-1];},"only-child":function(C){var B=A.Selector._getChildren(C.parentNode);return B.length===1&&B[0]===C;},"only-of-type":function(B){return A.Selector._getChildren(B.parentNode,B.tagName).length===1;},"empty":function(B){return B.childNodes.length===0;},"not":function(B,C){return !A.Selector.test(B,C);},"contains":function(B,D){var C=B.innerText||B.textContent||"";return C.indexOf(D)>-1;},"checked":function(B){return B.checked===true;}},test:function(F,D){F=A.Selector.document.getElementById(F)||F;if(!F){return false;}var C=D?D.split(","):[];if(C.length){for(var E=0,B=C.length;!
 E<B;++E){if(A.Selector._test(F,C[E])){return true;}}return fal!
 se;}retu
rn A.Selector._test(F,D);},_test:function(D,G,F,E){F=F||A.Selector._tokenize(G).pop()||{};if(!D.tagName||(F.tag!=="*"&&D.tagName!==F.tag)||(E&&D._found)){return false;}if(F.attributes.length){var B,H,C=A.Selector._re.urls;if(!D.attributes||!D.attributes.length){return false;}for(var I=0,K;K=F.attributes[I++];){H=(C.test(K[0]))?2:0;B=D.getAttribute(K[0],H);if(B===null||B===undefined){return false;}if(A.Selector.operators[K[1]]&&!A.Selector.operators[K[1]](B,K[2])){return false;}}}if(F.pseudos.length){for(var I=0,J=F.pseudos.length;I<J;++I){if(A.Selector.pseudos[F.pseudos[I][0]]&&!A.Selector.pseudos[F.pseudos[I][0]](D,F.pseudos[I][1])){return false;}}}return(F.previous&&F.previous.combinator!==",")?A.Selector._combinators[F.previous.combinator](D,F):true;},filter:function(E,D){E=E||[];var G,C=[],H=A.Selector._tokenize(D);if(!E.item){for(var F=0,B=E.length;F<B;++F){if(!E[F].tagName){G=A.Selector.document.getElementById(E[F]);if(G){E[F]=G;}else{}}}}C=A.Selector._filter(E,A.Selec!
 tor._tokenize(D)[0]);return C;},_filter:function(E,G,H,D){var C=H?null:[],I=A.Selector._foundCache;for(var F=0,B=E.length;F<B;F++){if(!A.Selector._test(E[F],"",G,D)){continue;}if(H){return E[F];}if(D){if(E[F]._found){continue;}E[F]._found=true;I[I.length]=E[F];}C[C.length]=E[F];}return C;},query:function(C,D,E){var B=A.Selector._query(C,D,E);return B;},_query:function(H,M,N,F){var P=(N)?null:[],E;if(!H){return P;}var D=H.split(",");if(D.length>1){var O;for(var I=0,J=D.length;I<J;++I){O=arguments.callee(D[I],M,N,true);P=N?O:P.concat(O);}A.Selector._clearFoundCache();return P;}if(M&&!M.nodeName){M=A.Selector.document.getElementById(M);if(!M){return P;}}M=M||A.Selector.document;if(M.nodeName!=="#document"){A.Dom.generateId(M);H=M.tagName+"#"+M.id+" "+H;E=M;M=M.ownerDocument;}var L=A.Selector._tokenize(H);var K=L[A.Selector._getIdTokenIndex(L)],B=[],C,G=L.pop()||{};if(K){C=A.Selector._getId(K.attributes);}if(C){E=E||A.Selector.document.getElementById(C);if(E&&(M.nodeName==="#do!
 cument"||A.Dom.isAncestor(M,E))){if(A.Selector._test(E,null,K)!
 ){if(K==
=G){B=[E];}else{if(K.combinator===" "||K.combinator===">"){M=E;}}}}else{return P;}}if(M&&!B.length){B=M.getElementsByTagName(G.tag);}if(B.length){P=A.Selector._filter(B,G,N,F);}return P;},_clearFoundCache:function(){var E=A.Selector._foundCache;for(var C=0,B=E.length;C<B;++C){try{delete E[C]._found;}catch(D){E[C].removeAttribute("_found");}}E=[];},_getRegExp:function(D,B){var C=A.Selector._regexCache;B=B||"";if(!C[D+B]){C[D+B]=new RegExp(D,B);}return C[D+B];},_getChildren:function(){if(document.documentElement.children){return function(C,B){return(B)?C.children.tags(B):C.children||[];};}else{return function(F,C){if(F._children){return F._children;}var E=[],G=F.childNodes;for(var D=0,B=G.length;D<B;++D){if(G[D].tagName){if(!C||G[D].tagName===C){E[E.length]=G[D];}}}F._children=E;return E;};}}(),_combinators:{" ":function(C,B){while((C=C.parentNode)){if(A.Selector._test(C,"",B.previous)){return true;}}return false;},">":function(C,B){return A.Selector._test(C.parentNode,null,B.!
 previous);},"+":function(D,C){var B=D.previousSibling;while(B&&B.nodeType!==1){B=B.previousSibling;}if(B&&A.Selector._test(B,null,C.previous)){return true;}return false;},"~":function(D,C){var B=D.previousSibling;while(B){if(B.nodeType===1&&A.Selector._test(B,null,C.previous)){return true;}B=B.previousSibling;}return false;}},_getNth:function(C,L,N,G){A.Selector._re.nth.test(L);var K=parseInt(RegExp.$1,10),B=RegExp.$2,H=RegExp.$3,I=parseInt(RegExp.$4,10)||0,M=[],E;var J=A.Selector._getChildren(C.parentNode,N);if(H){K=2;E="+";B="n";I=(H==="odd")?1:0;}else{if(isNaN(K)){K=(B)?1:0;}}if(K===0){if(G){I=J.length-I+1;}if(J[I-1]===C){return true;}else{return false;}}else{if(K<0){G=!!G;K=Math.abs(K);}}if(!G){for(var D=I-1,F=J.length;D<F;D+=K){if(D>=0&&J[D]===C){return true;}}}else{for(var D=J.length-I,F=J.length;D>=0;D-=K){if(D<F&&J[D]===C){return true;}}}return false;},_getId:function(C){for(var D=0,B=C.length;D<B;
+++D){if(C[D][0]=="id"&&C[D][1]==="="){return C[D][2];}}},_getIdTokenIndex:function(D){for(var C=0,B=D.length;C<B;++C){if(A.Selector._getId(D[C].attributes)){return C;}}return -1;},_patterns:{tag:/^((?:-?[_a-z]+[\w-]*)|\*)/i,attributes:/^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,pseudos:/^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,combinator:/^\s*([>+~]|\s)\s*/},_tokenize:function(B){var D={},H=[],I,G=false,F=A.Selector._patterns,C;B=A.Selector._replaceShorthand(B);do{G=false;for(var E in F){if(YAHOO.lang.hasOwnProperty(F,E)){if(E!="tag"&&E!="combinator"){D[E]=D[E]||[];}if((C=F[E].exec(B))){G=true;if(E!="tag"&&E!="combinator"){if(E==="attributes"&&C[1]==="id"){D.id=C[3];}D[E].push(C.slice(1));}else{D[E]=C[1];}B=B.replace(C[0],"");if(E==="combinator"||!B.length){D.attributes=A.Selector._fixAttributes(D.attributes);D.pseudos=D.pseudos||[];D.tag=D.tag?D.tag.toUpperCase():"*";H.push(D);D={previous:D};}}}}}while(G);return H;},_fixAttributes:function(C){var D=A.Selector.attr!
 Aliases;C=C||[];for(var E=0,B=C.length;E<B;++E){if(D[C[E][0]]){C[E][0]=D[C[E][0]];}if(!C[E][1]){C[E][1]="";}}return C;},_replaceShorthand:function(C){var D=A.Selector.shorthand;var E=C.match(A.Selector._re.attr);if(E){C=C.replace(A.Selector._re.attr,"REPLACED_ATTRIBUTE");}for(var G in D){if(YAHOO.lang.hasOwnProperty(D,G)){C=C.replace(A.Selector._getRegExp(G,"gi"),D[G]);}}if(E){for(var F=0,B=E.length;F<B;++F){C=C.replace("REPLACED_ATTRIBUTE",E[F]);}}return C;}};if(YAHOO.env.ua.ie&&YAHOO.env.ua.ie<8){A.Selector.attrAliases["class"]="className";A.Selector.attrAliases["for"]="htmlFor";}})();YAHOO.register("selector",YAHOO.util.Selector,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/selector/selector.js
===================================================================
--- trunk/root/static/yui/selector/selector.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/selector/selector.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,648 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The selector module provides helper methods allowing CSS3 Selectors to be used with DOM elements.
+ * @module selector
+ * @title Selector Utility
+ * @namespace YAHOO.util
+ * @requires yahoo, dom
+ */
+
+(function() {
+var Y = YAHOO.util;
+
+/**
+ * Provides helper methods for collecting and filtering DOM elements.
+ * @namespace YAHOO.util
+ * @class Selector
+ * @static
+ */
+
+Y.Selector = {
+    _foundCache: [],
+    _regexCache: {},
+
+    _re: {
+        nth: /^(?:([-]?\d*)(n){1}|(odd|even)$)*([-+]?\d*)$/,
+        attr: /(\[.*\])/g,
+        urls: /^(?:href|src)/
+    },
+
+    /**
+     * Default document for use queries 
+     * @property document
+     * @type object
+     * @default window.document
+     */
+    document: window.document,
+    /**
+     * Mapping of attributes to aliases, normally to work around HTMLAttributes
+     * that conflict with JS reserved words.
+     * @property attrAliases
+     * @type object
+     */
+    attrAliases: {
+    },
+
+    /**
+     * Mapping of shorthand tokens to corresponding attribute selector 
+     * @property shorthand
+     * @type object
+     */
+    shorthand: {
+        //'(?:(?:[^\\)\\]\\s*>+~,]+)(?:-?[_a-z]+[-\\w]))+#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+        '\\#(-?[_a-z]+[-\\w]*)': '[id=$1]',
+        '\\.(-?[_a-z]+[-\\w]*)': '[class~=$1]'
+    },
+
+    /**
+     * List of operators and corresponding boolean functions. 
+     * These functions are passed the attribute and the current node's value of the attribute.
+     * @property operators
+     * @type object
+     */
+    operators: {
+        '=': function(attr, val) { return attr === val; }, // Equality
+        '!=': function(attr, val) { return attr !== val; }, // Inequality
+        '~=': function(attr, val) { // Match one of space seperated words 
+            var s = ' ';
+            return (s + attr + s).indexOf((s + val + s)) > -1;
+        },
+        '|=': function(attr, val) { return attr === val || attr.slice(0, val.length + 1) === val + '-'; }, // Matches value followed by optional hyphen
+        '^=': function(attr, val) { return attr.indexOf(val) === 0; }, // Match starts with value
+        '$=': function(attr, val) { return attr.slice(-val.length) === val; }, // Match ends with value
+        '*=': function(attr, val) { return attr.indexOf(val) > -1; }, // Match contains value as substring 
+        '': function(attr, val) { return attr; } // Just test for existence of attribute
+    },
+
+    /**
+     * List of pseudo-classes and corresponding boolean functions. 
+     * These functions are called with the current node, and any value that was parsed with the pseudo regex.
+     * @property pseudos
+     * @type object
+     */
+    pseudos: {
+        'root': function(node) {
+            return node === node.ownerDocument.documentElement;
+        },
+
+        'nth-child': function(node, val) {
+            return Y.Selector._getNth(node, val);
+        },
+
+        'nth-last-child': function(node, val) {
+            return Y.Selector._getNth(node, val, null, true);
+        },
+
+        'nth-of-type': function(node, val) {
+            return Y.Selector._getNth(node, val, node.tagName);
+        },
+         
+        'nth-last-of-type': function(node, val) {
+            return Y.Selector._getNth(node, val, node.tagName, true);
+        },
+         
+        'first-child': function(node) {
+            return Y.Selector._getChildren(node.parentNode)[0] === node;
+        },
+
+        'last-child': function(node) {
+            var children = Y.Selector._getChildren(node.parentNode);
+            return children[children.length - 1] === node;
+        },
+
+        'first-of-type': function(node, val) {
+            return Y.Selector._getChildren(node.parentNode, node.tagName)[0];
+        },
+         
+        'last-of-type': function(node, val) {
+            var children = Y.Selector._getChildren(node.parentNode, node.tagName);
+            return children[children.length - 1];
+        },
+         
+        'only-child': function(node) {
+            var children = Y.Selector._getChildren(node.parentNode);
+            return children.length === 1 && children[0] === node;
+        },
+
+        'only-of-type': function(node) {
+            return Y.Selector._getChildren(node.parentNode, node.tagName).length === 1;
+        },
+
+        'empty': function(node) {
+            return node.childNodes.length === 0;
+        },
+
+        'not': function(node, simple) {
+            return !Y.Selector.test(node, simple);
+        },
+
+        'contains': function(node, str) {
+            var text = node.innerText || node.textContent || '';
+            return text.indexOf(str) > -1;
+        },
+        'checked': function(node) {
+            return node.checked === true;
+        }
+    },
+
+    /**
+     * Test if the supplied node matches the supplied selector.
+     * @method test
+     *
+     * @param {HTMLElement | String} node An id or node reference to the HTMLElement being tested.
+     * @param {string} selector The CSS Selector to test the node against.
+     * @return{boolean} Whether or not the node matches the selector.
+     * @static
+    
+     */
+    test: function(node, selector) {
+        node = Y.Selector.document.getElementById(node) || node;
+
+        if (!node) {
+            return false;
+        }
+
+        var groups = selector ? selector.split(',') : [];
+        if (groups.length) {
+            for (var i = 0, len = groups.length; i < len; ++i) {
+                if ( Y.Selector._test(node, groups[i]) ) { // passes if ANY group matches
+                    return true;
+                }
+            }
+            return false;
+        }
+        return Y.Selector._test(node, selector);
+    },
+
+    _test: function(node, selector, token, deDupe) {
+        token = token || Y.Selector._tokenize(selector).pop() || {};
+
+        if (!node.tagName ||
+            (token.tag !== '*' && node.tagName !== token.tag) ||
+            (deDupe && node._found) ) {
+            return false;
+        }
+
+        if (token.attributes.length) {
+            var val,
+                ieFlag,
+                re_urls = Y.Selector._re.urls;
+
+            if (!node.attributes || !node.attributes.length) {
+                return false;
+            }
+            for (var i = 0, attr; attr = token.attributes[i++];) {
+                ieFlag = (re_urls.test(attr[0])) ? 2 : 0;
+                val = node.getAttribute(attr[0], ieFlag);
+                if (val === null || val === undefined) {
+                    return false;
+                }
+                if ( Y.Selector.operators[attr[1]] &&
+                        !Y.Selector.operators[attr[1]](val, attr[2])) {
+                    return false;
+                }
+            }
+        }
+
+        if (token.pseudos.length) {
+            for (var i = 0, len = token.pseudos.length; i < len; ++i) {
+                if (Y.Selector.pseudos[token.pseudos[i][0]] &&
+                        !Y.Selector.pseudos[token.pseudos[i][0]](node, token.pseudos[i][1])) {
+                    return false;
+                }
+            }
+        }
+
+        return (token.previous && token.previous.combinator !== ',') ?
+                Y.Selector._combinators[token.previous.combinator](node, token) :
+                true;
+    },
+
+    /**
+     * Filters a set of nodes based on a given CSS selector. 
+     * @method filter
+     *
+     * @param {array} nodes A set of nodes/ids to filter. 
+     * @param {string} selector The selector used to test each node.
+     * @return{array} An array of nodes from the supplied array that match the given selector.
+     * @static
+     */
+    filter: function(nodes, selector) {
+        nodes = nodes || [];
+
+        var node,
+            result = [],
+            tokens = Y.Selector._tokenize(selector);
+
+        if (!nodes.item) { // if not HTMLCollection, handle arrays of ids and/or nodes
+            for (var i = 0, len = nodes.length; i < len; ++i) {
+                if (!nodes[i].tagName) { // tagName limits to HTMLElements 
+                    node = Y.Selector.document.getElementById(nodes[i]);
+                    if (node) { // skip IDs that return null 
+                        nodes[i] = node;
+                    } else {
+                    }
+                }
+            }
+        }
+        result = Y.Selector._filter(nodes, Y.Selector._tokenize(selector)[0]);
+        return result;
+    },
+
+    _filter: function(nodes, token, firstOnly, deDupe) {
+        var result = firstOnly ? null : [],
+            foundCache = Y.Selector._foundCache;
+
+        for (var i = 0, len = nodes.length; i < len; i++) {
+            if (! Y.Selector._test(nodes[i], '', token, deDupe)) {
+                continue;
+            }
+
+            if (firstOnly) {
+                return nodes[i];
+            }
+            if (deDupe) {
+                if (nodes[i]._found) {
+                    continue;
+                }
+                nodes[i]._found = true;
+                foundCache[foundCache.length] = nodes[i];
+            }
+
+            result[result.length] = nodes[i];
+        }
+
+        return result;
+    },
+
+    /**
+     * Retrieves a set of nodes based on a given CSS selector. 
+     * @method query
+     *
+     * @param {string} selector The CSS Selector to test the node against.
+     * @param {HTMLElement | String} root optional An id or HTMLElement to start the query from. Defaults to Selector.document.
+     * @param {Boolean} firstOnly optional Whether or not to return only the first match.
+     * @return {Array} An array of nodes that match the given selector.
+     * @static
+     */
+    query: function(selector, root, firstOnly) {
+        var result = Y.Selector._query(selector, root, firstOnly);
+        return result;
+    },
+
+
+    _query: function(selector, root, firstOnly, deDupe) {
+        var result =  (firstOnly) ? null : [],
+            node;
+
+        if (!selector) {
+            return result;
+        }
+
+        var groups = selector.split(','); // TODO: handle comma in attribute/pseudo
+
+        if (groups.length > 1) {
+            var found;
+            for (var i = 0, len = groups.length; i < len; ++i) {
+                found = arguments.callee(groups[i], root, firstOnly, true);
+                result = firstOnly ? found : result.concat(found); 
+            }
+            Y.Selector._clearFoundCache();
+            return result;
+        }
+
+        if (root && !root.nodeName) { // assume ID
+            root = Y.Selector.document.getElementById(root);
+            if (!root) {
+                return result;
+            }
+        }
+
+        root = root || Y.Selector.document;
+
+        if (root.nodeName !== '#document') { // prepend with root selector
+            Y.Dom.generateId(root); // TODO: cleanup after?
+            selector = root.tagName + '#' + root.id + ' ' + selector;
+            node = root;
+            root = root.ownerDocument;
+        }
+
+        var tokens = Y.Selector._tokenize(selector);
+        var idToken = tokens[Y.Selector._getIdTokenIndex(tokens)],
+            nodes = [],
+            id,
+            token = tokens.pop() || {};
+            
+        if (idToken) {
+            id = Y.Selector._getId(idToken.attributes);
+        }
+
+        // use id shortcut when possible
+        if (id) {
+            node = node || Y.Selector.document.getElementById(id);
+
+            if (node && (root.nodeName === '#document' || Y.Dom.isAncestor(root, node))) {
+                if ( Y.Selector._test(node, null, idToken) ) {
+                    if (idToken === token) {
+                        nodes = [node]; // simple selector
+                    } else if (idToken.combinator === ' ' || idToken.combinator === '>') {
+                        root = node; // start from here
+                    }
+                }
+            } else {
+                return result;
+            }
+        }
+
+        if (root && !nodes.length) {
+            nodes = root.getElementsByTagName(token.tag);
+        }
+
+        if (nodes.length) {
+            result = Y.Selector._filter(nodes, token, firstOnly, deDupe); 
+        }
+
+        return result;
+    },
+
+
+    _clearFoundCache: function() {
+        var foundCache = Y.Selector._foundCache;
+        for (var i = 0, len = foundCache.length; i < len; ++i) {
+            try { // IE no like delete
+                delete foundCache[i]._found;
+            } catch(e) {
+                foundCache[i].removeAttribute('_found');
+            }
+        }
+        foundCache = [];
+    },
+
+
+    _getRegExp: function(str, flags) {
+        var regexCache = Y.Selector._regexCache;
+        flags = flags || '';
+        if (!regexCache[str + flags]) {
+            regexCache[str + flags] = new RegExp(str, flags);
+        }
+        return regexCache[str + flags];
+    },
+
+    _getChildren: function() {
+        if (document.documentElement.children) { // document for capability test
+            return function(node, tag) {
+                return (tag) ? node.children.tags(tag) : node.children || [];
+            };
+        } else {
+            return function(node, tag) {
+                if (node._children) {
+                    return node._children;
+                }
+                var children = [],
+                    childNodes = node.childNodes;
+
+                for (var i = 0, len = childNodes.length; i < len; ++i) {
+                    if (childNodes[i].tagName) {
+                        if (!tag || childNodes[i].tagName === tag) {
+                            children[children.length] = childNodes[i];
+                        }
+                    }
+                }
+                node._children = children;
+                return children;
+            };
+        }
+    }(),
+
+    _combinators: {
+        ' ': function(node, token) {
+            while ( (node = node.parentNode) ) {
+                if (Y.Selector._test(node, '', token.previous)) {
+                    return true;
+                }
+            }  
+            return false;
+        },
+
+        '>': function(node, token) {
+            return Y.Selector._test(node.parentNode, null, token.previous);
+        },
+
+        '+': function(node, token) {
+            var sib = node.previousSibling;
+            while (sib && sib.nodeType !== 1) {
+                sib = sib.previousSibling;
+            }
+
+            if (sib && Y.Selector._test(sib, null, token.previous)) {
+                return true; 
+            }
+            return false;
+        },
+
+        '~': function(node, token) {
+            var sib = node.previousSibling;
+            while (sib) {
+                if (sib.nodeType === 1 && Y.Selector._test(sib, null, token.previous)) {
+                    return true;
+                }
+                sib = sib.previousSibling;
+            }
+
+            return false;
+        }
+    },
+
+
+    /*
+        an+b = get every _a_th node starting at the _b_th
+        0n+b = no repeat ("0" and "n" may both be omitted (together) , e.g. "0n+1" or "1", not "0+1"), return only the _b_th element
+        1n+b =  get every element starting from b ("1" may may be omitted, e.g. "1n+0" or "n+0" or "n")
+        an+0 = get every _a_th element, "0" may be omitted 
+    */
+    _getNth: function(node, expr, tag, reverse) {
+        Y.Selector._re.nth.test(expr);
+        var a = parseInt(RegExp.$1, 10), // include every _a_ elements (zero means no repeat, just first _a_)
+            n = RegExp.$2, // "n"
+            oddeven = RegExp.$3, // "odd" or "even"
+            b = parseInt(RegExp.$4, 10) || 0, // start scan from element _b_
+            result = [],
+            op;
+
+        var siblings = Y.Selector._getChildren(node.parentNode, tag);
+
+        if (oddeven) {
+            a = 2; // always every other
+            op = '+';
+            n = 'n';
+            b = (oddeven === 'odd') ? 1 : 0;
+        } else if ( isNaN(a) ) {
+            a = (n) ? 1 : 0; // start from the first or no repeat
+        }
+
+        if (a === 0) { // just the first
+            if (reverse) {
+                b = siblings.length - b + 1; 
+            }
+
+            if (siblings[b - 1] === node) {
+                return true;
+            } else {
+                return false;
+            }
+
+        } else if (a < 0) {
+            reverse = !!reverse;
+            a = Math.abs(a);
+        }
+
+        if (!reverse) {
+            for (var i = b - 1, len = siblings.length; i < len; i += a) {
+                if ( i >= 0 && siblings[i] === node ) {
+                    return true;
+                }
+            }
+        } else {
+            for (var i = siblings.length - b, len = siblings.length; i >= 0; i -= a) {
+                if ( i < len && siblings[i] === node ) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    },
+
+    _getId: function(attr) {
+        for (var i = 0, len = attr.length; i < len; ++i) {
+            if (attr[i][0] == 'id' && attr[i][1] === '=') {
+                return attr[i][2];
+            }
+        }
+    },
+
+    _getIdTokenIndex: function(tokens) {
+        for (var i = 0, len = tokens.length; i < len; ++i) {
+            if (Y.Selector._getId(tokens[i].attributes)) {
+                return i;
+            }
+        }
+        return -1;
+    },
+
+    _patterns: {
+        tag: /^((?:-?[_a-z]+[\w-]*)|\*)/i,
+        attributes: /^\[([a-z]+\w*)+([~\|\^\$\*!=]=?)?['"]?([^\]]*?)['"]?\]/i,
+        pseudos: /^:([-\w]+)(?:\(['"]?(.+)['"]?\))*/i,
+        combinator: /^\s*([>+~]|\s)\s*/
+    },
+
+    /**
+        Break selector into token units per simple selector.
+        Combinator is attached to left-hand selector.
+     */
+    _tokenize: function(selector) {
+        var token = {},     // one token per simple selector (left selector holds combinator)
+            tokens = [],    // array of tokens
+            id,             // unique id for the simple selector (if found)
+            found = false,  // whether or not any matches were found this pass
+            patterns = Y.Selector._patterns,
+            match;          // the regex match
+
+        selector = Y.Selector._replaceShorthand(selector); // convert ID and CLASS shortcuts to attributes
+
+        /*
+            Search for selector patterns, store, and strip them from the selector string
+            until no patterns match (invalid selector) or we run out of chars.
+
+            Multiple attributes and pseudos are allowed, in any order.
+            for example:
+                'form:first-child[type=button]:not(button)[lang|=en]'
+        */
+        do {
+            found = false; // reset after full pass
+            for (var re in patterns) {
+                if (YAHOO.lang.hasOwnProperty(patterns, re)) {
+                    if (re != 'tag' && re != 'combinator') { // only one allowed
+                        token[re] = token[re] || [];
+                    }
+                    if ( (match = patterns[re].exec(selector)) ) { // note assignment
+                        found = true;
+                        if (re != 'tag' && re != 'combinator') { // only one allowed
+                            // capture ID for fast path to element
+                            if (re === 'attributes' && match[1] === 'id') {
+                                token.id = match[3];
+                            }
+
+                            token[re].push(match.slice(1));
+                        } else { // single selector (tag, combinator)
+                            token[re] = match[1];
+                        }
+                        selector = selector.replace(match[0], ''); // strip current match from selector
+                        if (re === 'combinator' || !selector.length) { // next token or done
+                            token.attributes = Y.Selector._fixAttributes(token.attributes);
+                            token.pseudos = token.pseudos || [];
+                            token.tag = token.tag ? token.tag.toUpperCase() : '*';
+                            tokens.push(token);
+
+                            token = { // prep next token
+                                previous: token
+                            };
+                        }
+                    }
+                }
+            }
+        } while (found);
+
+        return tokens;
+    },
+
+
+    _fixAttributes: function(attr) {
+        var aliases = Y.Selector.attrAliases;
+        attr = attr || [];
+        for (var i = 0, len = attr.length; i < len; ++i) {
+            if (aliases[attr[i][0]]) { // convert reserved words, etc
+                attr[i][0] = aliases[attr[i][0]];
+            }
+            if (!attr[i][1]) { // use exists operator
+                attr[i][1] = '';
+            }
+        }
+        return attr;
+    },
+
+    _replaceShorthand: function(selector) {
+        var shorthand = Y.Selector.shorthand;
+
+        //var attrs = selector.match(Y.Selector._patterns.attributes); // pull attributes to avoid false pos on "." and "#"
+        var attrs = selector.match(Y.Selector._re.attr); // pull attributes to avoid false pos on "." and "#"
+        if (attrs) {
+            selector = selector.replace(Y.Selector._re.attr, 'REPLACED_ATTRIBUTE');
+        }
+        for (var re in shorthand) {
+            if (YAHOO.lang.hasOwnProperty(shorthand, re)) {
+                selector = selector.replace(Y.Selector._getRegExp(re, 'gi'), shorthand[re]);
+            }
+        }
+
+        if (attrs) {
+            for (var i = 0, len = attrs.length; i < len; ++i) {
+                selector = selector.replace('REPLACED_ATTRIBUTE', attrs[i]);
+            }
+        }
+        return selector;
+    }
+};
+
+if (YAHOO.env.ua.ie && YAHOO.env.ua.ie < 8) { // rewrite class for IE < 8
+    Y.Selector.attrAliases['class'] = 'className';
+    Y.Selector.attrAliases['for'] = 'htmlFor';
+}
+
+})();
+YAHOO.register("selector", YAHOO.util.Selector, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/slider/README
===================================================================
--- trunk/root/static/yui/slider/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,114 +0,0 @@
-Slider - Release Notes
-
-2.6.0
-    * Vertical DualSlider correctly calculates minRange
-    * Correct handling of backgroundEnabled and lock()ing
-    * Added basic skin and image assets
-    * verifyOffset correction for background element moving in response to change event handler
-    * Target x,y rounded in response to FF (at least) producing subpixel coords
-    * _slideEnd now cleans state before firing slideEnd event
-
-2.5.2
-    * No change
-
-2.5.1
-    * No change
-
-2.5.0
-    * Slider onDrag now calls fireEvents, so bg mousedown, drag, mouseup fires change events
-    * Slider uses new dragOnly=true property added in dragdrop
-    * Introduced DualSlider
-
-2.4.0
-    * No change
-
-2.3.1
-
-   * getValue will return the last value or 0 rather than NaN if the control 
-     is display:none.
-
-   * The slider will not fire slideStart/change/slideEnd events during its
-     initial setup unless setValue was called prior to initialization.
-
-   * slideStart/slideEnd now fire consistently among the various methods of
-     changing the slider value (setValue, bg click, thumb drag).  A bg click
-     and drag continuation will result in two start/end events.
-
-   * Added a silent flag to setValue and setRegionValue to silence all of the
-     events during that operation.
-
-2.3.0
-   * Added valueChangeSource, which specifies whether the last value change
-     was the result of user interaction with the control, or a result of a
-     programmatic update (setValue)
-
-2.2.2
-   * No change
-
-2.2.1
-   * No change
-
-2.2.0
-   * Added the missing "force" parameter to the signature for setRegionValue
-   * Deprecated the moveComplete flag
-
-0.12.2
-   * No change
-
-0.12.1
-
-   * Removed unnecessary getXY calls that were contributing to slower performance
-     in FireFox when the slider was deeply nested in the DOM.
-
-0.12.0
-
-   * Added "slideStart", "slideEnd", and "change" custom events.  The abstract
-     methods these will eventually replace still work.
-
-   * The default animation duration is 0.2 seconds (reduced from 0.4 seconds),
-     and is configurable via the animationDuration property.
-
-   * Keyboard navigation is now built in.  The background needs a tabindex for
-     keyboard nav to work.  Keyboard nav can be disabled by setting enableKeys
-     to false.  The number of pixels the slider moves when the arrow keys
-     are pressed is controlled by keyIncrement, and defaults to 20.  Note, 
-     Safari support limited to background element types that support focus
-     in that browser. http://bugs.webkit.org/show_bug.cgi?id=7138
-
-   * Fixed broken doctype in examples/index.html
-
-   * Catching an unhandled script exception in FF that could occur when
-     attempting to focus the slider background while a text field without
-     autocomplete="false" has focus
-
-0.11.3
-
-   * No change
-
-0.11.0
-
-   * When the thumb is clicked and dragged, the click position delta is properly
-     applied.
-
-   * The slider background can be disabled by setting backgroundEnabled to false.
-
-   * Added SliderThumb->clearTicks
-
-   * Incorporated updated drag and drop performance improvements
-
-0.10.0
-
-   * Drag and drop's autoscroll feature is now turned off by default
-     in the slider.
-
-   * The slider no longer sets its initial value upon initialization
-
-   * RGB slider example fixed for IE7.
-
-   * Updated to work with the onAvailable feature in Drag and Drop.
-
-   * Updated the basic slider example page to make the control more
-     accessible to non-FF1.5 browsers.
-
-   * Split the examples into separate pages
-

Added: trunk/root/static/yui/slider/assets/skins/sam/bg-h.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/slider/assets/skins/sam/bg-h.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/root/static/yui/slider/assets/skins/sam/bg-v.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/slider/assets/skins/sam/bg-v.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/root/static/yui/slider/assets/skins/sam/slider-skin.css
===================================================================
--- trunk/root/static/yui/slider/assets/skins/sam/slider-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/assets/skins/sam/slider-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-skin-sam .yui-h-slider {
-    background: url(../../bg-h.gif) no-repeat 5px 0;
+    background: url(bg-h.gif) no-repeat 5px 0;
     height: 28px;
     width: 228px;
 }
@@ -14,7 +14,7 @@
 }
 
 .yui-skin-sam .yui-v-slider {
-    background: url(../../bg-v.gif) no-repeat 12px 0;
+    background: url(bg-v.gif) no-repeat 12px 0;
     height: 228px;
     width: 48px;
 }

Modified: trunk/root/static/yui/slider/assets/skins/sam/slider.css
===================================================================
--- trunk/root/static/yui/slider/assets/skins/sam/slider.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/assets/skins/sam/slider.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(../../bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(../../bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}
+.yui-h-slider,.yui-v-slider{position:relative;}.yui-h-slider .yui-slider-thumb,.yui-v-slider .yui-slider-thumb{position:absolute;cursor:default;}.yui-skin-sam .yui-h-slider{background:url(bg-h.gif) no-repeat 5px 0;height:28px;width:228px;}.yui-skin-sam .yui-h-slider .yui-slider-thumb{top:4px;}.yui-skin-sam .yui-v-slider{background:url(bg-v.gif) no-repeat 12px 0;height:228px;width:48px;}

Modified: trunk/root/static/yui/slider/assets/slider-core.css
===================================================================
--- trunk/root/static/yui/slider/assets/slider-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/assets/slider-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-h-slider,
 .yui-v-slider {

Added: trunk/root/static/yui/slider/assets/slider-skin.css
===================================================================
--- trunk/root/static/yui/slider/assets/slider-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/assets/slider-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,20 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+.yui-skin-sam .yui-h-slider {
+    background: url(bg-h.gif) no-repeat 5px 0;
+    height: 28px;
+    width: 228px;
+}
+.yui-skin-sam .yui-h-slider .yui-slider-thumb {
+    top: 4px;
+}
+
+.yui-skin-sam .yui-v-slider {
+    background: url(bg-v.gif) no-repeat 12px 0;
+    height: 228px;
+    width: 48px;
+}

Modified: trunk/root/static/yui/slider/slider-debug.js
===================================================================
--- trunk/root/static/yui/slider/slider-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/slider-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Slider component is a UI control that enables the user to adjust 
@@ -18,7 +18,12 @@
  * @requires  yahoo,dom,dragdrop,event
  * @optional  animation
  */
+ (function () {
 
+var getXY = YAHOO.util.Dom.getXY,
+    Event = YAHOO.util.Event,
+    _AS   = Array.prototype.slice;
+
 /**
  * A DragDrop implementation that can be used as a background for a
  * slider.  It takes a reference to the thumb instance 
@@ -35,89 +40,130 @@
  * @param {SliderThumb} oThumb The thumb for this slider
  * @param {String}      sType  The type of slider (horiz, vert, region)
  */
-YAHOO.widget.Slider = function(sElementId, sGroup, oThumb, sType) {
+function Slider(sElementId, sGroup, oThumb, sType) {
 
-    YAHOO.widget.Slider.ANIM_AVAIL = 
-        (!YAHOO.lang.isUndefined(YAHOO.util.Anim));
+    Slider.ANIM_AVAIL = (!YAHOO.lang.isUndefined(YAHOO.util.Anim));
 
     if (sElementId) {
         this.init(sElementId, sGroup, true);
         this.initSlider(sType);
         this.initThumb(oThumb);
     }
-};
+}
 
-/**
- * Factory method for creating a horizontal slider
- * @method YAHOO.widget.Slider.getHorizSlider
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iLeft the number of pixels the element can move left
- * @param {int} iRight the number of pixels the element can move right
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a horizontal slider control
- */
-YAHOO.widget.Slider.getHorizSlider = 
-    function (sBGElId, sHandleElId, iLeft, iRight, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 
-                               iLeft, iRight, 0, 0, iTickSize), "horiz");
-};
+YAHOO.lang.augmentObject(Slider,{
+    /**
+     * Factory method for creating a horizontal slider
+     * @method YAHOO.widget.Slider.getHorizSlider
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iLeft the number of pixels the element can move left
+     * @param {int} iRight the number of pixels the element can move right
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a horizontal slider control
+     */
+    getHorizSlider : 
+        function (sBGElId, sHandleElId, iLeft, iRight, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 
+                                   iLeft, iRight, 0, 0, iTickSize), "horiz");
+    },
 
-/**
- * Factory method for creating a vertical slider
- * @method YAHOO.widget.Slider.getVertSlider
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iUp the number of pixels the element can move up
- * @param {int} iDown the number of pixels the element can move down
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a vertical slider control
- */
-YAHOO.widget.Slider.getVertSlider = 
-    function (sBGElId, sHandleElId, iUp, iDown, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 0, 0, 
-                               iUp, iDown, iTickSize), "vert");
-};
+    /**
+     * Factory method for creating a vertical slider
+     * @method YAHOO.widget.Slider.getVertSlider
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iUp the number of pixels the element can move up
+     * @param {int} iDown the number of pixels the element can move down
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a vertical slider control
+     */
+    getVertSlider :
+        function (sBGElId, sHandleElId, iUp, iDown, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 0, 0, 
+                                   iUp, iDown, iTickSize), "vert");
+    },
 
-/**
- * Factory method for creating a slider region like the one in the color
- * picker example
- * @method YAHOO.widget.Slider.getSliderRegion
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iLeft the number of pixels the element can move left
- * @param {int} iRight the number of pixels the element can move right
- * @param {int} iUp the number of pixels the element can move up
- * @param {int} iDown the number of pixels the element can move down
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a slider region control
- */
-YAHOO.widget.Slider.getSliderRegion = 
-    function (sBGElId, sHandleElId, iLeft, iRight, iUp, iDown, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, iLeft, iRight, 
-                               iUp, iDown, iTickSize), "region");
-};
+    /**
+     * Factory method for creating a slider region like the one in the color
+     * picker example
+     * @method YAHOO.widget.Slider.getSliderRegion
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iLeft the number of pixels the element can move left
+     * @param {int} iRight the number of pixels the element can move right
+     * @param {int} iUp the number of pixels the element can move up
+     * @param {int} iDown the number of pixels the element can move down
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a slider region control
+     */
+    getSliderRegion : 
+        function (sBGElId, sHandleElId, iLeft, iRight, iUp, iDown, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, iLeft, iRight, 
+                                   iUp, iDown, iTickSize), "region");
+    },
 
-/**
- * By default, animation is available if the animation utility is detected.
- * @property YAHOO.widget.Slider.ANIM_AVAIL
- * @static
- * @type boolean
- */
-YAHOO.widget.Slider.ANIM_AVAIL = false;
+    /**
+     * Constant for valueChangeSource, indicating that the user clicked or
+     * dragged the slider to change the value.
+     * @property Slider.SOURCE_UI_EVENT
+     * @final
+     * @static
+     * @default 1
+     */
+    SOURCE_UI_EVENT : 1,
 
-YAHOO.extend(YAHOO.widget.Slider, YAHOO.util.DragDrop, {
+    /**
+     * Constant for valueChangeSource, indicating that the value was altered
+     * by a programmatic call to setValue/setRegionValue.
+     * @property Slider.SOURCE_SET_VALUE
+     * @final
+     * @static
+     * @default 2
+     */
+    SOURCE_SET_VALUE : 2,
 
     /**
+     * Constant for valueChangeSource, indicating that the value was altered
+     * by hitting any of the supported keyboard characters.
+     * @property Slider.SOURCE_KEY_EVENT
+     * @final
+     * @static
+     * @default 2
+     */
+    SOURCE_KEY_EVENT : 3,
+
+    /**
+     * By default, animation is available if the animation utility is detected.
+     * @property Slider.ANIM_AVAIL
+     * @static
+     * @type boolean
+     */
+    ANIM_AVAIL : false
+},true);
+
+YAHOO.extend(Slider, YAHOO.util.DragDrop, {
+
+    /**
+     * Tracks the state of the mouse button to aid in when events are fired.
+     *
+     * @property _mouseDown
+     * @type boolean
+     * @default false
+     * @private
+     */
+    _mouseDown : false,
+
+    /**
      * Override the default setting of dragOnly to true.
      * @property dragOnly
      * @type boolean
@@ -179,7 +225,7 @@
          * @property animate
          * @type boolean
          */
-        this.animate = YAHOO.widget.Slider.ANIM_AVAIL;
+        this.animate = Slider.ANIM_AVAIL;
 
         /**
          * Set to false to disable a background click thumb move
@@ -243,6 +289,7 @@
          * @property SOURCE_UI_EVENT
          * @final
          * @default 1
+         * @deprecated use static Slider.SOURCE_UI_EVENT
          */
         this.SOURCE_UI_EVENT = 1;
 
@@ -252,6 +299,7 @@
          * @property SOURCE_SET_VALUE
          * @final
          * @default 2
+         * @deprecated use static Slider.SOURCE_SET_VALUE
          */
         this.SOURCE_SET_VALUE = 2;
 
@@ -301,13 +349,9 @@
          * @type YAHOO.widget.SliderThumb
          */
         this.thumb = t;
+
         t.cacheBetweenDrags = true;
 
-        // add handler for the handle onchange event
-        //t.onChange = function() { 
-            //self.handleThumbChange(); 
-        //};
-
         if (t._isHoriz && t.xTicks && t.xTicks.length) {
             this.tickPause = Math.round(360 / t.xTicks.length);
         } else if (t.yTicks && t.yTicks.length) {
@@ -321,12 +365,16 @@
                 return self.setStartSliderState(); 
             };
         t.onMouseDown = function () { 
+                self._mouseDown = true;
+                self.logger.log('thumb mousedown');
                 return self.focus(); 
             };
         t.startDrag = function() { 
+                self.logger.log('thumb startDrag');
                 self._slideStart(); 
             };
         t.onDrag = function() { 
+                self.logger.log('thumb drag');
                 self.fireEvents(true); 
             };
         t.onMouseUp = function() { 
@@ -340,11 +388,20 @@
      * @method onAvailable
      */
     onAvailable: function() {
-        var Event = YAHOO.util.Event;
+        this._bindKeyEvents();
+    },
+ 
+    /**
+     * Sets up the listeners for keydown and key press events.
+     *
+     * @method _bindKeyEvents
+     * @protected
+     */
+    _bindKeyEvents : function () {
         Event.on(this.id, "keydown",  this.handleKeyDown,  this, true);
         Event.on(this.id, "keypress", this.handleKeyPress, this, true);
     },
- 
+
     /**
      * Executed when a keypress event happens with the control focused.
      * Prevents the default behavior for navigation keys.  The actual
@@ -354,8 +411,8 @@
      */
     handleKeyPress: function(e) {
         if (this.enableKeys) {
-            var Event = YAHOO.util.Event;
             var kc = Event.getCharCode(e);
+
             switch (kc) {
                 case 0x25: // left
                 case 0x26: // up
@@ -378,13 +435,12 @@
      */
     handleKeyDown: function(e) {
         if (this.enableKeys) {
-            var Event = YAHOO.util.Event;
+            var kc = Event.getCharCode(e),
+                t  = this.thumb,
+                h  = this.getXValue(),
+                v  = this.getYValue(),
+                changeValue = true;
 
-            var kc = Event.getCharCode(e), t=this.thumb;
-            var h=this.getXValue(),v=this.getYValue();
-
-            var horiz = false;
-            var changeValue = true;
             switch (kc) {
 
                 // left
@@ -414,10 +470,10 @@
 
             if (changeValue) {
                 if (t._isRegion) {
-                    this.setRegionValue(h, v, true);
+                    this._setRegionValue(Slider.SOURCE_KEY_EVENT, h, v, true);
                 } else {
-                    var newVal = (t._isHoriz) ? h : v;
-                    this.setValue(newVal, true);
+                    this._setValue(Slider.SOURCE_KEY_EVENT,
+                        (t._isHoriz ? h : v), true);
                 }
                 Event.stopEvent(e);
             }
@@ -442,20 +498,20 @@
          * @property baselinePos
          * @type [int, int]
          */
-        this.baselinePos = YAHOO.util.Dom.getXY(this.getEl());
+        this.baselinePos = getXY(this.getEl());
 
         this.thumb.startOffset = this.thumb.getOffsetFromParent(this.baselinePos);
 
         if (this.thumb._isRegion) {
             if (this.deferredSetRegionValue) {
-                this.setRegionValue.apply(this, this.deferredSetRegionValue);
+                this._setRegionValue.apply(this, this.deferredSetRegionValue);
                 this.deferredSetRegionValue = null;
             } else {
                 this.setRegionValue(0, 0, true, true, true);
             }
         } else {
             if (this.deferredSetValue) {
-                this.setValue.apply(this, this.deferredSetValue);
+                this._setValue.apply(this, this.deferredSetValue);
                 this.deferredSetValue = null;
             } else {
                 this.setValue(0, true, true, true);
@@ -513,6 +569,7 @@
      * @private
      */
     thumbMouseUp: function() {
+        this._mouseDown = false;
         this.logger.log("thumb mouseup");
         if (!this.isLocked() && !this.moveComplete) {
             this.endMove();
@@ -521,7 +578,8 @@
     },
 
     onMouseUp: function() {
-        this.logger.log("bg mouseup");
+        this._mouseDown = false;
+        this.logger.log("background mouseup");
         if (this.backgroundEnabled && !this.isLocked() && !this.moveComplete) {
             this.endMove();
         }
@@ -544,7 +602,7 @@
      */
     focus: function() {
         this.logger.log("focus");
-        this.valueChangeSource = this.SOURCE_UI_EVENT;
+        this.valueChangeSource = Slider.SOURCE_UI_EVENT;
 
         // Focus the background element if possible
         var el = this.getEl();
@@ -562,12 +620,7 @@
 
         this.verifyOffset();
 
-        if (this.isLocked()) {
-            return false;
-        } else {
-            this._slideStart();
-            return true;
-        }
+        return !this.isLocked();
     },
 
     /**
@@ -633,32 +686,29 @@
     },
 
     /**
-     * Internal handler for the slider thumb's onChange event
-     * @method handleThumbChange
-     * @private
+     * Provides a way to set the value of the slider in code.
+     *
+     * @method setValue
+     * @param {int} newOffset the number of pixels the thumb should be
+     * positioned away from the initial start point 
+     * @param {boolean} skipAnim set to true to disable the animation
+     * for this move action (but not others).
+     * @param {boolean} force ignore the locked setting and set value anyway
+     * @param {boolean} silent when true, do not fire events
+     * @return {boolean} true if the move was performed, false if it failed
      */
-    handleThumbChange: function () { 
-        /*
-        var t = this.thumb;
-        if (t._isRegion) {
-
-            if (!this._silent) {
-                t.onChange(t.getXValue(), t.getYValue());
-                this.fireEvent("change", { x: t.getXValue(), y: t.getYValue() } );
-            }
-        } else {
-            if (!this._silent) {
-                t.onChange(t.getValue());
-                this.fireEvent("change", t.getValue());
-            }
-        }
-        */
-
+    setValue: function() {
+        var args = _AS.call(arguments);
+        args.unshift(Slider.SOURCE_SET_VALUE);
+        return this._setValue.apply(this,args);
     },
 
     /**
-     * Provides a way to set the value of the slider in code.
-     * @method setValue
+     * Worker function to execute the value set operation.  Accepts type of
+     * set operation in addition to the usual setValue params.
+     *
+     * @method _setValue
+     * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
      * @param {int} newOffset the number of pixels the thumb should be
      * positioned away from the initial start point 
      * @param {boolean} skipAnim set to true to disable the animation
@@ -666,14 +716,12 @@
      * @param {boolean} force ignore the locked setting and set value anyway
      * @param {boolean} silent when true, do not fire events
      * @return {boolean} true if the move was performed, false if it failed
+     * @protected
      */
-    setValue: function(newOffset, skipAnim, force, silent) {
-        this.logger.log("setValue " + newOffset);
+    _setValue: function(source, newOffset, skipAnim, force, silent) {
+        var t = this.thumb, newX, newY;
 
-        this._silent = silent;
-        this.valueChangeSource = this.SOURCE_SET_VALUE;
-
-        if (!this.thumb.available) {
+        if (!t.available) {
             this.logger.log("defer setValue until after onAvailble");
             this.deferredSetValue = arguments;
             return false;
@@ -689,20 +737,25 @@
             return false;
         }
 
-        var t = this.thumb;
+        if (t._isRegion) {
+            this.logger.log("Call to setValue for region Slider ignored. Use setRegionValue","warn");
+            return false;
+        }
+
+        this.logger.log("setValue " + newOffset);
+
+        this._silent = silent;
+        this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
+
         t.lastOffset = [newOffset, newOffset];
-        var newX, newY;
         this.verifyOffset(true);
-        if (t._isRegion) {
-            return false;
-        } else if (t._isHoriz) {
-            this._slideStart();
-            // this.fireEvent("slideStart");
+
+        this._slideStart();
+
+        if (t._isHoriz) {
             newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
             this.moveThumb(newX, t.initPageY, skipAnim);
         } else {
-            this._slideStart();
-            // this.fireEvent("slideStart");
             newY = t.initPageY + newOffset + this.thumbCenterPoint.y;
             this.moveThumb(t.initPageX, newY, skipAnim);
         }
@@ -723,13 +776,33 @@
      * @param {boolean} silent when true, do not fire events
      * @return {boolean} true if the move was performed, false if it failed
      */
-    setRegionValue: function(newOffset, newOffset2, skipAnim, force, silent) {
+    setRegionValue : function () {
+        var args = _AS.call(arguments);
+        args.unshift(Slider.SOURCE_SET_VALUE);
+        return this._setRegionValue.apply(this,args);
+    },
 
-        this._silent = silent;
+    /**
+     * Worker function to execute the value set operation.  Accepts type of
+     * set operation in addition to the usual setValue params.
+     *
+     * @method _setRegionValue
+     * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
+     * @param {int} newOffset the number of pixels the thumb should be
+     * positioned away from the initial start point (x axis for region)
+     * @param {int} newOffset2 the number of pixels the thumb should be
+     * positioned away from the initial start point (y axis for region)
+     * @param {boolean} skipAnim set to true to disable the animation
+     * for this move action (but not others).
+     * @param {boolean} force ignore the locked setting and set value anyway
+     * @param {boolean} silent when true, do not fire events
+     * @return {boolean} true if the move was performed, false if it failed
+     * @protected
+     */
+    _setRegionValue: function(source, newOffset, newOffset2, skipAnim, force, silent) {
+        var t = this.thumb, newX, newY;
 
-        this.valueChangeSource = this.SOURCE_SET_VALUE;
-
-        if (!this.thumb.available) {
+        if (!t.available) {
             this.logger.log("defer setRegionValue until after onAvailble");
             this.deferredSetRegionValue = arguments;
             return false;
@@ -745,19 +818,25 @@
             return false;
         }
 
-        var t = this.thumb;
+        if (!t._isRegion) {
+            this.logger.log("Call to setRegionValue for non-region Slider ignored. Use setValue","warn");
+            return false;
+        }
+
+        this._silent = silent;
+
+        this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
+
         t.lastOffset = [newOffset, newOffset2];
         this.verifyOffset(true);
-        if (t._isRegion) {
-            this._slideStart();
-            var newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
-            var newY = t.initPageY + newOffset2 + this.thumbCenterPoint.y;
-            this.moveThumb(newX, newY, skipAnim);
-            return true;
-        }
 
-        return false;
+        this._slideStart();
 
+        newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
+        newY = t.initPageY + newOffset2 + this.thumbCenterPoint.y;
+        this.moveThumb(newX, newY, skipAnim);
+
+        return true;
     },
 
     /**
@@ -769,9 +848,13 @@
      */
     verifyOffset: function(checkPos) {
 
-        var xy = YAHOO.util.Dom.getXY(this.getEl()),
+        var xy = getXY(this.getEl()),
             t  = this.thumb;
 
+        if (!this.thumbCenterPoint || !this.thumbCenterPoint.x) {
+            this.setThumbCenterPoint();
+        }
+
         if (xy) {
 
             this.logger.log("newPos: " + xy);
@@ -786,9 +869,7 @@
                 // Reset thumb
                 t.initPageX = this.initPageX + t.startOffset[0];
                 t.initPageY = this.initPageY + t.startOffset[1];
-                //t.deltaSetXY = [-this.initPageX,-this.initPageY];
                 t.deltaSetXY = null;
-                //this.resetConstraints();
                 this.resetThumbConstraints();
 
                 return false;
@@ -812,8 +893,9 @@
      */
     moveThumb: function(x, y, skipAnim, midMove) {
 
-        var t = this.thumb;
-        var self = this;
+        var t = this.thumb,
+            self = this,
+            p,_p,anim;
 
         if (!t.available) {
             this.logger.log("thumb is not available yet, aborting move");
@@ -824,42 +906,41 @@
 
         t.setDelta(this.thumbCenterPoint.x, this.thumbCenterPoint.y);
 
-        var _p = t.getTargetCoord(x, y);
-        var p = [Math.round(_p.x), Math.round(_p.y)];
+        _p = t.getTargetCoord(x, y);
+        p = [Math.round(_p.x), Math.round(_p.y)];
 
-        this._slideStart();
-
-        if (this.animate && YAHOO.widget.Slider.ANIM_AVAIL && t._graduated && !skipAnim) {
+        if (this.animate && t._graduated && !skipAnim) {
             this.logger.log("graduated");
-            // this.thumb._animating = true;
             this.lock();
 
             // cache the current thumb pos
-            this.curCoord = YAHOO.util.Dom.getXY(this.thumb.getEl());
+            this.curCoord = getXY(this.thumb.getEl());
             this.curCoord = [Math.round(this.curCoord[0]), Math.round(this.curCoord[1])];
 
             setTimeout( function() { self.moveOneTick(p); }, this.tickPause );
 
-        } else if (this.animate && YAHOO.widget.Slider.ANIM_AVAIL && !skipAnim) {
+        } else if (this.animate && Slider.ANIM_AVAIL && !skipAnim) {
             this.logger.log("animating to " + p);
 
-            // this.thumb._animating = true;
             this.lock();
 
-            var oAnim = new YAHOO.util.Motion( 
+            anim = new YAHOO.util.Motion( 
                     t.id, { points: { to: p } }, 
                     this.animationDuration, 
                     YAHOO.util.Easing.easeOut );
 
-            oAnim.onComplete.subscribe( function() { 
-                    
-                    self.endMove(); 
-                } );
-            oAnim.animate();
+            anim.onComplete.subscribe( function() { 
+                    self.logger.log("Animation completed _mouseDown:" + self._mouseDown);
+                    self.unlock();
+                    if (!self._mouseDown) {
+                        self.endMove(); 
+                    }
+                });
+            anim.animate();
+
         } else {
             t.setDragElPos(x, y);
-            // this.fireEvents();
-            if (!midMove) {
+            if (!midMove && !this._mouseDown) {
                 this.endMove();
             }
         }
@@ -876,7 +957,6 @@
     },
 
     _slideEnd: function() {
-
         if (this._sliding && this.moveComplete) {
             // Reset state before firing slideEnd
             var silent = this._silent;
@@ -899,21 +979,9 @@
      */
     moveOneTick: function(finalCoord) {
 
-        var t = this.thumb, tmp;
-
-
-        // redundant call to getXY since we set the position most of time prior 
-        // to getting here.  Moved to this.curCoord
-        //var curCoord = YAHOO.util.Dom.getXY(t.getEl());
-
-        // alignElWithMouse caches position in lastPageX, lastPageY .. doesn't work
-        //var curCoord = [this.lastPageX, this.lastPageY];
-
-        // var thresh = Math.min(t.tickSize + (Math.floor(t.tickSize/2)), 10);
-        // var thresh = 10;
-        // var thresh = t.tickSize + (Math.floor(t.tickSize/2));
-
-        var nextCoord = null,
+        var t = this.thumb,
+            self = this,
+            nextCoord = null,
             tmpX, tmpY;
 
         if (t._isRegion) {
@@ -941,27 +1009,24 @@
             this.curCoord = nextCoord;
 
             // move to the next coord
-            // YAHOO.util.Dom.setXY(t.getEl(), nextCoord);
-
-            // var el = t.getEl();
-            // YAHOO.util.Dom.setStyle(el, "left", (nextCoord[0] + this.thumb.deltaSetXY[0]) + "px");
-            // YAHOO.util.Dom.setStyle(el, "top",  (nextCoord[1] + this.thumb.deltaSetXY[1]) + "px");
-
             this.thumb.alignElWithMouse(t.getEl(), nextCoord[0] + this.thumbCenterPoint.x, nextCoord[1] + this.thumbCenterPoint.y);
             
             // check if we are in the final position, if not make a recursive call
             if (!(nextCoord[0] == finalCoord[0] && nextCoord[1] == finalCoord[1])) {
-                var self = this;
                 setTimeout(function() { self.moveOneTick(finalCoord); }, 
                         this.tickPause);
             } else {
+                this.unlock();
+                if (!this._mouseDown) {
+                    this.endMove();
+                }
+            }
+        } else {
+            this.unlock();
+            if (!this._mouseDown) {
                 this.endMove();
             }
-        } else {
-            this.endMove();
         }
-
-        //this.tickPause = Math.round(this.tickPause/2);
     },
 
     /**
@@ -971,10 +1036,11 @@
      */
     _getNextX: function(curCoord, finalCoord) {
         this.logger.log("getNextX: " + curCoord + ", " + finalCoord);
-        var t = this.thumb;
-        var thresh;
-        var tmp = [];
-        var nextCoord = null;
+        var t = this.thumb,
+            thresh,
+            tmp = [],
+            nextCoord = null;
+
         if (curCoord[0] > finalCoord[0]) {
             thresh = t.tickSize - this.thumbCenterPoint.x;
             tmp = t.getTargetCoord( curCoord[0] - thresh, curCoord[1] );
@@ -996,10 +1062,10 @@
      * @private
      */
     _getNextY: function(curCoord, finalCoord) {
-        var t = this.thumb;
-        var thresh;
-        var tmp = [];
-        var nextCoord = null;
+        var t = this.thumb,
+            thresh,
+            tmp = [],
+            nextCoord = null;
 
         if (curCoord[1] > finalCoord[1]) {
             thresh = t.tickSize - this.thumbCenterPoint.y;
@@ -1027,7 +1093,6 @@
         }
 
         this.thumb.autoOffset();
-        //this.thumb.resetConstraints();
         this.resetThumbConstraints();
     },
 
@@ -1037,18 +1102,19 @@
      * @private
      */
     onMouseDown: function(e) {
-        // this.resetConstraints(true);
-        // this.thumb.resetConstraints(true);
-
         if (!this.backgroundEnabled || this.isLocked()) {
             return false;
         }
 
-        var x = YAHOO.util.Event.getPageX(e);
-        var y = YAHOO.util.Event.getPageY(e);
+        this._mouseDown = true;
+
+        var x = Event.getPageX(e),
+            y = Event.getPageY(e);
+
         this.logger.log("bg mousedown: " + x + "," + y);
 
         this.focus();
+        this._slideStart();
         this.moveThumb(x, y);
     },
 
@@ -1058,9 +1124,10 @@
      * @private
      */
     onDrag: function(e) {
+        this.logger.log("background drag");
         if (this.backgroundEnabled && !this.isLocked()) {
-            var x = YAHOO.util.Event.getPageX(e);
-            var y = YAHOO.util.Event.getPageY(e);
+            var x = Event.getPageX(e),
+                y = Event.getPageY(e);
             this.moveThumb(x, y, true, true);
             this.fireEvents();
         }
@@ -1072,10 +1139,11 @@
      * @private
      */
     endMove: function () {
-        // this._animating = false;
+        this.logger.log("endMove");
         this.unlock();
+        this.fireEvents();
         this.moveComplete = true;
-        this.fireEvents();
+        this._slideEnd();
     },
 
     /**
@@ -1106,8 +1174,7 @@
      */
     fireEvents: function (thumbEvent) {
 
-        var t = this.thumb;
-        // this.logger.log("FireEvents: " + t._isRegion);
+        var t = this.thumb, newX, newY, newVal;
 
         if (!thumbEvent) {
             t.cachePosition();
@@ -1115,12 +1182,10 @@
 
         if (! this.isLocked()) {
             if (t._isRegion) {
-                this.logger.log("region");
-                var newX = t.getXValue();
-                var newY = t.getYValue();
+                newX = t.getXValue();
+                newY = t.getYValue();
 
                 if (newX != this.previousX || newY != this.previousY) {
-                    // this.logger.log("Firing onchange");
                     if (!this._silent) {
                         this.onChange(newX, newY);
                         this.fireEvent("change", { x: newX, y: newY });
@@ -1131,7 +1196,7 @@
                 this.previousY = newY;
 
             } else {
-                var newVal = t.getValue();
+                newVal = t.getValue();
                 if (newVal != this.previousVal) {
                     this.logger.log("Firing onchange: " + newVal);
                     if (!this._silent) {
@@ -1142,8 +1207,6 @@
                 this.previousVal = newVal;
             }
 
-            this._slideEnd();
-
         }
     },
 
@@ -1158,8 +1221,10 @@
 
 });
 
-YAHOO.augment(YAHOO.widget.Slider, YAHOO.util.EventProvider);
+YAHOO.lang.augmentProto(Slider, YAHOO.util.EventProvider);
 
+YAHOO.widget.Slider = Slider;
+})();
 /**
  * A drag and drop implementation to be used as the thumb of a slider.
  * @class SliderThumb
@@ -1177,7 +1242,6 @@
 YAHOO.widget.SliderThumb = function(id, sGroup, iLeft, iRight, iUp, iDown, iTickSize) {
 
     if (id) {
-        //this.init(id, sGroup);
         YAHOO.widget.SliderThumb.superclass.constructor.call(this, id, sGroup);
 
         /**
@@ -1190,8 +1254,6 @@
     }
 
 
-    //this.removeInvalidHandleType("A");
-
     this.logger = new YAHOO.widget.LogWriter(this.toString());
 
     /**
@@ -1280,28 +1342,29 @@
      * @type [int, int]
      */
     getOffsetFromParent0: function(parentPos) {
-        var myPos = YAHOO.util.Dom.getXY(this.getEl());
-        var ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
+        var myPos = YAHOO.util.Dom.getXY(this.getEl()),
+            ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
 
         return [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
     },
 
     getOffsetFromParent: function(parentPos) {
 
-        var el = this.getEl(), newOffset;
+        var el = this.getEl(), newOffset,
+            myPos,ppos,l,t,deltaX,deltaY,newLeft,newTop;
 
         if (!this.deltaOffset) {
 
-            var myPos = YAHOO.util.Dom.getXY(el);
-            var ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
+            myPos = YAHOO.util.Dom.getXY(el);
+            ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
 
             newOffset = [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
 
-            var l = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
-            var t = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+            l = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            t = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
 
-            var deltaX = l - newOffset[0];
-            var deltaY = t - newOffset[1];
+            deltaX = l - newOffset[0];
+            deltaY = t - newOffset[1];
 
             if (isNaN(deltaX) || isNaN(deltaY)) {
                 this.logger.log("element does not have a position style def yet");
@@ -1310,15 +1373,13 @@
             }
 
         } else {
-            var newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
-            var newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+            newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
 
             newOffset  = [newLeft + this.deltaOffset[0], newTop + this.deltaOffset[1]];
         }
 
         return newOffset;
-
-        //return [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
     },
 
     /**
@@ -1331,9 +1392,6 @@
      * @param {int} iTickSize the width of the tick interval.
      */
     initSlider: function (iLeft, iRight, iUp, iDown, iTickSize) {
-
-
-        //document these.  new for 0.12.1
         this.initLeft = iLeft;
         this.initRight = iRight;
         this.initUp = iUp;
@@ -1372,7 +1430,6 @@
      */
     getValue: function () {
         return (this._isHoriz) ? this.getXValue() : this.getYValue();
-        //this.logger.log("getVal: " + val);
     },
 
     /**
@@ -1438,7 +1495,6 @@
     }
 
 });
-
 /**
  * A slider with two thumbs, one that represents the min value and 
  * the other the max.  Actually a composition of two sliders, both with
@@ -1458,11 +1514,17 @@
  * @param {int}    range The number of pixels the thumbs may move within
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  */
-YAHOO.widget.DualSlider = function(minSlider, maxSlider, range, initVals) {
+(function () {
 
-    var self = this,
-        lang = YAHOO.lang;
+var Event = YAHOO.util.Event,
+    YW = YAHOO.widget;
 
+function DualSlider(minSlider, maxSlider, range, initVals) {
+
+    var self  = this,
+        ready = { min : false, max : false },
+        minThumbOnMouseDown, maxThumbOnMouseDown;
+
     /**
      * A slider instance that keeps track of the lower value of the range.
      * <strong>read only</strong>
@@ -1494,24 +1556,22 @@
      */
     this.isHoriz = minSlider.thumb._isHoriz;
 
-    // Validate initial values
-    initVals = YAHOO.lang.isArray(initVals) ? initVals : [0,range];
-    initVals[0] = Math.min(Math.max(parseInt(initVals[0],10)|0,0),range);
-    initVals[1] = Math.max(Math.min(parseInt(initVals[1],10)|0,range),0);
-    // Swap initVals if min > max
-    if (initVals[0] > initVals[1]) {
-        initVals.splice(0,2,initVals[1],initVals[0]);
-    }
+    //FIXME: this is horrible
+    minThumbOnMouseDown = this.minSlider.thumb.onMouseDown;
+    maxThumbOnMouseDown = this.maxSlider.thumb.onMouseDown;
+    this.minSlider.thumb.onMouseDown = function() {
+        self.activeSlider = self.minSlider;
+        minThumbOnMouseDown.apply(this,arguments);
+    };
+    this.maxSlider.thumb.onMouseDown = function () {
+        self.activeSlider = self.maxSlider;
+        maxThumbOnMouseDown.apply(this,arguments);
+    };
 
-    var ready = { min : false, max : false };
-
     this.minSlider.thumb.onAvailable = function () {
         minSlider.setStartSliderState();
         ready.min = true;
         if (ready.max) {
-            minSlider.setValue(initVals[0],true,true,true);
-            maxSlider.setValue(initVals[1],true,true,true);
-            self.updateValue(true);
             self.fireEvent('ready',self);
         }
     };
@@ -1519,29 +1579,16 @@
         maxSlider.setStartSliderState();
         ready.max = true;
         if (ready.min) {
-            minSlider.setValue(initVals[0],true,true,true);
-            maxSlider.setValue(initVals[1],true,true,true);
-            self.updateValue(true);
             self.fireEvent('ready',self);
         }
     };
 
     // dispatch mousedowns to the active slider
-    minSlider.onMouseDown = function(e) {
-        return self._handleMouseDown(e);
+    minSlider.onMouseDown =
+    maxSlider.onMouseDown = function(e) {
+        return this.backgroundEnabled && self._handleMouseDown(e);
     };
 
-    // we can safely ignore a mousedown on one of the sliders since
-    // they share a background
-    maxSlider.onMouseDown = function(e) { 
-        if (self.minSlider.isLocked() && !self.minSlider._sliding) {
-            return self._handleMouseDown(e);
-        } else {
-            YAHOO.util.Event.stopEvent(e); 
-            return false;
-        }
-    };
-
     // Fix the drag behavior so that only the active slider
     // follows the drag
     minSlider.onDrag =
@@ -1549,6 +1596,20 @@
         self._handleDrag(e);
     };
 
+    // Likely only the minSlider's onMouseUp will be executed, but both are
+    // overridden just to be safe
+    minSlider.onMouseUp =
+    maxSlider.onMouseUp = function (e) {
+        self._handleMouseUp(e);
+    };
+
+    // Replace the _bindKeyEvents for the minSlider and remove that for the
+    // maxSlider since they share the same bg element.
+    minSlider._bindKeyEvents = function () {
+        self._bindKeyEvents(this);
+    };
+    maxSlider._bindKeyEvents = function () {};
+
     // The core events for each slider are handled so we can expose a single
     // event for when the event happens on either slider
     minSlider.subscribe("change", this._handleMinChange, minSlider, this);
@@ -1586,10 +1647,28 @@
      * @param {Slider} activeSlider the moving slider
      */
     this.createEvent("slideEnd", this);
-};
 
-YAHOO.widget.DualSlider.prototype = {
+    // Validate initial values
+    initVals = YAHOO.lang.isArray(initVals) ? initVals : [0,range];
+    initVals[0] = Math.min(Math.max(parseInt(initVals[0],10)|0,0),range);
+    initVals[1] = Math.max(Math.min(parseInt(initVals[1],10)|0,range),0);
+    // Swap initVals if min > max
+    if (initVals[0] > initVals[1]) {
+        initVals.splice(0,2,initVals[1],initVals[0]);
+    }
+    this.minVal = initVals[0];
+    this.maxVal = initVals[1];
 
+    // Set values so initial assignment when the slider thumbs are ready will
+    // use these values
+    this.minSlider.setValue(this.minVal,true,true,true);
+    this.maxSlider.setValue(this.maxVal,true,true,true);
+
+    YAHOO.log("Setting initial values " + this.minVal + ", " + this.maxVal,"info","DualSlider");
+}
+
+DualSlider.prototype = {
+
     /**
      * The current value of the min thumb. <strong>read only</strong>.
      * @property minVal
@@ -1636,7 +1715,7 @@
      * @private
      */
     _handleDrag: function(e) {
-        YAHOO.widget.Slider.prototype.onDrag.call(this.activeSlider, e);
+        YW.Slider.prototype.onDrag.call(this.activeSlider, e);
     },
 
     /**
@@ -1660,6 +1739,39 @@
     },
 
     /**
+     * Set up the listeners for the keydown and keypress events.
+     *
+     * @method _bindKeyEvents
+     * @protected
+     */
+    _bindKeyEvents : function (slider) {
+        Event.on(slider.id,'keydown', this._handleKeyDown, this,true);
+        Event.on(slider.id,'keypress',this._handleKeyPress,this,true);
+    },
+
+    /**
+     * Delegate event handling to the active Slider.  See Slider.handleKeyDown.
+     *
+     * @method _handleKeyDown
+     * @param e {Event} the mousedown DOM event
+     * @protected
+     */
+    _handleKeyDown : function (e) {
+        this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);
+    },
+
+    /**
+     * Delegate event handling to the active Slider.  See Slider.handleKeyPress.
+     *
+     * @method _handleKeyPress
+     * @param e {Event} the mousedown DOM event
+     * @protected
+     */
+    _handleKeyPress : function (e) {
+        this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);
+    },
+
+    /**
      * Sets the min and max thumbs to new values.
      * @method setValues
      * @param min {int} Pixel offset to assign to the min thumb
@@ -1735,13 +1847,14 @@
      * events.  Default false
      */
     setMinValue : function (min, skipAnim, force, silent) {
-        var mins = this.minSlider;
+        var mins = this.minSlider,
+            self = this;
 
         this.activeSlider = mins;
 
         // Use a one-time event callback to delay the updateValue call
         // until after the slide operation is done
-        var self = this;
+        self = this;
         this._oneTimeCallback(mins,'slideEnd',function () {
             self.updateValue(silent);
             // Clean the slideEnd event on a timeout since this
@@ -1749,7 +1862,7 @@
             setTimeout(function () { self._cleanEvent(mins,'slideEnd'); }, 0);
         });
 
-        mins.setValue(min, skipAnim, force, silent);
+        mins.setValue(min, skipAnim, force);
     },
 
     /**
@@ -1764,13 +1877,13 @@
      * events.  Default false
      */
     setMaxValue : function (max, skipAnim, force, silent) {
-        var maxs = this.maxSlider;
+        var maxs = this.maxSlider,
+            self = this;
 
         this.activeSlider = maxs;
 
         // Use a one-time event callback to delay the updateValue call
         // until after the slide operation is done
-        var self = this;
         this._oneTimeCallback(maxs,'slideEnd',function () {
             self.updateValue(silent);
             // Clean the slideEnd event on a timeout since this
@@ -1778,7 +1891,7 @@
             setTimeout(function () { self._cleanEvent(maxs,'slideEnd'); }, 0);
         });
 
-        maxs.setValue(max, skipAnim, force, silent);
+        maxs.setValue(max, skipAnim, force);
     },
 
     /**
@@ -1791,23 +1904,24 @@
     updateValue: function(silent) {
         var min     = this.minSlider.getValue(),
             max     = this.maxSlider.getValue(),
-            changed = false;
+            changed = false,
+            mint,maxt,dim,minConstraint,maxConstraint,thumbInnerWidth;
 
         if (min != this.minVal || max != this.maxVal) {
             changed = true;
 
-            var mint = this.minSlider.thumb,
-                maxt = this.maxSlider.thumb,
-                dim  = this.isHoriz ? 'x' : 'y';
+            mint = this.minSlider.thumb;
+            maxt = this.maxSlider.thumb;
+            dim  = this.isHoriz ? 'x' : 'y';
 
-            var thumbInnerWidth = this.minSlider.thumbCenterPoint[dim] +
-                                  this.maxSlider.thumbCenterPoint[dim];
+            thumbInnerWidth = this.minSlider.thumbCenterPoint[dim] +
+                              this.maxSlider.thumbCenterPoint[dim];
 
             // Establish barriers within the respective other thumb's edge, less
             // the minRange.  Limit to the Slider's range in the case of
             // negative minRanges.
-            var minConstraint = Math.max(max-thumbInnerWidth-this.minRange,0);
-            var maxConstraint = Math.min(-min-thumbInnerWidth-this.minRange,0);
+            minConstraint = Math.max(max-thumbInnerWidth-this.minRange,0);
+            maxConstraint = Math.min(-min-thumbInnerWidth-this.minRange,0);
 
             if (this.isHoriz) {
                 minConstraint = Math.min(minConstraint,maxt.rightConstraint);
@@ -1841,8 +1955,8 @@
     selectActiveSlider: function(e) {
         var min = this.minSlider,
             max = this.maxSlider,
-            minLocked = min.isLocked(),
-            maxLocked = max.isLocked(),
+            minLocked = min.isLocked() || !min.backgroundEnabled,
+            maxLocked = max.isLocked() || !min.backgroundEnabled,
             Ev  = YAHOO.util.Event,
             d;
 
@@ -1860,16 +1974,35 @@
     },
 
     /**
-     * Overrides the onMouseDown for both slider, only moving the active slider
-     * @method handleMouseDown
-     * @private
+     * Delegates the onMouseDown to the appropriate Slider
+     *
+     * @method _handleMouseDown
+     * @param e {Event} mouseup event
+     * @protected
      */
     _handleMouseDown: function(e) {
-        this.selectActiveSlider(e);
-        YAHOO.widget.Slider.prototype.onMouseDown.call(this.activeSlider, e);
+        if (!e._handled) {
+            e._handled = true;
+            this.selectActiveSlider(e);
+            return YW.Slider.prototype.onMouseDown.call(this.activeSlider, e);
+        } else {
+            return false;
+        }
     },
 
     /**
+     * Delegates the onMouseUp to the active Slider
+     *
+     * @method _handleMouseUp
+     * @param e {Event} mouseup event
+     * @protected
+     */
+    _handleMouseUp : function (e) {
+        YW.Slider.prototype.onMouseUp.apply(
+            this.activeSlider, arguments);
+    },
+
+    /**
      * Schedule an event callback that will execute once, then unsubscribe
      * itself.
      * @method _oneTimeCallback
@@ -1897,8 +2030,9 @@
      * @private
      */
     _cleanEvent : function (o,evt) {
+        var ce,i,len,j,subs,newSubs;
+
         if (o.__yui_events && o.events[evt]) {
-            var ce, i, len;
             for (i = o.__yui_events.length; i >= 0; --i) {
                 if (o.__yui_events[i].type === evt) {
                     ce = o.__yui_events[i];
@@ -1906,9 +2040,9 @@
                 }
             }
             if (ce) {
-                var subs    = ce.subscribers,
-                    newSubs = [],
-                    j = 0;
+                subs    = ce.subscribers;
+                newSubs = [];
+                j = 0;
                 for (i = 0, len = subs.length; i < len; ++i) {
                     if (subs[i]) {
                         newSubs[j++] = subs[i];
@@ -1921,7 +2055,7 @@
 
 };
 
-YAHOO.augment(YAHOO.widget.DualSlider, YAHOO.util.EventProvider);
+YAHOO.lang.augmentProto(DualSlider, YAHOO.util.EventProvider);
 
 
 /**
@@ -1938,15 +2072,15 @@
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  * @return {DualSlider} a horizontal dual-thumb slider control
  */
-YAHOO.widget.Slider.getHorizDualSlider = 
+YW.Slider.getHorizDualSlider = 
     function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
-        var mint, maxt;
-        var YW = YAHOO.widget, Slider = YW.Slider, Thumb = YW.SliderThumb;
+        var mint = new YW.SliderThumb(minthumb, bg, 0, range, 0, 0, iTickSize),
+            maxt = new YW.SliderThumb(maxthumb, bg, 0, range, 0, 0, iTickSize);
 
-        mint = new Thumb(minthumb, bg, 0, range, 0, 0, iTickSize);
-        maxt = new Thumb(maxthumb, bg, 0, range, 0, 0, iTickSize);
-
-        return new YW.DualSlider(new Slider(bg, bg, mint, "horiz"), new Slider(bg, bg, maxt, "horiz"), range, initVals);
+        return new DualSlider(
+                    new YW.Slider(bg, bg, mint, "horiz"),
+                    new YW.Slider(bg, bg, maxt, "horiz"),
+                    range, initVals);
 };
 
 /**
@@ -1963,14 +2097,18 @@
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  * @return {DualSlider} a vertical dual-thumb slider control
  */
-YAHOO.widget.Slider.getVertDualSlider = 
+YW.Slider.getVertDualSlider = 
     function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
-        var mint, maxt;
-        var YW = YAHOO.widget, Slider = YW.Slider, Thumb = YW.SliderThumb;
+        var mint = new YW.SliderThumb(minthumb, bg, 0, 0, 0, range, iTickSize),
+            maxt = new YW.SliderThumb(maxthumb, bg, 0, 0, 0, range, iTickSize);
 
-        mint = new Thumb(minthumb, bg, 0, 0, 0, range, iTickSize);
-        maxt = new Thumb(maxthumb, bg, 0, 0, 0, range, iTickSize);
+        return new YW.DualSlider(
+                    new YW.Slider(bg, bg, mint, "vert"),
+                    new YW.Slider(bg, bg, maxt, "vert"),
+                    range, initVals);
+};
 
-        return new YW.DualSlider(new Slider(bg, bg, mint, "vert"), new Slider(bg, bg, maxt, "vert"), range, initVals);
-};
-YAHOO.register("slider", YAHOO.widget.Slider, {version: "2.6.0", build: "1321"});
+YAHOO.widget.DualSlider = DualSlider;
+
+})();
+YAHOO.register("slider", YAHOO.widget.Slider, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/slider/slider-min.js
===================================================================
--- trunk/root/static/yui/slider/slider-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/slider-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,9 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.widget.Slider=function(C,A,B,D){YAHOO.widget.Slider.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(C){this.init(C,A,true);this.initSlider(D);this.initThumb(B);}};YAHOO.widget.Slider.getHorizSlider=function(B,C,E,D,A){return new YAHOO.widget.Slider(B,B,new YAHOO.widget.SliderThumb(C,B,E,D,0,0,A),"horiz");};YAHOO.widget.Slider.getVertSlider=function(C,D,A,E,B){return new YAHOO.widget.Slider(C,C,new YAHOO.widget.SliderThumb(D,C,0,0,A,E,B),"vert");};YAHOO.widget.Slider.getSliderRegion=function(C,D,F,E,A,G,B){return new YAHOO.widget.Slider(C,C,new YAHOO.widget.SliderThumb(D,C,F,E,A,G,B),"region");};YAHOO.widget.Slider.ANIM_AVAIL=false;YAHOO.extend(YAHOO.widget.Slider,YAHOO.util.DragDrop,{dragOnly:true,initSlider:function(A){this.type=A;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=YAHOO.widget.Slider.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=tru!
 e;this.keyIncrement=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(B){var A=this;this.thumb=B;B.cacheBetweenDrags=true;if(B._isHoriz&&B.xTicks&&B.xTicks.length){this.tickPause=Math.round(360/B.xTicks.length);}else{if(B.yTicks&&B.yTicks.length){this.tickPause=Math.round(360/B.yTicks.length);}}B.onAvailable=function(){return A.setStartSliderState();};B.onMouseDown=function(){return A.focus();};B.startDrag=function(){A._slideStart();};B.onDrag=function(){A.fireEvents(true);};B.onMouseUp=function(){A.thumbMouseUp();};},onAvailable:function(){var A=YAHOO.util.Event;A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(C){if(this.enableKeys){var A=YAHOO.util.Event;var B=A.getCharCode(C);switch(B){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefault(C);!
 break;default:}}},handleKeyDown:function(E){if(this.enableKeys!
 ){var G=
YAHOO.util.Event;var C=G.getCharCode(E),I=this.thumb;var B=this.getXValue(),F=this.getYValue();var H=false;var D=true;switch(C){case 37:B-=this.keyIncrement;break;case 38:F-=this.keyIncrement;break;case 39:B+=this.keyIncrement;break;case 40:F+=this.keyIncrement;break;case 36:B=I.leftConstraint;F=I.topConstraint;break;case 35:B=I.rightConstraint;F=I.bottomConstraint;break;default:D=false;}if(D){if(I._isRegion){this.setRegionValue(B,F,true);}else{var A=(I._isHoriz)?B:F;this.setValue(A,true);}G.stopEvent(E);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=YAHOO.util.Dom.getXY(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this.setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this.setValue.apply(this,this.deferredSetValue);this.deferredSet!
 Value=null;}else{this.setValue(0,true,true,true);}}},setThumbCenterPoint:function(){var A=this.thumb.getEl();if(A){this.thumbCenterPoint={x:parseInt(A.offsetWidth/2,10),y:parseInt(A.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=this.SOURCE_UI_EVENT;var A=this.getEl();if(A.focus){try{A.focus();}catch(B){}}this.verifyOffset();if(this.isLocked()){return false;}else{this._slideStart();return true;}},onChange:function(A,B){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},ha!
 ndleThumbChange:function(){},setValue:function(G,C,D,A){this._!
 silent=A
;this.valueChangeSource=this.SOURCE_SET_VALUE;if(!this.thumb.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!D){return false;}if(isNaN(G)){return false;}var B=this.thumb;B.lastOffset=[G,G];var F,E;this.verifyOffset(true);if(B._isRegion){return false;}else{if(B._isHoriz){this._slideStart();F=B.initPageX+G+this.thumbCenterPoint.x;this.moveThumb(F,B.initPageY,C);}else{this._slideStart();E=B.initPageY+G+this.thumbCenterPoint.y;this.moveThumb(B.initPageX,E,C);}}return true;},setRegionValue:function(H,A,D,E,B){this._silent=B;this.valueChangeSource=this.SOURCE_SET_VALUE;if(!this.thumb.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!E){return false;}if(isNaN(H)){return false;}var C=this.thumb;C.lastOffset=[H,A];this.verifyOffset(true);if(C._isRegion){this._slideStart();var G=C.initPageX+H+this.thumbCenterPoint.x;var F=C.initPageY+A+this.thumbCenterPoint.y;this.moveThumb(G,F,D);return true;}return false;},verifyOffset:!
 function(B){var C=YAHOO.util.Dom.getXY(this.getEl()),A=this.thumb;if(C){if(C[0]!=this.baselinePos[0]||C[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=C;A.initPageX=this.initPageX+A.startOffset[0];A.initPageY=this.initPageY+A.startOffset[1];A.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(G,F,E,D){var H=this.thumb;var I=this;if(!H.available){return ;}H.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);var B=H.getTargetCoord(G,F);var C=[Math.round(B.x),Math.round(B.y)];this._slideStart();if(this.animate&&YAHOO.widget.Slider.ANIM_AVAIL&&H._graduated&&!E){this.lock();this.curCoord=YAHOO.util.Dom.getXY(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){I.moveOneTick(C);},this.tickPause);}else{if(this.animate&&YAHOO.widget.Slider.ANIM_AVAIL&&!E){this.lock();var A=new YAHOO.util.Motion(H.id,{points:{to:C}},this.animationDuration,YAHOO.util.Easin!
 g.easeOut);
-A.onComplete.subscribe(function(){I.endMove();});A.animate();}else{H.setDragElPos(G,F);if(!D){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var A=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!A){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(B){var E=this.thumb,D;var F=null,A,G;if(E._isRegion){F=this._getNextX(this.curCoord,B);A=(F!==null)?F[0]:this.curCoord[0];F=this._getNextY(this.curCoord,B);G=(F!==null)?F[1]:this.curCoord[1];F=A!==this.curCoord[0]||G!==this.curCoord[1]?[A,G]:null;}else{if(E._isHoriz){F=this._getNextX(this.curCoord,B);}else{F=this._getNextY(this.curCoord,B);}}if(F){this.curCoord=F;this.thumb.alignElWithMouse(E.getEl(),F[0]+this.thumbCenterPoint.x,F[1]+this.thumbCenterPoint.y);if(!(F[0]==B[0]&&F[1]==B[1])){var C=this;setTimeout(function()!
 {C.moveOneTick(B);},this.tickPause);}else{this.endMove();}}else{this.endMove();}},_getNextX:function(A,B){var D=this.thumb;var F;var C=[];var E=null;if(A[0]>B[0]){F=D.tickSize-this.thumbCenterPoint.x;C=D.getTargetCoord(A[0]-F,A[1]);E=[C.x,C.y];}else{if(A[0]<B[0]){F=D.tickSize+this.thumbCenterPoint.x;C=D.getTargetCoord(A[0]+F,A[1]);E=[C.x,C.y];}else{}}return E;},_getNextY:function(A,B){var D=this.thumb;var F;var C=[];var E=null;if(A[1]>B[1]){F=D.tickSize-this.thumbCenterPoint.y;C=D.getTargetCoord(A[0],A[1]-F);E=[C.x,C.y];}else{if(A[1]<B[1]){F=D.tickSize+this.thumbCenterPoint.y;C=D.getTargetCoord(A[0],A[1]+F);E=[C.x,C.y];}else{}}return E;},b4MouseDown:function(A){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();this.resetThumbConstraints();},onMouseDown:function(B){if(!this.backgroundEnabled||this.isLocked()){return false;}var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.focus();this.moveThumb(A,C);},onDrag:function(B){if(this.backgr!
 oundEnabled&&!this.isLocked()){var A=YAHOO.util.Event.getPageX!
 (B);var 
C=YAHOO.util.Event.getPageY(B);this.moveThumb(A,C,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.moveComplete=true;this.fireEvents();},resetThumbConstraints:function(){var A=this.thumb;A.setXConstraint(A.leftConstraint,A.rightConstraint,A.xTickSize);A.setYConstraint(A.topConstraint,A.bottomConstraint,A.xTickSize);},fireEvents:function(C){var B=this.thumb;if(!C){B.cachePosition();}if(!this.isLocked()){if(B._isRegion){var E=B.getXValue();var D=B.getYValue();if(E!=this.previousX||D!=this.previousY){if(!this._silent){this.onChange(E,D);this.fireEvent("change",{x:E,y:D});}}this.previousX=E;this.previousY=D;}else{var A=B.getValue();if(A!=this.previousVal){if(!this._silent){this.onChange(A);this.fireEvent("change",A);}}this.previousVal=A;}this._slideEnd();}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.augment(YAHOO.widget.Slider,YAHOO.util.EventProvider);YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThum!
 b.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl());var B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E;if(!this.deltaOffset){var I=YAHOO.util.Dom.getXY(A);var F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];var B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);var K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);var D=B-E[0];var C=K-E[1];if(isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{var J=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);var G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},init!
 Slider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;th!
 is.initU
p=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffset[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});YAHOO.widget.DualSlider=function(E,B,D,A){var C=this,G=YAHOO.lang;this.minSl!
 ider=E;this.maxSlider=B;this.activeSlider=E;this.isHoriz=E.thumb._isHoriz;A=YAHOO.lang.isArray(A)?A:[0,D];A[0]=Math.min(Math.max(parseInt(A[0],10)|0,0),D);A[1]=Math.max(Math.min(parseInt(A[1],10)|0,D),0);if(A[0]>A[1]){A.splice(0,2,A[1],A[0]);}var F={min:false,max:false};this.minSlider.thumb.onAvailable=function(){E.setStartSliderState();F.min=true;if(F.max){E.setValue(A[0],true,true,true);B.setValue(A[1],true,true,true);C.updateValue(true);C.fireEvent("ready",C);}};this.maxSlider.thumb.onAvailable=function(){B.setStartSliderState();F.max=true;if(F.min){E.setValue(A[0],true,true,true);B.setValue(A[1],true,true,true);C.updateValue(true);C.fireEvent("ready",C);}};E.onMouseDown=function(H){return C._handleMouseDown(H);};B.onMouseDown=function(H){if(C.minSlider.isLocked()&&!C.minSlider._sliding){return C._handleMouseDown(H);}else{YAHOO.util.Event.stopEvent(H);return false;}};E.onDrag=B.onDrag=function(H){C._handleDrag(H);
-};E.subscribe("change",this._handleMinChange,E,this);E.subscribe("slideStart",this._handleSlideStart,E,this);E.subscribe("slideEnd",this._handleSlideEnd,E,this);B.subscribe("change",this._handleMaxChange,B,this);B.subscribe("slideStart",this._handleSlideStart,B,this);B.subscribe("slideEnd",this._handleSlideEnd,B,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);};YAHOO.widget.DualSlider.prototype={minVal:-1,maxVal:-1,minRange:0,_handleSlideStart:function(B,A){this.fireEvent("slideStart",A);},_handleSlideEnd:function(B,A){this.fireEvent("slideEnd",A);},_handleDrag:function(A){YAHOO.widget.Slider.prototype.onDrag.call(this.activeSlider,A);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},setValues:function(E,H,F,B,G){var C=this.minSlider,J=this.maxSlider,A=C.thumb,I=J.thumb,!
 K=this,D={min:false,max:false};if(A._isHoriz){A.setXConstraint(A.leftConstraint,I.rightConstraint,A.tickSize);I.setXConstraint(A.leftConstraint,I.rightConstraint,I.tickSize);}else{A.setYConstraint(A.topConstraint,I.bottomConstraint,A.tickSize);I.setYConstraint(A.topConstraint,I.bottomConstraint,I.tickSize);}this._oneTimeCallback(C,"slideEnd",function(){D.min=true;if(D.max){K.updateValue(G);setTimeout(function(){K._cleanEvent(C,"slideEnd");K._cleanEvent(J,"slideEnd");},0);}});this._oneTimeCallback(J,"slideEnd",function(){D.max=true;if(D.min){K.updateValue(G);setTimeout(function(){K._cleanEvent(C,"slideEnd");K._cleanEvent(J,"slideEnd");},0);}});C.setValue(E,F,B,false);J.setValue(H,F,B,false);},setMinValue:function(C,E,F,B){var D=this.minSlider;this.activeSlider=D;var A=this;this._oneTimeCallback(D,"slideEnd",function(){A.updateValue(B);setTimeout(function(){A._cleanEvent(D,"slideEnd");},0);});D.setValue(C,E,F,B);},setMaxValue:function(A,E,F,C){var D=this.maxSlider;this.active!
 Slider=D;var B=this;this._oneTimeCallback(D,"slideEnd",functio!
 n(){B.up
dateValue(C);setTimeout(function(){B._cleanEvent(D,"slideEnd");},0);});D.setValue(A,E,F,C);},updateValue:function(G){var B=this.minSlider.getValue(),H=this.maxSlider.getValue(),C=false;if(B!=this.minVal||H!=this.maxVal){C=true;var A=this.minSlider.thumb,J=this.maxSlider.thumb,D=this.isHoriz?"x":"y";var E=this.minSlider.thumbCenterPoint[D]+this.maxSlider.thumbCenterPoint[D];var F=Math.max(H-E-this.minRange,0);var I=Math.min(-B-E-this.minRange,0);if(this.isHoriz){F=Math.min(F,J.rightConstraint);A.setXConstraint(A.leftConstraint,F,A.tickSize);J.setXConstraint(I,J.rightConstraint,J.tickSize);}else{F=Math.min(F,J.bottomConstraint);A.setYConstraint(A.leftConstraint,F,A.tickSize);J.setYConstraint(I,J.bottomConstraint,J.tickSize);}}this.minVal=B;this.maxVal=H;if(C&&!G){this.fireEvent("change",this);}},selectActiveSlider:function(E){var B=this.minSlider,A=this.maxSlider,G=B.isLocked(),D=A.isLocked(),C=YAHOO.util.Event,F;if(G||D){this.activeSlider=G?A:B;}else{if(this.isHoriz){F=C.getP!
 ageX(E)-B.thumb.initPageX-B.thumbCenterPoint.x;}else{F=C.getPageY(E)-B.thumb.initPageY-B.thumbCenterPoint.y;}this.activeSlider=F*2>A.getValue()+B.getValue()?A:B;}},_handleMouseDown:function(A){this.selectActiveSlider(A);YAHOO.widget.Slider.prototype.onMouseDown.call(this.activeSlider,A);},_oneTimeCallback:function(C,A,B){C.subscribe(A,function(){C.unsubscribe(A,arguments.callee);B.apply({},[].slice.apply(arguments));});},_cleanEvent:function(H,B){if(H.__yui_events&&H.events[B]){var G,F,A;for(F=H.__yui_events.length;F>=0;--F){if(H.__yui_events[F].type===B){G=H.__yui_events[F];break;}}if(G){var E=G.subscribers,C=[],D=0;for(F=0,A=E.length;F<A;++F){if(E[F]){C[D++]=E[F];}}G.subscribers=C;}}}};YAHOO.augment(YAHOO.widget.DualSlider,YAHOO.util.EventProvider);YAHOO.widget.Slider.getHorizDualSlider=function(F,C,K,G,H,B){var A,J;var D=YAHOO.widget,E=D.Slider,I=D.SliderThumb;A=new I(C,F,0,G,0,0,H);J=new I(K,F,0,G,0,0,H);return new D.DualSlider(new E(F,F,A,"horiz"),new E(F,F,J,"horiz"),!
 G,B);};YAHOO.widget.Slider.getVertDualSlider=function(F,C,K,G,!
 H,B){var
 A,J;var D=YAHOO.widget,E=D.Slider,I=D.SliderThumb;A=new I(C,F,0,0,0,G,H);J=new I(K,F,0,0,0,G,H);return new D.DualSlider(new E(F,F,A,"vert"),new E(F,F,J,"vert"),G,B);};YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var B=YAHOO.util.Dom.getXY,A=YAHOO.util.Event,D=Array.prototype.slice;function C(G,E,F,H){C.ANIM_AVAIL=(!YAHOO.lang.isUndefined(YAHOO.util.Anim));if(G){this.init(G,E,true);this.initSlider(H);this.initThumb(F);}}YAHOO.lang.augmentObject(C,{getHorizSlider:function(F,G,I,H,E){return new C(F,F,new YAHOO.widget.SliderThumb(G,F,I,H,0,0,E),"horiz");},getVertSlider:function(G,H,E,I,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,0,0,E,I,F),"vert");},getSliderRegion:function(G,H,J,I,E,K,F){return new C(G,G,new YAHOO.widget.SliderThumb(H,G,J,I,E,K,F),"region");},SOURCE_UI_EVENT:1,SOURCE_SET_VALUE:2,SOURCE_KEY_EVENT:3,ANIM_AVAIL:false},true);YAHOO.extend(C,YAHOO.util.DragDrop,{_mouseDown:false,dragOnly:true,initSlider:function(E){this.type=E;this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);this.isTarget=false;this.animate=C.ANIM_AVAIL;this.backgroundEnabled=true;this.tickPause=40;this.enableKeys=true;this.keyIncreme!
 nt=20;this.moveComplete=true;this.animationDuration=0.2;this.SOURCE_UI_EVENT=1;this.SOURCE_SET_VALUE=2;this.valueChangeSource=0;this._silent=false;this.lastOffset=[0,0];},initThumb:function(F){var E=this;this.thumb=F;F.cacheBetweenDrags=true;if(F._isHoriz&&F.xTicks&&F.xTicks.length){this.tickPause=Math.round(360/F.xTicks.length);}else{if(F.yTicks&&F.yTicks.length){this.tickPause=Math.round(360/F.yTicks.length);}}F.onAvailable=function(){return E.setStartSliderState();};F.onMouseDown=function(){E._mouseDown=true;return E.focus();};F.startDrag=function(){E._slideStart();};F.onDrag=function(){E.fireEvents(true);};F.onMouseUp=function(){E.thumbMouseUp();};},onAvailable:function(){this._bindKeyEvents();},_bindKeyEvents:function(){A.on(this.id,"keydown",this.handleKeyDown,this,true);A.on(this.id,"keypress",this.handleKeyPress,this,true);},handleKeyPress:function(F){if(this.enableKeys){var E=A.getCharCode(F);switch(E){case 37:case 38:case 39:case 40:case 36:case 35:A.preventDefaul!
 t(F);break;default:}}},handleKeyDown:function(J){if(this.enabl!
 eKeys){v
ar G=A.getCharCode(J),F=this.thumb,H=this.getXValue(),E=this.getYValue(),I=true;switch(G){case 37:H-=this.keyIncrement;break;case 38:E-=this.keyIncrement;break;case 39:H+=this.keyIncrement;break;case 40:E+=this.keyIncrement;break;case 36:H=F.leftConstraint;E=F.topConstraint;break;case 35:H=F.rightConstraint;E=F.bottomConstraint;break;default:I=false;}if(I){if(F._isRegion){this._setRegionValue(C.SOURCE_KEY_EVENT,H,E,true);}else{this._setValue(C.SOURCE_KEY_EVENT,(F._isHoriz?H:E),true);}A.stopEvent(J);}}},setStartSliderState:function(){this.setThumbCenterPoint();this.baselinePos=B(this.getEl());this.thumb.startOffset=this.thumb.getOffsetFromParent(this.baselinePos);if(this.thumb._isRegion){if(this.deferredSetRegionValue){this._setRegionValue.apply(this,this.deferredSetRegionValue);this.deferredSetRegionValue=null;}else{this.setRegionValue(0,0,true,true,true);}}else{if(this.deferredSetValue){this._setValue.apply(this,this.deferredSetValue);this.deferredSetValue=null;}else{this.s!
 etValue(0,true,true,true);}}},setThumbCenterPoint:function(){var E=this.thumb.getEl();if(E){this.thumbCenterPoint={x:parseInt(E.offsetWidth/2,10),y:parseInt(E.offsetHeight/2,10)};}},lock:function(){this.thumb.lock();this.locked=true;},unlock:function(){this.thumb.unlock();this.locked=false;},thumbMouseUp:function(){this._mouseDown=false;if(!this.isLocked()&&!this.moveComplete){this.endMove();}},onMouseUp:function(){this._mouseDown=false;if(this.backgroundEnabled&&!this.isLocked()&&!this.moveComplete){this.endMove();}},getThumb:function(){return this.thumb;},focus:function(){this.valueChangeSource=C.SOURCE_UI_EVENT;var E=this.getEl();if(E.focus){try{E.focus();}catch(F){}}this.verifyOffset();return !this.isLocked();},onChange:function(E,F){},onSlideStart:function(){},onSlideEnd:function(){},getValue:function(){return this.thumb.getValue();},getXValue:function(){return this.thumb.getXValue();},getYValue:function(){return this.thumb.getYValue();},setValue:function(){var E=D.cal!
 l(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setVal!
 ue.apply
(this,E);},_setValue:function(I,L,G,H,E){var F=this.thumb,K,J;if(!F.available){this.deferredSetValue=arguments;return false;}if(this.isLocked()&&!H){return false;}if(isNaN(L)){return false;}if(F._isRegion){return false;}this._silent=E;this.valueChangeSource=I||C.SOURCE_SET_VALUE;F.lastOffset=[L,L];this.verifyOffset(true);this._slideStart();if(F._isHoriz){K=F.initPageX+L+this.thumbCenterPoint.x;this.moveThumb(K,F.initPageY,G);}else{J=F.initPageY+L+this.thumbCenterPoint.y;this.moveThumb(F.initPageX,J,G);}return true;},setRegionValue:function(){var E=D.call(arguments);E.unshift(C.SOURCE_SET_VALUE);return this._setRegionValue.apply(this,E);},_setRegionValue:function(F,J,H,I,G,K){var L=this.thumb,E,M;if(!L.available){this.deferredSetRegionValue=arguments;return false;}if(this.isLocked()&&!G){return false;}if(isNaN(J)){return false;}if(!L._isRegion){return false;}this._silent=K;this.valueChangeSource=F||C.SOURCE_SET_VALUE;L.lastOffset=[J,H];this.verifyOffset(true);this._slideStart!
 ();E=L.initPageX+J+this.thumbCenterPoint.x;M=L.initPageY+H+this.thumbCenterPoint.y;this.moveThumb(E,M,I);return true;},verifyOffset:function(F){var G=B(this.getEl()),E=this.thumb;if(!this.thumbCenterPoint||!this.thumbCenterPoint.x){this.setThumbCenterPoint();}if(G){if(G[0]!=this.baselinePos[0]||G[1]!=this.baselinePos[1]){this.setInitPosition();this.baselinePos=G;E.initPageX=this.initPageX+E.startOffset[0];E.initPageY=this.initPageY+E.startOffset[1];E.deltaSetXY=null;this.resetThumbConstraints();return false;}}return true;},moveThumb:function(K,J,I,G){var L=this.thumb,M=this,F,E,H;if(!L.available){return;}L.setDelta(this.thumbCenterPoint.x,this.thumbCenterPoint.y);E=L.getTargetCoord(K,J);F=[Math.round(E.x),Math.round(E.y)];if(this.animate&&L._graduated&&!I){this.lock();this.curCoord=B(this.thumb.getEl());this.curCoord=[Math.round(this.curCoord[0]),Math.round(this.curCoord[1])];setTimeout(function(){M.moveOneTick(F);
+},this.tickPause);}else{if(this.animate&&C.ANIM_AVAIL&&!I){this.lock();H=new YAHOO.util.Motion(L.id,{points:{to:F}},this.animationDuration,YAHOO.util.Easing.easeOut);H.onComplete.subscribe(function(){M.unlock();if(!M._mouseDown){M.endMove();}});H.animate();}else{L.setDragElPos(K,J);if(!G&&!this._mouseDown){this.endMove();}}}},_slideStart:function(){if(!this._sliding){if(!this._silent){this.onSlideStart();this.fireEvent("slideStart");}this._sliding=true;}},_slideEnd:function(){if(this._sliding&&this.moveComplete){var E=this._silent;this._sliding=false;this._silent=false;this.moveComplete=false;if(!E){this.onSlideEnd();this.fireEvent("slideEnd");}}},moveOneTick:function(F){var H=this.thumb,G=this,I=null,E,J;if(H._isRegion){I=this._getNextX(this.curCoord,F);E=(I!==null)?I[0]:this.curCoord[0];I=this._getNextY(this.curCoord,F);J=(I!==null)?I[1]:this.curCoord[1];I=E!==this.curCoord[0]||J!==this.curCoord[1]?[E,J]:null;}else{if(H._isHoriz){I=this._getNextX(this.curCoord,F);}else{I=!
 this._getNextY(this.curCoord,F);}}if(I){this.curCoord=I;this.thumb.alignElWithMouse(H.getEl(),I[0]+this.thumbCenterPoint.x,I[1]+this.thumbCenterPoint.y);if(!(I[0]==F[0]&&I[1]==F[1])){setTimeout(function(){G.moveOneTick(F);},this.tickPause);}else{this.unlock();if(!this._mouseDown){this.endMove();}}}else{this.unlock();if(!this._mouseDown){this.endMove();}}},_getNextX:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[0]>F[0]){J=H.tickSize-this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]-J,E[1]);I=[G.x,G.y];}else{if(E[0]<F[0]){J=H.tickSize+this.thumbCenterPoint.x;G=H.getTargetCoord(E[0]+J,E[1]);I=[G.x,G.y];}else{}}return I;},_getNextY:function(E,F){var H=this.thumb,J,G=[],I=null;if(E[1]>F[1]){J=H.tickSize-this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]-J);I=[G.x,G.y];}else{if(E[1]<F[1]){J=H.tickSize+this.thumbCenterPoint.y;G=H.getTargetCoord(E[0],E[1]+J);I=[G.x,G.y];}else{}}return I;},b4MouseDown:function(E){if(!this.backgroundEnabled){return false;}this.thumb.autoOffset();!
 this.resetThumbConstraints();},onMouseDown:function(F){if(!thi!
 s.backgr
oundEnabled||this.isLocked()){return false;}this._mouseDown=true;var E=A.getPageX(F),G=A.getPageY(F);this.focus();this._slideStart();this.moveThumb(E,G);},onDrag:function(F){if(this.backgroundEnabled&&!this.isLocked()){var E=A.getPageX(F),G=A.getPageY(F);this.moveThumb(E,G,true,true);this.fireEvents();}},endMove:function(){this.unlock();this.fireEvents();this.moveComplete=true;this._slideEnd();},resetThumbConstraints:function(){var E=this.thumb;E.setXConstraint(E.leftConstraint,E.rightConstraint,E.xTickSize);E.setYConstraint(E.topConstraint,E.bottomConstraint,E.xTickSize);},fireEvents:function(G){var F=this.thumb,I,H,E;if(!G){F.cachePosition();}if(!this.isLocked()){if(F._isRegion){I=F.getXValue();H=F.getYValue();if(I!=this.previousX||H!=this.previousY){if(!this._silent){this.onChange(I,H);this.fireEvent("change",{x:I,y:H});}}this.previousX=I;this.previousY=H;}else{E=F.getValue();if(E!=this.previousVal){if(!this._silent){this.onChange(E);this.fireEvent("change",E);}}this.prev!
 iousVal=E;}}},toString:function(){return("Slider ("+this.type+") "+this.id);}});YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);YAHOO.widget.Slider=C;})();YAHOO.widget.SliderThumb=function(G,B,E,D,A,F,C){if(G){YAHOO.widget.SliderThumb.superclass.constructor.call(this,G,B);this.parentElId=B;}this.isTarget=false;this.tickSize=C;this.maintainOffset=true;this.initSlider(E,D,A,F,C);this.scroll=false;};YAHOO.extend(YAHOO.widget.SliderThumb,YAHOO.util.DD,{startOffset:null,dragOnly:true,_isHoriz:false,_prevVal:0,_graduated:false,getOffsetFromParent0:function(C){var A=YAHOO.util.Dom.getXY(this.getEl()),B=C||YAHOO.util.Dom.getXY(this.parentElId);return[(A[0]-B[0]),(A[1]-B[1])];},getOffsetFromParent:function(H){var A=this.getEl(),E,I,F,B,K,D,C,J,G;if(!this.deltaOffset){I=YAHOO.util.Dom.getXY(A);F=H||YAHOO.util.Dom.getXY(this.parentElId);E=[(I[0]-F[0]),(I[1]-F[1])];B=parseInt(YAHOO.util.Dom.getStyle(A,"left"),10);K=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);D=B-E[0];C=K-E[1];if(!
 isNaN(D)||isNaN(C)){}else{this.deltaOffset=[D,C];}}else{J=pars!
 eInt(YAH
OO.util.Dom.getStyle(A,"left"),10);G=parseInt(YAHOO.util.Dom.getStyle(A,"top"),10);E=[J+this.deltaOffset[0],G+this.deltaOffset[1]];}return E;},initSlider:function(D,C,A,E,B){this.initLeft=D;this.initRight=C;this.initUp=A;this.initDown=E;this.setXConstraint(D,C,B);this.setYConstraint(A,E,B);if(B&&B>1){this._graduated=true;}this._isHoriz=(D||C);this._isVert=(A||E);this._isRegion=(this._isHoriz&&this._isVert);},clearTicks:function(){YAHOO.widget.SliderThumb.superclass.clearTicks.call(this);this.tickSize=0;this._graduated=false;},getValue:function(){return(this._isHoriz)?this.getXValue():this.getYValue();},getXValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[0])){this.lastOffset=A;return(A[0]-this.startOffset[0]);}else{return(this.lastOffset[0]-this.startOffset[0]);}},getYValue:function(){if(!this.available){return 0;}var A=this.getOffsetFromParent();if(YAHOO.lang.isNumber(A[1])){this.lastOffset=A;return(A[1]-this.startOffs!
 et[1]);}else{return(this.lastOffset[1]-this.startOffset[1]);}},toString:function(){return"SliderThumb "+this.id;},onChange:function(A,B){}});(function(){var A=YAHOO.util.Event,B=YAHOO.widget;function C(I,F,H,D){var G=this,J={min:false,max:false},E,K;this.minSlider=I;this.maxSlider=F;this.activeSlider=I;this.isHoriz=I.thumb._isHoriz;E=this.minSlider.thumb.onMouseDown;K=this.maxSlider.thumb.onMouseDown;this.minSlider.thumb.onMouseDown=function(){G.activeSlider=G.minSlider;E.apply(this,arguments);};this.maxSlider.thumb.onMouseDown=function(){G.activeSlider=G.maxSlider;K.apply(this,arguments);};this.minSlider.thumb.onAvailable=function(){I.setStartSliderState();J.min=true;if(J.max){G.fireEvent("ready",G);}};this.maxSlider.thumb.onAvailable=function(){F.setStartSliderState();J.max=true;if(J.min){G.fireEvent("ready",G);}};I.onMouseDown=F.onMouseDown=function(L){return this.backgroundEnabled&&G._handleMouseDown(L);
+};I.onDrag=F.onDrag=function(L){G._handleDrag(L);};I.onMouseUp=F.onMouseUp=function(L){G._handleMouseUp(L);};I._bindKeyEvents=function(){G._bindKeyEvents(this);};F._bindKeyEvents=function(){};I.subscribe("change",this._handleMinChange,I,this);I.subscribe("slideStart",this._handleSlideStart,I,this);I.subscribe("slideEnd",this._handleSlideEnd,I,this);F.subscribe("change",this._handleMaxChange,F,this);F.subscribe("slideStart",this._handleSlideStart,F,this);F.subscribe("slideEnd",this._handleSlideEnd,F,this);this.createEvent("ready",this);this.createEvent("change",this);this.createEvent("slideStart",this);this.createEvent("slideEnd",this);D=YAHOO.lang.isArray(D)?D:[0,H];D[0]=Math.min(Math.max(parseInt(D[0],10)|0,0),H);D[1]=Math.max(Math.min(parseInt(D[1],10)|0,H),0);if(D[0]>D[1]){D.splice(0,2,D[1],D[0]);}this.minVal=D[0];this.maxVal=D[1];this.minSlider.setValue(this.minVal,true,true,true);this.maxSlider.setValue(this.maxVal,true,true,true);}C.prototype={minVal:-1,maxVal:-1,minR!
 ange:0,_handleSlideStart:function(E,D){this.fireEvent("slideStart",D);},_handleSlideEnd:function(E,D){this.fireEvent("slideEnd",D);},_handleDrag:function(D){B.Slider.prototype.onDrag.call(this.activeSlider,D);},_handleMinChange:function(){this.activeSlider=this.minSlider;this.updateValue();},_handleMaxChange:function(){this.activeSlider=this.maxSlider;this.updateValue();},_bindKeyEvents:function(D){A.on(D.id,"keydown",this._handleKeyDown,this,true);A.on(D.id,"keypress",this._handleKeyPress,this,true);},_handleKeyDown:function(D){this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);},_handleKeyPress:function(D){this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);},setValues:function(H,K,I,E,J){var F=this.minSlider,M=this.maxSlider,D=F.thumb,L=M.thumb,N=this,G={min:false,max:false};if(D._isHoriz){D.setXConstraint(D.leftConstraint,L.rightConstraint,D.tickSize);L.setXConstraint(D.leftConstraint,L.rightConstraint,L.tickSize);}else{D.setYConstraint(D!
 .topConstraint,L.bottomConstraint,D.tickSize);L.setYConstraint!
 (D.topCo
nstraint,L.bottomConstraint,L.tickSize);}this._oneTimeCallback(F,"slideEnd",function(){G.min=true;if(G.max){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});this._oneTimeCallback(M,"slideEnd",function(){G.max=true;if(G.min){N.updateValue(J);setTimeout(function(){N._cleanEvent(F,"slideEnd");N._cleanEvent(M,"slideEnd");},0);}});F.setValue(H,I,E,false);M.setValue(K,I,E,false);},setMinValue:function(F,H,I,E){var G=this.minSlider,D=this;this.activeSlider=G;D=this;this._oneTimeCallback(G,"slideEnd",function(){D.updateValue(E);setTimeout(function(){D._cleanEvent(G,"slideEnd");},0);});G.setValue(F,H,I);},setMaxValue:function(D,H,I,F){var G=this.maxSlider,E=this;this.activeSlider=G;this._oneTimeCallback(G,"slideEnd",function(){E.updateValue(F);setTimeout(function(){E._cleanEvent(G,"slideEnd");},0);});G.setValue(D,H,I);},updateValue:function(J){var E=this.minSlider.getValue(),K=this.maxSlider.getValue(),F=false,D,M,H,I,L,G;if(E!=t!
 his.minVal||K!=this.maxVal){F=true;D=this.minSlider.thumb;M=this.maxSlider.thumb;H=this.isHoriz?"x":"y";G=this.minSlider.thumbCenterPoint[H]+this.maxSlider.thumbCenterPoint[H];I=Math.max(K-G-this.minRange,0);L=Math.min(-E-G-this.minRange,0);if(this.isHoriz){I=Math.min(I,M.rightConstraint);D.setXConstraint(D.leftConstraint,I,D.tickSize);M.setXConstraint(L,M.rightConstraint,M.tickSize);}else{I=Math.min(I,M.bottomConstraint);D.setYConstraint(D.leftConstraint,I,D.tickSize);M.setYConstraint(L,M.bottomConstraint,M.tickSize);}}this.minVal=E;this.maxVal=K;if(F&&!J){this.fireEvent("change",this);}},selectActiveSlider:function(H){var E=this.minSlider,D=this.maxSlider,J=E.isLocked()||!E.backgroundEnabled,G=D.isLocked()||!E.backgroundEnabled,F=YAHOO.util.Event,I;if(J||G){this.activeSlider=J?D:E;}else{if(this.isHoriz){I=F.getPageX(H)-E.thumb.initPageX-E.thumbCenterPoint.x;}else{I=F.getPageY(H)-E.thumb.initPageY-E.thumbCenterPoint.y;}this.activeSlider=I*2>D.getValue()+E.getValue()?D:E;}}!
 ,_handleMouseDown:function(D){if(!D._handled){D._handled=true;!
 this.sel
ectActiveSlider(D);return B.Slider.prototype.onMouseDown.call(this.activeSlider,D);}else{return false;}},_handleMouseUp:function(D){B.Slider.prototype.onMouseUp.apply(this.activeSlider,arguments);},_oneTimeCallback:function(F,D,E){F.subscribe(D,function(){F.unsubscribe(D,arguments.callee);E.apply({},[].slice.apply(arguments));});},_cleanEvent:function(K,E){var J,I,D,G,H,F;if(K.__yui_events&&K.events[E]){for(I=K.__yui_events.length;I>=0;--I){if(K.__yui_events[I].type===E){J=K.__yui_events[I];break;}}if(J){H=J.subscribers;F=[];G=0;for(I=0,D=H.length;I<D;++I){if(H[I]){F[G++]=H[I];}}J.subscribers=F;}}}};YAHOO.lang.augmentProto(C,YAHOO.util.EventProvider);B.Slider.getHorizDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,G,0,0,F),E=new B.SliderThumb(K,H,0,G,0,0,F);return new C(new B.Slider(H,H,I,"horiz"),new B.Slider(H,H,E,"horiz"),G,D);};B.Slider.getVertDualSlider=function(H,J,K,G,F,D){var I=new B.SliderThumb(J,H,0,0,0,G,F),E=new B.SliderThumb(K,H,0,0,0,G,F);return !
 new B.DualSlider(new B.Slider(H,H,I,"vert"),new B.Slider(H,H,E,"vert"),G,D);};YAHOO.widget.DualSlider=C;})();YAHOO.register("slider",YAHOO.widget.Slider,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/slider/slider.js
===================================================================
--- trunk/root/static/yui/slider/slider.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/slider/slider.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The Slider component is a UI control that enables the user to adjust 
@@ -18,7 +18,12 @@
  * @requires  yahoo,dom,dragdrop,event
  * @optional  animation
  */
+ (function () {
 
+var getXY = YAHOO.util.Dom.getXY,
+    Event = YAHOO.util.Event,
+    _AS   = Array.prototype.slice;
+
 /**
  * A DragDrop implementation that can be used as a background for a
  * slider.  It takes a reference to the thumb instance 
@@ -35,89 +40,130 @@
  * @param {SliderThumb} oThumb The thumb for this slider
  * @param {String}      sType  The type of slider (horiz, vert, region)
  */
-YAHOO.widget.Slider = function(sElementId, sGroup, oThumb, sType) {
+function Slider(sElementId, sGroup, oThumb, sType) {
 
-    YAHOO.widget.Slider.ANIM_AVAIL = 
-        (!YAHOO.lang.isUndefined(YAHOO.util.Anim));
+    Slider.ANIM_AVAIL = (!YAHOO.lang.isUndefined(YAHOO.util.Anim));
 
     if (sElementId) {
         this.init(sElementId, sGroup, true);
         this.initSlider(sType);
         this.initThumb(oThumb);
     }
-};
+}
 
-/**
- * Factory method for creating a horizontal slider
- * @method YAHOO.widget.Slider.getHorizSlider
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iLeft the number of pixels the element can move left
- * @param {int} iRight the number of pixels the element can move right
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a horizontal slider control
- */
-YAHOO.widget.Slider.getHorizSlider = 
-    function (sBGElId, sHandleElId, iLeft, iRight, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 
-                               iLeft, iRight, 0, 0, iTickSize), "horiz");
-};
+YAHOO.lang.augmentObject(Slider,{
+    /**
+     * Factory method for creating a horizontal slider
+     * @method YAHOO.widget.Slider.getHorizSlider
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iLeft the number of pixels the element can move left
+     * @param {int} iRight the number of pixels the element can move right
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a horizontal slider control
+     */
+    getHorizSlider : 
+        function (sBGElId, sHandleElId, iLeft, iRight, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 
+                                   iLeft, iRight, 0, 0, iTickSize), "horiz");
+    },
 
-/**
- * Factory method for creating a vertical slider
- * @method YAHOO.widget.Slider.getVertSlider
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iUp the number of pixels the element can move up
- * @param {int} iDown the number of pixels the element can move down
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a vertical slider control
- */
-YAHOO.widget.Slider.getVertSlider = 
-    function (sBGElId, sHandleElId, iUp, iDown, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 0, 0, 
-                               iUp, iDown, iTickSize), "vert");
-};
+    /**
+     * Factory method for creating a vertical slider
+     * @method YAHOO.widget.Slider.getVertSlider
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iUp the number of pixels the element can move up
+     * @param {int} iDown the number of pixels the element can move down
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a vertical slider control
+     */
+    getVertSlider :
+        function (sBGElId, sHandleElId, iUp, iDown, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, 0, 0, 
+                                   iUp, iDown, iTickSize), "vert");
+    },
 
-/**
- * Factory method for creating a slider region like the one in the color
- * picker example
- * @method YAHOO.widget.Slider.getSliderRegion
- * @static
- * @param {String} sBGElId the id of the slider's background element
- * @param {String} sHandleElId the id of the thumb element
- * @param {int} iLeft the number of pixels the element can move left
- * @param {int} iRight the number of pixels the element can move right
- * @param {int} iUp the number of pixels the element can move up
- * @param {int} iDown the number of pixels the element can move down
- * @param {int} iTickSize optional parameter for specifying that the element 
- * should move a certain number pixels at a time.
- * @return {Slider} a slider region control
- */
-YAHOO.widget.Slider.getSliderRegion = 
-    function (sBGElId, sHandleElId, iLeft, iRight, iUp, iDown, iTickSize) {
-        return new YAHOO.widget.Slider(sBGElId, sBGElId, 
-            new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, iLeft, iRight, 
-                               iUp, iDown, iTickSize), "region");
-};
+    /**
+     * Factory method for creating a slider region like the one in the color
+     * picker example
+     * @method YAHOO.widget.Slider.getSliderRegion
+     * @static
+     * @param {String} sBGElId the id of the slider's background element
+     * @param {String} sHandleElId the id of the thumb element
+     * @param {int} iLeft the number of pixels the element can move left
+     * @param {int} iRight the number of pixels the element can move right
+     * @param {int} iUp the number of pixels the element can move up
+     * @param {int} iDown the number of pixels the element can move down
+     * @param {int} iTickSize optional parameter for specifying that the element 
+     * should move a certain number pixels at a time.
+     * @return {Slider} a slider region control
+     */
+    getSliderRegion : 
+        function (sBGElId, sHandleElId, iLeft, iRight, iUp, iDown, iTickSize) {
+            return new Slider(sBGElId, sBGElId, 
+                new YAHOO.widget.SliderThumb(sHandleElId, sBGElId, iLeft, iRight, 
+                                   iUp, iDown, iTickSize), "region");
+    },
 
-/**
- * By default, animation is available if the animation utility is detected.
- * @property YAHOO.widget.Slider.ANIM_AVAIL
- * @static
- * @type boolean
- */
-YAHOO.widget.Slider.ANIM_AVAIL = false;
+    /**
+     * Constant for valueChangeSource, indicating that the user clicked or
+     * dragged the slider to change the value.
+     * @property Slider.SOURCE_UI_EVENT
+     * @final
+     * @static
+     * @default 1
+     */
+    SOURCE_UI_EVENT : 1,
 
-YAHOO.extend(YAHOO.widget.Slider, YAHOO.util.DragDrop, {
+    /**
+     * Constant for valueChangeSource, indicating that the value was altered
+     * by a programmatic call to setValue/setRegionValue.
+     * @property Slider.SOURCE_SET_VALUE
+     * @final
+     * @static
+     * @default 2
+     */
+    SOURCE_SET_VALUE : 2,
 
     /**
+     * Constant for valueChangeSource, indicating that the value was altered
+     * by hitting any of the supported keyboard characters.
+     * @property Slider.SOURCE_KEY_EVENT
+     * @final
+     * @static
+     * @default 2
+     */
+    SOURCE_KEY_EVENT : 3,
+
+    /**
+     * By default, animation is available if the animation utility is detected.
+     * @property Slider.ANIM_AVAIL
+     * @static
+     * @type boolean
+     */
+    ANIM_AVAIL : false
+},true);
+
+YAHOO.extend(Slider, YAHOO.util.DragDrop, {
+
+    /**
+     * Tracks the state of the mouse button to aid in when events are fired.
+     *
+     * @property _mouseDown
+     * @type boolean
+     * @default false
+     * @private
+     */
+    _mouseDown : false,
+
+    /**
      * Override the default setting of dragOnly to true.
      * @property dragOnly
      * @type boolean
@@ -178,7 +224,7 @@
          * @property animate
          * @type boolean
          */
-        this.animate = YAHOO.widget.Slider.ANIM_AVAIL;
+        this.animate = Slider.ANIM_AVAIL;
 
         /**
          * Set to false to disable a background click thumb move
@@ -242,6 +288,7 @@
          * @property SOURCE_UI_EVENT
          * @final
          * @default 1
+         * @deprecated use static Slider.SOURCE_UI_EVENT
          */
         this.SOURCE_UI_EVENT = 1;
 
@@ -251,6 +298,7 @@
          * @property SOURCE_SET_VALUE
          * @final
          * @default 2
+         * @deprecated use static Slider.SOURCE_SET_VALUE
          */
         this.SOURCE_SET_VALUE = 2;
 
@@ -300,13 +348,9 @@
          * @type YAHOO.widget.SliderThumb
          */
         this.thumb = t;
+
         t.cacheBetweenDrags = true;
 
-        // add handler for the handle onchange event
-        //t.onChange = function() { 
-            //self.handleThumbChange(); 
-        //};
-
         if (t._isHoriz && t.xTicks && t.xTicks.length) {
             this.tickPause = Math.round(360 / t.xTicks.length);
         } else if (t.yTicks && t.yTicks.length) {
@@ -319,6 +363,7 @@
                 return self.setStartSliderState(); 
             };
         t.onMouseDown = function () { 
+                self._mouseDown = true;
                 return self.focus(); 
             };
         t.startDrag = function() { 
@@ -338,11 +383,20 @@
      * @method onAvailable
      */
     onAvailable: function() {
-        var Event = YAHOO.util.Event;
+        this._bindKeyEvents();
+    },
+ 
+    /**
+     * Sets up the listeners for keydown and key press events.
+     *
+     * @method _bindKeyEvents
+     * @protected
+     */
+    _bindKeyEvents : function () {
         Event.on(this.id, "keydown",  this.handleKeyDown,  this, true);
         Event.on(this.id, "keypress", this.handleKeyPress, this, true);
     },
- 
+
     /**
      * Executed when a keypress event happens with the control focused.
      * Prevents the default behavior for navigation keys.  The actual
@@ -352,8 +406,8 @@
      */
     handleKeyPress: function(e) {
         if (this.enableKeys) {
-            var Event = YAHOO.util.Event;
             var kc = Event.getCharCode(e);
+
             switch (kc) {
                 case 0x25: // left
                 case 0x26: // up
@@ -376,13 +430,12 @@
      */
     handleKeyDown: function(e) {
         if (this.enableKeys) {
-            var Event = YAHOO.util.Event;
+            var kc = Event.getCharCode(e),
+                t  = this.thumb,
+                h  = this.getXValue(),
+                v  = this.getYValue(),
+                changeValue = true;
 
-            var kc = Event.getCharCode(e), t=this.thumb;
-            var h=this.getXValue(),v=this.getYValue();
-
-            var horiz = false;
-            var changeValue = true;
             switch (kc) {
 
                 // left
@@ -412,10 +465,10 @@
 
             if (changeValue) {
                 if (t._isRegion) {
-                    this.setRegionValue(h, v, true);
+                    this._setRegionValue(Slider.SOURCE_KEY_EVENT, h, v, true);
                 } else {
-                    var newVal = (t._isHoriz) ? h : v;
-                    this.setValue(newVal, true);
+                    this._setValue(Slider.SOURCE_KEY_EVENT,
+                        (t._isHoriz ? h : v), true);
                 }
                 Event.stopEvent(e);
             }
@@ -439,20 +492,20 @@
          * @property baselinePos
          * @type [int, int]
          */
-        this.baselinePos = YAHOO.util.Dom.getXY(this.getEl());
+        this.baselinePos = getXY(this.getEl());
 
         this.thumb.startOffset = this.thumb.getOffsetFromParent(this.baselinePos);
 
         if (this.thumb._isRegion) {
             if (this.deferredSetRegionValue) {
-                this.setRegionValue.apply(this, this.deferredSetRegionValue);
+                this._setRegionValue.apply(this, this.deferredSetRegionValue);
                 this.deferredSetRegionValue = null;
             } else {
                 this.setRegionValue(0, 0, true, true, true);
             }
         } else {
             if (this.deferredSetValue) {
-                this.setValue.apply(this, this.deferredSetValue);
+                this._setValue.apply(this, this.deferredSetValue);
                 this.deferredSetValue = null;
             } else {
                 this.setValue(0, true, true, true);
@@ -508,6 +561,7 @@
      * @private
      */
     thumbMouseUp: function() {
+        this._mouseDown = false;
         if (!this.isLocked() && !this.moveComplete) {
             this.endMove();
         }
@@ -515,6 +569,7 @@
     },
 
     onMouseUp: function() {
+        this._mouseDown = false;
         if (this.backgroundEnabled && !this.isLocked() && !this.moveComplete) {
             this.endMove();
         }
@@ -536,7 +591,7 @@
      * @private
      */
     focus: function() {
-        this.valueChangeSource = this.SOURCE_UI_EVENT;
+        this.valueChangeSource = Slider.SOURCE_UI_EVENT;
 
         // Focus the background element if possible
         var el = this.getEl();
@@ -554,12 +609,7 @@
 
         this.verifyOffset();
 
-        if (this.isLocked()) {
-            return false;
-        } else {
-            this._slideStart();
-            return true;
-        }
+        return !this.isLocked();
     },
 
     /**
@@ -622,32 +672,29 @@
     },
 
     /**
-     * Internal handler for the slider thumb's onChange event
-     * @method handleThumbChange
-     * @private
+     * Provides a way to set the value of the slider in code.
+     *
+     * @method setValue
+     * @param {int} newOffset the number of pixels the thumb should be
+     * positioned away from the initial start point 
+     * @param {boolean} skipAnim set to true to disable the animation
+     * for this move action (but not others).
+     * @param {boolean} force ignore the locked setting and set value anyway
+     * @param {boolean} silent when true, do not fire events
+     * @return {boolean} true if the move was performed, false if it failed
      */
-    handleThumbChange: function () { 
-        /*
-        var t = this.thumb;
-        if (t._isRegion) {
-
-            if (!this._silent) {
-                t.onChange(t.getXValue(), t.getYValue());
-                this.fireEvent("change", { x: t.getXValue(), y: t.getYValue() } );
-            }
-        } else {
-            if (!this._silent) {
-                t.onChange(t.getValue());
-                this.fireEvent("change", t.getValue());
-            }
-        }
-        */
-
+    setValue: function() {
+        var args = _AS.call(arguments);
+        args.unshift(Slider.SOURCE_SET_VALUE);
+        return this._setValue.apply(this,args);
     },
 
     /**
-     * Provides a way to set the value of the slider in code.
-     * @method setValue
+     * Worker function to execute the value set operation.  Accepts type of
+     * set operation in addition to the usual setValue params.
+     *
+     * @method _setValue
+     * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
      * @param {int} newOffset the number of pixels the thumb should be
      * positioned away from the initial start point 
      * @param {boolean} skipAnim set to true to disable the animation
@@ -655,13 +702,12 @@
      * @param {boolean} force ignore the locked setting and set value anyway
      * @param {boolean} silent when true, do not fire events
      * @return {boolean} true if the move was performed, false if it failed
+     * @protected
      */
-    setValue: function(newOffset, skipAnim, force, silent) {
+    _setValue: function(source, newOffset, skipAnim, force, silent) {
+        var t = this.thumb, newX, newY;
 
-        this._silent = silent;
-        this.valueChangeSource = this.SOURCE_SET_VALUE;
-
-        if (!this.thumb.available) {
+        if (!t.available) {
             this.deferredSetValue = arguments;
             return false;
         }
@@ -674,20 +720,23 @@
             return false;
         }
 
-        var t = this.thumb;
+        if (t._isRegion) {
+            return false;
+        }
+
+
+        this._silent = silent;
+        this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
+
         t.lastOffset = [newOffset, newOffset];
-        var newX, newY;
         this.verifyOffset(true);
-        if (t._isRegion) {
-            return false;
-        } else if (t._isHoriz) {
-            this._slideStart();
-            // this.fireEvent("slideStart");
+
+        this._slideStart();
+
+        if (t._isHoriz) {
             newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
             this.moveThumb(newX, t.initPageY, skipAnim);
         } else {
-            this._slideStart();
-            // this.fireEvent("slideStart");
             newY = t.initPageY + newOffset + this.thumbCenterPoint.y;
             this.moveThumb(t.initPageX, newY, skipAnim);
         }
@@ -708,13 +757,33 @@
      * @param {boolean} silent when true, do not fire events
      * @return {boolean} true if the move was performed, false if it failed
      */
-    setRegionValue: function(newOffset, newOffset2, skipAnim, force, silent) {
+    setRegionValue : function () {
+        var args = _AS.call(arguments);
+        args.unshift(Slider.SOURCE_SET_VALUE);
+        return this._setRegionValue.apply(this,args);
+    },
 
-        this._silent = silent;
+    /**
+     * Worker function to execute the value set operation.  Accepts type of
+     * set operation in addition to the usual setValue params.
+     *
+     * @method _setRegionValue
+     * @param source {int} what triggered the set (e.g. Slider.SOURCE_SET_VALUE)
+     * @param {int} newOffset the number of pixels the thumb should be
+     * positioned away from the initial start point (x axis for region)
+     * @param {int} newOffset2 the number of pixels the thumb should be
+     * positioned away from the initial start point (y axis for region)
+     * @param {boolean} skipAnim set to true to disable the animation
+     * for this move action (but not others).
+     * @param {boolean} force ignore the locked setting and set value anyway
+     * @param {boolean} silent when true, do not fire events
+     * @return {boolean} true if the move was performed, false if it failed
+     * @protected
+     */
+    _setRegionValue: function(source, newOffset, newOffset2, skipAnim, force, silent) {
+        var t = this.thumb, newX, newY;
 
-        this.valueChangeSource = this.SOURCE_SET_VALUE;
-
-        if (!this.thumb.available) {
+        if (!t.available) {
             this.deferredSetRegionValue = arguments;
             return false;
         }
@@ -727,19 +796,24 @@
             return false;
         }
 
-        var t = this.thumb;
+        if (!t._isRegion) {
+            return false;
+        }
+
+        this._silent = silent;
+
+        this.valueChangeSource = source || Slider.SOURCE_SET_VALUE;
+
         t.lastOffset = [newOffset, newOffset2];
         this.verifyOffset(true);
-        if (t._isRegion) {
-            this._slideStart();
-            var newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
-            var newY = t.initPageY + newOffset2 + this.thumbCenterPoint.y;
-            this.moveThumb(newX, newY, skipAnim);
-            return true;
-        }
 
-        return false;
+        this._slideStart();
 
+        newX = t.initPageX + newOffset + this.thumbCenterPoint.x;
+        newY = t.initPageY + newOffset2 + this.thumbCenterPoint.y;
+        this.moveThumb(newX, newY, skipAnim);
+
+        return true;
     },
 
     /**
@@ -751,9 +825,13 @@
      */
     verifyOffset: function(checkPos) {
 
-        var xy = YAHOO.util.Dom.getXY(this.getEl()),
+        var xy = getXY(this.getEl()),
             t  = this.thumb;
 
+        if (!this.thumbCenterPoint || !this.thumbCenterPoint.x) {
+            this.setThumbCenterPoint();
+        }
+
         if (xy) {
 
 
@@ -766,9 +844,7 @@
                 // Reset thumb
                 t.initPageX = this.initPageX + t.startOffset[0];
                 t.initPageY = this.initPageY + t.startOffset[1];
-                //t.deltaSetXY = [-this.initPageX,-this.initPageY];
                 t.deltaSetXY = null;
-                //this.resetConstraints();
                 this.resetThumbConstraints();
 
                 return false;
@@ -792,8 +868,9 @@
      */
     moveThumb: function(x, y, skipAnim, midMove) {
 
-        var t = this.thumb;
-        var self = this;
+        var t = this.thumb,
+            self = this,
+            p,_p,anim;
 
         if (!t.available) {
             return;
@@ -802,40 +879,38 @@
 
         t.setDelta(this.thumbCenterPoint.x, this.thumbCenterPoint.y);
 
-        var _p = t.getTargetCoord(x, y);
-        var p = [Math.round(_p.x), Math.round(_p.y)];
+        _p = t.getTargetCoord(x, y);
+        p = [Math.round(_p.x), Math.round(_p.y)];
 
-        this._slideStart();
-
-        if (this.animate && YAHOO.widget.Slider.ANIM_AVAIL && t._graduated && !skipAnim) {
-            // this.thumb._animating = true;
+        if (this.animate && t._graduated && !skipAnim) {
             this.lock();
 
             // cache the current thumb pos
-            this.curCoord = YAHOO.util.Dom.getXY(this.thumb.getEl());
+            this.curCoord = getXY(this.thumb.getEl());
             this.curCoord = [Math.round(this.curCoord[0]), Math.round(this.curCoord[1])];
 
             setTimeout( function() { self.moveOneTick(p); }, this.tickPause );
 
-        } else if (this.animate && YAHOO.widget.Slider.ANIM_AVAIL && !skipAnim) {
+        } else if (this.animate && Slider.ANIM_AVAIL && !skipAnim) {
 
-            // this.thumb._animating = true;
             this.lock();
 
-            var oAnim = new YAHOO.util.Motion( 
+            anim = new YAHOO.util.Motion( 
                     t.id, { points: { to: p } }, 
                     this.animationDuration, 
                     YAHOO.util.Easing.easeOut );
 
-            oAnim.onComplete.subscribe( function() { 
-                    
-                    self.endMove(); 
-                } );
-            oAnim.animate();
+            anim.onComplete.subscribe( function() { 
+                    self.unlock();
+                    if (!self._mouseDown) {
+                        self.endMove(); 
+                    }
+                });
+            anim.animate();
+
         } else {
             t.setDragElPos(x, y);
-            // this.fireEvents();
-            if (!midMove) {
+            if (!midMove && !this._mouseDown) {
                 this.endMove();
             }
         }
@@ -852,7 +927,6 @@
     },
 
     _slideEnd: function() {
-
         if (this._sliding && this.moveComplete) {
             // Reset state before firing slideEnd
             var silent = this._silent;
@@ -875,21 +949,9 @@
      */
     moveOneTick: function(finalCoord) {
 
-        var t = this.thumb, tmp;
-
-
-        // redundant call to getXY since we set the position most of time prior 
-        // to getting here.  Moved to this.curCoord
-        //var curCoord = YAHOO.util.Dom.getXY(t.getEl());
-
-        // alignElWithMouse caches position in lastPageX, lastPageY .. doesn't work
-        //var curCoord = [this.lastPageX, this.lastPageY];
-
-        // var thresh = Math.min(t.tickSize + (Math.floor(t.tickSize/2)), 10);
-        // var thresh = 10;
-        // var thresh = t.tickSize + (Math.floor(t.tickSize/2));
-
-        var nextCoord = null,
+        var t = this.thumb,
+            self = this,
+            nextCoord = null,
             tmpX, tmpY;
 
         if (t._isRegion) {
@@ -913,27 +975,24 @@
             this.curCoord = nextCoord;
 
             // move to the next coord
-            // YAHOO.util.Dom.setXY(t.getEl(), nextCoord);
-
-            // var el = t.getEl();
-            // YAHOO.util.Dom.setStyle(el, "left", (nextCoord[0] + this.thumb.deltaSetXY[0]) + "px");
-            // YAHOO.util.Dom.setStyle(el, "top",  (nextCoord[1] + this.thumb.deltaSetXY[1]) + "px");
-
             this.thumb.alignElWithMouse(t.getEl(), nextCoord[0] + this.thumbCenterPoint.x, nextCoord[1] + this.thumbCenterPoint.y);
             
             // check if we are in the final position, if not make a recursive call
             if (!(nextCoord[0] == finalCoord[0] && nextCoord[1] == finalCoord[1])) {
-                var self = this;
                 setTimeout(function() { self.moveOneTick(finalCoord); }, 
                         this.tickPause);
             } else {
+                this.unlock();
+                if (!this._mouseDown) {
+                    this.endMove();
+                }
+            }
+        } else {
+            this.unlock();
+            if (!this._mouseDown) {
                 this.endMove();
             }
-        } else {
-            this.endMove();
         }
-
-        //this.tickPause = Math.round(this.tickPause/2);
     },
 
     /**
@@ -942,10 +1001,11 @@
      * @private
      */
     _getNextX: function(curCoord, finalCoord) {
-        var t = this.thumb;
-        var thresh;
-        var tmp = [];
-        var nextCoord = null;
+        var t = this.thumb,
+            thresh,
+            tmp = [],
+            nextCoord = null;
+
         if (curCoord[0] > finalCoord[0]) {
             thresh = t.tickSize - this.thumbCenterPoint.x;
             tmp = t.getTargetCoord( curCoord[0] - thresh, curCoord[1] );
@@ -967,10 +1027,10 @@
      * @private
      */
     _getNextY: function(curCoord, finalCoord) {
-        var t = this.thumb;
-        var thresh;
-        var tmp = [];
-        var nextCoord = null;
+        var t = this.thumb,
+            thresh,
+            tmp = [],
+            nextCoord = null;
 
         if (curCoord[1] > finalCoord[1]) {
             thresh = t.tickSize - this.thumbCenterPoint.y;
@@ -998,7 +1058,6 @@
         }
 
         this.thumb.autoOffset();
-        //this.thumb.resetConstraints();
         this.resetThumbConstraints();
     },
 
@@ -1008,17 +1067,18 @@
      * @private
      */
     onMouseDown: function(e) {
-        // this.resetConstraints(true);
-        // this.thumb.resetConstraints(true);
-
         if (!this.backgroundEnabled || this.isLocked()) {
             return false;
         }
 
-        var x = YAHOO.util.Event.getPageX(e);
-        var y = YAHOO.util.Event.getPageY(e);
+        this._mouseDown = true;
 
+        var x = Event.getPageX(e),
+            y = Event.getPageY(e);
+
+
         this.focus();
+        this._slideStart();
         this.moveThumb(x, y);
     },
 
@@ -1029,8 +1089,8 @@
      */
     onDrag: function(e) {
         if (this.backgroundEnabled && !this.isLocked()) {
-            var x = YAHOO.util.Event.getPageX(e);
-            var y = YAHOO.util.Event.getPageY(e);
+            var x = Event.getPageX(e),
+                y = Event.getPageY(e);
             this.moveThumb(x, y, true, true);
             this.fireEvents();
         }
@@ -1042,10 +1102,10 @@
      * @private
      */
     endMove: function () {
-        // this._animating = false;
         this.unlock();
+        this.fireEvents();
         this.moveComplete = true;
-        this.fireEvents();
+        this._slideEnd();
     },
 
     /**
@@ -1076,7 +1136,7 @@
      */
     fireEvents: function (thumbEvent) {
 
-        var t = this.thumb;
+        var t = this.thumb, newX, newY, newVal;
 
         if (!thumbEvent) {
             t.cachePosition();
@@ -1084,8 +1144,8 @@
 
         if (! this.isLocked()) {
             if (t._isRegion) {
-                var newX = t.getXValue();
-                var newY = t.getYValue();
+                newX = t.getXValue();
+                newY = t.getYValue();
 
                 if (newX != this.previousX || newY != this.previousY) {
                     if (!this._silent) {
@@ -1098,7 +1158,7 @@
                 this.previousY = newY;
 
             } else {
-                var newVal = t.getValue();
+                newVal = t.getValue();
                 if (newVal != this.previousVal) {
                     if (!this._silent) {
                         this.onChange( newVal );
@@ -1108,8 +1168,6 @@
                 this.previousVal = newVal;
             }
 
-            this._slideEnd();
-
         }
     },
 
@@ -1124,8 +1182,10 @@
 
 });
 
-YAHOO.augment(YAHOO.widget.Slider, YAHOO.util.EventProvider);
+YAHOO.lang.augmentProto(Slider, YAHOO.util.EventProvider);
 
+YAHOO.widget.Slider = Slider;
+})();
 /**
  * A drag and drop implementation to be used as the thumb of a slider.
  * @class SliderThumb
@@ -1143,7 +1203,6 @@
 YAHOO.widget.SliderThumb = function(id, sGroup, iLeft, iRight, iUp, iDown, iTickSize) {
 
     if (id) {
-        //this.init(id, sGroup);
         YAHOO.widget.SliderThumb.superclass.constructor.call(this, id, sGroup);
 
         /**
@@ -1156,9 +1215,7 @@
     }
 
 
-    //this.removeInvalidHandleType("A");
 
-
     /**
      * Overrides the isTarget property in YAHOO.util.DragDrop
      * @property isTarget
@@ -1245,28 +1302,29 @@
      * @type [int, int]
      */
     getOffsetFromParent0: function(parentPos) {
-        var myPos = YAHOO.util.Dom.getXY(this.getEl());
-        var ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
+        var myPos = YAHOO.util.Dom.getXY(this.getEl()),
+            ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
 
         return [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
     },
 
     getOffsetFromParent: function(parentPos) {
 
-        var el = this.getEl(), newOffset;
+        var el = this.getEl(), newOffset,
+            myPos,ppos,l,t,deltaX,deltaY,newLeft,newTop;
 
         if (!this.deltaOffset) {
 
-            var myPos = YAHOO.util.Dom.getXY(el);
-            var ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
+            myPos = YAHOO.util.Dom.getXY(el);
+            ppos  = parentPos || YAHOO.util.Dom.getXY(this.parentElId);
 
             newOffset = [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
 
-            var l = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
-            var t = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+            l = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            t = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
 
-            var deltaX = l - newOffset[0];
-            var deltaY = t - newOffset[1];
+            deltaX = l - newOffset[0];
+            deltaY = t - newOffset[1];
 
             if (isNaN(deltaX) || isNaN(deltaY)) {
             } else {
@@ -1274,15 +1332,13 @@
             }
 
         } else {
-            var newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
-            var newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
+            newLeft = parseInt( YAHOO.util.Dom.getStyle(el, "left"), 10 );
+            newTop  = parseInt( YAHOO.util.Dom.getStyle(el, "top" ), 10 );
 
             newOffset  = [newLeft + this.deltaOffset[0], newTop + this.deltaOffset[1]];
         }
 
         return newOffset;
-
-        //return [ (myPos[0] - ppos[0]), (myPos[1] - ppos[1]) ];
     },
 
     /**
@@ -1295,9 +1351,6 @@
      * @param {int} iTickSize the width of the tick interval.
      */
     initSlider: function (iLeft, iRight, iUp, iDown, iTickSize) {
-
-
-        //document these.  new for 0.12.1
         this.initLeft = iLeft;
         this.initRight = iRight;
         this.initUp = iUp;
@@ -1397,7 +1450,6 @@
     }
 
 });
-
 /**
  * A slider with two thumbs, one that represents the min value and 
  * the other the max.  Actually a composition of two sliders, both with
@@ -1417,11 +1469,17 @@
  * @param {int}    range The number of pixels the thumbs may move within
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  */
-YAHOO.widget.DualSlider = function(minSlider, maxSlider, range, initVals) {
+(function () {
 
-    var self = this,
-        lang = YAHOO.lang;
+var Event = YAHOO.util.Event,
+    YW = YAHOO.widget;
 
+function DualSlider(minSlider, maxSlider, range, initVals) {
+
+    var self  = this,
+        ready = { min : false, max : false },
+        minThumbOnMouseDown, maxThumbOnMouseDown;
+
     /**
      * A slider instance that keeps track of the lower value of the range.
      * <strong>read only</strong>
@@ -1453,24 +1511,22 @@
      */
     this.isHoriz = minSlider.thumb._isHoriz;
 
-    // Validate initial values
-    initVals = YAHOO.lang.isArray(initVals) ? initVals : [0,range];
-    initVals[0] = Math.min(Math.max(parseInt(initVals[0],10)|0,0),range);
-    initVals[1] = Math.max(Math.min(parseInt(initVals[1],10)|0,range),0);
-    // Swap initVals if min > max
-    if (initVals[0] > initVals[1]) {
-        initVals.splice(0,2,initVals[1],initVals[0]);
-    }
+    //FIXME: this is horrible
+    minThumbOnMouseDown = this.minSlider.thumb.onMouseDown;
+    maxThumbOnMouseDown = this.maxSlider.thumb.onMouseDown;
+    this.minSlider.thumb.onMouseDown = function() {
+        self.activeSlider = self.minSlider;
+        minThumbOnMouseDown.apply(this,arguments);
+    };
+    this.maxSlider.thumb.onMouseDown = function () {
+        self.activeSlider = self.maxSlider;
+        maxThumbOnMouseDown.apply(this,arguments);
+    };
 
-    var ready = { min : false, max : false };
-
     this.minSlider.thumb.onAvailable = function () {
         minSlider.setStartSliderState();
         ready.min = true;
         if (ready.max) {
-            minSlider.setValue(initVals[0],true,true,true);
-            maxSlider.setValue(initVals[1],true,true,true);
-            self.updateValue(true);
             self.fireEvent('ready',self);
         }
     };
@@ -1478,29 +1534,16 @@
         maxSlider.setStartSliderState();
         ready.max = true;
         if (ready.min) {
-            minSlider.setValue(initVals[0],true,true,true);
-            maxSlider.setValue(initVals[1],true,true,true);
-            self.updateValue(true);
             self.fireEvent('ready',self);
         }
     };
 
     // dispatch mousedowns to the active slider
-    minSlider.onMouseDown = function(e) {
-        return self._handleMouseDown(e);
+    minSlider.onMouseDown =
+    maxSlider.onMouseDown = function(e) {
+        return this.backgroundEnabled && self._handleMouseDown(e);
     };
 
-    // we can safely ignore a mousedown on one of the sliders since
-    // they share a background
-    maxSlider.onMouseDown = function(e) { 
-        if (self.minSlider.isLocked() && !self.minSlider._sliding) {
-            return self._handleMouseDown(e);
-        } else {
-            YAHOO.util.Event.stopEvent(e); 
-            return false;
-        }
-    };
-
     // Fix the drag behavior so that only the active slider
     // follows the drag
     minSlider.onDrag =
@@ -1508,6 +1551,20 @@
         self._handleDrag(e);
     };
 
+    // Likely only the minSlider's onMouseUp will be executed, but both are
+    // overridden just to be safe
+    minSlider.onMouseUp =
+    maxSlider.onMouseUp = function (e) {
+        self._handleMouseUp(e);
+    };
+
+    // Replace the _bindKeyEvents for the minSlider and remove that for the
+    // maxSlider since they share the same bg element.
+    minSlider._bindKeyEvents = function () {
+        self._bindKeyEvents(this);
+    };
+    maxSlider._bindKeyEvents = function () {};
+
     // The core events for each slider are handled so we can expose a single
     // event for when the event happens on either slider
     minSlider.subscribe("change", this._handleMinChange, minSlider, this);
@@ -1545,10 +1602,27 @@
      * @param {Slider} activeSlider the moving slider
      */
     this.createEvent("slideEnd", this);
-};
 
-YAHOO.widget.DualSlider.prototype = {
+    // Validate initial values
+    initVals = YAHOO.lang.isArray(initVals) ? initVals : [0,range];
+    initVals[0] = Math.min(Math.max(parseInt(initVals[0],10)|0,0),range);
+    initVals[1] = Math.max(Math.min(parseInt(initVals[1],10)|0,range),0);
+    // Swap initVals if min > max
+    if (initVals[0] > initVals[1]) {
+        initVals.splice(0,2,initVals[1],initVals[0]);
+    }
+    this.minVal = initVals[0];
+    this.maxVal = initVals[1];
 
+    // Set values so initial assignment when the slider thumbs are ready will
+    // use these values
+    this.minSlider.setValue(this.minVal,true,true,true);
+    this.maxSlider.setValue(this.maxVal,true,true,true);
+
+}
+
+DualSlider.prototype = {
+
     /**
      * The current value of the min thumb. <strong>read only</strong>.
      * @property minVal
@@ -1595,7 +1669,7 @@
      * @private
      */
     _handleDrag: function(e) {
-        YAHOO.widget.Slider.prototype.onDrag.call(this.activeSlider, e);
+        YW.Slider.prototype.onDrag.call(this.activeSlider, e);
     },
 
     /**
@@ -1619,6 +1693,39 @@
     },
 
     /**
+     * Set up the listeners for the keydown and keypress events.
+     *
+     * @method _bindKeyEvents
+     * @protected
+     */
+    _bindKeyEvents : function (slider) {
+        Event.on(slider.id,'keydown', this._handleKeyDown, this,true);
+        Event.on(slider.id,'keypress',this._handleKeyPress,this,true);
+    },
+
+    /**
+     * Delegate event handling to the active Slider.  See Slider.handleKeyDown.
+     *
+     * @method _handleKeyDown
+     * @param e {Event} the mousedown DOM event
+     * @protected
+     */
+    _handleKeyDown : function (e) {
+        this.activeSlider.handleKeyDown.apply(this.activeSlider,arguments);
+    },
+
+    /**
+     * Delegate event handling to the active Slider.  See Slider.handleKeyPress.
+     *
+     * @method _handleKeyPress
+     * @param e {Event} the mousedown DOM event
+     * @protected
+     */
+    _handleKeyPress : function (e) {
+        this.activeSlider.handleKeyPress.apply(this.activeSlider,arguments);
+    },
+
+    /**
      * Sets the min and max thumbs to new values.
      * @method setValues
      * @param min {int} Pixel offset to assign to the min thumb
@@ -1694,13 +1801,14 @@
      * events.  Default false
      */
     setMinValue : function (min, skipAnim, force, silent) {
-        var mins = this.minSlider;
+        var mins = this.minSlider,
+            self = this;
 
         this.activeSlider = mins;
 
         // Use a one-time event callback to delay the updateValue call
         // until after the slide operation is done
-        var self = this;
+        self = this;
         this._oneTimeCallback(mins,'slideEnd',function () {
             self.updateValue(silent);
             // Clean the slideEnd event on a timeout since this
@@ -1708,7 +1816,7 @@
             setTimeout(function () { self._cleanEvent(mins,'slideEnd'); }, 0);
         });
 
-        mins.setValue(min, skipAnim, force, silent);
+        mins.setValue(min, skipAnim, force);
     },
 
     /**
@@ -1723,13 +1831,13 @@
      * events.  Default false
      */
     setMaxValue : function (max, skipAnim, force, silent) {
-        var maxs = this.maxSlider;
+        var maxs = this.maxSlider,
+            self = this;
 
         this.activeSlider = maxs;
 
         // Use a one-time event callback to delay the updateValue call
         // until after the slide operation is done
-        var self = this;
         this._oneTimeCallback(maxs,'slideEnd',function () {
             self.updateValue(silent);
             // Clean the slideEnd event on a timeout since this
@@ -1737,7 +1845,7 @@
             setTimeout(function () { self._cleanEvent(maxs,'slideEnd'); }, 0);
         });
 
-        maxs.setValue(max, skipAnim, force, silent);
+        maxs.setValue(max, skipAnim, force);
     },
 
     /**
@@ -1750,23 +1858,24 @@
     updateValue: function(silent) {
         var min     = this.minSlider.getValue(),
             max     = this.maxSlider.getValue(),
-            changed = false;
+            changed = false,
+            mint,maxt,dim,minConstraint,maxConstraint,thumbInnerWidth;
 
         if (min != this.minVal || max != this.maxVal) {
             changed = true;
 
-            var mint = this.minSlider.thumb,
-                maxt = this.maxSlider.thumb,
-                dim  = this.isHoriz ? 'x' : 'y';
+            mint = this.minSlider.thumb;
+            maxt = this.maxSlider.thumb;
+            dim  = this.isHoriz ? 'x' : 'y';
 
-            var thumbInnerWidth = this.minSlider.thumbCenterPoint[dim] +
-                                  this.maxSlider.thumbCenterPoint[dim];
+            thumbInnerWidth = this.minSlider.thumbCenterPoint[dim] +
+                              this.maxSlider.thumbCenterPoint[dim];
 
             // Establish barriers within the respective other thumb's edge, less
             // the minRange.  Limit to the Slider's range in the case of
             // negative minRanges.
-            var minConstraint = Math.max(max-thumbInnerWidth-this.minRange,0);
-            var maxConstraint = Math.min(-min-thumbInnerWidth-this.minRange,0);
+            minConstraint = Math.max(max-thumbInnerWidth-this.minRange,0);
+            maxConstraint = Math.min(-min-thumbInnerWidth-this.minRange,0);
 
             if (this.isHoriz) {
                 minConstraint = Math.min(minConstraint,maxt.rightConstraint);
@@ -1800,8 +1909,8 @@
     selectActiveSlider: function(e) {
         var min = this.minSlider,
             max = this.maxSlider,
-            minLocked = min.isLocked(),
-            maxLocked = max.isLocked(),
+            minLocked = min.isLocked() || !min.backgroundEnabled,
+            maxLocked = max.isLocked() || !min.backgroundEnabled,
             Ev  = YAHOO.util.Event,
             d;
 
@@ -1819,16 +1928,35 @@
     },
 
     /**
-     * Overrides the onMouseDown for both slider, only moving the active slider
-     * @method handleMouseDown
-     * @private
+     * Delegates the onMouseDown to the appropriate Slider
+     *
+     * @method _handleMouseDown
+     * @param e {Event} mouseup event
+     * @protected
      */
     _handleMouseDown: function(e) {
-        this.selectActiveSlider(e);
-        YAHOO.widget.Slider.prototype.onMouseDown.call(this.activeSlider, e);
+        if (!e._handled) {
+            e._handled = true;
+            this.selectActiveSlider(e);
+            return YW.Slider.prototype.onMouseDown.call(this.activeSlider, e);
+        } else {
+            return false;
+        }
     },
 
     /**
+     * Delegates the onMouseUp to the active Slider
+     *
+     * @method _handleMouseUp
+     * @param e {Event} mouseup event
+     * @protected
+     */
+    _handleMouseUp : function (e) {
+        YW.Slider.prototype.onMouseUp.apply(
+            this.activeSlider, arguments);
+    },
+
+    /**
      * Schedule an event callback that will execute once, then unsubscribe
      * itself.
      * @method _oneTimeCallback
@@ -1856,8 +1984,9 @@
      * @private
      */
     _cleanEvent : function (o,evt) {
+        var ce,i,len,j,subs,newSubs;
+
         if (o.__yui_events && o.events[evt]) {
-            var ce, i, len;
             for (i = o.__yui_events.length; i >= 0; --i) {
                 if (o.__yui_events[i].type === evt) {
                     ce = o.__yui_events[i];
@@ -1865,9 +1994,9 @@
                 }
             }
             if (ce) {
-                var subs    = ce.subscribers,
-                    newSubs = [],
-                    j = 0;
+                subs    = ce.subscribers;
+                newSubs = [];
+                j = 0;
                 for (i = 0, len = subs.length; i < len; ++i) {
                     if (subs[i]) {
                         newSubs[j++] = subs[i];
@@ -1880,7 +2009,7 @@
 
 };
 
-YAHOO.augment(YAHOO.widget.DualSlider, YAHOO.util.EventProvider);
+YAHOO.lang.augmentProto(DualSlider, YAHOO.util.EventProvider);
 
 
 /**
@@ -1897,15 +2026,15 @@
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  * @return {DualSlider} a horizontal dual-thumb slider control
  */
-YAHOO.widget.Slider.getHorizDualSlider = 
+YW.Slider.getHorizDualSlider = 
     function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
-        var mint, maxt;
-        var YW = YAHOO.widget, Slider = YW.Slider, Thumb = YW.SliderThumb;
+        var mint = new YW.SliderThumb(minthumb, bg, 0, range, 0, 0, iTickSize),
+            maxt = new YW.SliderThumb(maxthumb, bg, 0, range, 0, 0, iTickSize);
 
-        mint = new Thumb(minthumb, bg, 0, range, 0, 0, iTickSize);
-        maxt = new Thumb(maxthumb, bg, 0, range, 0, 0, iTickSize);
-
-        return new YW.DualSlider(new Slider(bg, bg, mint, "horiz"), new Slider(bg, bg, maxt, "horiz"), range, initVals);
+        return new DualSlider(
+                    new YW.Slider(bg, bg, mint, "horiz"),
+                    new YW.Slider(bg, bg, maxt, "horiz"),
+                    range, initVals);
 };
 
 /**
@@ -1922,14 +2051,18 @@
  * @param {Array}  initVals (optional) [min,max] Initial thumb placement
  * @return {DualSlider} a vertical dual-thumb slider control
  */
-YAHOO.widget.Slider.getVertDualSlider = 
+YW.Slider.getVertDualSlider = 
     function (bg, minthumb, maxthumb, range, iTickSize, initVals) {
-        var mint, maxt;
-        var YW = YAHOO.widget, Slider = YW.Slider, Thumb = YW.SliderThumb;
+        var mint = new YW.SliderThumb(minthumb, bg, 0, 0, 0, range, iTickSize),
+            maxt = new YW.SliderThumb(maxthumb, bg, 0, 0, 0, range, iTickSize);
 
-        mint = new Thumb(minthumb, bg, 0, 0, 0, range, iTickSize);
-        maxt = new Thumb(maxthumb, bg, 0, 0, 0, range, iTickSize);
+        return new YW.DualSlider(
+                    new YW.Slider(bg, bg, mint, "vert"),
+                    new YW.Slider(bg, bg, maxt, "vert"),
+                    range, initVals);
+};
 
-        return new YW.DualSlider(new Slider(bg, bg, mint, "vert"), new Slider(bg, bg, maxt, "vert"), range, initVals);
-};
-YAHOO.register("slider", YAHOO.widget.Slider, {version: "2.6.0", build: "1321"});
+YAHOO.widget.DualSlider = DualSlider;
+
+})();
+YAHOO.register("slider", YAHOO.widget.Slider, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/stylesheet/stylesheet-debug.js
===================================================================
--- trunk/root/static/yui/stylesheet/stylesheet-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/stylesheet/stylesheet-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,643 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The StyleSheet component is a utility for managing css rules at the
+ * stylesheet level
+ *
+ * @module stylesheet
+ * @namespace YAHOO.util
+ * @requires yahoo
+ * @beta
+ */
+(function () {
+
+var d      = document,
+    p      = d.createElement('p'), // Have to hold the node (see notes)
+    workerStyle = p.style, // worker style collection
+    lang   = YAHOO.lang,
+    selectors = {},
+    sheets = {},
+    ssId   = 0,
+    floatAttr = ('cssFloat' in workerStyle) ? 'cssFloat' : 'styleFloat',
+    _toCssText,
+    _unsetOpacity,
+    _unsetProperty;
+
+/*
+ * Normalizes the removal of an assigned style for opacity.  IE uses the filter property.
+ */
+_unsetOpacity = ('opacity' in workerStyle) ?
+    function (style) { style.opacity = ''; } :
+    function (style) { style.filter = ''; };
+        
+/*
+ * Normalizes the removal of an assigned style for a given property.  Expands
+ * shortcut properties if necessary and handles the various names for the float property.
+ */
+workerStyle.border = "1px solid red";
+workerStyle.border = ''; // IE doesn't unset child properties
+_unsetProperty = workerStyle.borderLeft ?
+    function (style,prop) {
+        var p;
+        if (prop !== floatAttr && prop.toLowerCase().indexOf('float') != -1) {
+            prop = floatAttr;
+        }
+        if (typeof style[prop] === 'string') {
+            switch (prop) {
+                case 'opacity':
+                case 'filter' : _unsetOpacity(style); break;
+                case 'font'   :
+                    style.font       = style.fontStyle = style.fontVariant =
+                    style.fontWeight = style.fontSize  = style.lineHeight  =
+                    style.fontFamily = '';
+                    break;
+                default       :
+                    for (p in style) {
+                        if (p.indexOf(prop) === 0) {
+                            style[p] = '';
+                        }
+                    }
+            }
+        }
+    } :
+    function (style,prop) {
+        if (prop !== floatAttr && prop.toLowerCase().indexOf('float') != -1) {
+            prop = floatAttr;
+        }
+        if (lang.isString(style[prop])) {
+            if (prop === 'opacity') {
+                _unsetOpacity(style);
+            } else {
+                style[prop] = '';
+            }
+        }
+    };
+    
+/**
+ * Create an instance of YAHOO.util.StyleSheet to encapsulate a css stylesheet.
+ * The constructor can be called using function or constructor syntax.
+ * <pre><code>var sheet = YAHOO.util.StyleSheet(..);</pre></code>
+ * or
+ * <pre><code>var sheet = new YAHOO.util.StyleSheet(..);</pre></code>
+ *
+ * The first parameter passed can be any of the following things:
+ * <ul>
+ *   <li>The desired string name to register a new empty sheet</li>
+ *   <li>The string name of an existing YAHOO.util.StyleSheet instance</li>
+ *   <li>The unique yuiSSID generated for an existing YAHOO.util.StyleSheet instance</li>
+ *   <li>The id of an existing <code><link></code> or <code><style></code> node</li>
+ *   <li>The node reference for an existing <code><link></code> or <code><style></code> node</li>
+ *   <li>A chunk of css text to create a new stylesheet from</li>
+ * </ul>
+ *
+ * <p>If a string is passed, StyleSheet will first look in its static name
+ * registry for an existing sheet, then in the DOM for an element with that id.
+ * If neither are found and the string contains the { character, it will be
+ * used as a the initial cssText for a new StyleSheet.  Otherwise, a new empty
+ * StyleSheet is created, assigned the string value as a name, and registered
+ * statically by that name.</p>
+ *
+ * <p>The optional second parameter is a string name to register the sheet as.
+ * This param is largely useful when providing a node id/ref or chunk of css
+ * text to create a populated instance.</p>
+ * 
+ * @class StyleSheet
+ * @constructor
+ * @param seed {String|HTMLElement} a style or link node, its id, or a name or
+ *              yuiSSID of a StyleSheet, or a string of css text (see above)
+ * @param name {String} OPTIONAL name to register instance for future static
+ *              access
+ */
+function StyleSheet(seed, name) {
+    var head,
+        node,
+        sheet,
+        cssRules = {},
+        _rules,
+        _insertRule,
+        _deleteRule,
+        i,r,sel;
+
+    // Factory or constructor
+    if (!(this instanceof arguments.callee)) {
+        return new arguments.callee(seed,name);
+    }
+
+    head = d.getElementsByTagName('head')[0];
+    if (!head) {
+        // TODO: do something. Preferably something smart
+        YAHOO.log('HEAD element not found to append STYLE node','error','StyleSheet');
+        throw new Error('HEAD element not found to append STYLE node');
+    }
+
+    // capture the DOM node if the string is an id
+    node = seed && (seed.nodeName ? seed : d.getElementById(seed));
+
+    // Check for the StyleSheet in the static registry
+    if (seed && sheets[seed]) {
+        return sheets[seed];
+    } else if (node && node.yuiSSID && sheets[node.yuiSSID]) {
+        return sheets[node.yuiSSID];
+    }
+
+    // Create a style node if necessary
+    if (!node || !/^(?:style|link)$/i.test(node.nodeName)) {
+        node = d.createElement('style');
+        node.type = 'text/css';
+    }
+
+    if (lang.isString(seed)) {
+        // Create entire sheet from seed cssText
+        if (seed.indexOf('{') != -1) {
+            // Not a load-time fork because low run-time impact and IE fails
+            // test for s.styleSheet at page load time (oddly)
+            if (node.styleSheet) {
+                node.styleSheet.cssText = seed;
+            } else {
+                node.appendChild(d.createTextNode(seed));
+            }
+        } else if (!name) {
+            name = seed;
+        }
+    }
+
+    if (node.parentNode !== head) {
+        // styleSheet isn't available on the style node in FF2 until appended
+        // to the head element.  style nodes appended to body do not affect
+        // change in Safari.
+        head.appendChild(node);
+    }
+
+    // Begin setting up private aliases to the important moving parts
+    // 1. The stylesheet object
+    // IE stores StyleSheet under the "styleSheet" property
+    // Safari doesn't populate sheet for xdomain link elements
+    sheet = node.sheet || node.styleSheet;
+
+    // 2. The style rules collection
+    // IE stores the rules collection under the "rules" property
+    _rules = sheet && ('cssRules' in sheet) ? 'cssRules' : 'rules';
+
+    // 3. Initialize the cssRules map from the node
+    // xdomain link nodes forbid access to the cssRules collection, so this
+    // will throw an error.
+    // TODO: research alternate stylesheet, @media
+        for (i = sheet[_rules].length - 1; i >= 0; --i) {
+            r   = sheet[_rules][i];
+            sel = r.selectorText;
+
+            if (cssRules[sel]) {
+                cssRules[sel].style.cssText += ';' + r.style.cssText;
+                _deleteRule(i);
+            } else {
+                cssRules[sel] = r;
+            }
+        }
+
+    // 4. The method to remove a rule from the stylesheet
+    // IE supports removeRule
+    _deleteRule = ('deleteRule' in sheet) ?
+        function (i) { sheet.deleteRule(i); } :
+        function (i) { sheet.removeRule(i); };
+
+    // 5. The method to add a new rule to the stylesheet
+    // IE supports addRule with different signature
+    _insertRule = ('insertRule' in sheet) ?
+        function (sel,css,i) { sheet.insertRule(sel+' {'+css+'}',i); } :
+        function (sel,css,i) { sheet.addRule(sel,css,i); };
+
+    // Cache the instance by the generated Id
+    node.yuiSSID = 'yui-stylesheet-' + (ssId++);
+    StyleSheet.register(node.yuiSSID,this);
+
+    // Register the instance by name if provided or defaulted from seed
+    if (name) {
+        StyleSheet.register(name,this);
+    }
+
+    // Public API
+    lang.augmentObject(this,{
+        /**
+         * Get the unique yuiSSID for this StyleSheet instance
+         *
+         * @method getId
+         * @return {Number} the static id
+         */
+        getId : function () { return node.yuiSSID; },
+
+        /**
+         * The HTMLElement that this instance encapsulates
+         *
+         * @property node
+         * @type HTMLElement
+         */
+        node : node,
+
+        /**
+         * Enable all the rules in the sheet
+         *
+         * @method enable
+         * @return {StyleSheet} the instance
+         * @chainable
+         */
+        // Enabling/disabling the stylesheet.  Changes may be made to rules
+        // while disabled.
+        enable : function () { sheet.disabled = false; return this; },
+
+        /**
+         * Disable all the rules in the sheet.  Rules may be changed while the
+         * StyleSheet is disabled.
+         *
+         * @method disable
+         * @return {StyleSheet} the instance
+         * @chainable
+         */
+        disable : function () { sheet.disabled = true; return this; },
+
+        /**
+         * Returns boolean indicating whether the StyleSheet is enabled
+         *
+         * @method isEnabled
+         * @return {Boolean} is it enabled?
+         */
+        isEnabled : function () { return !sheet.disabled; },
+
+        /**
+         * <p>Set style properties for a provided selector string.
+         * If the selector includes commas, it will be split into individual
+         * selectors and applied accordingly.  If the selector string does not
+         * have a corresponding rule in the sheet, it will be added.</p>
+         *
+         * <p>The object properties in the second parameter must be the JavaScript
+         * names of style properties.  E.g. fontSize rather than font-size.</p>
+         *
+         * <p>The float style property will be set by any of "float",
+         * "styleFloat", or "cssFloat".</p>
+         *
+         * @method set
+         * @param sel {String} the selector string to apply the changes to
+         * @param css {Object} Object literal of style properties and new values
+         * @return {StyleSheet} the StyleSheet instance
+         * @chainable
+         */
+        set : function (sel,css) {
+            var rule = cssRules[sel],
+                multi = sel.split(/\s*,\s*/),i,
+                idx;
+
+            // IE's addRule doesn't support multiple comma delimited selectors
+            if (multi.length > 1) {
+                for (i = multi.length - 1; i >= 0; --i) {
+                    this.set(multi[i], css);
+                }
+                return this;
+            }
+
+            // Some selector values can cause IE to hang
+            if (!StyleSheet.isValidSelector(sel)) {
+                YAHOO.log("Invalid selector '"+sel+"' passed to set (ignoring).",'warn','StyleSheet');
+                return this;
+            }
+
+            // Opera throws an error if there's a syntax error in assigned
+            // cssText. Avoid this using a worker style collection, then
+            // assigning the resulting cssText.
+            if (rule) {
+                rule.style.cssText = StyleSheet.toCssText(css,rule.style.cssText);
+            } else {
+                idx = sheet[_rules].length;
+                css = StyleSheet.toCssText(css);
+
+                // IE throws an error when attempting to addRule(sel,'',n)
+                // which would crop up if no, or only invalid values are used
+                if (css) {
+                    _insertRule(sel, css, idx);
+
+                    // Safari replaces the rules collection, but maintains the
+                    // rule instances in the new collection when rules are
+                    // added/removed
+                    cssRules[sel] = sheet[_rules][idx];
+                }
+            }
+            return this;
+        },
+
+        /**
+         * <p>Unset style properties for a provided selector string, removing
+         * their effect from the style cascade.</p>
+         *
+         * <p>If the selector includes commas, it will be split into individual
+         * selectors and applied accordingly.  If there are no properties
+         * remaining in the rule after unsetting, the rule is removed.</p>
+         *
+         * <p>The style property or properties in the second parameter must be the
+         * <p>JavaScript style property names. E.g. fontSize rather than font-size.</p>
+         *
+         * <p>The float style property will be unset by any of "float",
+         * "styleFloat", or "cssFloat".</p>
+         *
+         * @method unset
+         * @param sel {String} the selector string to apply the changes to
+         * @param css {String|Array} style property name or Array of names
+         * @return {StyleSheet} the StyleSheet instance
+         * @chainable
+         */
+        unset : function (sel,css) {
+            var rule = cssRules[sel],
+                multi = sel.split(/\s*,\s*/),
+                remove = !css,
+                rules, i;
+
+            // IE's addRule doesn't support multiple comma delimited selectors
+            // so rules are mapped internally by atomic selectors
+            if (multi.length > 1) {
+                for (i = multi.length - 1; i >= 0; --i) {
+                    this.unset(multi[i], css);
+                }
+                return this;
+            }
+
+            if (rule) {
+                if (!remove) {
+                    if (!lang.isArray(css)) {
+                        css = [css];
+                    }
+
+                    workerStyle.cssText = rule.style.cssText;
+                    for (i = css.length - 1; i >= 0; --i) {
+                        _unsetProperty(workerStyle,css[i]);
+                    }
+
+                    if (workerStyle.cssText) {
+                        rule.style.cssText = workerStyle.cssText;
+                    } else {
+                        remove = true;
+                    }
+                }
+                
+                if (remove) { // remove the rule altogether
+                    rules = sheet[_rules];
+                    for (i = rules.length - 1; i >= 0; --i) {
+                        if (rules[i] === rule) {
+                            delete cssRules[sel];
+                            _deleteRule(i);
+                            break;
+                        }
+                    }
+                }
+            }
+            return this;
+        },
+
+        /**
+         * Get the current cssText for a rule or the entire sheet.  If the
+         * selector param is supplied, only the cssText for that rule will be
+         * returned, if found.  If the selector string targets multiple
+         * selectors separated by commas, the cssText of the first rule only
+         * will be returned.  If no selector string, the stylesheet's full
+         * cssText will be returned.
+         *
+         * @method getCssText
+         * @param sel {String} Selector string
+         * @return {String}
+         */
+        getCssText : function (sel) {
+            var rule,css;
+
+            if (lang.isString(sel)) {
+                // IE's addRule doesn't support multiple comma delimited
+                // selectors so rules are mapped internally by atomic selectors
+                rule = cssRules[sel.split(/\s*,\s*/)[0]];
+
+                return rule ? rule.style.cssText : null;
+            } else {
+                css = [];
+                for (sel in cssRules) {
+                    if (cssRules.hasOwnProperty(sel)) {
+                        rule = cssRules[sel];
+                        css.push(rule.selectorText+" {"+rule.style.cssText+"}");
+                    }
+                }
+                return css.join("\n");
+            }
+        }
+    },true);
+
+}
+
+_toCssText = function (css,base) {
+    var f = css.styleFloat || css.cssFloat || css['float'],
+        prop;
+
+    workerStyle.cssText = base || '';
+
+    if (f && !css[floatAttr]) {
+        css = lang.merge(css);
+        delete css.styleFloat; delete css.cssFloat; delete css['float'];
+        css[floatAttr] = f;
+    }
+
+    for (prop in css) {
+        if (css.hasOwnProperty(prop)) {
+            try {
+                // IE throws Invalid Value errors and doesn't like whitespace
+                // in values ala ' red' or 'red '
+                workerStyle[prop] = lang.trim(css[prop]);
+            }
+            catch (e) {
+                YAHOO.log('Error assigning property "'+prop+'" to "'+css[prop]+
+                          "\" (ignored):\n"+e.message,'warn','StyleSheet');
+            }
+        }
+    }
+    return workerStyle.cssText;
+};
+
+lang.augmentObject(StyleSheet, {
+    /**
+     * <p>Converts an object literal of style properties and values into a string
+     * of css text.  This can then be assigned to el.style.cssText.</p>
+     *
+     * <p>The optional second parameter is a cssText string representing the
+     * starting state of the style prior to alterations.  This is most often
+     * extracted from the eventual target's current el.style.cssText.</p>
+     *
+     * @method StyleSheet.toCssText
+     * @param css {Object} object literal of style properties and values
+     * @param cssText {String} OPTIONAL starting cssText value
+     * @return {String} the resulting cssText string
+     * @static
+     */
+    toCssText : (('opacity' in workerStyle) ? _toCssText :
+        // Wrap IE's toCssText to catch opacity.  The copy/merge is to preserve
+        // the input object's integrity, but if float and opacity are set, the
+        // input will be copied twice in IE.  Is there a way to avoid this
+        // without increasing the byte count?
+        function (css, cssText) {
+            if ('opacity' in css) {
+                css = lang.merge(css,{
+                        filter: 'alpha(opacity='+(css.opacity*100)+')'
+                      });
+                delete css.opacity;
+            }
+            return _toCssText(css,cssText);
+        }),
+
+    /**
+     * Registers a StyleSheet instance in the static registry by the given name
+     *
+     * @method StyleSheet.register
+     * @param name {String} the name to assign the StyleSheet in the registry
+     * @param sheet {StyleSheet} The StyleSheet instance
+     * @return {Boolean} false if no name or sheet is not a StyleSheet
+     *              instance. true otherwise.
+     * @static
+     */
+    register : function (name,sheet) {
+        return !!(name && sheet instanceof StyleSheet &&
+                  !sheets[name] && (sheets[name] = sheet));
+    },
+
+    /**
+     * <p>Determines if a selector string is safe to use.  Used internally
+     * in set to prevent IE from locking up when attempting to add a rule for a
+     * "bad selector".</p>
+     *
+     * <p>Bad selectors are considered to be any string containing unescaped
+     * `~!@$%^&()+=|{}[];'"?< or space. Also forbidden are . or # followed by
+     * anything other than an alphanumeric.  Additionally -abc or .-abc or
+     * #_abc or '# ' all fail.  There are likely more failure cases, so
+     * please file a bug if you encounter one.</p>
+     *
+     * @method StyleSheet.isValidSelector
+     * @param sel {String} the selector string
+     * @return {Boolean}
+     * @static
+     */
+    isValidSelector : function (sel) {
+        var valid = false;
+
+        if (sel && lang.isString(sel)) {
+
+            if (!selectors.hasOwnProperty(sel)) {
+                // TEST: there should be nothing but white-space left after
+                // these destructive regexs
+                selectors[sel] = !/\S/.test(
+                    // combinators
+                    sel.replace(/\s+|\s*[+~>]\s*/g,' ').
+                    // attribute selectors (contents not validated)
+                    replace(/([^ ])\[.*?\]/g,'$1').
+                    // pseudo-class|element selectors (contents of parens
+                    // such as :nth-of-type(2) or :not(...) not validated)
+                    replace(/([^ ])::?[a-z][a-z\-]+[a-z](?:\(.*?\))?/ig,'$1').
+                    // element tags
+                    replace(/(?:^| )[a-z0-6]+/ig,' ').
+                    // escaped characters
+                    replace(/\\./g,'').
+                    // class and id identifiers
+                    replace(/[.#]\w[\w\-]*/g,''));
+            }
+
+            valid = selectors[sel];
+        }
+
+        return valid;
+    }
+},true);
+
+YAHOO.util.StyleSheet = StyleSheet;
+
+})();
+
+/*
+
+NOTES
+ * Style node must be added to the head element.  Safari does not honor styles
+   applied to StyleSheet objects on style nodes in the body.
+ * StyleSheet object is created on the style node when the style node is added
+   to the head element in Firefox 2 (and maybe 3?)
+ * The cssRules collection is replaced after insertRule/deleteRule calls in
+   Safari 3.1.  Existing Rules are used in the new collection, so the collection
+   cannot be cached, but the rules can be.
+ * Opera requires that the index be passed with insertRule.
+ * Same-domain restrictions prevent modifying StyleSheet objects attached to
+   link elements with remote href (or "about:blank" or "javascript:false")
+ * Same-domain restrictions prevent reading StyleSheet cssRules/rules
+   collection of link elements with remote href (or "about:blank" or
+   "javascript:false")
+ * Same-domain restrictions result in Safari not populating node.sheet property
+   for link elements with remote href (et.al)
+ * IE names StyleSheet related properties and methods differently (see code)
+ * IE converts tag names to upper case in the Rule's selectorText
+ * IE converts empty string assignment to complex properties to value settings
+   for all child properties.  E.g. style.background = '' sets non-'' values on
+   style.backgroundPosition, style.backgroundColor, etc.  All else clear
+   style.background and all child properties.
+ * IE assignment style.filter = '' will result in style.cssText == 'FILTER:'
+ * All browsers support Rule.style.cssText as a read/write property, leaving
+   only opacity needing to be accounted for.
+ * Benchmarks of style.property = value vs style.cssText += 'property: value'
+   indicate cssText is slightly slower for single property assignment.  For
+   multiple property assignment, cssText speed stays relatively the same where
+   style.property speed decreases linearly by the number of properties set.
+   Exception being Opera 9.27, where style.property is always faster than
+   style.cssText.
+ * Opera 9.5b throws a syntax error when assigning cssText with a syntax error.
+ * Opera 9.5 doesn't honor rule.style.cssText = ''.  Previous style persists.
+   You have to remove the rule altogether.
+ * Stylesheet properties set with !important will trump inline style set on an
+   element or in el.style.property.
+ * Creating a worker style collection like document.createElement('p').style;
+   will fail after a time in FF (~5secs of inactivity).  Property assignments
+   will not alter the property or cssText.  It may be the generated node is
+   garbage collected and the style collection becomes inert (speculation).
+ * IE locks up when attempting to add a rule with a selector including at least
+   characters {[]}~`!@%^&*()+=|? (unescaped) and leading _ or -
+   such as addRule('-foo','{ color: red }') or addRule('._abc','{...}')
+ * IE's addRule doesn't support comma separated selectors such as
+   addRule('.foo, .bar','{..}')
+ * IE throws an error on valid values with leading/trailing white space.
+ * When creating an entire sheet at once, only FF2/3 & Opera allow creating a
+   style node, setting its innerHTML and appending to head.
+ * When creating an entire sheet at once, Safari requires the style node to be
+   created with content in innerHTML of another element.
+ * When creating an entire sheet at once, IE requires the style node content to
+   be set via node.styleSheet.cssText
+ * When creating an entire sheet at once in IE, styleSheet.cssText can't be
+   written until node.type = 'text/css'; is performed.
+ * When creating an entire sheet at once in IE, load-time fork on
+   var styleNode = d.createElement('style'); _method = styleNode.styleSheet ?..
+   fails (falsey).  During run-time, the test for .styleSheet works fine
+ * Setting complex properties in cssText will SOMETIMES allow child properties
+   to be unset
+   set         unset              FF2  FF3  S3.1  IE6  IE7  Op9.27  Op9.5
+   ----------  -----------------  ---  ---  ----  ---  ---  ------  -----
+   border      -top               NO   NO   YES   YES  YES  YES     YES
+               -top-color         NO   NO   YES             YES     YES
+               -color             NO   NO   NO              NO      NO
+   background  -color             NO   NO   YES             YES     YES
+               -position          NO   NO   YES             YES     YES
+               -position-x        NO   NO   NO              NO      NO
+   font        line-height        YES  YES  NO    NO   NO   NO      YES
+               -style             YES  YES  NO              YES     YES
+               -size              YES  YES  NO              YES     YES
+               -size-adjust       ???  ???  n/a   n/a  n/a  ???     ???
+   padding     -top               NO   NO   YES             YES     YES
+   margin      -top               NO   NO   YES             YES     YES
+   list-style  -type              YES  YES  YES             YES     YES
+               -position          YES  YES  YES             YES     YES
+   overflow    -x                 NO   NO   YES             n/a     YES
+
+   ??? - unsetting font-size-adjust has the same effect as unsetting font-size
+ * FireFox and WebKit populate rule.cssText as "SELECTOR { CSSTEXT }", but
+   Opera and IE do not.
+ * IE6 and IE7 silently ignore the { and } if passed into addRule('.foo','{
+   color:#000}',0).  IE8 does not and creates an empty rule.
+ * IE6-8 addRule('.foo','',n) throws an error.  Must supply *some* cssText
+*/
+
+YAHOO.register("stylesheet", YAHOO.util.StyleSheet, {version: "2.7.0", build: "1799"});

Added: trunk/root/static/yui/stylesheet/stylesheet-min.js
===================================================================
--- trunk/root/static/yui/stylesheet/stylesheet-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/stylesheet/stylesheet-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+(function(){var I=document,B=I.createElement("p"),D=B.style,C=YAHOO.lang,L={},H={},E=0,J=("cssFloat" in D)?"cssFloat":"styleFloat",F,A,K;A=("opacity" in D)?function(M){M.opacity="";}:function(M){M.filter="";};D.border="1px solid red";D.border="";K=D.borderLeft?function(M,O){var N;if(O!==J&&O.toLowerCase().indexOf("float")!=-1){O=J;}if(typeof M[O]==="string"){switch(O){case"opacity":case"filter":A(M);break;case"font":M.font=M.fontStyle=M.fontVariant=M.fontWeight=M.fontSize=M.lineHeight=M.fontFamily="";break;default:for(N in M){if(N.indexOf(O)===0){M[N]="";}}}}}:function(M,N){if(N!==J&&N.toLowerCase().indexOf("float")!=-1){N=J;}if(C.isString(M[N])){if(N==="opacity"){A(M);}else{M[N]="";}}};function G(T,O){var W,R,V,U={},N,X,Q,S,M,P;if(!(this instanceof arguments.callee)){return new arguments.callee(T,O);}W=I.getElementsByTagName("head")[0];if(!W){throw new Error("HEAD element not found to append STYLE node");}R=T&&(T.nodeName?T:I.getElementById(T));if(T&&H[T]){return H[T];}els!
 e{if(R&&R.yuiSSID&&H[R.yuiSSID]){return H[R.yuiSSID];}}if(!R||!/^(?:style|link)$/i.test(R.nodeName)){R=I.createElement("style");R.type="text/css";}if(C.isString(T)){if(T.indexOf("{")!=-1){if(R.styleSheet){R.styleSheet.cssText=T;}else{R.appendChild(I.createTextNode(T));}}else{if(!O){O=T;}}}if(R.parentNode!==W){W.appendChild(R);}V=R.sheet||R.styleSheet;N=V&&("cssRules" in V)?"cssRules":"rules";for(S=V[N].length-1;S>=0;--S){M=V[N][S];P=M.selectorText;if(U[P]){U[P].style.cssText+=";"+M.style.cssText;Q(S);}else{U[P]=M;}}Q=("deleteRule" in V)?function(Y){V.deleteRule(Y);}:function(Y){V.removeRule(Y);};X=("insertRule" in V)?function(a,Z,Y){V.insertRule(a+" {"+Z+"}",Y);}:function(a,Z,Y){V.addRule(a,Z,Y);};R.yuiSSID="yui-stylesheet-"+(E++);G.register(R.yuiSSID,this);if(O){G.register(O,this);}C.augmentObject(this,{getId:function(){return R.yuiSSID;},node:R,enable:function(){V.disabled=false;return this;},disable:function(){V.disabled=true;return this;},isEnabled:function(){return !V.!
 disabled;},set:function(b,a){var d=U[b],c=b.split(/\s*,\s*/),Z!
 ,Y;if(c.
length>1){for(Z=c.length-1;Z>=0;--Z){this.set(c[Z],a);}return this;}if(!G.isValidSelector(b)){return this;}if(d){d.style.cssText=G.toCssText(a,d.style.cssText);}else{Y=V[N].length;a=G.toCssText(a);if(a){X(b,a,Y);U[b]=V[N][Y];}}return this;},unset:function(b,a){var d=U[b],c=b.split(/\s*,\s*/),Y=!a,e,Z;if(c.length>1){for(Z=c.length-1;Z>=0;--Z){this.unset(c[Z],a);}return this;}if(d){if(!Y){if(!C.isArray(a)){a=[a];}D.cssText=d.style.cssText;for(Z=a.length-1;Z>=0;--Z){K(D,a[Z]);}if(D.cssText){d.style.cssText=D.cssText;}else{Y=true;}}if(Y){e=V[N];for(Z=e.length-1;Z>=0;--Z){if(e[Z]===d){delete U[b];Q(Z);break;}}}}return this;},getCssText:function(Z){var a,Y;if(C.isString(Z)){a=U[Z.split(/\s*,\s*/)[0]];return a?a.style.cssText:null;}else{Y=[];for(Z in U){if(U.hasOwnProperty(Z)){a=U[Z];Y.push(a.selectorText+" {"+a.style.cssText+"}");}}return Y.join("\n");}}},true);}F=function(M,O){var N=M.styleFloat||M.cssFloat||M["float"],Q;D.cssText=O||"";if(N&&!M[J]){M=C.merge(M);delete M.styleFlo!
 at;delete M.cssFloat;delete M["float"];M[J]=N;}for(Q in M){if(M.hasOwnProperty(Q)){try{D[Q]=C.trim(M[Q]);}catch(P){}}}return D.cssText;};C.augmentObject(G,{toCssText:(("opacity" in D)?F:function(M,N){if("opacity" in M){M=C.merge(M,{filter:"alpha(opacity="+(M.opacity*100)+")"});delete M.opacity;}return F(M,N);}),register:function(M,N){return !!(M&&N instanceof G&&!H[M]&&(H[M]=N));},isValidSelector:function(N){var M=false;if(N&&C.isString(N)){if(!L.hasOwnProperty(N)){L[N]=!/\S/.test(N.replace(/\s+|\s*[+~>]\s*/g," ").replace(/([^ ])\[.*?\]/g,"$1").replace(/([^ ])::?[a-z][a-z\-]+[a-z](?:\(.*?\))?/ig,"$1").replace(/(?:^| )[a-z0-6]+/ig," ").replace(/\\./g,"").replace(/[.#]\w[\w\-]*/g,""));}M=L[N];}return M;}},true);YAHOO.util.StyleSheet=G;})();YAHOO.register("stylesheet",YAHOO.util.StyleSheet,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/stylesheet/stylesheet.js
===================================================================
--- trunk/root/static/yui/stylesheet/stylesheet.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/stylesheet/stylesheet.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,639 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/**
+ * The StyleSheet component is a utility for managing css rules at the
+ * stylesheet level
+ *
+ * @module stylesheet
+ * @namespace YAHOO.util
+ * @requires yahoo
+ * @beta
+ */
+(function () {
+
+var d      = document,
+    p      = d.createElement('p'), // Have to hold the node (see notes)
+    workerStyle = p.style, // worker style collection
+    lang   = YAHOO.lang,
+    selectors = {},
+    sheets = {},
+    ssId   = 0,
+    floatAttr = ('cssFloat' in workerStyle) ? 'cssFloat' : 'styleFloat',
+    _toCssText,
+    _unsetOpacity,
+    _unsetProperty;
+
+/*
+ * Normalizes the removal of an assigned style for opacity.  IE uses the filter property.
+ */
+_unsetOpacity = ('opacity' in workerStyle) ?
+    function (style) { style.opacity = ''; } :
+    function (style) { style.filter = ''; };
+        
+/*
+ * Normalizes the removal of an assigned style for a given property.  Expands
+ * shortcut properties if necessary and handles the various names for the float property.
+ */
+workerStyle.border = "1px solid red";
+workerStyle.border = ''; // IE doesn't unset child properties
+_unsetProperty = workerStyle.borderLeft ?
+    function (style,prop) {
+        var p;
+        if (prop !== floatAttr && prop.toLowerCase().indexOf('float') != -1) {
+            prop = floatAttr;
+        }
+        if (typeof style[prop] === 'string') {
+            switch (prop) {
+                case 'opacity':
+                case 'filter' : _unsetOpacity(style); break;
+                case 'font'   :
+                    style.font       = style.fontStyle = style.fontVariant =
+                    style.fontWeight = style.fontSize  = style.lineHeight  =
+                    style.fontFamily = '';
+                    break;
+                default       :
+                    for (p in style) {
+                        if (p.indexOf(prop) === 0) {
+                            style[p] = '';
+                        }
+                    }
+            }
+        }
+    } :
+    function (style,prop) {
+        if (prop !== floatAttr && prop.toLowerCase().indexOf('float') != -1) {
+            prop = floatAttr;
+        }
+        if (lang.isString(style[prop])) {
+            if (prop === 'opacity') {
+                _unsetOpacity(style);
+            } else {
+                style[prop] = '';
+            }
+        }
+    };
+    
+/**
+ * Create an instance of YAHOO.util.StyleSheet to encapsulate a css stylesheet.
+ * The constructor can be called using function or constructor syntax.
+ * <pre><code>var sheet = YAHOO.util.StyleSheet(..);</pre></code>
+ * or
+ * <pre><code>var sheet = new YAHOO.util.StyleSheet(..);</pre></code>
+ *
+ * The first parameter passed can be any of the following things:
+ * <ul>
+ *   <li>The desired string name to register a new empty sheet</li>
+ *   <li>The string name of an existing YAHOO.util.StyleSheet instance</li>
+ *   <li>The unique yuiSSID generated for an existing YAHOO.util.StyleSheet instance</li>
+ *   <li>The id of an existing <code><link></code> or <code><style></code> node</li>
+ *   <li>The node reference for an existing <code><link></code> or <code><style></code> node</li>
+ *   <li>A chunk of css text to create a new stylesheet from</li>
+ * </ul>
+ *
+ * <p>If a string is passed, StyleSheet will first look in its static name
+ * registry for an existing sheet, then in the DOM for an element with that id.
+ * If neither are found and the string contains the { character, it will be
+ * used as a the initial cssText for a new StyleSheet.  Otherwise, a new empty
+ * StyleSheet is created, assigned the string value as a name, and registered
+ * statically by that name.</p>
+ *
+ * <p>The optional second parameter is a string name to register the sheet as.
+ * This param is largely useful when providing a node id/ref or chunk of css
+ * text to create a populated instance.</p>
+ * 
+ * @class StyleSheet
+ * @constructor
+ * @param seed {String|HTMLElement} a style or link node, its id, or a name or
+ *              yuiSSID of a StyleSheet, or a string of css text (see above)
+ * @param name {String} OPTIONAL name to register instance for future static
+ *              access
+ */
+function StyleSheet(seed, name) {
+    var head,
+        node,
+        sheet,
+        cssRules = {},
+        _rules,
+        _insertRule,
+        _deleteRule,
+        i,r,sel;
+
+    // Factory or constructor
+    if (!(this instanceof arguments.callee)) {
+        return new arguments.callee(seed,name);
+    }
+
+    head = d.getElementsByTagName('head')[0];
+    if (!head) {
+        // TODO: do something. Preferably something smart
+        throw new Error('HEAD element not found to append STYLE node');
+    }
+
+    // capture the DOM node if the string is an id
+    node = seed && (seed.nodeName ? seed : d.getElementById(seed));
+
+    // Check for the StyleSheet in the static registry
+    if (seed && sheets[seed]) {
+        return sheets[seed];
+    } else if (node && node.yuiSSID && sheets[node.yuiSSID]) {
+        return sheets[node.yuiSSID];
+    }
+
+    // Create a style node if necessary
+    if (!node || !/^(?:style|link)$/i.test(node.nodeName)) {
+        node = d.createElement('style');
+        node.type = 'text/css';
+    }
+
+    if (lang.isString(seed)) {
+        // Create entire sheet from seed cssText
+        if (seed.indexOf('{') != -1) {
+            // Not a load-time fork because low run-time impact and IE fails
+            // test for s.styleSheet at page load time (oddly)
+            if (node.styleSheet) {
+                node.styleSheet.cssText = seed;
+            } else {
+                node.appendChild(d.createTextNode(seed));
+            }
+        } else if (!name) {
+            name = seed;
+        }
+    }
+
+    if (node.parentNode !== head) {
+        // styleSheet isn't available on the style node in FF2 until appended
+        // to the head element.  style nodes appended to body do not affect
+        // change in Safari.
+        head.appendChild(node);
+    }
+
+    // Begin setting up private aliases to the important moving parts
+    // 1. The stylesheet object
+    // IE stores StyleSheet under the "styleSheet" property
+    // Safari doesn't populate sheet for xdomain link elements
+    sheet = node.sheet || node.styleSheet;
+
+    // 2. The style rules collection
+    // IE stores the rules collection under the "rules" property
+    _rules = sheet && ('cssRules' in sheet) ? 'cssRules' : 'rules';
+
+    // 3. Initialize the cssRules map from the node
+    // xdomain link nodes forbid access to the cssRules collection, so this
+    // will throw an error.
+    // TODO: research alternate stylesheet, @media
+        for (i = sheet[_rules].length - 1; i >= 0; --i) {
+            r   = sheet[_rules][i];
+            sel = r.selectorText;
+
+            if (cssRules[sel]) {
+                cssRules[sel].style.cssText += ';' + r.style.cssText;
+                _deleteRule(i);
+            } else {
+                cssRules[sel] = r;
+            }
+        }
+
+    // 4. The method to remove a rule from the stylesheet
+    // IE supports removeRule
+    _deleteRule = ('deleteRule' in sheet) ?
+        function (i) { sheet.deleteRule(i); } :
+        function (i) { sheet.removeRule(i); };
+
+    // 5. The method to add a new rule to the stylesheet
+    // IE supports addRule with different signature
+    _insertRule = ('insertRule' in sheet) ?
+        function (sel,css,i) { sheet.insertRule(sel+' {'+css+'}',i); } :
+        function (sel,css,i) { sheet.addRule(sel,css,i); };
+
+    // Cache the instance by the generated Id
+    node.yuiSSID = 'yui-stylesheet-' + (ssId++);
+    StyleSheet.register(node.yuiSSID,this);
+
+    // Register the instance by name if provided or defaulted from seed
+    if (name) {
+        StyleSheet.register(name,this);
+    }
+
+    // Public API
+    lang.augmentObject(this,{
+        /**
+         * Get the unique yuiSSID for this StyleSheet instance
+         *
+         * @method getId
+         * @return {Number} the static id
+         */
+        getId : function () { return node.yuiSSID; },
+
+        /**
+         * The HTMLElement that this instance encapsulates
+         *
+         * @property node
+         * @type HTMLElement
+         */
+        node : node,
+
+        /**
+         * Enable all the rules in the sheet
+         *
+         * @method enable
+         * @return {StyleSheet} the instance
+         * @chainable
+         */
+        // Enabling/disabling the stylesheet.  Changes may be made to rules
+        // while disabled.
+        enable : function () { sheet.disabled = false; return this; },
+
+        /**
+         * Disable all the rules in the sheet.  Rules may be changed while the
+         * StyleSheet is disabled.
+         *
+         * @method disable
+         * @return {StyleSheet} the instance
+         * @chainable
+         */
+        disable : function () { sheet.disabled = true; return this; },
+
+        /**
+         * Returns boolean indicating whether the StyleSheet is enabled
+         *
+         * @method isEnabled
+         * @return {Boolean} is it enabled?
+         */
+        isEnabled : function () { return !sheet.disabled; },
+
+        /**
+         * <p>Set style properties for a provided selector string.
+         * If the selector includes commas, it will be split into individual
+         * selectors and applied accordingly.  If the selector string does not
+         * have a corresponding rule in the sheet, it will be added.</p>
+         *
+         * <p>The object properties in the second parameter must be the JavaScript
+         * names of style properties.  E.g. fontSize rather than font-size.</p>
+         *
+         * <p>The float style property will be set by any of "float",
+         * "styleFloat", or "cssFloat".</p>
+         *
+         * @method set
+         * @param sel {String} the selector string to apply the changes to
+         * @param css {Object} Object literal of style properties and new values
+         * @return {StyleSheet} the StyleSheet instance
+         * @chainable
+         */
+        set : function (sel,css) {
+            var rule = cssRules[sel],
+                multi = sel.split(/\s*,\s*/),i,
+                idx;
+
+            // IE's addRule doesn't support multiple comma delimited selectors
+            if (multi.length > 1) {
+                for (i = multi.length - 1; i >= 0; --i) {
+                    this.set(multi[i], css);
+                }
+                return this;
+            }
+
+            // Some selector values can cause IE to hang
+            if (!StyleSheet.isValidSelector(sel)) {
+                return this;
+            }
+
+            // Opera throws an error if there's a syntax error in assigned
+            // cssText. Avoid this using a worker style collection, then
+            // assigning the resulting cssText.
+            if (rule) {
+                rule.style.cssText = StyleSheet.toCssText(css,rule.style.cssText);
+            } else {
+                idx = sheet[_rules].length;
+                css = StyleSheet.toCssText(css);
+
+                // IE throws an error when attempting to addRule(sel,'',n)
+                // which would crop up if no, or only invalid values are used
+                if (css) {
+                    _insertRule(sel, css, idx);
+
+                    // Safari replaces the rules collection, but maintains the
+                    // rule instances in the new collection when rules are
+                    // added/removed
+                    cssRules[sel] = sheet[_rules][idx];
+                }
+            }
+            return this;
+        },
+
+        /**
+         * <p>Unset style properties for a provided selector string, removing
+         * their effect from the style cascade.</p>
+         *
+         * <p>If the selector includes commas, it will be split into individual
+         * selectors and applied accordingly.  If there are no properties
+         * remaining in the rule after unsetting, the rule is removed.</p>
+         *
+         * <p>The style property or properties in the second parameter must be the
+         * <p>JavaScript style property names. E.g. fontSize rather than font-size.</p>
+         *
+         * <p>The float style property will be unset by any of "float",
+         * "styleFloat", or "cssFloat".</p>
+         *
+         * @method unset
+         * @param sel {String} the selector string to apply the changes to
+         * @param css {String|Array} style property name or Array of names
+         * @return {StyleSheet} the StyleSheet instance
+         * @chainable
+         */
+        unset : function (sel,css) {
+            var rule = cssRules[sel],
+                multi = sel.split(/\s*,\s*/),
+                remove = !css,
+                rules, i;
+
+            // IE's addRule doesn't support multiple comma delimited selectors
+            // so rules are mapped internally by atomic selectors
+            if (multi.length > 1) {
+                for (i = multi.length - 1; i >= 0; --i) {
+                    this.unset(multi[i], css);
+                }
+                return this;
+            }
+
+            if (rule) {
+                if (!remove) {
+                    if (!lang.isArray(css)) {
+                        css = [css];
+                    }
+
+                    workerStyle.cssText = rule.style.cssText;
+                    for (i = css.length - 1; i >= 0; --i) {
+                        _unsetProperty(workerStyle,css[i]);
+                    }
+
+                    if (workerStyle.cssText) {
+                        rule.style.cssText = workerStyle.cssText;
+                    } else {
+                        remove = true;
+                    }
+                }
+                
+                if (remove) { // remove the rule altogether
+                    rules = sheet[_rules];
+                    for (i = rules.length - 1; i >= 0; --i) {
+                        if (rules[i] === rule) {
+                            delete cssRules[sel];
+                            _deleteRule(i);
+                            break;
+                        }
+                    }
+                }
+            }
+            return this;
+        },
+
+        /**
+         * Get the current cssText for a rule or the entire sheet.  If the
+         * selector param is supplied, only the cssText for that rule will be
+         * returned, if found.  If the selector string targets multiple
+         * selectors separated by commas, the cssText of the first rule only
+         * will be returned.  If no selector string, the stylesheet's full
+         * cssText will be returned.
+         *
+         * @method getCssText
+         * @param sel {String} Selector string
+         * @return {String}
+         */
+        getCssText : function (sel) {
+            var rule,css;
+
+            if (lang.isString(sel)) {
+                // IE's addRule doesn't support multiple comma delimited
+                // selectors so rules are mapped internally by atomic selectors
+                rule = cssRules[sel.split(/\s*,\s*/)[0]];
+
+                return rule ? rule.style.cssText : null;
+            } else {
+                css = [];
+                for (sel in cssRules) {
+                    if (cssRules.hasOwnProperty(sel)) {
+                        rule = cssRules[sel];
+                        css.push(rule.selectorText+" {"+rule.style.cssText+"}");
+                    }
+                }
+                return css.join("\n");
+            }
+        }
+    },true);
+
+}
+
+_toCssText = function (css,base) {
+    var f = css.styleFloat || css.cssFloat || css['float'],
+        prop;
+
+    workerStyle.cssText = base || '';
+
+    if (f && !css[floatAttr]) {
+        css = lang.merge(css);
+        delete css.styleFloat; delete css.cssFloat; delete css['float'];
+        css[floatAttr] = f;
+    }
+
+    for (prop in css) {
+        if (css.hasOwnProperty(prop)) {
+            try {
+                // IE throws Invalid Value errors and doesn't like whitespace
+                // in values ala ' red' or 'red '
+                workerStyle[prop] = lang.trim(css[prop]);
+            }
+            catch (e) {
+            }
+        }
+    }
+    return workerStyle.cssText;
+};
+
+lang.augmentObject(StyleSheet, {
+    /**
+     * <p>Converts an object literal of style properties and values into a string
+     * of css text.  This can then be assigned to el.style.cssText.</p>
+     *
+     * <p>The optional second parameter is a cssText string representing the
+     * starting state of the style prior to alterations.  This is most often
+     * extracted from the eventual target's current el.style.cssText.</p>
+     *
+     * @method StyleSheet.toCssText
+     * @param css {Object} object literal of style properties and values
+     * @param cssText {String} OPTIONAL starting cssText value
+     * @return {String} the resulting cssText string
+     * @static
+     */
+    toCssText : (('opacity' in workerStyle) ? _toCssText :
+        // Wrap IE's toCssText to catch opacity.  The copy/merge is to preserve
+        // the input object's integrity, but if float and opacity are set, the
+        // input will be copied twice in IE.  Is there a way to avoid this
+        // without increasing the byte count?
+        function (css, cssText) {
+            if ('opacity' in css) {
+                css = lang.merge(css,{
+                        filter: 'alpha(opacity='+(css.opacity*100)+')'
+                      });
+                delete css.opacity;
+            }
+            return _toCssText(css,cssText);
+        }),
+
+    /**
+     * Registers a StyleSheet instance in the static registry by the given name
+     *
+     * @method StyleSheet.register
+     * @param name {String} the name to assign the StyleSheet in the registry
+     * @param sheet {StyleSheet} The StyleSheet instance
+     * @return {Boolean} false if no name or sheet is not a StyleSheet
+     *              instance. true otherwise.
+     * @static
+     */
+    register : function (name,sheet) {
+        return !!(name && sheet instanceof StyleSheet &&
+                  !sheets[name] && (sheets[name] = sheet));
+    },
+
+    /**
+     * <p>Determines if a selector string is safe to use.  Used internally
+     * in set to prevent IE from locking up when attempting to add a rule for a
+     * "bad selector".</p>
+     *
+     * <p>Bad selectors are considered to be any string containing unescaped
+     * `~!@$%^&()+=|{}[];'"?< or space. Also forbidden are . or # followed by
+     * anything other than an alphanumeric.  Additionally -abc or .-abc or
+     * #_abc or '# ' all fail.  There are likely more failure cases, so
+     * please file a bug if you encounter one.</p>
+     *
+     * @method StyleSheet.isValidSelector
+     * @param sel {String} the selector string
+     * @return {Boolean}
+     * @static
+     */
+    isValidSelector : function (sel) {
+        var valid = false;
+
+        if (sel && lang.isString(sel)) {
+
+            if (!selectors.hasOwnProperty(sel)) {
+                // TEST: there should be nothing but white-space left after
+                // these destructive regexs
+                selectors[sel] = !/\S/.test(
+                    // combinators
+                    sel.replace(/\s+|\s*[+~>]\s*/g,' ').
+                    // attribute selectors (contents not validated)
+                    replace(/([^ ])\[.*?\]/g,'$1').
+                    // pseudo-class|element selectors (contents of parens
+                    // such as :nth-of-type(2) or :not(...) not validated)
+                    replace(/([^ ])::?[a-z][a-z\-]+[a-z](?:\(.*?\))?/ig,'$1').
+                    // element tags
+                    replace(/(?:^| )[a-z0-6]+/ig,' ').
+                    // escaped characters
+                    replace(/\\./g,'').
+                    // class and id identifiers
+                    replace(/[.#]\w[\w\-]*/g,''));
+            }
+
+            valid = selectors[sel];
+        }
+
+        return valid;
+    }
+},true);
+
+YAHOO.util.StyleSheet = StyleSheet;
+
+})();
+
+/*
+
+NOTES
+ * Style node must be added to the head element.  Safari does not honor styles
+   applied to StyleSheet objects on style nodes in the body.
+ * StyleSheet object is created on the style node when the style node is added
+   to the head element in Firefox 2 (and maybe 3?)
+ * The cssRules collection is replaced after insertRule/deleteRule calls in
+   Safari 3.1.  Existing Rules are used in the new collection, so the collection
+   cannot be cached, but the rules can be.
+ * Opera requires that the index be passed with insertRule.
+ * Same-domain restrictions prevent modifying StyleSheet objects attached to
+   link elements with remote href (or "about:blank" or "javascript:false")
+ * Same-domain restrictions prevent reading StyleSheet cssRules/rules
+   collection of link elements with remote href (or "about:blank" or
+   "javascript:false")
+ * Same-domain restrictions result in Safari not populating node.sheet property
+   for link elements with remote href (et.al)
+ * IE names StyleSheet related properties and methods differently (see code)
+ * IE converts tag names to upper case in the Rule's selectorText
+ * IE converts empty string assignment to complex properties to value settings
+   for all child properties.  E.g. style.background = '' sets non-'' values on
+   style.backgroundPosition, style.backgroundColor, etc.  All else clear
+   style.background and all child properties.
+ * IE assignment style.filter = '' will result in style.cssText == 'FILTER:'
+ * All browsers support Rule.style.cssText as a read/write property, leaving
+   only opacity needing to be accounted for.
+ * Benchmarks of style.property = value vs style.cssText += 'property: value'
+   indicate cssText is slightly slower for single property assignment.  For
+   multiple property assignment, cssText speed stays relatively the same where
+   style.property speed decreases linearly by the number of properties set.
+   Exception being Opera 9.27, where style.property is always faster than
+   style.cssText.
+ * Opera 9.5b throws a syntax error when assigning cssText with a syntax error.
+ * Opera 9.5 doesn't honor rule.style.cssText = ''.  Previous style persists.
+   You have to remove the rule altogether.
+ * Stylesheet properties set with !important will trump inline style set on an
+   element or in el.style.property.
+ * Creating a worker style collection like document.createElement('p').style;
+   will fail after a time in FF (~5secs of inactivity).  Property assignments
+   will not alter the property or cssText.  It may be the generated node is
+   garbage collected and the style collection becomes inert (speculation).
+ * IE locks up when attempting to add a rule with a selector including at least
+   characters {[]}~`!@%^&*()+=|? (unescaped) and leading _ or -
+   such as addRule('-foo','{ color: red }') or addRule('._abc','{...}')
+ * IE's addRule doesn't support comma separated selectors such as
+   addRule('.foo, .bar','{..}')
+ * IE throws an error on valid values with leading/trailing white space.
+ * When creating an entire sheet at once, only FF2/3 & Opera allow creating a
+   style node, setting its innerHTML and appending to head.
+ * When creating an entire sheet at once, Safari requires the style node to be
+   created with content in innerHTML of another element.
+ * When creating an entire sheet at once, IE requires the style node content to
+   be set via node.styleSheet.cssText
+ * When creating an entire sheet at once in IE, styleSheet.cssText can't be
+   written until node.type = 'text/css'; is performed.
+ * When creating an entire sheet at once in IE, load-time fork on
+   var styleNode = d.createElement('style'); _method = styleNode.styleSheet ?..
+   fails (falsey).  During run-time, the test for .styleSheet works fine
+ * Setting complex properties in cssText will SOMETIMES allow child properties
+   to be unset
+   set         unset              FF2  FF3  S3.1  IE6  IE7  Op9.27  Op9.5
+   ----------  -----------------  ---  ---  ----  ---  ---  ------  -----
+   border      -top               NO   NO   YES   YES  YES  YES     YES
+               -top-color         NO   NO   YES             YES     YES
+               -color             NO   NO   NO              NO      NO
+   background  -color             NO   NO   YES             YES     YES
+               -position          NO   NO   YES             YES     YES
+               -position-x        NO   NO   NO              NO      NO
+   font        line-height        YES  YES  NO    NO   NO   NO      YES
+               -style             YES  YES  NO              YES     YES
+               -size              YES  YES  NO              YES     YES
+               -size-adjust       ???  ???  n/a   n/a  n/a  ???     ???
+   padding     -top               NO   NO   YES             YES     YES
+   margin      -top               NO   NO   YES             YES     YES
+   list-style  -type              YES  YES  YES             YES     YES
+               -position          YES  YES  YES             YES     YES
+   overflow    -x                 NO   NO   YES             n/a     YES
+
+   ??? - unsetting font-size-adjust has the same effect as unsetting font-size
+ * FireFox and WebKit populate rule.cssText as "SELECTOR { CSSTEXT }", but
+   Opera and IE do not.
+ * IE6 and IE7 silently ignore the { and } if passed into addRule('.foo','{
+   color:#000}',0).  IE8 does not and creates an empty rule.
+ * IE6-8 addRule('.foo','',n) throws an error.  Must supply *some* cssText
+*/
+
+YAHOO.register("stylesheet", YAHOO.util.StyleSheet, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/tabview/README
===================================================================
--- trunk/root/static/yui/tabview/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,51 +0,0 @@
-TabView Release Notes
-
-*** version 2.6.0 ***
-* activeIndex and activeTab sync issue fixed
-* activeIndex change events mapped to activeTab (and vice-versa)
-
-*** version 2.5.2 ***
-* no change
-
-*** version 2.5.1 ***
-* no change
-
-*** version 2.5.0 ***
-* moved Tab default "title" attribute to static Tab.TITLE 
-
-*** version 2.4.0 ***
-* no change
-
-*** version 2.3.1 ***
-* removed Xoutline from tabview-core.css
-
-** version 2.3.0 ***
-* no longer firing tabChange if already selected
-* multiple clicks no longer trigger extra xhr if in progress
-* now using existing href for Tab href attribute
-* CLASSNAME now added if not present on tabview element
-
-*** version 2.2.2 ***
-
-* no change
-
-
-*** version 2.2.1 ***
-* no change
-
-*** version 2.2.0 ***
-* Element broken out into seperate pkg
-  NOTE: new dependency required - element-beta.js
-
-*** version 0.12.2 ***
-* var Tab is now private
-* fixed Element.configureAttribute
-
-*** version 0.12.1 ***
-* tabs.css renamed to tabview.css
-* calls to "set" now queued so they can be made before "contentReady"
-
-
-*** version 0.12.0 ***
-* TabView widget introduced
-* Note: border_tabs.css included as basic skin to enable "tabs" look

Modified: trunk/root/static/yui/tabview/assets/border_tabs.css
===================================================================
--- trunk/root/static/yui/tabview/assets/border_tabs.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/border_tabs.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,53 +1,49 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-navset .yui-nav li a,
-.yui-navset .yui-content {
+.yui-navset .yui-nav li a, .yui-navset .yui-content {
     border:1px solid #000;  /* label and content borders */
 }
 
-.yui-navset .yui-nav .selected a,
-.yui-navset .yui-nav a:hover,
-.yui-navset .yui-content {
+.yui-navset .yui-nav .selected a, .yui-navset .yui-nav a:hover, .yui-navset .yui-content {
     background-color:#f6f7ee; /* active tab, tab hover, and content bgcolor */
 }
 
 .yui-navset .yui-nav li em { padding:.5em; } /* tab padding */
 
 /* defaults to orientation "top" */
-.yui-navset .yui-nav .selected a, 
-.yui-navset .yui-navset-top .yui-nav .selected a { 
-    border-width:1px 1px 0; /* no bottom border for active tab */
-    padding:0 0 1px; /* to match height of other tabs */
+.yui-navset .yui-nav .selected a {
+    border-bottom-width:0; /* no bottom border for active tab */
+    padding-bottom:1px; /* to match height of other tabs */
 }
-.yui-navset .yui-content,
-.yui-navset .yui-navset-top .yui-content {
-    margin:-1px 0 0; /* for active tab overlap */
+
+.yui-navset .yui-content {
+    margin-top:-1px; /* for active tab overlap */
 }
 
 /* overrides for other orientations */
-.yui-navset .yui-navset-bottom .yui-nav .selected a,
+
 .yui-navset-bottom .yui-nav .selected a {
     border-width:0 1px 1px; /* no top border for active tab */
     padding:1px 0 0; /* to match height of other tabs */
 }
-.yui-navset .yui-navset-bottom .yui-content,
+
 .yui-navset-bottom .yui-content {
     margin:0 0 -1px; /* for active tab overlap */
 }
-.yui-navset .yui-navset-left .yui-nav li.selected a,
+
 .yui-navset-left .yui-nav li.selected a {
     border-width:1px 0 1px 1px; /* no right border for active tab */
     padding:0 1px 0 0; /* to match width of other tabs */
 }
-.yui-navset .yui-navset-left .yui-content,
+
 .yui-navset-left .yui-content {
     margin:0 0 0 -1px; /* for active tab overlap */
 }
-.yui-navset .yui-navset-right .yui-nav li.selected a,
+
 .yui-navset-right .yui-nav li.selected a {
     border-width:1px 1px 1px 0; /* no left border for active tab */
     padding:0 0 0 1px; /* to match width of other tabs */
@@ -55,4 +51,4 @@
 
 .yui-navset-right .yui-content {
     margin:0 -1px 0 0; /* for active tab overlap */
-}
+}
\ No newline at end of file

Modified: trunk/root/static/yui/tabview/assets/skin-sam.css
===================================================================
--- trunk/root/static/yui/tabview/assets/skin-sam.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/skin-sam.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .yui-navset .yui-nav li {
     margin-right:0.16em; /* space between tabs */

Modified: trunk/root/static/yui/tabview/assets/skins/sam/tabview-skin.css
===================================================================
--- trunk/root/static/yui/tabview/assets/skins/sam/tabview-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/skins/sam/tabview-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,15 +1,14 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* .yui-navset defaults to .yui-navset-top */
 .yui-skin-sam .yui-navset .yui-nav,
 .yui-skin-sam .yui-navset .yui-navset-top .yui-nav { /* protect nested tabviews from other orientations */
     border:solid #2647a0; /* color between tab list and content */
     border-width:0 0 5px;
-    Xposition:relative;
     zoom:1;
 }
 

Modified: trunk/root/static/yui/tabview/assets/skins/sam/tabview.css
===================================================================
--- trunk/root/static/yui/tabview/assets/skins/sam/tabview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/skins/sam/tabview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 0.5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 0.5em;}.yui-navset .yui-content .yui-hidden{display:none;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content{zoom:1;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom!
 :1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-navset-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:auto;}.yui-skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-na!
 vset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;Xp!
 osition:
relative;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 0.16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 0.16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(../../../../assets/skins/sam/sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:0.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui-navset .yui-nav .selected a:hover{background:#2647a0 url(../../../../assets/skins/sam/sprite.png) repeat-x lef!
 t -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(../../../../assets/skins/sam/sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:0.35em 0.75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:0.25em 0.5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 0 0 5px;}.yui!
 -skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navs!
 et .yui-
navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 0.16em;padding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px 0.16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 0.16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:0.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-skin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui!
 -navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px 0.16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li a,.yui-skin-sam .yui-navset-bottom .yui-nav li a{}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:a!
 uto;bottom:-1px;}.yui-skin-sam .yui-navset-bottom .yui-content!
 ,.yui-sk
in-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356;}
+.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .yui-navset-bottom .yui-nav li{margin:0 .5em 0 0;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{margin:0 0 .5em;}.yui-navset .yui-content .yui-hidden{position:absolute;left:-999999px;visibility:hidden;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{width:6em;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{width:auto;}.yui-navset .yui-navset-left,.yui-navset-left{padding:0 0 0 6em;}.yui-navset-right{padding:0 6em 0 0;}.yui-navset-top,.yui-navset-bottom{padding:auto;}.yui-nav,.yui-nav li{margin:0;padding:0;list-style:none;}.yui-navset li em{font-style:normal;}.yui-navset{position:relative;zoom:1;}.yui-navset .yui-content,.yui-navset .yui-content div{zoom:1;}.yui-navset .yui-content:after{content:'';display:block;clear:both;}.yui-navset .yui-nav li,.yui-navset .yui-navset-top .yui-nav li,.yui-navset .y!
 ui-navset-bottom .yui-nav li{display:inline-block;display:-moz-inline-stack;*display:inline;vertical-align:bottom;cursor:pointer;zoom:1;}.yui-navset-left .yui-nav li,.yui-navset-right .yui-nav li{display:block;}.yui-navset .yui-nav a{position:relative;}.yui-navset .yui-nav li a,.yui-navset-top .yui-nav li a,.yui-navset-bottom .yui-nav li a{display:block;display:inline-block;vertical-align:bottom;zoom:1;}.yui-navset-left .yui-nav li a,.yui-navset-right .yui-nav li a{display:block;}.yui-navset-bottom .yui-nav li a{vertical-align:text-top;}.yui-navset .yui-nav li a em,.yui-navset-top .yui-nav li a em,.yui-navset-bottom .yui-nav li a em{display:block;}.yui-navset .yui-navset-left .yui-nav,.yui-navset .yui-navset-right .yui-nav,.yui-navset-left .yui-nav,.yui-navset-right .yui-nav{position:absolute;z-index:1;}.yui-navset-top .yui-nav,.yui-navset-bottom .yui-nav{position:static;}.yui-navset .yui-navset-left .yui-nav,.yui-navset-left .yui-nav{left:0;right:auto;}.yui-navset .yui-nav!
 set-right .yui-nav,.yui-navset-right .yui-nav{right:0;left:aut!
 o;}.yui-
skin-sam .yui-navset .yui-nav,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav{border:solid #2647a0;border-width:0 0 5px;zoom:1;}.yui-skin-sam .yui-navset .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav li{margin:0 .16em 0 0;padding:1px 0 0;zoom:1;}.yui-skin-sam .yui-navset .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav .selected{margin:0 .16em -1px 0;}.yui-skin-sam .yui-navset .yui-nav a,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a{background:#d8d8d8 url(../../../../assets/skins/sam/sprite.png) repeat-x;border:solid #a3a3a3;border-width:0 1px;color:#000;position:relative;text-decoration:none;}.yui-skin-sam .yui-navset .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-top .yui-nav a em{border:solid #a3a3a3;border-width:1px 0 0;cursor:hand;padding:.25em .75em;left:0;right:0;bottom:0;top:-1px;position:relative;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a:focus,.yui-skin-sam .yui!
 -navset .yui-nav .selected a:hover{background:#2647a0 url(../../../../assets/skins/sam/sprite.png) repeat-x left -1400px;color:#fff;}.yui-skin-sam .yui-navset .yui-nav a:hover,.yui-skin-sam .yui-navset .yui-nav a:focus{background:#bfdaff url(../../../../assets/skins/sam/sprite.png) repeat-x left -1300px;outline:0;}.yui-skin-sam .yui-navset .yui-nav .selected a em{padding:.35em .75em;}.yui-skin-sam .yui-navset .yui-nav .selected a,.yui-skin-sam .yui-navset .yui-nav .selected a em{border-color:#243356;}.yui-skin-sam .yui-navset .yui-content{background:#edf5ff;}.yui-skin-sam .yui-navset .yui-content,.yui-skin-sam .yui-navset .yui-navset-top .yui-content{border:1px solid #808080;border-top-color:#243356;padding:.25em .5em;}.yui-skin-sam .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav,.yui-skin-sam .yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navset-right .yui-nav{border-width:0 5px 0 0;Xposition:absolute;top:0;bottom:0;}.yui-skin-sam .!
 yui-navset .yui-navset-right .yui-nav,.yui-skin-sam .yui-navse!
 t-right 
.yui-nav{border-width:0 0 0 5px;}.yui-skin-sam .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav li,.yui-skin-sam .yui-navset-right .yui-nav li{margin:0 0 .16em;padding:0 0 0 1px;}.yui-skin-sam .yui-navset-right .yui-nav li{padding:0 1px 0 0;}.yui-skin-sam .yui-navset-left .yui-nav .selected,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav .selected{margin:0 -1px .16em 0;}.yui-skin-sam .yui-navset-right .yui-nav .selected{margin:0 0 .16em -1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav a{border-width:1px 0;}.yui-skin-sam .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset .yui-navset-left .yui-nav a em,.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 0 0 1px;padding:.2em .75em;top:auto;left:-1px;}.yui-skin-sam .yui-navset-right .yui-nav a em{border-width:0 1px 0 0;left:auto;right:-1px;}.yui-skin-sam .yui-navset-left .yui-nav a,.yui-skin-sam .yui-navset-left .yui-nav .selected a,.yui-s!
 kin-sam .yui-navset-left .yui-nav a:hover,.yui-skin-sam .yui-navset-right .yui-nav a,.yui-skin-sam .yui-navset-right .yui-nav .selected a,.yui-skin-sam .yui-navset-right .yui-nav a:hover,.yui-skin-sam .yui-navset-bottom .yui-nav a,.yui-skin-sam .yui-navset-bottom .yui-nav .selected a,.yui-skin-sam .yui-navset-bottom .yui-nav a:hover{background-image:none;}.yui-skin-sam .yui-navset-left .yui-content{border:1px solid #808080;border-left-color:#243356;}.yui-skin-sam .yui-navset-bottom .yui-nav,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav{border-width:5px 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav .selected,.yui-skin-sam .yui-navset-bottom .yui-nav .selected{margin:-1px .16em 0 0;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav li,.yui-skin-sam .yui-navset-bottom .yui-nav li{padding:0 0 1px 0;vertical-align:top;}.yui-skin-sam .yui-navset .yui-navset-bottom .yui-nav a em,.yui-skin-sam .yui-navset-bottom .yui-nav a em{border-width:0 0 1px;top:auto;b!
 ottom:-1px;}
+.yui-skin-sam .yui-navset-bottom .yui-content,.yui-skin-sam .yui-navset .yui-navset-bottom .yui-content{border:1px solid #808080;border-bottom-color:#243356;}

Modified: trunk/root/static/yui/tabview/assets/tabview-core.css
===================================================================
--- trunk/root/static/yui/tabview/assets/tabview-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/tabview-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* default space between tabs */
 .yui-navset .yui-nav li,
@@ -16,7 +16,9 @@
 }
 
 .yui-navset .yui-content .yui-hidden {
-    display:none;
+    position:absolute;
+    left:-999999px;
+    visibility:hidden;
 }
 
 /* default width for side tabs */
@@ -52,7 +54,8 @@
     zoom:1;
 }
 
-.yui-navset .yui-content {
+.yui-navset .yui-content,
+.yui-navset .yui-content div {
     zoom:1;
 }
 

Modified: trunk/root/static/yui/tabview/assets/tabview.css
===================================================================
--- trunk/root/static/yui/tabview/assets/tabview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/assets/tabview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,41 +1,25 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /* default space between tabs */
-.yui-navset .yui-nav li,
-.yui-navset .yui-navset-top .yui-nav li,
-.yui-navset .yui-navset-bottom .yui-nav li {
-    margin:0 0.5em 0 0; /* horizontal tabs */
+.yui-navset .yui-nav li {
+    margin-right:0.5em; /* horizontal tabs */
 }
-.yui-navset-left .yui-nav li,
-.yui-navset-right .yui-nav li {
+.yui-navset-left .yui-nav li, .yui-navset-right .yui-nav li {
     margin:0 0 0.5em; /* vertical tabs */
 }
 
 /* default width for side tabs */
-.yui-navset .yui-navset-left .yui-nav,
-.yui-navset .yui-navset-right .yui-nav,
-.yui-navset-left .yui-nav,
-.yui-navset-right .yui-nav { width:6em; }
-.yui-navset-top .yui-nav,
-.yui-navset-bottom .yui-nav {
-    width:auto;
-}
-.yui-navset .yui-navset-left,
-.yui-navset-left { padding:0 0 0 6em; } /* map to nav width */
-.yui-navset-right { padding:0 6em 0 0; } /* ditto */
+.yui-navset-left .yui-nav, .yui-navset-right .yui-nav { width:6em; }
+.yui-navset-left { padding-left:6em; } /* map to nav width */
+.yui-navset-right { padding-right:6em; } /* ditto */
 
-.yui-navset-top,
-.yui-navset-bottom {
-    padding:auto;
-}
 /* core */
 
-.yui-nav,
-.yui-nav li {
+.yui-nav, .yui-nav li {
     margin:0;
     padding:0;
     list-style:none;
@@ -49,9 +33,9 @@
 
 .yui-navset .yui-content { zoom:1; }
 
-.yui-navset .yui-nav li,
-.yui-navset .yui-navset-top .yui-nav li, /* in case nested */
-.yui-navset .yui-navset-bottom .yui-nav li {
+.yui-navset .yui-hidden { display:none; }
+
+.yui-navset .yui-nav li {
     display:inline-block;
     display:-moz-inline-stack;
     *display:inline; /* IE */
@@ -60,8 +44,7 @@
     zoom:1; /* IE: kill space between horizontal tabs */
 }
 
-.yui-navset-left .yui-nav li,
-.yui-navset-right .yui-nav li {
+.yui-navset-left .yui-nav li, .yui-navset-right .yui-nav li {
     display:block;
 }
 
@@ -71,43 +54,24 @@
 
 .yui-navset .yui-nav a { position:relative; } /* IE: to allow overlap */
 
-.yui-navset .yui-nav li a,
-.yui-navset-top .yui-nav li a,
-.yui-navset-bottom .yui-nav li a {
+.yui-navset .yui-nav li a {
     display:block;
     display:inline-block;
     vertical-align:bottom; /* safari: for overlap */
     zoom:1;
 }
 
-.yui-navset-left .yui-nav li a,
-.yui-navset-right .yui-nav li a {
+.yui-navset-left .yui-nav li a, .yui-navset-right .yui-nav li a {
     display:block;
 }
 
 .yui-navset-bottom .yui-nav li a {
-    vertical-align:text-top; /* for inline overlap (reverse for Opera border bug) */
+    vertical-align:text-top; /* for inline overlap (reverse for Op border bug) */
 }
 
-.yui-navset .yui-nav li a em,
-.yui-navset-top .yui-nav li a em,
-.yui-navset-bottom .yui-nav li a em { display:block; }
+.yui-navset .yui-nav li a em { display:block; }
 
 /* position left and right oriented tabs */
-.yui-navset .yui-navset-left .yui-nav,
-.yui-navset .yui-navset-right .yui-nav,
-.yui-navset-left .yui-nav,
-.yui-navset-right .yui-nav {
-   position:absolute;
-   z-index:1; 
-}
-
-.yui-navset-top .yui-nav,
-.yui-navset-bottom .yui-nav {
-    position:static;
-}
-.yui-navset .yui-navset-left .yui-nav,
-.yui-navset-left .yui-nav { left:0; right:auto; }
-
-.yui-navset .yui-navset-right .yui-nav,
-.yui-navset-right .yui-nav { right:0; left:auto; }
+.yui-navset-left .yui-nav, .yui-navset-right .yui-nav { position:absolute; z-index:1; }
+.yui-navset-left .yui-nav { left:0; }
+.yui-navset-right .yui-nav { right:0; }

Modified: trunk/root/static/yui/tabview/tabview-debug.js
===================================================================
--- trunk/root/static/yui/tabview/tabview-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/tabview-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
 
@@ -13,13 +13,17 @@
      *
      */
 
-    var Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        Tab = YAHOO.widget.Tab,
-        doc = document;
+    var Y = YAHOO.util,
+        Dom = Y.Dom,
+        Event = Y.Event,
+        document = window.document,
     
-    // STRING CONSTANTS
-    var ELEMENT = 'element';
+        // STRING CONSTANTS
+        ACTIVE = 'active',
+        ACTIVE_INDEX = 'activeIndex',
+        ACTIVE_TAB = 'activeTab',
+        CONTENT_EL = 'contentEl',
+        ELEMENT = 'element',
     
     /**
      * A widget to control tabbed views.
@@ -33,7 +37,7 @@
      * @param {Object} attr (optional) A key map of the tabView's 
      * initial attributes.  Ignored if first arg is attributes object.
      */
-    var TabView = function(el, attr) {
+    TabView = function(el, attr) {
         attr = attr || {};
         if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
             attr = el; // treat first arg as attr object
@@ -41,12 +45,12 @@
         }
         
         if (!el && !attr.element) { // create if we dont have one
-            el = _createTabViewElement.call(this, attr);
+            el = this._createTabViewElement(attr);
         }
-    	TabView.superclass.constructor.call(this, el, attr); 
+        TabView.superclass.constructor.call(this, el, attr); 
     };
 
-    YAHOO.extend(TabView, YAHOO.util.Element, {
+    YAHOO.extend(TabView, Y.Element, {
         /**
          * The className to add when building from scratch. 
          * @property CLASSNAME
@@ -88,7 +92,13 @@
          * @return void
          */
         addTab: function(tab, index) {
-            var tabs = this.get('tabs');
+            var tabs = this.get('tabs'),
+                before = this.getTab(index),
+                tabParent = this._tabParent,
+                contentParent = this._contentParent,
+                tabElement = tab.get(ELEMENT),
+                contentEl = tab.get(CONTENT_EL);
+
             if (!tabs) { // not ready yet
                 this._queue[this._queue.length] = ['addTab', arguments];
                 return false;
@@ -96,16 +106,6 @@
             
             index = (index === undefined) ? tabs.length : index;
             
-            var before = this.getTab(index);
-            
-            var self = this;
-            var el = this.get(ELEMENT);
-            var tabParent = this._tabParent;
-            var contentParent = this._contentParent;
-
-            var tabElement = tab.get(ELEMENT);
-            var contentEl = tab.get('contentEl');
-
             if ( before ) {
                 tabParent.insertBefore(tabElement, before.get(ELEMENT));
             } else {
@@ -116,33 +116,26 @@
                 contentParent.appendChild(contentEl);
             }
             
-            if ( !tab.get('active') ) {
+            if ( !tab.get(ACTIVE) ) {
                 tab.set('contentVisible', false, true); /* hide if not active */
             } else {
-                this.set('activeTab', tab, true);
+                this.set(ACTIVE_TAB, tab, true);
                 
             }
 
-            var activate = function(e) {
-                YAHOO.util.Event.preventDefault(e);
-                var silent = false;
+            this._initTabEvents(tab);
+            tabs.splice(index, 0, tab);
+        },
 
-                if (this == self.get('activeTab')) {
-                    silent = true; // dont fire activeTabChange if already active
-                }
-                self.set('activeTab', this, silent);
-            };
+        _initTabEvents: function(tab) {
+            tab.addListener( tab.get('activationEvent'), tab._onActivate, this, tab);
             
-            tab.addListener( tab.get('activationEvent'), activate);
-            
             tab.addListener('activationEventChange', function(e) {
                 if (e.prevValue != e.newValue) {
-                    tab.removeListener(e.prevValue, activate);
-                    tab.addListener(e.newValue, activate);
+                    tab.removeListener(e.prevValue, tab._onActivate);
+                    tab.addListener(e.newValue, tab._onActivate, this, tab);
                 }
             });
-            
-            tabs.splice(index, 0, tab);
         },
 
         /**
@@ -152,19 +145,18 @@
          * @return void
          */
         DOMEventHandler: function(e) {
-            var el = this.get(ELEMENT);
-            var target = YAHOO.util.Event.getTarget(e);
-            var tabParent = this._tabParent;
+            var target = Event.getTarget(e),
+                tabParent = this._tabParent,
+                tabs = this.get('tabs'),
+                tab,
+                tabEl,
+                contentEl;
+
             
             if (Dom.isAncestor(tabParent, target) ) {
-                var tabEl;
-                var tab = null;
-                var contentEl;
-                var tabs = this.get('tabs');
-
                 for (var i = 0, len = tabs.length; i < len; i++) {
                     tabEl = tabs[i].get(ELEMENT);
-                    contentEl = tabs[i].get('contentEl');
+                    contentEl = tabs[i].get(CONTENT_EL);
 
                     if ( target == tabEl || Dom.isAncestor(tabEl, target) ) {
                         tab = tabs[i];
@@ -195,8 +187,8 @@
          * @return int
          */
         getTabIndex: function(tab) {
-            var index = null;
-            var tabs = this.get('tabs');
+            var index = null,
+                tabs = this.get('tabs');
             for (var i = 0, len = tabs.length; i < len; ++i) {
                 if (tab == tabs[i]) {
                     index = i;
@@ -214,24 +206,26 @@
          * @return void
          */
         removeTab: function(tab) {
-            var tabCount = this.get('tabs').length;
+            var tabCount = this.get('tabs').length,
+                index = this.getTabIndex(tab);
 
-            var index = this.getTabIndex(tab);
-            var nextIndex = index + 1;
-            if ( tab == this.get('activeTab') ) { // select next tab
-                if (tabCount > 1) {
-                    if (index + 1 == tabCount) {
-                        this.set('activeIndex', index - 1);
-                    } else {
-                        this.set('activeIndex', index + 1);
+            if ( tab === this.get(ACTIVE_TAB) ) { 
+                if (tabCount > 1) { // select another tab
+                    if (index + 1 === tabCount) { // if last, activate previous
+                        this.set(ACTIVE_INDEX, index - 1);
+                    } else { // activate next tab
+                        this.set(ACTIVE_INDEX, index + 1);
                     }
+                } else { // no more tabs
+                    this.set(ACTIVE_TAB, null);
                 }
             }
             
             this._tabParent.removeChild( tab.get(ELEMENT) );
-            this._contentParent.removeChild( tab.get('contentEl') );
+            this._contentParent.removeChild( tab.get(CONTENT_EL) );
             this._configs.tabs.value.splice(index, 1);
-            
+
+            tab.fireEvent('remove', { type: 'remove', tabview: this });
         },
         
         /**
@@ -249,8 +243,12 @@
          * @method contentTransition
          */
         contentTransition: function(newTab, oldTab) {
-            newTab.set('contentVisible', true);
-            oldTab.set('contentVisible', false);
+            if (newTab) {
+                newTab.set('contentVisible', true);
+            }
+            if (oldTab) {
+                oldTab.set('contentVisible', false);
+            }
         },
         
         /**
@@ -289,7 +287,7 @@
              */
             this._tabParent = 
                     this.getElementsByClassName(this.TAB_PARENT_CLASSNAME,
-                            'ul' )[0] || _createTabParent.call(this);
+                            'ul' )[0] || this._createTabParent();
                 
             /**
              * The container of the tabView's content elements.
@@ -299,7 +297,7 @@
              */
             this._contentParent = 
                     this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME,
-                            'div')[0] ||  _createContentParent.call(this);
+                            'div')[0] ||  this._createContentParent();
             
             /**
              * How the Tabs should be oriented relative to the TabView.
@@ -317,10 +315,8 @@
                         this.removeClass('yui-navset-' + current);
                     }
                     
-                    switch(value) {
-                        case 'bottom':
+                    if (value === 'bottom') {
                         this.appendChild(this._tabParent);
-                        break;
                     }
                 }
             });
@@ -330,13 +326,16 @@
              * @attribute activeIndex
              * @type Int
              */
-            this.setAttributeConfig('activeIndex', {
+            this.setAttributeConfig(ACTIVE_INDEX, {
                 value: attr.activeIndex,
                 method: function(value) {
-                    //this.set('activeTab', this.getTab(value));
                 },
                 validator: function(value) {
-                    return !this.getTab(value).get('disabled'); // cannot activate if disabled
+                    var ret = true;
+                    if (value && this.getTab(value).get('disabled')) { // cannot activate if disabled
+                        ret = false;
+                    }
+                    return ret;
                 }
             });
             
@@ -345,37 +344,40 @@
              * @attribute activeTab
              * @type YAHOO.widget.Tab
              */
-            this.setAttributeConfig('activeTab', {
+            this.setAttributeConfig(ACTIVE_TAB, {
                 value: attr.activeTab,
                 method: function(tab) {
-                    var activeTab = this.get('activeTab');
+                    var activeTab = this.get(ACTIVE_TAB);
                     
                     if (tab) {
-                        tab.set('active', true);
-                        //this._configs['activeIndex'].value = this.getTabIndex(tab); // keep in sync
+                        tab.set(ACTIVE, true);
                     }
                     
-                    if (activeTab && activeTab != tab) {
-                        activeTab.set('active', false);
+                    if (activeTab && activeTab !== tab) {
+                        activeTab.set(ACTIVE, false);
                     }
                     
-                    if (activeTab && tab != activeTab) { // no transition if only 1
+                    if (activeTab && tab !== activeTab) { // no transition if only 1
                         this.contentTransition(tab, activeTab);
                     } else if (tab) {
                         tab.set('contentVisible', true);
                     }
                 },
                 validator: function(value) {
-                    return !value.get('disabled'); // cannot activate if disabled
+                    var ret = true;
+                    if (value && value.get('disabled')) { // cannot activate if disabled
+                        ret = false;
+                    }
+                    return ret;
                 }
             });
 
-            this.on('activeTabChange', this._handleActiveTabChange);
-            this.on('activeIndexChange', this._handleActiveIndexChange);
+            this.on('activeTabChange', this._onActiveTabChange);
+            this.on('activeIndexChange', this._onActiveIndexChange);
 
             YAHOO.log('attributes initialized', 'info', 'TabView');
             if ( this._tabParent ) {
-                _initTabs.call(this);
+                this._initTabs();
             }
             
             // Due to delegation we add all DOM_EVENTS to the TabView container
@@ -391,110 +393,136 @@
             }
         },
 
-        _handleActiveTabChange: function(e) {
-            var activeIndex = this.get('activeIndex'),
+        /**
+         * Removes selected state from the given tab if it is the activeTab
+         * @method deselectTab
+         * @param {Int} index The tab index to deselect 
+         */
+        deselectTab: function(index) {
+            if (this.getTab(index) === this.get('activeTab')) {
+                this.set('activeTab', null);
+            }
+        },
+
+        /**
+         * Makes the tab at the given index the active tab
+         * @method selectTab
+         * @param {Int} index The tab index to be made active
+         */
+        selectTab: function(index) {
+            this.set('activeTab', this.getTab(index));
+        },
+
+        _onActiveTabChange: function(e) {
+            var activeIndex = this.get(ACTIVE_INDEX),
                 newIndex = this.getTabIndex(e.newValue);
 
             if (activeIndex !== newIndex) {
-                if (!(this.set('activeIndex', newIndex)) ) { // NOTE: setting
+                if (!(this.set(ACTIVE_INDEX, newIndex)) ) { // NOTE: setting
                      // revert if activeIndex update fails (cancelled via beforeChange) 
-                    this.set('activeTab', e.prevValue);
+                    this.set(ACTIVE_TAB, e.prevValue);
                 }
             }
         },
         
-        _handleActiveIndexChange: function(e) {
+        _onActiveIndexChange: function(e) {
             // no set if called from ActiveTabChange event
-            if (e.newValue !== this.getTabIndex(this.get('activeTab'))) {
-                if (!(this.set('activeTab', this.getTab(e.newValue))) ) { // NOTE: setting
+            if (e.newValue !== this.getTabIndex(this.get(ACTIVE_TAB))) {
+                if (!(this.set(ACTIVE_TAB, this.getTab(e.newValue))) ) { // NOTE: setting
                      // revert if activeTab update fails (cancelled via beforeChange) 
-                    this.set('activeIndex', e.prevValue);
+                    this.set(ACTIVE_INDEX, e.prevValue);
                 }
             }
-        }
-    });
-    
-    
-    /**
-     * Creates Tab instances from a collection of HTMLElements.
-     * @method initTabs
-     * @private
-     * @return void
-     */
-    var _initTabs = function() {
-        var tab,
-            attr,
-            contentEl;
-            
-        var el = this.get(ELEMENT);   
-        var tabs = Dom.getChildren(this._tabParent);
-        var contentElements = Dom.getChildren(this._contentParent);
+        },
 
-        for (var i = 0, len = tabs.length; i < len; ++i) {
-            attr = {};
-            
-            if (contentElements[i]) {
-                attr.contentEl = contentElements[i];
+        /**
+         * Creates Tab instances from a collection of HTMLElements.
+         * @method _initTabs
+         * @private
+         * @return void
+         */
+        _initTabs: function() {
+            var tabs = Dom.getChildren(this._tabParent),
+                contentElements = Dom.getChildren(this._contentParent),
+                activeIndex = this.get(ACTIVE_INDEX),
+                tab,
+                attr,
+                active;
+
+            for (var i = 0, len = tabs.length; i < len; ++i) {
+                attr = {};
+                
+                if (contentElements[i]) {
+                    attr.contentEl = contentElements[i];
+                }
+
+                tab = new YAHOO.widget.Tab(tabs[i], attr);
+                this.addTab(tab);
+                
+                if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) {
+                    active = tab;
+                }
             }
+            if (activeIndex) {
+                this.set(ACTIVE_TAB, this.getTab(activeIndex));
+            } else {
+                this._configs.activeTab.value = active; // dont invoke method
+                this._configs.activeIndex.value = this.getTabIndex(active);
+            }
+        },
 
-            tab = new YAHOO.widget.Tab(tabs[i], attr);
-            this.addTab(tab);
+        _createTabViewElement: function(attr) {
+            var el = document.createElement('div');
+
+            if ( this.CLASSNAME ) {
+                el.className = this.CLASSNAME;
+            }
             
-            if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) {
-                this._configs.activeTab.value = tab; // dont invoke method
-                this._configs.activeIndex.value = this.getTabIndex(tab);
-            }
-        }
-    };
-    
-    var _createTabViewElement = function(attr) {
-        var el = doc.createElement('div');
+            YAHOO.log('TabView Dom created', 'info', 'TabView');
+            return el;
+        },
 
-        if ( this.CLASSNAME ) {
-            el.className = this.CLASSNAME;
-        }
-        
-        YAHOO.log('TabView Dom created', 'info', 'TabView');
-        return el;
-    };
-    
-    var _createTabParent = function(attr) {
-        var el = doc.createElement('ul');
+        _createTabParent: function(attr) {
+            var el = document.createElement('ul');
 
-        if ( this.TAB_PARENT_CLASSNAME ) {
-            el.className = this.TAB_PARENT_CLASSNAME;
-        }
+            if ( this.TAB_PARENT_CLASSNAME ) {
+                el.className = this.TAB_PARENT_CLASSNAME;
+            }
+            
+            this.get(ELEMENT).appendChild(el);
+            
+            return el;
+        },
         
-        this.get(ELEMENT).appendChild(el);
-        
-        return el;
-    };
-    
-    var _createContentParent = function(attr) {
-        var el = doc.createElement('div');
+        _createContentParent: function(attr) {
+            var el = document.createElement('div');
 
-        if ( this.CONTENT_PARENT_CLASSNAME ) {
-            el.className = this.CONTENT_PARENT_CLASSNAME;
+            if ( this.CONTENT_PARENT_CLASSNAME ) {
+                el.className = this.CONTENT_PARENT_CLASSNAME;
+            }
+            
+            this.get(ELEMENT).appendChild(el);
+            
+            return el;
         }
-        
-        this.get(ELEMENT).appendChild(el);
-        
-        return el;
-    };
+    });
     
+    
     YAHOO.widget.TabView = TabView;
 })();
 
 (function() {
-    var Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        Lang = YAHOO.lang;
+    var Y = YAHOO.util, 
+        Dom = Y.Dom,
+        Lang = YAHOO.lang,
     
 
     // STRING CONSTANTS
-    var CONTENT_EL = 'contentEl',
+        ACTIVE_TAB = 'activeTab',
+        LABEL = 'label',
         LABEL_EL = 'labelEl',
         CONTENT = 'content',
+        CONTENT_EL = 'contentEl',
         ELEMENT = 'element',
         CACHE_DATA = 'cacheData',
         DATA_SRC = 'dataSrc',
@@ -502,7 +530,7 @@
         DATA_TIMEOUT = 'dataTimeout',
         LOAD_METHOD = 'loadMethod',
         POST_DATA = 'postData',
-        DISABLED = 'disabled';
+        DISABLED = 'disabled',
     
     /**
      * A representation of a Tab's label and content.
@@ -514,7 +542,7 @@
      * represents the TabView. An element will be created if none provided.
      * @param {Object} properties A key map of initial properties
      */
-    var Tab = function(el, attr) {
+    Tab = function(el, attr) {
         attr = attr || {};
         if (arguments.length == 1 && !Lang.isString(el) && !el.nodeName) {
             attr = el;
@@ -522,7 +550,7 @@
         }
 
         if (!el && !attr.element) {
-            el = _createTabElement.call(this, attr);
+            el = this._createTabElement(attr);
         }
 
         this.loadHandler =  {
@@ -610,8 +638,8 @@
          * @return String
          */
         toString: function() {
-            var el = this.get(ELEMENT);
-            var id = el.id || el.tagName;
+            var el = this.get(ELEMENT),
+                id = el.id || el.tagName;
             return "Tab " + id; 
         },
         
@@ -624,8 +652,6 @@
             attr = attr || {};
             Tab.superclass.initAttributes.call(this, attr);
             
-            var el = this.get(ELEMENT);
-            
             /**
              * The event that triggers the tab's activation.
              * @attribute activationEvent
@@ -641,8 +667,9 @@
              * @type HTMLElement
              */
             this.setAttributeConfig(LABEL_EL, {
-                value: attr.labelEl || _getlabelEl.call(this),
+                value: attr[LABEL_EL] || this._getLabelEl(),
                 method: function(value) {
+                    value = Dom.get(value);
                     var current = this.get(LABEL_EL);
 
                     if (current) {
@@ -650,12 +677,9 @@
                             return false; // already set
                         }
                         
-                        this.replaceChild(value, current);
-                    } else if (el.firstChild) { // ensure label is firstChild by default
-                        this.insertBefore(value, el.firstChild);
-                    } else {
-                        this.appendChild(value);
-                    }  
+                        current.parentNode.replaceChild(value, current);
+                        this.set(LABEL, value.innerHTML);
+                    }
                 } 
             });
 
@@ -664,15 +688,15 @@
              * @attribute label
              * @type String
              */
-            this.setAttributeConfig('label', {
-                value: attr.label || _getLabel.call(this),
+            this.setAttributeConfig(LABEL, {
+                value: attr.label || this._getLabel(),
                 method: function(value) {
                     var labelEl = this.get(LABEL_EL);
                     if (!labelEl) { // create if needed
-                        this.set(LABEL_EL, _createlabelEl.call(this));
+                        this.set(LABEL_EL, this._createLabelEl());
                     }
                     
-                    _setLabel.call(this, value);
+                    labelEl.innerHTML = value;
                 }
             });
             
@@ -682,15 +706,20 @@
              * @type HTMLElement
              */
             this.setAttributeConfig(CONTENT_EL, {
-                value: attr.contentEl || document.createElement('div'),
+                value: attr[CONTENT_EL] || document.createElement('div'),
                 method: function(value) {
+                    value = Dom.get(value);
                     var current = this.get(CONTENT_EL);
 
                     if (current) {
-                        if (current == value) {
+                        if (current === value) {
                             return false; // already set
                         }
-                        this.replaceChild(value, current);
+                        if (!this.get('selected')) {
+                            Dom.addClass(value, 'yui-hidden');
+                        }
+                        current.parentNode.replaceChild(value, current);
+                        this.set(CONTENT, value.innerHTML);
                     }
                 }
             });
@@ -701,14 +730,12 @@
              * @type String
              */
             this.setAttributeConfig(CONTENT, {
-                value: attr.content,
+                value: attr[CONTENT],
                 method: function(value) {
                     this.get(CONTENT_EL).innerHTML = value;
                 }
             });
 
-            var _dataLoaded = false;
-            
             /**
              * The tab's data source, used for loading content dynamically.
              * @attribute dataSrc
@@ -836,7 +863,6 @@
                 value: attr.contentVisible,
                 method: function(value) {
                     if (value) {
-                        //this.get(CONTENT_EL).style.display = 'block';
                         Dom.removeClass(this.get(CONTENT_EL), this.HIDDEN_CLASSNAME);
                         
                         if ( this.get(DATA_SRC) ) {
@@ -855,7 +881,7 @@
         },
         
         _dataConnect: function() {
-            if (!YAHOO.util.Connect) {
+            if (!Y.Connect) {
                 YAHOO.log('YAHOO.util.Connect dependency not met',
                         'error', 'Tab');
                 return false;
@@ -863,7 +889,7 @@
 
             Dom.addClass(this.get(CONTENT_EL).parentNode, this.LOADING_CLASSNAME);
             this._loading = true; 
-            this.dataConnection = YAHOO.util.Connect.asyncRequest(
+            this.dataConnection = Y.Connect.asyncRequest(
                 this.get(LOAD_METHOD),
                 this.get(DATA_SRC), 
                 {
@@ -890,60 +916,73 @@
 
                 this.get(POST_DATA)
             );
-        }
-    });
+        },
+        _createTabElement: function(attr) {
+            var el = document.createElement('li'),
+                a = document.createElement('a'),
+                label = attr.label || null,
+                labelEl = attr.labelEl || null;
+            
+            a.href = attr.href || '#'; // TODO: Use Dom.setAttribute?
+            el.appendChild(a);
+            
+            if (labelEl) { // user supplied labelEl
+                if (!label) { // user supplied label
+                    label = this._getLabel();
+                }
+            } else {
+                labelEl = this._createLabelEl();
+            }
+            
+            a.appendChild(labelEl);
+            
+            YAHOO.log('creating Tab Dom', 'info', 'Tab');
+            return el;
+        },
+
+        _getLabelEl: function() {
+            return this.getElementsByTagName(this.LABEL_TAGNAME)[0];
+        },
+
+        _createLabelEl: function() {
+            var el = document.createElement(this.LABEL_TAGNAME);
+            return el;
+        },
     
-    var _createTabElement = function(attr) {
-        var el = document.createElement('li');
-        var a = document.createElement('a');
         
-        a.href = attr.href || '#';
-        
-        el.appendChild(a);
-        
-        var label = attr.label || null;
-        var labelEl = attr.labelEl || null;
-        
-        if (labelEl) { // user supplied labelEl
-            if (!label) { // user supplied label
-                label = _getLabel.call(this, labelEl);
+        _getLabel: function() {
+            var el = this.get(LABEL_EL);
+                
+                if (!el) {
+                    return undefined;
+                }
+            
+            return el.innerHTML;
+        },
+
+        _onActivate: function(e, tabview) {
+            var tab = this,
+                silent = false;
+            
+
+            Y.Event.preventDefault(e);
+            if (tab === tabview.get(ACTIVE_TAB)) {
+                silent = true; // dont fire activeTabChange if already active
             }
-        } else {
-            labelEl = _createlabelEl.call(this);
+            tabview.set(ACTIVE_TAB, tab, silent);
         }
-        
-        a.appendChild(labelEl);
-        
-        YAHOO.log('creating Tab Dom', 'info', 'Tab');
-        return el;
-    };
+    });
     
-    var _getlabelEl = function() {
-        return this.getElementsByTagName(this.LABEL_TAGNAME)[0];
-    };
     
-    var _createlabelEl = function() {
-        var el = document.createElement(this.LABEL_TAGNAME);
-        return el;
-    };
+    /**
+     * Fires when a tab is removed from the tabview
+     * @event remove
+     * @type CustomEvent
+     * @param {Event} An event object with fields for "type" ("remove")
+     * and "tabview" (the tabview instance it was removed from) 
+     */
     
-    var _setLabel = function(label) {
-        var el = this.get(LABEL_EL);
-        el.innerHTML = label;
-    };
-    
-    var _getLabel = function() {
-        var label,
-            el = this.get(LABEL_EL);
-            
-            if (!el) {
-                return undefined;
-            }
-        
-        return el.innerHTML;
-    };
-    
     YAHOO.widget.Tab = Tab;
 })();
 
-YAHOO.register("tabview", YAHOO.widget.TabView, {version: "2.6.0", build: "1321"});
+YAHOO.register("tabview", YAHOO.widget.TabView, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/tabview/tabview-min.js
===================================================================
--- trunk/root/static/yui/tabview/tabview-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/tabview-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var D=YAHOO.util.Dom,H=YAHOO.util.Event,C=YAHOO.widget.Tab,F=document;var E="element";var J=function(L,K){K=K||{};if(arguments.length==1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=I.call(this,K);}J.superclass.constructor.call(this,L,K);};YAHOO.extend(J,YAHOO.util.Element,{CLASSNAME:"yui-navset",TAB_PARENT_CLASSNAME:"yui-nav",CONTENT_PARENT_CLASSNAME:"yui-content",_tabParent:null,_contentParent:null,addTab:function(N,P){var Q=this.get("tabs");if(!Q){this._queue[this._queue.length]=["addTab",arguments];return false;}P=(P===undefined)?Q.length:P;var S=this.getTab(P);var U=this;var M=this.get(E);var T=this._tabParent;var R=this._contentParent;var K=N.get(E);var L=N.get("contentEl");if(S){T.insertBefore(K,S.get(E));}else{T.appendChild(K);}if(L&&!D.isAncestor(R,L)){R.appendChild(L);}if(!N.get("active")){N.set("contentVisible",false,true);}else{this.set("activeTab",N,true);}var O=function(W){YAHOO.util.Event.preventDefault(W);var!
  V=false;if(this==U.get("activeTab")){V=true;}U.set("activeTab",this,V);};N.addListener(N.get("activationEvent"),O);N.addListener("activationEventChange",function(V){if(V.prevValue!=V.newValue){N.removeListener(V.prevValue,O);N.addListener(V.newValue,O);}});Q.splice(P,0,N);},DOMEventHandler:function(Q){var L=this.get(E);var R=YAHOO.util.Event.getTarget(Q);var T=this._tabParent;if(D.isAncestor(T,R)){var M;var N=null;var K;var S=this.get("tabs");for(var O=0,P=S.length;O<P;O++){M=S[O].get(E);K=S[O].get("contentEl");if(R==M||D.isAncestor(M,R)){N=S[O];break;}}if(N){N.fireEvent(Q.type,Q);}}},getTab:function(K){return this.get("tabs")[K];},getTabIndex:function(O){var L=null;var N=this.get("tabs");for(var M=0,K=N.length;M<K;++M){if(O==N[M]){L=M;break;}}return L;},removeTab:function(N){var M=this.get("tabs").length;var L=this.getTabIndex(N);var K=L+1;if(N==this.get("activeTab")){if(M>1){if(L+1==M){this.set("activeIndex",L-1);}else{this.set("activeIndex",L+1);}}}this._tabParent.remov!
 eChild(N.get(E));this._contentParent.removeChild(N.get("conten!
 tEl"));t
his._configs.tabs.value.splice(L,1);},toString:function(){var K=this.get("id")||this.get("tagName");return"TabView "+K;},contentTransition:function(L,K){L.set("contentVisible",true);K.set("contentVisible",false);},initAttributes:function(K){J.superclass.initAttributes.call(this,K);if(!K.orientation){K.orientation="top";}var M=this.get(E);if(!D.hasClass(M,this.CLASSNAME)){D.addClass(M,this.CLASSNAME);}this.setAttributeConfig("tabs",{value:[],readOnly:true});this._tabParent=this.getElementsByClassName(this.TAB_PARENT_CLASSNAME,"ul")[0]||G.call(this);this._contentParent=this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME,"div")[0]||B.call(this);this.setAttributeConfig("orientation",{value:K.orientation,method:function(N){var O=this.get("orientation");this.addClass("yui-navset-"+N);if(O!=N){this.removeClass("yui-navset-"+O);}switch(N){case"bottom":this.appendChild(this._tabParent);break;}}});this.setAttributeConfig("activeIndex",{value:K.activeIndex,method:function(N){},va!
 lidator:function(N){return !this.getTab(N).get("disabled");}});this.setAttributeConfig("activeTab",{value:K.activeTab,method:function(O){var N=this.get("activeTab");if(O){O.set("active",true);}if(N&&N!=O){N.set("active",false);}if(N&&O!=N){this.contentTransition(O,N);}else{if(O){O.set("contentVisible",true);}}},validator:function(N){return !N.get("disabled");}});this.on("activeTabChange",this._handleActiveTabChange);this.on("activeIndexChange",this._handleActiveIndexChange);if(this._tabParent){A.call(this);}this.DOM_EVENTS.submit=false;this.DOM_EVENTS.focus=false;this.DOM_EVENTS.blur=false;for(var L in this.DOM_EVENTS){if(YAHOO.lang.hasOwnProperty(this.DOM_EVENTS,L)){this.addListener.call(this,L,this.DOMEventHandler);}}},_handleActiveTabChange:function(M){var K=this.get("activeIndex"),L=this.getTabIndex(M.newValue);if(K!==L){if(!(this.set("activeIndex",L))){this.set("activeTab",M.prevValue);}}},_handleActiveIndexChange:function(K){if(K.newValue!==this.getTabIndex(this.get("!
 activeTab"))){if(!(this.set("activeTab",this.getTab(K.newValue!
 )))){thi
s.set("activeIndex",K.prevValue);}}}});var A=function(){var R,M,Q;var P=this.get(E);var O=D.getChildren(this._tabParent);var L=D.getChildren(this._contentParent);for(var N=0,K=O.length;N<K;++N){M={};if(L[N]){M.contentEl=L[N];}R=new YAHOO.widget.Tab(O[N],M);this.addTab(R);if(R.hasClass(R.ACTIVE_CLASSNAME)){this._configs.activeTab.value=R;this._configs.activeIndex.value=this.getTabIndex(R);}}};var I=function(K){var L=F.createElement("div");if(this.CLASSNAME){L.className=this.CLASSNAME;}return L;};var G=function(K){var L=F.createElement("ul");if(this.TAB_PARENT_CLASSNAME){L.className=this.TAB_PARENT_CLASSNAME;}this.get(E).appendChild(L);return L;};var B=function(K){var L=F.createElement("div");if(this.CONTENT_PARENT_CLASSNAME){L.className=this.CONTENT_PARENT_CLASSNAME;}this.get(E).appendChild(L);return L;};YAHOO.widget.TabView=J;})();(function(){var B=YAHOO.util.Dom,T=YAHOO.util.Event,D=YAHOO.lang;var E="contentEl",Q="labelEl",G="content",M="element",C="cacheData",K="dataSrc",J!
 ="dataLoaded",F="dataTimeout",I="loadMethod",L="postData",P="disabled";var H=function(V,U){U=U||{};if(arguments.length==1&&!D.isString(V)&&!V.nodeName){U=V;V=U.element;}if(!V&&!U.element){V=N.call(this,U);}this.loadHandler={success:function(W){this.set(G,W.responseText);},failure:function(W){}};H.superclass.constructor.call(this,V,U);this.DOM_EVENTS={};};YAHOO.extend(H,YAHOO.util.Element,{LABEL_TAGNAME:"em",ACTIVE_CLASSNAME:"selected",HIDDEN_CLASSNAME:"yui-hidden",ACTIVE_TITLE:"active",DISABLED_CLASSNAME:P,LOADING_CLASSNAME:"loading",dataConnection:null,loadHandler:null,_loading:false,toString:function(){var U=this.get(M);var V=U.id||U.tagName;return"Tab "+V;},initAttributes:function(U){U=U||{};H.superclass.initAttributes.call(this,U);var W=this.get(M);this.setAttributeConfig("activationEvent",{value:U.activationEvent||"click"});this.setAttributeConfig(Q,{value:U.labelEl||O.call(this),method:function(X){var Y=this.get(Q);
-if(Y){if(Y==X){return false;}this.replaceChild(X,Y);}else{if(W.firstChild){this.insertBefore(X,W.firstChild);}else{this.appendChild(X);}}}});this.setAttributeConfig("label",{value:U.label||A.call(this),method:function(Y){var X=this.get(Q);if(!X){this.set(Q,S.call(this));}R.call(this,Y);}});this.setAttributeConfig(E,{value:U.contentEl||document.createElement("div"),method:function(X){var Y=this.get(E);if(Y){if(Y==X){return false;}this.replaceChild(X,Y);}}});this.setAttributeConfig(G,{value:U.content,method:function(X){this.get(E).innerHTML=X;}});var V=false;this.setAttributeConfig(K,{value:U.dataSrc});this.setAttributeConfig(C,{value:U.cacheData||false,validator:D.isBoolean});this.setAttributeConfig(I,{value:U.loadMethod||"GET",validator:D.isString});this.setAttributeConfig(J,{value:false,validator:D.isBoolean,writeOnce:true});this.setAttributeConfig(F,{value:U.dataTimeout||null,validator:D.isNumber});this.setAttributeConfig(L,{value:U.postData||null});this.setAttributeConfi!
 g("active",{value:U.active||this.hasClass(this.ACTIVE_CLASSNAME),method:function(X){if(X===true){this.addClass(this.ACTIVE_CLASSNAME);this.set("title",this.ACTIVE_TITLE);}else{this.removeClass(this.ACTIVE_CLASSNAME);this.set("title","");}},validator:function(X){return D.isBoolean(X)&&!this.get(P);}});this.setAttributeConfig(P,{value:U.disabled||this.hasClass(this.DISABLED_CLASSNAME),method:function(X){if(X===true){B.addClass(this.get(M),this.DISABLED_CLASSNAME);}else{B.removeClass(this.get(M),this.DISABLED_CLASSNAME);}},validator:D.isBoolean});this.setAttributeConfig("href",{value:U.href||this.getElementsByTagName("a")[0].getAttribute("href",2)||"#",method:function(X){this.getElementsByTagName("a")[0].href=X;},validator:D.isString});this.setAttributeConfig("contentVisible",{value:U.contentVisible,method:function(X){if(X){B.removeClass(this.get(E),this.HIDDEN_CLASSNAME);if(this.get(K)){if(!this._loading&&!(this.get(J)&&this.get(C))){this._dataConnect();}}}else{B.addClass(thi!
 s.get(E),this.HIDDEN_CLASSNAME);}},validator:D.isBoolean});},_!
 dataConn
ect:function(){if(!YAHOO.util.Connect){return false;}B.addClass(this.get(E).parentNode,this.LOADING_CLASSNAME);this._loading=true;this.dataConnection=YAHOO.util.Connect.asyncRequest(this.get(I),this.get(K),{success:function(U){this.loadHandler.success.call(this,U);this.set(J,true);this.dataConnection=null;B.removeClass(this.get(E).parentNode,this.LOADING_CLASSNAME);this._loading=false;},failure:function(U){this.loadHandler.failure.call(this,U);this.dataConnection=null;B.removeClass(this.get(E).parentNode,this.LOADING_CLASSNAME);this._loading=false;},scope:this,timeout:this.get(F)},this.get(L));}});var N=function(U){var Y=document.createElement("li");var V=document.createElement("a");V.href=U.href||"#";Y.appendChild(V);var X=U.label||null;var W=U.labelEl||null;if(W){if(!X){X=A.call(this,W);}}else{W=S.call(this);}V.appendChild(W);return Y;};var O=function(){return this.getElementsByTagName(this.LABEL_TAGNAME)[0];};var S=function(){var U=document.createElement(this.LABEL_TAGNAM!
 E);return U;};var R=function(U){var V=this.get(Q);V.innerHTML=U;};var A=function(){var U,V=this.get(Q);if(!V){return undefined;}return V.innerHTML;};YAHOO.widget.Tab=H;})();YAHOO.register("tabview",YAHOO.widget.TabView,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var B=YAHOO.util,C=B.Dom,H=B.Event,F=window.document,J="active",D="activeIndex",E="activeTab",A="contentEl",G="element",I=function(L,K){K=K||{};if(arguments.length==1&&!YAHOO.lang.isString(L)&&!L.nodeName){K=L;L=K.element||null;}if(!L&&!K.element){L=this._createTabViewElement(K);}I.superclass.constructor.call(this,L,K);};YAHOO.extend(I,B.Element,{CLASSNAME:"yui-navset",TAB_PARENT_CLASSNAME:"yui-nav",CONTENT_PARENT_CLASSNAME:"yui-content",_tabParent:null,_contentParent:null,addTab:function(P,L){var N=this.get("tabs"),Q=this.getTab(L),R=this._tabParent,K=this._contentParent,M=P.get(G),O=P.get(A);if(!N){this._queue[this._queue.length]=["addTab",arguments];return false;}L=(L===undefined)?N.length:L;if(Q){R.insertBefore(M,Q.get(G));}else{R.appendChild(M);}if(O&&!C.isAncestor(K,O)){K.appendChild(O);}if(!P.get(J)){P.set("contentVisible",false,true);}else{this.set(E,P,true);}this._initTabEvents(P);N.splice(L,0,P);},_initTabEvents:function(K){K.addListener(K.get("activat!
 ionEvent"),K._onActivate,this,K);K.addListener("activationEventChange",function(L){if(L.prevValue!=L.newValue){K.removeListener(L.prevValue,K._onActivate);K.addListener(L.newValue,K._onActivate,this,K);}});},DOMEventHandler:function(P){var Q=H.getTarget(P),S=this._tabParent,R=this.get("tabs"),M,L,K;if(C.isAncestor(S,Q)){for(var N=0,O=R.length;N<O;N++){L=R[N].get(G);K=R[N].get(A);if(Q==L||C.isAncestor(L,Q)){M=R[N];break;}}if(M){M.fireEvent(P.type,P);}}},getTab:function(K){return this.get("tabs")[K];},getTabIndex:function(O){var L=null,N=this.get("tabs");for(var M=0,K=N.length;M<K;++M){if(O==N[M]){L=M;break;}}return L;},removeTab:function(M){var L=this.get("tabs").length,K=this.getTabIndex(M);if(M===this.get(E)){if(L>1){if(K+1===L){this.set(D,K-1);}else{this.set(D,K+1);}}else{this.set(E,null);}}this._tabParent.removeChild(M.get(G));this._contentParent.removeChild(M.get(A));this._configs.tabs.value.splice(K,1);M.fireEvent("remove",{type:"remove",tabview:this});},toString:funct!
 ion(){var K=this.get("id")||this.get("tagName");return"TabView!
  "+K;},c
ontentTransition:function(L,K){if(L){L.set("contentVisible",true);}if(K){K.set("contentVisible",false);}},initAttributes:function(K){I.superclass.initAttributes.call(this,K);if(!K.orientation){K.orientation="top";}var M=this.get(G);if(!C.hasClass(M,this.CLASSNAME)){C.addClass(M,this.CLASSNAME);}this.setAttributeConfig("tabs",{value:[],readOnly:true});this._tabParent=this.getElementsByClassName(this.TAB_PARENT_CLASSNAME,"ul")[0]||this._createTabParent();this._contentParent=this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME,"div")[0]||this._createContentParent();this.setAttributeConfig("orientation",{value:K.orientation,method:function(N){var O=this.get("orientation");this.addClass("yui-navset-"+N);if(O!=N){this.removeClass("yui-navset-"+O);}if(N==="bottom"){this.appendChild(this._tabParent);}}});this.setAttributeConfig(D,{value:K.activeIndex,method:function(N){},validator:function(O){var N=true;if(O&&this.getTab(O).get("disabled")){N=false;}return N;}});this.setAttribu!
 teConfig(E,{value:K.activeTab,method:function(O){var N=this.get(E);if(O){O.set(J,true);}if(N&&N!==O){N.set(J,false);}if(N&&O!==N){this.contentTransition(O,N);}else{if(O){O.set("contentVisible",true);}}},validator:function(O){var N=true;if(O&&O.get("disabled")){N=false;}return N;}});this.on("activeTabChange",this._onActiveTabChange);this.on("activeIndexChange",this._onActiveIndexChange);if(this._tabParent){this._initTabs();}this.DOM_EVENTS.submit=false;this.DOM_EVENTS.focus=false;this.DOM_EVENTS.blur=false;for(var L in this.DOM_EVENTS){if(YAHOO.lang.hasOwnProperty(this.DOM_EVENTS,L)){this.addListener.call(this,L,this.DOMEventHandler);}}},deselectTab:function(K){if(this.getTab(K)===this.get("activeTab")){this.set("activeTab",null);}},selectTab:function(K){this.set("activeTab",this.getTab(K));},_onActiveTabChange:function(M){var K=this.get(D),L=this.getTabIndex(M.newValue);if(K!==L){if(!(this.set(D,L))){this.set(E,M.prevValue);}}},_onActiveIndexChange:function(K){if(K.newValue!
 !==this.getTabIndex(this.get(E))){if(!(this.set(E,this.getTab(!
 K.newVal
ue)))){this.set(D,K.prevValue);}}},_initTabs:function(){var P=C.getChildren(this._tabParent),N=C.getChildren(this._contentParent),M=this.get(D),Q,L,R;for(var O=0,K=P.length;O<K;++O){L={};if(N[O]){L.contentEl=N[O];}Q=new YAHOO.widget.Tab(P[O],L);this.addTab(Q);if(Q.hasClass(Q.ACTIVE_CLASSNAME)){R=Q;}}if(M){this.set(E,this.getTab(M));}else{this._configs.activeTab.value=R;this._configs.activeIndex.value=this.getTabIndex(R);}},_createTabViewElement:function(K){var L=F.createElement("div");if(this.CLASSNAME){L.className=this.CLASSNAME;}return L;},_createTabParent:function(K){var L=F.createElement("ul");if(this.TAB_PARENT_CLASSNAME){L.className=this.TAB_PARENT_CLASSNAME;}this.get(G).appendChild(L);return L;},_createContentParent:function(K){var L=F.createElement("div");if(this.CONTENT_PARENT_CLASSNAME){L.className=this.CONTENT_PARENT_CLASSNAME;}this.get(G).appendChild(L);return L;}});YAHOO.widget.TabView=I;})();(function(){var D=YAHOO.util,I=D.Dom,L=YAHOO.lang,M="activeTab",J="lab!
 el",G="labelEl",Q="content",C="contentEl",O="element",P="cacheData",B="dataSrc",H="dataLoaded",A="dataTimeout",N="loadMethod",F="postData",K="disabled",E=function(S,R){R=R||{};if(arguments.length==1&&!L.isString(S)&&!S.nodeName){R=S;S=R.element;}if(!S&&!R.element){S=this._createTabElement(R);}this.loadHandler={success:function(T){this.set(Q,T.responseText);},failure:function(T){}};E.superclass.constructor.call(this,S,R);this.DOM_EVENTS={};};YAHOO.extend(E,YAHOO.util.Element,{LABEL_TAGNAME:"em",ACTIVE_CLASSNAME:"selected",HIDDEN_CLASSNAME:"yui-hidden",ACTIVE_TITLE:"active",DISABLED_CLASSNAME:K,LOADING_CLASSNAME:"loading",dataConnection:null,loadHandler:null,_loading:false,toString:function(){var R=this.get(O),S=R.id||R.tagName;return"Tab "+S;},initAttributes:function(R){R=R||{};E.superclass.initAttributes.call(this,R);this.setAttributeConfig("activationEvent",{value:R.activationEvent||"click"});this.setAttributeConfig(G,{value:R[G]||this._getLabelEl(),method:function(S){S=I.!
 get(S);
+var T=this.get(G);if(T){if(T==S){return false;}T.parentNode.replaceChild(S,T);this.set(J,S.innerHTML);}}});this.setAttributeConfig(J,{value:R.label||this._getLabel(),method:function(T){var S=this.get(G);if(!S){this.set(G,this._createLabelEl());}S.innerHTML=T;}});this.setAttributeConfig(C,{value:R[C]||document.createElement("div"),method:function(S){S=I.get(S);var T=this.get(C);if(T){if(T===S){return false;}if(!this.get("selected")){I.addClass(S,"yui-hidden");}T.parentNode.replaceChild(S,T);this.set(Q,S.innerHTML);}}});this.setAttributeConfig(Q,{value:R[Q],method:function(S){this.get(C).innerHTML=S;}});this.setAttributeConfig(B,{value:R.dataSrc});this.setAttributeConfig(P,{value:R.cacheData||false,validator:L.isBoolean});this.setAttributeConfig(N,{value:R.loadMethod||"GET",validator:L.isString});this.setAttributeConfig(H,{value:false,validator:L.isBoolean,writeOnce:true});this.setAttributeConfig(A,{value:R.dataTimeout||null,validator:L.isNumber});this.setAttributeConfig(F,{v!
 alue:R.postData||null});this.setAttributeConfig("active",{value:R.active||this.hasClass(this.ACTIVE_CLASSNAME),method:function(S){if(S===true){this.addClass(this.ACTIVE_CLASSNAME);this.set("title",this.ACTIVE_TITLE);}else{this.removeClass(this.ACTIVE_CLASSNAME);this.set("title","");}},validator:function(S){return L.isBoolean(S)&&!this.get(K);}});this.setAttributeConfig(K,{value:R.disabled||this.hasClass(this.DISABLED_CLASSNAME),method:function(S){if(S===true){I.addClass(this.get(O),this.DISABLED_CLASSNAME);}else{I.removeClass(this.get(O),this.DISABLED_CLASSNAME);}},validator:L.isBoolean});this.setAttributeConfig("href",{value:R.href||this.getElementsByTagName("a")[0].getAttribute("href",2)||"#",method:function(S){this.getElementsByTagName("a")[0].href=S;},validator:L.isString});this.setAttributeConfig("contentVisible",{value:R.contentVisible,method:function(S){if(S){I.removeClass(this.get(C),this.HIDDEN_CLASSNAME);if(this.get(B)){if(!this._loading&&!(this.get(H)&&this.get(P!
 ))){this._dataConnect();}}}else{I.addClass(this.get(C),this.HI!
 DDEN_CLA
SSNAME);}},validator:L.isBoolean});},_dataConnect:function(){if(!D.Connect){return false;}I.addClass(this.get(C).parentNode,this.LOADING_CLASSNAME);this._loading=true;this.dataConnection=D.Connect.asyncRequest(this.get(N),this.get(B),{success:function(R){this.loadHandler.success.call(this,R);this.set(H,true);this.dataConnection=null;I.removeClass(this.get(C).parentNode,this.LOADING_CLASSNAME);this._loading=false;},failure:function(R){this.loadHandler.failure.call(this,R);this.dataConnection=null;I.removeClass(this.get(C).parentNode,this.LOADING_CLASSNAME);this._loading=false;},scope:this,timeout:this.get(A)},this.get(F));},_createTabElement:function(R){var V=document.createElement("li"),S=document.createElement("a"),U=R.label||null,T=R.labelEl||null;S.href=R.href||"#";V.appendChild(S);if(T){if(!U){U=this._getLabel();}}else{T=this._createLabelEl();}S.appendChild(T);return V;},_getLabelEl:function(){return this.getElementsByTagName(this.LABEL_TAGNAME)[0];},_createLabelEl:funct!
 ion(){var R=document.createElement(this.LABEL_TAGNAME);return R;},_getLabel:function(){var R=this.get(G);if(!R){return undefined;}return R.innerHTML;},_onActivate:function(U,T){var S=this,R=false;D.Event.preventDefault(U);if(S===T.get(M)){R=true;}T.set(M,S,R);}});YAHOO.widget.Tab=E;})();YAHOO.register("tabview",YAHOO.widget.TabView,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/tabview/tabview.js
===================================================================
--- trunk/root/static/yui/tabview/tabview.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/tabview/tabview.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function() {
 
@@ -13,13 +13,17 @@
      *
      */
 
-    var Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        Tab = YAHOO.widget.Tab,
-        doc = document;
+    var Y = YAHOO.util,
+        Dom = Y.Dom,
+        Event = Y.Event,
+        document = window.document,
     
-    // STRING CONSTANTS
-    var ELEMENT = 'element';
+        // STRING CONSTANTS
+        ACTIVE = 'active',
+        ACTIVE_INDEX = 'activeIndex',
+        ACTIVE_TAB = 'activeTab',
+        CONTENT_EL = 'contentEl',
+        ELEMENT = 'element',
     
     /**
      * A widget to control tabbed views.
@@ -33,7 +37,7 @@
      * @param {Object} attr (optional) A key map of the tabView's 
      * initial attributes.  Ignored if first arg is attributes object.
      */
-    var TabView = function(el, attr) {
+    TabView = function(el, attr) {
         attr = attr || {};
         if (arguments.length == 1 && !YAHOO.lang.isString(el) && !el.nodeName) {
             attr = el; // treat first arg as attr object
@@ -41,12 +45,12 @@
         }
         
         if (!el && !attr.element) { // create if we dont have one
-            el = _createTabViewElement.call(this, attr);
+            el = this._createTabViewElement(attr);
         }
-    	TabView.superclass.constructor.call(this, el, attr); 
+        TabView.superclass.constructor.call(this, el, attr); 
     };
 
-    YAHOO.extend(TabView, YAHOO.util.Element, {
+    YAHOO.extend(TabView, Y.Element, {
         /**
          * The className to add when building from scratch. 
          * @property CLASSNAME
@@ -88,7 +92,13 @@
          * @return void
          */
         addTab: function(tab, index) {
-            var tabs = this.get('tabs');
+            var tabs = this.get('tabs'),
+                before = this.getTab(index),
+                tabParent = this._tabParent,
+                contentParent = this._contentParent,
+                tabElement = tab.get(ELEMENT),
+                contentEl = tab.get(CONTENT_EL);
+
             if (!tabs) { // not ready yet
                 this._queue[this._queue.length] = ['addTab', arguments];
                 return false;
@@ -96,16 +106,6 @@
             
             index = (index === undefined) ? tabs.length : index;
             
-            var before = this.getTab(index);
-            
-            var self = this;
-            var el = this.get(ELEMENT);
-            var tabParent = this._tabParent;
-            var contentParent = this._contentParent;
-
-            var tabElement = tab.get(ELEMENT);
-            var contentEl = tab.get('contentEl');
-
             if ( before ) {
                 tabParent.insertBefore(tabElement, before.get(ELEMENT));
             } else {
@@ -116,33 +116,26 @@
                 contentParent.appendChild(contentEl);
             }
             
-            if ( !tab.get('active') ) {
+            if ( !tab.get(ACTIVE) ) {
                 tab.set('contentVisible', false, true); /* hide if not active */
             } else {
-                this.set('activeTab', tab, true);
+                this.set(ACTIVE_TAB, tab, true);
                 
             }
 
-            var activate = function(e) {
-                YAHOO.util.Event.preventDefault(e);
-                var silent = false;
+            this._initTabEvents(tab);
+            tabs.splice(index, 0, tab);
+        },
 
-                if (this == self.get('activeTab')) {
-                    silent = true; // dont fire activeTabChange if already active
-                }
-                self.set('activeTab', this, silent);
-            };
+        _initTabEvents: function(tab) {
+            tab.addListener( tab.get('activationEvent'), tab._onActivate, this, tab);
             
-            tab.addListener( tab.get('activationEvent'), activate);
-            
             tab.addListener('activationEventChange', function(e) {
                 if (e.prevValue != e.newValue) {
-                    tab.removeListener(e.prevValue, activate);
-                    tab.addListener(e.newValue, activate);
+                    tab.removeListener(e.prevValue, tab._onActivate);
+                    tab.addListener(e.newValue, tab._onActivate, this, tab);
                 }
             });
-            
-            tabs.splice(index, 0, tab);
         },
 
         /**
@@ -152,19 +145,18 @@
          * @return void
          */
         DOMEventHandler: function(e) {
-            var el = this.get(ELEMENT);
-            var target = YAHOO.util.Event.getTarget(e);
-            var tabParent = this._tabParent;
+            var target = Event.getTarget(e),
+                tabParent = this._tabParent,
+                tabs = this.get('tabs'),
+                tab,
+                tabEl,
+                contentEl;
+
             
             if (Dom.isAncestor(tabParent, target) ) {
-                var tabEl;
-                var tab = null;
-                var contentEl;
-                var tabs = this.get('tabs');
-
                 for (var i = 0, len = tabs.length; i < len; i++) {
                     tabEl = tabs[i].get(ELEMENT);
-                    contentEl = tabs[i].get('contentEl');
+                    contentEl = tabs[i].get(CONTENT_EL);
 
                     if ( target == tabEl || Dom.isAncestor(tabEl, target) ) {
                         tab = tabs[i];
@@ -195,8 +187,8 @@
          * @return int
          */
         getTabIndex: function(tab) {
-            var index = null;
-            var tabs = this.get('tabs');
+            var index = null,
+                tabs = this.get('tabs');
             for (var i = 0, len = tabs.length; i < len; ++i) {
                 if (tab == tabs[i]) {
                     index = i;
@@ -214,24 +206,26 @@
          * @return void
          */
         removeTab: function(tab) {
-            var tabCount = this.get('tabs').length;
+            var tabCount = this.get('tabs').length,
+                index = this.getTabIndex(tab);
 
-            var index = this.getTabIndex(tab);
-            var nextIndex = index + 1;
-            if ( tab == this.get('activeTab') ) { // select next tab
-                if (tabCount > 1) {
-                    if (index + 1 == tabCount) {
-                        this.set('activeIndex', index - 1);
-                    } else {
-                        this.set('activeIndex', index + 1);
+            if ( tab === this.get(ACTIVE_TAB) ) { 
+                if (tabCount > 1) { // select another tab
+                    if (index + 1 === tabCount) { // if last, activate previous
+                        this.set(ACTIVE_INDEX, index - 1);
+                    } else { // activate next tab
+                        this.set(ACTIVE_INDEX, index + 1);
                     }
+                } else { // no more tabs
+                    this.set(ACTIVE_TAB, null);
                 }
             }
             
             this._tabParent.removeChild( tab.get(ELEMENT) );
-            this._contentParent.removeChild( tab.get('contentEl') );
+            this._contentParent.removeChild( tab.get(CONTENT_EL) );
             this._configs.tabs.value.splice(index, 1);
-            
+
+            tab.fireEvent('remove', { type: 'remove', tabview: this });
         },
         
         /**
@@ -249,8 +243,12 @@
          * @method contentTransition
          */
         contentTransition: function(newTab, oldTab) {
-            newTab.set('contentVisible', true);
-            oldTab.set('contentVisible', false);
+            if (newTab) {
+                newTab.set('contentVisible', true);
+            }
+            if (oldTab) {
+                oldTab.set('contentVisible', false);
+            }
         },
         
         /**
@@ -289,7 +287,7 @@
              */
             this._tabParent = 
                     this.getElementsByClassName(this.TAB_PARENT_CLASSNAME,
-                            'ul' )[0] || _createTabParent.call(this);
+                            'ul' )[0] || this._createTabParent();
                 
             /**
              * The container of the tabView's content elements.
@@ -299,7 +297,7 @@
              */
             this._contentParent = 
                     this.getElementsByClassName(this.CONTENT_PARENT_CLASSNAME,
-                            'div')[0] ||  _createContentParent.call(this);
+                            'div')[0] ||  this._createContentParent();
             
             /**
              * How the Tabs should be oriented relative to the TabView.
@@ -317,10 +315,8 @@
                         this.removeClass('yui-navset-' + current);
                     }
                     
-                    switch(value) {
-                        case 'bottom':
+                    if (value === 'bottom') {
                         this.appendChild(this._tabParent);
-                        break;
                     }
                 }
             });
@@ -330,13 +326,16 @@
              * @attribute activeIndex
              * @type Int
              */
-            this.setAttributeConfig('activeIndex', {
+            this.setAttributeConfig(ACTIVE_INDEX, {
                 value: attr.activeIndex,
                 method: function(value) {
-                    //this.set('activeTab', this.getTab(value));
                 },
                 validator: function(value) {
-                    return !this.getTab(value).get('disabled'); // cannot activate if disabled
+                    var ret = true;
+                    if (value && this.getTab(value).get('disabled')) { // cannot activate if disabled
+                        ret = false;
+                    }
+                    return ret;
                 }
             });
             
@@ -345,36 +344,39 @@
              * @attribute activeTab
              * @type YAHOO.widget.Tab
              */
-            this.setAttributeConfig('activeTab', {
+            this.setAttributeConfig(ACTIVE_TAB, {
                 value: attr.activeTab,
                 method: function(tab) {
-                    var activeTab = this.get('activeTab');
+                    var activeTab = this.get(ACTIVE_TAB);
                     
                     if (tab) {
-                        tab.set('active', true);
-                        //this._configs['activeIndex'].value = this.getTabIndex(tab); // keep in sync
+                        tab.set(ACTIVE, true);
                     }
                     
-                    if (activeTab && activeTab != tab) {
-                        activeTab.set('active', false);
+                    if (activeTab && activeTab !== tab) {
+                        activeTab.set(ACTIVE, false);
                     }
                     
-                    if (activeTab && tab != activeTab) { // no transition if only 1
+                    if (activeTab && tab !== activeTab) { // no transition if only 1
                         this.contentTransition(tab, activeTab);
                     } else if (tab) {
                         tab.set('contentVisible', true);
                     }
                 },
                 validator: function(value) {
-                    return !value.get('disabled'); // cannot activate if disabled
+                    var ret = true;
+                    if (value && value.get('disabled')) { // cannot activate if disabled
+                        ret = false;
+                    }
+                    return ret;
                 }
             });
 
-            this.on('activeTabChange', this._handleActiveTabChange);
-            this.on('activeIndexChange', this._handleActiveIndexChange);
+            this.on('activeTabChange', this._onActiveTabChange);
+            this.on('activeIndexChange', this._onActiveIndexChange);
 
             if ( this._tabParent ) {
-                _initTabs.call(this);
+                this._initTabs();
             }
             
             // Due to delegation we add all DOM_EVENTS to the TabView container
@@ -390,109 +392,135 @@
             }
         },
 
-        _handleActiveTabChange: function(e) {
-            var activeIndex = this.get('activeIndex'),
+        /**
+         * Removes selected state from the given tab if it is the activeTab
+         * @method deselectTab
+         * @param {Int} index The tab index to deselect 
+         */
+        deselectTab: function(index) {
+            if (this.getTab(index) === this.get('activeTab')) {
+                this.set('activeTab', null);
+            }
+        },
+
+        /**
+         * Makes the tab at the given index the active tab
+         * @method selectTab
+         * @param {Int} index The tab index to be made active
+         */
+        selectTab: function(index) {
+            this.set('activeTab', this.getTab(index));
+        },
+
+        _onActiveTabChange: function(e) {
+            var activeIndex = this.get(ACTIVE_INDEX),
                 newIndex = this.getTabIndex(e.newValue);
 
             if (activeIndex !== newIndex) {
-                if (!(this.set('activeIndex', newIndex)) ) { // NOTE: setting
+                if (!(this.set(ACTIVE_INDEX, newIndex)) ) { // NOTE: setting
                      // revert if activeIndex update fails (cancelled via beforeChange) 
-                    this.set('activeTab', e.prevValue);
+                    this.set(ACTIVE_TAB, e.prevValue);
                 }
             }
         },
         
-        _handleActiveIndexChange: function(e) {
+        _onActiveIndexChange: function(e) {
             // no set if called from ActiveTabChange event
-            if (e.newValue !== this.getTabIndex(this.get('activeTab'))) {
-                if (!(this.set('activeTab', this.getTab(e.newValue))) ) { // NOTE: setting
+            if (e.newValue !== this.getTabIndex(this.get(ACTIVE_TAB))) {
+                if (!(this.set(ACTIVE_TAB, this.getTab(e.newValue))) ) { // NOTE: setting
                      // revert if activeTab update fails (cancelled via beforeChange) 
-                    this.set('activeIndex', e.prevValue);
+                    this.set(ACTIVE_INDEX, e.prevValue);
                 }
             }
-        }
-    });
-    
-    
-    /**
-     * Creates Tab instances from a collection of HTMLElements.
-     * @method initTabs
-     * @private
-     * @return void
-     */
-    var _initTabs = function() {
-        var tab,
-            attr,
-            contentEl;
-            
-        var el = this.get(ELEMENT);   
-        var tabs = Dom.getChildren(this._tabParent);
-        var contentElements = Dom.getChildren(this._contentParent);
+        },
 
-        for (var i = 0, len = tabs.length; i < len; ++i) {
-            attr = {};
-            
-            if (contentElements[i]) {
-                attr.contentEl = contentElements[i];
+        /**
+         * Creates Tab instances from a collection of HTMLElements.
+         * @method _initTabs
+         * @private
+         * @return void
+         */
+        _initTabs: function() {
+            var tabs = Dom.getChildren(this._tabParent),
+                contentElements = Dom.getChildren(this._contentParent),
+                activeIndex = this.get(ACTIVE_INDEX),
+                tab,
+                attr,
+                active;
+
+            for (var i = 0, len = tabs.length; i < len; ++i) {
+                attr = {};
+                
+                if (contentElements[i]) {
+                    attr.contentEl = contentElements[i];
+                }
+
+                tab = new YAHOO.widget.Tab(tabs[i], attr);
+                this.addTab(tab);
+                
+                if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) {
+                    active = tab;
+                }
             }
+            if (activeIndex) {
+                this.set(ACTIVE_TAB, this.getTab(activeIndex));
+            } else {
+                this._configs.activeTab.value = active; // dont invoke method
+                this._configs.activeIndex.value = this.getTabIndex(active);
+            }
+        },
 
-            tab = new YAHOO.widget.Tab(tabs[i], attr);
-            this.addTab(tab);
+        _createTabViewElement: function(attr) {
+            var el = document.createElement('div');
+
+            if ( this.CLASSNAME ) {
+                el.className = this.CLASSNAME;
+            }
             
-            if (tab.hasClass(tab.ACTIVE_CLASSNAME) ) {
-                this._configs.activeTab.value = tab; // dont invoke method
-                this._configs.activeIndex.value = this.getTabIndex(tab);
-            }
-        }
-    };
-    
-    var _createTabViewElement = function(attr) {
-        var el = doc.createElement('div');
+            return el;
+        },
 
-        if ( this.CLASSNAME ) {
-            el.className = this.CLASSNAME;
-        }
-        
-        return el;
-    };
-    
-    var _createTabParent = function(attr) {
-        var el = doc.createElement('ul');
+        _createTabParent: function(attr) {
+            var el = document.createElement('ul');
 
-        if ( this.TAB_PARENT_CLASSNAME ) {
-            el.className = this.TAB_PARENT_CLASSNAME;
-        }
+            if ( this.TAB_PARENT_CLASSNAME ) {
+                el.className = this.TAB_PARENT_CLASSNAME;
+            }
+            
+            this.get(ELEMENT).appendChild(el);
+            
+            return el;
+        },
         
-        this.get(ELEMENT).appendChild(el);
-        
-        return el;
-    };
-    
-    var _createContentParent = function(attr) {
-        var el = doc.createElement('div');
+        _createContentParent: function(attr) {
+            var el = document.createElement('div');
 
-        if ( this.CONTENT_PARENT_CLASSNAME ) {
-            el.className = this.CONTENT_PARENT_CLASSNAME;
+            if ( this.CONTENT_PARENT_CLASSNAME ) {
+                el.className = this.CONTENT_PARENT_CLASSNAME;
+            }
+            
+            this.get(ELEMENT).appendChild(el);
+            
+            return el;
         }
-        
-        this.get(ELEMENT).appendChild(el);
-        
-        return el;
-    };
+    });
     
+    
     YAHOO.widget.TabView = TabView;
 })();
 
 (function() {
-    var Dom = YAHOO.util.Dom,
-        Event = YAHOO.util.Event,
-        Lang = YAHOO.lang;
+    var Y = YAHOO.util, 
+        Dom = Y.Dom,
+        Lang = YAHOO.lang,
     
 
     // STRING CONSTANTS
-    var CONTENT_EL = 'contentEl',
+        ACTIVE_TAB = 'activeTab',
+        LABEL = 'label',
         LABEL_EL = 'labelEl',
         CONTENT = 'content',
+        CONTENT_EL = 'contentEl',
         ELEMENT = 'element',
         CACHE_DATA = 'cacheData',
         DATA_SRC = 'dataSrc',
@@ -500,7 +528,7 @@
         DATA_TIMEOUT = 'dataTimeout',
         LOAD_METHOD = 'loadMethod',
         POST_DATA = 'postData',
-        DISABLED = 'disabled';
+        DISABLED = 'disabled',
     
     /**
      * A representation of a Tab's label and content.
@@ -512,7 +540,7 @@
      * represents the TabView. An element will be created if none provided.
      * @param {Object} properties A key map of initial properties
      */
-    var Tab = function(el, attr) {
+    Tab = function(el, attr) {
         attr = attr || {};
         if (arguments.length == 1 && !Lang.isString(el) && !el.nodeName) {
             attr = el;
@@ -520,7 +548,7 @@
         }
 
         if (!el && !attr.element) {
-            el = _createTabElement.call(this, attr);
+            el = this._createTabElement(attr);
         }
 
         this.loadHandler =  {
@@ -608,8 +636,8 @@
          * @return String
          */
         toString: function() {
-            var el = this.get(ELEMENT);
-            var id = el.id || el.tagName;
+            var el = this.get(ELEMENT),
+                id = el.id || el.tagName;
             return "Tab " + id; 
         },
         
@@ -622,8 +650,6 @@
             attr = attr || {};
             Tab.superclass.initAttributes.call(this, attr);
             
-            var el = this.get(ELEMENT);
-            
             /**
              * The event that triggers the tab's activation.
              * @attribute activationEvent
@@ -639,8 +665,9 @@
              * @type HTMLElement
              */
             this.setAttributeConfig(LABEL_EL, {
-                value: attr.labelEl || _getlabelEl.call(this),
+                value: attr[LABEL_EL] || this._getLabelEl(),
                 method: function(value) {
+                    value = Dom.get(value);
                     var current = this.get(LABEL_EL);
 
                     if (current) {
@@ -648,12 +675,9 @@
                             return false; // already set
                         }
                         
-                        this.replaceChild(value, current);
-                    } else if (el.firstChild) { // ensure label is firstChild by default
-                        this.insertBefore(value, el.firstChild);
-                    } else {
-                        this.appendChild(value);
-                    }  
+                        current.parentNode.replaceChild(value, current);
+                        this.set(LABEL, value.innerHTML);
+                    }
                 } 
             });
 
@@ -662,15 +686,15 @@
              * @attribute label
              * @type String
              */
-            this.setAttributeConfig('label', {
-                value: attr.label || _getLabel.call(this),
+            this.setAttributeConfig(LABEL, {
+                value: attr.label || this._getLabel(),
                 method: function(value) {
                     var labelEl = this.get(LABEL_EL);
                     if (!labelEl) { // create if needed
-                        this.set(LABEL_EL, _createlabelEl.call(this));
+                        this.set(LABEL_EL, this._createLabelEl());
                     }
                     
-                    _setLabel.call(this, value);
+                    labelEl.innerHTML = value;
                 }
             });
             
@@ -680,15 +704,20 @@
              * @type HTMLElement
              */
             this.setAttributeConfig(CONTENT_EL, {
-                value: attr.contentEl || document.createElement('div'),
+                value: attr[CONTENT_EL] || document.createElement('div'),
                 method: function(value) {
+                    value = Dom.get(value);
                     var current = this.get(CONTENT_EL);
 
                     if (current) {
-                        if (current == value) {
+                        if (current === value) {
                             return false; // already set
                         }
-                        this.replaceChild(value, current);
+                        if (!this.get('selected')) {
+                            Dom.addClass(value, 'yui-hidden');
+                        }
+                        current.parentNode.replaceChild(value, current);
+                        this.set(CONTENT, value.innerHTML);
                     }
                 }
             });
@@ -699,14 +728,12 @@
              * @type String
              */
             this.setAttributeConfig(CONTENT, {
-                value: attr.content,
+                value: attr[CONTENT],
                 method: function(value) {
                     this.get(CONTENT_EL).innerHTML = value;
                 }
             });
 
-            var _dataLoaded = false;
-            
             /**
              * The tab's data source, used for loading content dynamically.
              * @attribute dataSrc
@@ -834,7 +861,6 @@
                 value: attr.contentVisible,
                 method: function(value) {
                     if (value) {
-                        //this.get(CONTENT_EL).style.display = 'block';
                         Dom.removeClass(this.get(CONTENT_EL), this.HIDDEN_CLASSNAME);
                         
                         if ( this.get(DATA_SRC) ) {
@@ -852,13 +878,13 @@
         },
         
         _dataConnect: function() {
-            if (!YAHOO.util.Connect) {
+            if (!Y.Connect) {
                 return false;
             }
 
             Dom.addClass(this.get(CONTENT_EL).parentNode, this.LOADING_CLASSNAME);
             this._loading = true; 
-            this.dataConnection = YAHOO.util.Connect.asyncRequest(
+            this.dataConnection = Y.Connect.asyncRequest(
                 this.get(LOAD_METHOD),
                 this.get(DATA_SRC), 
                 {
@@ -883,59 +909,72 @@
 
                 this.get(POST_DATA)
             );
-        }
-    });
+        },
+        _createTabElement: function(attr) {
+            var el = document.createElement('li'),
+                a = document.createElement('a'),
+                label = attr.label || null,
+                labelEl = attr.labelEl || null;
+            
+            a.href = attr.href || '#'; // TODO: Use Dom.setAttribute?
+            el.appendChild(a);
+            
+            if (labelEl) { // user supplied labelEl
+                if (!label) { // user supplied label
+                    label = this._getLabel();
+                }
+            } else {
+                labelEl = this._createLabelEl();
+            }
+            
+            a.appendChild(labelEl);
+            
+            return el;
+        },
+
+        _getLabelEl: function() {
+            return this.getElementsByTagName(this.LABEL_TAGNAME)[0];
+        },
+
+        _createLabelEl: function() {
+            var el = document.createElement(this.LABEL_TAGNAME);
+            return el;
+        },
     
-    var _createTabElement = function(attr) {
-        var el = document.createElement('li');
-        var a = document.createElement('a');
         
-        a.href = attr.href || '#';
-        
-        el.appendChild(a);
-        
-        var label = attr.label || null;
-        var labelEl = attr.labelEl || null;
-        
-        if (labelEl) { // user supplied labelEl
-            if (!label) { // user supplied label
-                label = _getLabel.call(this, labelEl);
+        _getLabel: function() {
+            var el = this.get(LABEL_EL);
+                
+                if (!el) {
+                    return undefined;
+                }
+            
+            return el.innerHTML;
+        },
+
+        _onActivate: function(e, tabview) {
+            var tab = this,
+                silent = false;
+            
+
+            Y.Event.preventDefault(e);
+            if (tab === tabview.get(ACTIVE_TAB)) {
+                silent = true; // dont fire activeTabChange if already active
             }
-        } else {
-            labelEl = _createlabelEl.call(this);
+            tabview.set(ACTIVE_TAB, tab, silent);
         }
-        
-        a.appendChild(labelEl);
-        
-        return el;
-    };
+    });
     
-    var _getlabelEl = function() {
-        return this.getElementsByTagName(this.LABEL_TAGNAME)[0];
-    };
     
-    var _createlabelEl = function() {
-        var el = document.createElement(this.LABEL_TAGNAME);
-        return el;
-    };
+    /**
+     * Fires when a tab is removed from the tabview
+     * @event remove
+     * @type CustomEvent
+     * @param {Event} An event object with fields for "type" ("remove")
+     * and "tabview" (the tabview instance it was removed from) 
+     */
     
-    var _setLabel = function(label) {
-        var el = this.get(LABEL_EL);
-        el.innerHTML = label;
-    };
-    
-    var _getLabel = function() {
-        var label,
-            el = this.get(LABEL_EL);
-            
-            if (!el) {
-                return undefined;
-            }
-        
-        return el.innerHTML;
-    };
-    
     YAHOO.widget.Tab = Tab;
 })();
 
-YAHOO.register("tabview", YAHOO.widget.TabView, {version: "2.6.0", build: "1321"});
+YAHOO.register("tabview", YAHOO.widget.TabView, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/treeview/README
===================================================================
--- trunk/root/static/yui/treeview/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,211 +0,0 @@
-TreeView - Release Notes
-
-2.6.0
-  * Keyboard Navigation
-  * Delegated event listeners replace the inline listeners
-  * Tree serialization/deserialization
-  * Build tree from existing markup
-  * Node click and dblclick events
-  * DateNode (calendar control integration)
-  * Editable node labels (double-click to edit the label)
-  * render/destroy methods
-
-2.5.2
-  * Made CSS adjustments to work with base.css
-
-2.5.1
-  * No change
-
-2.5.0
-  * Added isLeaf property to Node that allows dynamically loaded trees to
-    have nodes that are not dynamically loaded (without configuring dynamic
-    load for each individual dynamic node, which was the requirement previously).  
-    If set to true, dynamic loading will be disabled for the node and it 
-    will always have the leaf node presentation (rather than the expand icon).
-  * Made CSS adjustments to work with base.css
-  * HTMLNode: removed unused property 'content', and documented the correct
-    property 'html'.
-
-2.4.0
-  * added TreeView getNodeByElement, which will return a YAHOO.widget.Node 
-    reference for any ancestor HTML element of a node in the tree.
-  * Added 'title' property to TextNode
-  * Added treeview/tooltip example
-  * Passing a null or invalid animation type to setExpandAnim/setCollapseAnim
-    will turn off animation for the tree.
-  * Spacer style set to 12px width to fix layout inside overflow containers.
-  * Fixed removeAll() when executed on the root node.
-  * TextNode's href property is now escaped.
-  * The 'expanded' property in a node's constructor now works for dynamically
-    loaded nodes.
-
-2.3.1
-
-  * The "expand" event no longer fires twice for dynamically loaded nodes.
-
-  * Added setHtml() to HTMLNode, which will synchronize the html and data
-    properties, as well as the content of the node if it has been rendered.
-
-2.3.0
-
-  * The image preload feature was restored.
-
-  * Added the new skin
-
-  * Leaf nodes created with expanded=true have the child div hidden initially
-    to work around an IE rendering issue.
-
-2.2.2
-
-  * No change
-
-2.2.1
-
-  * Fixed the default value in the documentation for the nowrap property in Node
-    (the default value is false).
-
-2.2.0
-
-  * Node::insertAfter properly nulls the nextSibling attribute when the
-    inserted before the firstChild.
-
-  * MenuNodes inserted at the root level will no longer lose the menu behavior.
-
-  * TextNode::setUpLabel sets the data.label property as well as the label property.
-
-  * TaskNode example: made the logger optional, and moved the creation of the logger
-    instance to the proper location.
-
-  * TaskNodes added to a node that is in a fully selected state will update the
-    parent to a partially selected state.
-
-  * TaskNode example fixed to propagate the labelClick event
-
-
-0.12.2
-
-  * removeChildren will now work properly on the root node.
-
-0.12.1
-
-  * Added custom events for expandComplete and collapseComplete.  These events are
-    needed in situations where the implementer needs to resize or reposition 
-    something based on the new offset.
-
-  * Added a "nowrap" property to Node, and set the default to false.  Specifies
-    whether or not the content area of the node should be allowed to wrap
-    naturally.
-
-  * Added additional HTML elements to preserve the tree presentation when constrained
-    by a parent element.
-
-0.12.0
-
-  * TreeView now augments EventProvider, and has custom events for expand,
-    collapse, animStart, animComplete, and labelClick.  Existing implementations
-    using abstract methods for these events (if they exist) will still work.
-    New events can be plugged into the tree by the Node implementation.  For
-    example, TaskNode adds a checkClick event.  EventProvider makes it safe
-    to do this because implementing code can call subscribe() prior to the
-    event creation.
-
-  * YAHOO.util.Event is now a requirement for the widget
-
-  * TreeView::removeChildren no longer expands and collapses the node.
-
-  * Documented the moveComplete property
-
-  * createElement("DIV") changed to createElement("div")
-
-0.11.4
-
-   * Fixed a javascript error on the HTML node example page.
-
-0.11.3
-
-   * popNode now clears the tree, previousSibling, nextSibling, and parent
-     properties of the node that is being removed from the tree.
-
-   * Fixed the paths to the images in the tree.css file that is included in
-     build/assets.
-
-0.11.0
-
-   * Added TreeView -> popNode, which differs from removeNode in that the
-     node's children are preserved so the entire branch can be re-inserted
-     into another part of the tree, or another tree.
-
-   * Added TreeView -> getNodesByProperty, which differs from 
-     getNodeByProperty by returning an array of all nodes that have the
-     specified property rather than just the first one.
-
-   * Added Node -> insertBefore, insertAfter, and appendTo.  These method
-     can be used to reorganize the tree.
-
-   * removeChildren properly resets the node icon when executed against a 
-     collpased node.
-     
-   * Moved depth assignment from the constructor to appendChild so that the
-     value is set properly if the node is moved within the tree.
-
-   * Fixed broken loop in removeChildren.
-
-   * RootNode -> loadComplete calls tree.draw for hot-wiring the dynamic load
-     feature for the top level nodes.
-
-   * The treeview constructor will accept an element instead of an id.
-
-0.10.0
-
-   * If the child collection changes prior to a refresh(), the icon is now
-     changed appropriately.
-
-   * Added TreeView removeChildren(node).  This will recursively purge the node's
-     children, and reset its dynamic load state.  
-
-   * previousSibling and nextSibling are now adjusted correctly when a
-     node is deleted.
-
-   * expand()/collapse() now will not expand/collapse the node if false is
-     returned from the onExpand/onCollapse event handlers.
-
-   * The onExpand and onCollapse events now fire before the node is expanded
-     or collapsed so that the implementer can modify the node's child collection
-     prior to display.
-
-   * The childrenRendered property previous was used to indicate both that
-     a dynamically loaded node has received its data, and also to indicate
-     that the children html has been created.  This has been split into
-     two properties.  dynamicLoadComplete and childrenRendered.
-
-   * Implemented the renderHidden flag.  If set to true, the html for the entire
-     tree will be created when tree.draw() is called, not just the html for the
-     visible nodes.
-
-   * Added an onLabelClick listener to TextNode
-
-   * TreeView.removeNode no longer automatically refreshes the tree.  It has an
-     optional parameter to perform the refresh.
-
-   * removeNode can now be executed on nodes that have not been rendered.
-
-   * You can now delete top-level nodes.
-
-   * Added onCheckClick listener to the TaskNode example
-
-   * Added Node.iconMode, which is a property that configures the way 
-     dynamically loaded nodes are displayed when they are expanded and contain 
-     no children.
-
-   * TreeView/Node.setDynamicLoad now accepts an optional second parameter to 
-     set the iconMode property.
-
-   * Fixed an issue in the TaskNode.js example that prevented setting the checked
-     state of a node through the constructor.
-
-   * Fixed an issue in HTMLNode that caused rendering issues when hasIcon was 
-     set to true.
-
-   * Added TreeView.removeNode
-
-   * Added Node.refresh

Added: trunk/root/static/yui/treeview/assets/check0.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/treeview/assets/check0.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/root/static/yui/treeview/assets/check1.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/treeview/assets/check1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/root/static/yui/treeview/assets/check2.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/treeview/assets/check2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/root/static/yui/treeview/assets/loading.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/treeview/assets/loading.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/root/static/yui/treeview/assets/skins/sam/treeview-skin.css
===================================================================
--- trunk/root/static/yui/treeview/assets/skins/sam/treeview-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/skins/sam/treeview-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /*
 Copyright (c) 2008, Yahoo! Inc. All rights reserved.

Modified: trunk/root/static/yui/treeview/assets/skins/sam/treeview.css
===================================================================
--- trunk/root/static/yui/treeview/assets/skins/sam/treeview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/skins/sam/treeview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 .ygtvitem{}.ygtvitem table{margin-bottom:0;border:none;}.ygtvrow td{border:none;padding:0;}.ygtvrow td a{text-decoration:none;}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat;}.ygtvtmh,.ygtvtmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat;}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat;}.ygtvtph,.ygtvtphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat;}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0px no-repeat;}.ygtvlmh,.ygtvlmhh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat;}.ygtvlp{width:18px;height:22px;cursor:p!
 ointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat;}.ygtvlph,.ygtvlphh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat;}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat;}.ygtvblankdepthcell{width:18px;height:22px;}.ygtvchildren{}* html .ygtvchildren{height:2%;}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;cursor:pointer;}.ygtvcontent{cursor:default;}.ygtvspacer{height:22px;width:12px;}.ygtvfocus{background-color:#c0e0e0;border:none;}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0;}.ygtvfocus a,.ygtvrow td a{outline-style:none;}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat;}.ygtvok:hover{b!
 ackground:url(treeview-sprite.gif) 0 -8844px no-repeat;}.ygtvc!
 ancel{wi
dth:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat;}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8866px no-repeat;}.ygtv-label-editor{background-color:#f2f2f2;border:1px solid silver;position:absolute;display:none;overflow:hidden;margin:auto;z-index:9000;}.ygtv-edit-TextNode{width:190px;}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:none;}.ygtv-edit-TextNode .ygtv-button-container{float:right;}.ygtv-edit-TextNode .ygtv-input input{width:140px;}.ygtv-edit-DateNode .ygtvcancel{border:none;}.ygtv-edit-DateNode .ygtvok{display:none;}.ygtv-edit-DateNode .ygtv-button-container{text-align:right;margin:auto;}

Deleted: trunk/root/static/yui/treeview/assets/sprite-menu.gif
===================================================================
(Binary files differ)

Deleted: trunk/root/static/yui/treeview/assets/sprite-orig.gif
===================================================================
(Binary files differ)

Modified: trunk/root/static/yui/treeview/assets/treeview-core.css
===================================================================
--- trunk/root/static/yui/treeview/assets/treeview-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/treeview-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,6 +1,6 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */

Deleted: trunk/root/static/yui/treeview/assets/treeview-menu.css
===================================================================
--- trunk/root/static/yui/treeview/assets/treeview-menu.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/treeview-menu.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,65 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-.ygtvtn {
-background:transparent none repeat scroll 0 0;
-height:20px;
-width:1em;
-}
-.ygtvtm {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px 2px;
-height:20px;
-width:1em;
-}
-.ygtvtmh {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -77px;
-height:20px;
-width:1em;
-}
-.ygtvtp {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -315px;
-height:20px;
-width:1em;
-}
-.ygtvtph {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -395px;
-height:20px;
-width:1em;
-}
-.ygtvln {
-background:transparent none repeat scroll 0 0;
-height:20px;
-width:1em;
-}
-.ygtvlm {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px 2px;
-height:20px;
-width:1em;
-}
-.ygtvlmh {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -77px;
-height:20px;
-width:1em;
-}
-.ygtvlp {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -315px;
-height:20px;
-width:1em;
-}
-.ygtvlph {
-background:transparent url(sprite-menu.gif) no-repeat scroll -8px -395px;
-height:20px;
-width:1em;
-}
-.ygtvdepthcell {
-background:transparent none repeat scroll 0 0;
-height:20px;
-width:1em;
-cursor:default;
-}
-.ygtvln, .ygtvtn {
-	cursor:default;
-}
\ No newline at end of file

Added: trunk/root/static/yui/treeview/assets/treeview-skin.css
===================================================================
--- trunk/root/static/yui/treeview/assets/treeview-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/treeview-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,248 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*
+Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.5.2
+*/
+
+/* the style of the div around each node */
+.ygtvitem { }  
+
+table.ygtvtable {
+    margin-bottom:0; 
+	border:none;
+	border-collapse:collapse;
+}
+
+/*.ygtvitem td {*/
+td.ygtvcell {
+    border: none; 
+	padding: 0;
+}
+a.ygtvspacer {
+	text-decoration:none;
+	outline-style:none;
+}
+
+
+/* first or middle sibling, no children */
+.ygtvtn {
+    width:18px; height:22px; 
+    background: url(treeview-sprite.gif) 0 -5600px no-repeat; 
+	cursor:pointer ;
+}
+
+/* first or middle sibling, collapsable */
+.ygtvtm {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -4000px no-repeat; 
+}
+
+/* first or middle sibling, collapsable, hover */
+.ygtvtmh,.ygtvtmhh {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -4800px no-repeat; 
+}
+
+/* first or middle sibling, expandable */
+.ygtvtp {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -6400px no-repeat; 
+}
+
+/* first or middle sibling, expandable, hover */
+.ygtvtph ,.ygtvtphh {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -7200px no-repeat; 
+}
+
+/* last sibling, no children */
+.ygtvln {
+    width:18px; height:22px; 
+    background: url(treeview-sprite.gif) 0 -1600px no-repeat; 
+	cursor:pointer ;
+}
+
+/* Last sibling, collapsable */
+.ygtvlm {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 0px no-repeat; 
+}
+
+/* Last sibling, collapsable, hover */
+.ygtvlmh,.ygtvlmhh {
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -800px no-repeat; 
+}
+
+/* Last sibling, expandable */
+.ygtvlp { 
+    width:18px; height:22px; 
+    cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -2400px no-repeat; 
+}
+
+/* Last sibling, expandable, hover */
+.ygtvlph,.ygtvlphh { 
+    width:18px; height:22px; cursor:pointer ;
+    background: url(treeview-sprite.gif) 0 -3200px no-repeat; 
+	cursor:pointer ;
+}
+
+/* Loading icon */
+.ygtvloading { 
+    width:18px; height:22px; 
+    background: url(treeview-loading.gif) 0 0 no-repeat; 
+}
+
+/* the style for the empty cells that are used for rendering the depth 
+ * of the node */
+.ygtvdepthcell { 
+    width:18px; height:22px; 
+    background: url(treeview-sprite.gif) 0 -8000px no-repeat; 
+}
+
+.ygtvblankdepthcell { width:18px; height:22px; }
+
+
+/* the style of the div around each node's collection of children */
+.ygtvchildren {  }  
+* html .ygtvchildren { height:2%; }  
+
+/* the style of the text label in ygTextNode */
+.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover { 
+    margin-left:2px;
+    text-decoration: none;
+    background-color: white; /* workaround for IE font smoothing bug */
+	cursor:pointer;
+}
+
+.ygtvcontent {
+	cursor:default;
+}
+
+.ygtvspacer { height: 22px; width: 18px; }
+
+.ygtvfocus {
+	background-color: #c0e0e0;
+	border: none;
+}
+.ygtvfocus .ygtvlabel, .ygtvfocus .ygtvlabel:link, .ygtvfocus .ygtvlabel:visited, .ygtvfocus .ygtvlabel:hover {
+	background-color: #c0e0e0;
+}
+
+.ygtvfocus  a  {
+	outline-style:none;
+}
+
+
+.ygtvok {
+    width:18px; height:22px; 
+    background: url(treeview-sprite.gif) 0 -8800px no-repeat; 
+}
+
+.ygtvok:hover {
+    background: url(treeview-sprite.gif) 0 -8844px no-repeat; 
+}
+	
+.ygtvcancel {
+    width:18px; height:22px; 
+    background: url(treeview-sprite.gif) 0 -8822px no-repeat; 
+}
+
+.ygtvcancel:hover  {
+    background: url(treeview-sprite.gif) 0 -8866px no-repeat; 
+}
+
+.ygtv-label-editor {
+	background-color:#f2f2f2;
+	border: 1px solid silver;
+	position:absolute;
+	display:none;
+	overflow:hidden;
+	margin:auto;
+	z-index:9000;
+}
+
+.ygtv-edit-TextNode  {
+	width: 190px;
+}
+
+.ygtv-edit-TextNode .ygtvcancel, .ygtv-edit-TextNode .ygtvok  {
+	border:none;
+}
+
+.ygtv-edit-TextNode .ygtv-button-container {
+	float: right;
+}
+
+.ygtv-edit-TextNode .ygtv-input  input{
+	width: 140px;
+}
+
+.ygtv-edit-DateNode .ygtvcancel {
+	border:none;
+}
+.ygtv-edit-DateNode .ygtvok  {
+	display:none;
+}
+
+.ygtv-edit-DateNode   .ygtv-button-container {
+	text-align:right;
+	margin:auto;
+}
+
+.ygtv-highlight .ygtv-highlight0 , .ygtv-highlight .ygtv-highlight0 .ygtvlabel{
+}
+
+.ygtv-highlight .ygtv-highlight1  , .ygtv-highlight .ygtv-highlight1 .ygtvlabel{
+	background-color:blue;
+	color:white;
+}
+
+.ygtv-highlight .ygtv-highlight2  , .ygtv-highlight .ygtv-highlight2 .ygtvlabel {
+	background-color:silver;
+}
+
+.ygtv-highlight .ygtv-highlight0 .ygtvfocus .ygtvlabel,
+.ygtv-highlight .ygtv-highlight1 .ygtvfocus .ygtvlabel,
+.ygtv-highlight .ygtv-highlight2 .ygtvfocus .ygtvlabel {
+	background-color: #c0e0e0;
+}
+
+.ygtv-highlight .ygtvcontent {
+	padding-right: 1em;
+}
+
+.ygtv-checkbox .ygtv-highlight0 .ygtvcontent {
+	padding-left:1em;
+	background:url(check0.gif) no-repeat;
+}
+
+.ygtv-checkbox .ygtv-highlight0 .ygtvfocus.ygtvcontent,
+.ygtv-checkbox .ygtv-highlight1 .ygtvfocus.ygtvcontent ,
+.ygtv-checkbox .ygtv-highlight2 .ygtvfocus.ygtvcontent  {
+	background-color:#c0e0e0;
+}
+
+.ygtv-checkbox .ygtv-highlight1 .ygtvcontent {
+	padding-left:1em;
+	background:url(check1.gif) no-repeat;
+}
+
+.ygtv-checkbox .ygtv-highlight2 .ygtvcontent{
+	padding-left:1em;
+	background:url(check2.gif) no-repeat;
+}

Added: trunk/root/static/yui/treeview/assets/treeview-sprite.gif
===================================================================
(Binary files differ)


Property changes on: trunk/root/static/yui/treeview/assets/treeview-sprite.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Deleted: trunk/root/static/yui/treeview/assets/treeview.css
===================================================================
--- trunk/root/static/yui/treeview/assets/treeview.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/assets/treeview.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-.ygtvitem table{margin-bottom:0;border:none;}.ygtvitem td{border:none;padding:0;}.ygtvtn{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -5600px no-repeat;}.ygtvtm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4000px no-repeat;}.ygtvtmh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -4800px no-repeat;}.ygtvtp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -6400px no-repeat;}.ygtvtph{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -7200px no-repeat;}.ygtvln{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -1600px no-repeat;}.ygtvlm{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 0 no-repeat;}.ygtvlmh{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -800px no-repeat;}.ygtvlp{width:18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -2400px no-repeat;}.ygtvlph{width!
 :18px;height:22px;cursor:pointer;background:url(treeview-sprite.gif) 0 -3200px no-repeat;}.ygtvloading{width:18px;height:22px;background:url(treeview-loading.gif) 0 0 no-repeat;}.ygtvdepthcell{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8000px no-repeat;}.ygtvblankdepthcell{width:18px;height:22px;}* html .ygtvchildren{height:2%;}.ygtvlabel,.ygtvlabel:link,.ygtvlabel:visited,.ygtvlabel:hover{margin-left:2px;text-decoration:none;background-color:white;}.ygtvspacer{height:22px;width:12px;}.ygtvfocus{background-color:#c0e0e0;}.ygtvfocus .ygtvlabel,.ygtvfocus .ygtvlabel:link,.ygtvfocus .ygtvlabel:visited,.ygtvfocus .ygtvlabel:hover{background-color:#c0e0e0;}.ygtvok{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8800px no-repeat;}.ygtvok:hover{background:url(treeview-sprite.gif) 0 -8844px no-repeat;}.ygtvcancel{width:18px;height:22px;background:url(treeview-sprite.gif) 0 -8822px no-repeat;}.ygtvcancel:hover{background:url(treeview-sprite.gif) 0 -8!
 866px no-repeat;}.ygtv-label-editor{background-color:#f2f2f2;b!
 order:1p
x solid silver;position:absolute;display:none;overflow:hidden;margin:auto;}.ygtv-edit-TextNode .ygtvcancel,.ygtv-edit-TextNode .ygtvok{border:none;}.ygtv-edit-TextNode .ygtv-button-container{display:inline-block;}.ygtv-edit-TextNode .ygtv-input{float:left;}.ygtv-edit-DateNode .ygtvcancel{border:none;}.ygtv-edit-DateNode .ygtvok{display:none;}.ygtv-edit-DateNode .ygtv-button-container{width:100%;text-align:right;}
\ No newline at end of file

Modified: trunk/root/static/yui/treeview/treeview-debug.js
===================================================================
--- trunk/root/static/yui/treeview/treeview-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/treeview-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,21 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Event = YAHOO.util.Event,
-		Lang = YAHOO.lang,
-		Widget = YAHOO.widget;
+    var Dom = YAHOO.util.Dom,
+        Event = YAHOO.util.Event,
+        Lang = YAHOO.lang,
+        Widget = YAHOO.widget;
+        
+    
 
 /**
  * The treeview widget is a generic tree building tool.
  * @module treeview
  * @title TreeView Widget
  * @requires yahoo, event
- * @optional animation
+ * @optional animation, json
  * @namespace YAHOO.widget
  */
 
@@ -26,19 +28,19 @@
  * @uses YAHOO.util.EventProvider
  * @constructor
  * @param {string|HTMLElement} id The id of the element, or the element itself that the tree will be inserted into.  Existing markup in this element, if valid, will be used to build the tree
- * @param {Array|object|string}  oConfig (optional)  An array containing the definition of the tree.  Objects will be converted to arrays of one element.  A string will produce a single TextNode
+ * @param {Array|object|string}  oConfig (optional)  An array containing the definition of the tree.  (see buildTreeFromObject)
  * 
  */
 YAHOO.widget.TreeView = function(id, oConfig) {
     if (id) { this.init(id); }
-	if (oConfig) {
-		if (!Lang.isArray(oConfig)) {
-			oConfig = [oConfig];
-		}
-		this.buildTreeFromObject(oConfig);
-	} else if (Lang.trim(this._el.innerHTML)) {
-		this.buildTreeFromMarkup(id);
-	}
+    if (oConfig) {
+        if (!Lang.isArray(oConfig)) {
+            oConfig = [oConfig];
+        }
+        this.buildTreeFromObject(oConfig);
+    } else if (Lang.trim(this._el.innerHTML)) {
+        this.buildTreeFromMarkup(id);
+    }
 };
 
 var TV = Widget.TreeView;
@@ -115,7 +117,7 @@
      * @private
      */
     _hasDblClickSubscriber: false,
-	
+    
     /**
      * Stores the timer used to check for double clicks
      * @property _dblClickTimer
@@ -124,6 +126,32 @@
      */
     _dblClickTimer: null,
 
+  /**
+     * A reference to the Node currently having the focus or null if none.
+     * @property currentFocus
+     * @type YAHOO.widget.Node
+     */
+    currentFocus: null,
+    
+    /**
+    * If true, only one Node can be highlighted at a time
+    * @property singleNodeHighlight
+    * @type boolean
+    * @default false
+    */
+    
+    singleNodeHighlight: false,
+    
+    /**
+    * A reference to the Node that is currently highlighted.
+    * It is only meaningful if singleNodeHighlight is enabled
+    * @property _currentlyHighlighted
+    * @type YAHOO.widget.Node
+    * @default null
+    * @private
+    */
+    
+    _currentlyHighlighted: null,
 
     /**
      * Sets up the animation for expanding children
@@ -242,8 +270,8 @@
      * @private
      */
     init: function(id) {
-		this._el = Dom.get(id);
-		this.id = Dom.generateId(this._el,"yui-tv-auto-id-");
+        this._el = Dom.get(id);
+        this.id = Dom.generateId(this._el,"yui-tv-auto-id-");
 
     /**
          * When animation is enabled, this event fires when the animation
@@ -308,42 +336,66 @@
          * @param {YAHOO.widget.Node} node the node that has the focus
          */
         this.createEvent("enterKeyPressed", this);
-		
+        
     /**
          * Fires when the label in a TextNode or MenuNode or content in an HTMLNode receives a Click.
-	* The listener may return false to cancel toggling and focusing on the node.
+    * The listener may return false to cancel toggling and focusing on the node.
          * @event clickEvent
          * @type CustomEvent
          * @param oArgs.event  {HTMLEvent} The event object
          * @param oArgs.node {YAHOO.widget.Node} node the node that was clicked
          */
         this.createEvent("clickEvent", this);
+        
+    /**
+         * Fires when the focus receives the focus, when it changes from a Node 
+    * to another Node or when it is completely lost (blurred)
+         * @event focusChanged
+         * @type CustomEvent
+         * @param oArgs.oldNode  {YAHOO.widget.Node} Node that had the focus or null if none
+         * @param oArgs.newNode {YAHOO.widget.Node} Node that receives the focus or null if none
+         */
+        
+        this.createEvent('focusChanged',this);
 
-	/**
+    /**
          * Fires when the label in a TextNode or MenuNode or content in an HTMLNode receives a double Click
          * @event dblClickEvent
          * @type CustomEvent
          * @param oArgs.event  {HTMLEvent} The event object
          * @param oArgs.node {YAHOO.widget.Node} node the node that was clicked
          */
-		var self = this;
+        var self = this;
         this.createEvent("dblClickEvent", {
-			scope:this,
-			onSubscribeCallback: function() {
-				self._hasDblClickSubscriber = true;
-			}
-		});
-		
-	/**
+            scope:this,
+            onSubscribeCallback: function() {
+                self._hasDblClickSubscriber = true;
+            }
+        });
+        
+    /**
          * Custom event that is fired when the text node label is clicked. 
          *  The node clicked is  provided as an argument
          *
          * @event labelClick
          * @type CustomEvent
          * @param {YAHOO.widget.Node} node the node clicked
-	* @deprecated use clickEvent or dblClickEvent
+    * @deprecated use clickEvent or dblClickEvent
          */
-		this.createEvent("labelClick", this);
+        this.createEvent("labelClick", this);
+        
+    /**
+     * Custom event fired when the highlight of a node changes.
+     * The node that triggered the change is provided as an argument:
+     * The status of the highlight can be checked in 
+     * <a href="YAHOO.widget.Node.html#property_highlightState">nodeRef.highlightState</a>.
+     * Depending on <a href="YAHOO.widget.Node.html#property_propagateHighlight">nodeRef.propagateHighlight</a>, other nodes might have changed
+     * @event highlightEvent
+     * @type CustomEvent
+        * @param node{YAHOO.widget.Node} the node that started the change in highlighting state
+    */
+        this.createEvent("highlightEvent",this);
+     
 
 
         this._nodes = [];
@@ -359,7 +411,7 @@
         this.logger = (LW) ? new LW(this.toString()) : YAHOO;
 
         this.logger.log("tree init: " + this.id);
-		
+        
         // YAHOO.util.Event.onContentReady(this.id, this.handleAvailable, this, true);
         // YAHOO.util.Event.on(this.id, "click", this.handleClick, this, true);
     },
@@ -369,364 +421,445 @@
         //Event.on(this.id, 
     //},
  /**
-     * Builds the TreeView from an object.  This is the method called by the constructor to build the tree when it has a second argument.
+     * Builds the TreeView from an object.  
+     * This is the method called by the constructor to build the tree when it has a second argument.
+     *  A tree can be described by an array of objects, each object corresponding to a node.
+     *  Node descriptions may contain values for any property of a node plus the following extra properties: <ul>
+     * <li>type:  can be one of the following:<ul>
+     *  <li> A shortname for a node type (<code>'text','menu','html'</code>) </li>
+     * <li>The name of a Node class under YAHOO.widget (<code>'TextNode', 'MenuNode', 'DateNode'</code>, etc) </li>
+     * <li>a reference to an actual class: <code>YAHOO.widget.DateNode</code></li></ul></li>
+     * <li>children: an array containing further node definitions</li></ul>
      * @method buildTreeFromObject
      * @param  oConfig {Array}  array containing a full description of the tree
      * 
      */
-	buildTreeFromObject: function (oConfig) {
-		this.logger.log('Building tree from object');
-		var build = function (parent, oConfig) {
-			var i, item, node, children, type, NodeType, ThisType;
-			for (i = 0; i < oConfig.length; i++) {
-				item = oConfig[i];
-				if (Lang.isString(item)) {
-					node = new Widget.TextNode(item, parent);
-				} else if (Lang.isObject(item)) {
-					children = item.children;
-					delete item.children;
-					type = item.type || 'text';
-					delete item.type;
-					switch (type.toLowerCase()) {
-						case 'text':
-							node = new Widget.TextNode(item, parent);
-							break;
-						case 'menu':
-							node = new Widget.MenuNode(item, parent);
-							break;
-						case 'html':
-							node = new Widget.HTMLNode(item, parent);
-							break;
-						default:
-							NodeType = Widget[type];
-							if (Lang.isObject(NodeType)) {
-								for (ThisType = NodeType; ThisType && ThisType !== Widget.Node; ThisType = ThisType.superclass.constructor) {}
-								if (ThisType) {
-									node = new NodeType(item, parent);
-								} else {
-									this.logger.log('Invalid type in node definition: ' + type,'error');
-								}
-							} else {
-								this.logger.log('Invalid type in node definition: ' + type,'error');
-							}
-					}
-					if (children) {
-						build(node,children);
-					}
-				} else {
-					this.logger.log('Invalid node definition','error');
-				}
-			}
-		};
-							
-					
-		build(this.root,oConfig);
-	},
+    buildTreeFromObject: function (oConfig) {
+        var logger = this.logger;
+        logger.log('Building tree from object');
+        var build = function (parent, oConfig) {
+            var i, item, node, children, type, NodeType, ThisType;
+            for (i = 0; i < oConfig.length; i++) {
+                item = oConfig[i];
+                if (Lang.isString(item)) {
+                    node = new Widget.TextNode(item, parent);
+                } else if (Lang.isObject(item)) {
+                    children = item.children;
+                    delete item.children;
+                    type = item.type || 'text';
+                    delete item.type;
+                    switch (Lang.isString(type) && type.toLowerCase()) {
+                        case 'text':
+                            node = new Widget.TextNode(item, parent);
+                            break;
+                        case 'menu':
+                            node = new Widget.MenuNode(item, parent);
+                            break;
+                        case 'html':
+                            node = new Widget.HTMLNode(item, parent);
+                            break;
+                        default:
+                            if (Lang.isString(type)) {
+                                NodeType = Widget[type];
+                            } else {
+                                NodeType = type;
+                            }
+                            if (Lang.isObject(NodeType)) {
+                                for (ThisType = NodeType; ThisType && ThisType !== Widget.Node; ThisType = ThisType.superclass.constructor) {}
+                                if (ThisType) {
+                                    node = new NodeType(item, parent);
+                                } else {
+                                    logger.log('Invalid type in node definition: ' + type,'error');
+                                }
+                            } else {
+                                logger.log('Invalid type in node definition: ' + type,'error');
+                            }
+                    }
+                    if (children) {
+                        build(node,children);
+                    }
+                } else {
+                    logger.log('Invalid node definition','error');
+                }
+            }
+        };
+                            
+                    
+        build(this.root,oConfig);
+    },
 /**
-     * Builds the TreeView from existing markup.   Markup should consist of <UL> or <OL> elements, possibly nested.  
-     * Depending what the <LI> elements contain the following will be created: <ul>
-     * 	         <li>plain text:  a regular TextNode</li>
-     * 	         <li>an (un-)ordered list: a nested branch</li>
-     * 	         <li>anything else: an HTMLNode</li></ul>
+     * Builds the TreeView from existing markup.   Markup should consist of <UL> or <OL> elements containing <LI> elements.  
+     * Each <LI> can have one element used as label and a second optional element which is to be a <UL> or <OL>
+     * containing nested nodes.
+     * Depending on what the first element of the <LI> element is, the following Nodes will be created: <ul>
+     *           <li>plain text:  a regular TextNode</li>
+     *           <li>anchor <A>: a TextNode with its <code>href</code> and <code>target</code> taken from the anchor</li>
+     *           <li>anything else: an HTMLNode</li></ul>
      * Only the first  outermost (un-)ordered list in the markup and its children will be parsed.
-     * Tree will be fully collapsed.
-     *  HTMLNodes have hasIcon set to true if the markup for that node has a className called hasIcon.
+     * Nodes will be collapsed unless  an  <LI>  tag has a className called 'expanded'.
+     * All other className attributes will be copied over to the Node className property.
+     * If the <LI> element contains an attribute called <code>yuiConfig</code>, its contents should be a JSON-encoded object
+     * as the one used in method <a href="#method_buildTreeFromObject">buildTreeFromObject</a>.
      * @method buildTreeFromMarkup
-     * @param {string|HTMLElement} id the id of the element that contains the markup or a reference to it.
+     * @param  id{string|HTMLElement} The id of the element that contains the markup or a reference to it.
      */
-	buildTreeFromMarkup: function (id) {
-		this.logger.log('Building tree from existing markup');
-		var build = function (parent,markup) {
-			var el, node, child, text;
-			for (el = Dom.getFirstChild(markup); el; el = Dom.getNextSibling(el)) {
-				if (el.nodeType == 1) {
-					switch (el.tagName.toUpperCase()) {
-						case 'LI':
-							for (child = el.firstChild; child; child = child.nextSibling) {
-								if (child.nodeType == 3) {
-									text = Lang.trim(child.nodeValue);
-									if (text.length) {
-										node = new Widget.TextNode(text, parent, false);
-									}
-								} else {
-									switch (child.tagName.toUpperCase()) {
-										case 'UL':
-										case 'OL':
-											build(node,child);
-											break;
-										case 'A':
-											node = new Widget.TextNode({
-												label:child.innerHTML,
-												href: child.href,
-												target:child.target,
-												title:child.title ||child.alt
-											},parent,false);
-											break;
-										default:
-											node = new Widget.HTMLNode(child.parentNode.innerHTML, parent, false, true);
-											break;
-									}
-								}
-							}
-							break;
-						case 'UL':
-						case 'OL':
-							this.logger.log('ULs or OLs can only contain LI elements, not other UL or OL.  This will not work in some browsers','error');
-							build(node, el);
-							break;
-					}
-				}
-			}
-		
-		};
-		var markup = Dom.getChildrenBy(Dom.get(id),function (el) { 
-			var tag = el.tagName.toUpperCase();
-			return  tag == 'UL' || tag == 'OL';
-		});
-		if (markup.length) {
-			build(this.root, markup[0]);
-		} else {
-			this.logger.log('Markup contains no UL or OL elements','warn');
-		}
-	},
+    buildTreeFromMarkup: function (id) {
+        this.logger.log('Building tree from existing markup');
+        var build = function (markup) {
+            var el, child, branch = [], config = {}, label, yuiConfig;
+            // Dom's getFirstChild and getNextSibling skip over text elements
+            for (el = Dom.getFirstChild(markup); el; el = Dom.getNextSibling(el)) {
+                switch (el.tagName.toUpperCase()) {
+                    case 'LI':
+                        label = '';
+                        config = {
+                            expanded: Dom.hasClass(el,'expanded'),
+                            title: el.title || el.alt || null,
+                            className: Lang.trim(el.className.replace(/\bexpanded\b/,'')) || null
+                        };
+                        // I cannot skip over text elements here because I want them for labels
+                        child = el.firstChild;
+                        if (child.nodeType == 3) {
+                            // nodes with only whitespace, tabs and new lines don't count, they are probably just formatting.
+                            label = Lang.trim(child.nodeValue.replace(/[\n\t\r]*/g,''));
+                            if (label) {
+                                config.type = 'text';
+                                config.label = label;
+                            } else {
+                                child = Dom.getNextSibling(child);
+                            }
+                        }
+                        if (!label) {
+                            if (child.tagName.toUpperCase() == 'A') {
+                                config.type = 'text';
+                                config.label = child.innerHTML;
+                                config.href = child.href;
+                                config.target = child.target;
+                                config.title = child.title || child.alt || config.title;
+                            } else {
+                                config.type = 'html';
+                                var d = document.createElement('div');
+                                d.appendChild(child.cloneNode(true));
+                                config.html = d.innerHTML;
+                                config.hasIcon = true;
+                            }
+                        }
+                        // see if after the label it has a further list which will become children of this node.
+                        child = Dom.getNextSibling(child);
+                        switch (child && child.tagName.toUpperCase()) {
+                            case 'UL':
+                            case 'OL':
+                                config.children = build(child);
+                                break;
+                        }
+                        // if there are further elements or text, it will be ignored.
+                        
+                        if (YAHOO.lang.JSON) {
+                            yuiConfig = el.getAttribute('yuiConfig');
+                            if (yuiConfig) {
+                                yuiConfig = YAHOO.lang.JSON.parse(yuiConfig);
+                                config = YAHOO.lang.merge(config,yuiConfig);
+                            }
+                        }
+                        
+                        branch.push(config);
+                        break;
+                    case 'UL':
+                    case 'OL':
+                        this.logger.log('ULs or OLs can only contain LI elements, not other UL or OL.  This will not work in some browsers','error');
+                        config = {
+                            type: 'text',
+                            label: '',
+                            children: build(child)
+                        };
+                        branch.push(config);
+                        break;
+                }
+            }
+            return branch;
+        };
+
+        var markup = Dom.getChildrenBy(Dom.get(id),function (el) { 
+            var tag = el.tagName.toUpperCase();
+            return  tag == 'UL' || tag == 'OL';
+        });
+        if (markup.length) {
+            this.buildTreeFromObject(build(markup[0]));
+        } else {
+            this.logger.log('Markup contains no UL or OL elements','warn');
+        }
+    },
+  /**
+     * Returns the TD element where the event has occurred
+     * @method _getEventTargetTdEl
+     * @private
+     */
+    _getEventTargetTdEl: function (ev) {
+        var target = Event.getTarget(ev); 
+        // go up looking for a TD with a className with a ygtv prefix
+        while (target && !(target.tagName.toUpperCase() == 'TD' && Dom.hasClass(target.parentNode,'ygtvrow'))) { 
+            target = Dom.getAncestorByTagName(target,'td'); 
+        }
+        if (Lang.isNull(target)) { return null; }
+        // If it is a spacer cell, do nothing
+        if (/\bygtv(blank)?depthcell/.test(target.className)) { return null;}
+        // If it has an id, search for the node number and see if it belongs to a node in this tree.
+        if (target.id) {
+            var m = target.id.match(/\bygtv([^\d]*)(.*)/);
+            if (m && m[2] && this._nodes[m[2]]) {
+                return target;
+            }
+        }
+        return null;
+    },
+  /**
+     * Event listener for click events
+     * @method _onClickEvent
+     * @private
+     */
+    _onClickEvent: function (ev) {
+        var self = this,
+            td = this._getEventTargetTdEl(ev),
+            node,
+            target,
+            toggle = function () {
+                node.toggle();
+                node.focus();
+                try {
+                    Event.preventDefault(ev);
+                } catch (e) {
+                    // @TODO
+                    // For some reason IE8 is providing an event object with
+                    // most of the fields missing, but only when clicking on
+                    // the node's label, and only when working with inline
+                    // editing.  This generates a "Member not found" error
+                    // in that browser.  Determine if this is a browser
+                    // bug, or a problem with this code.  Already checked to
+                    // see if the problem has to do with access the event
+                    // in the outer scope, and that isn't the problem.
+                    // Maybe the markup for inline editing is broken.
+                }
+            };
+
+        if (!td) {
+            return; 
+        }
+
+        node = this.getNodeByElement(td);
+        if (!node) { 
+            return; 
+        }
+        
+        // exception to handle deprecated event labelClick
+        // @TODO take another look at this deprecation.  It is common for people to
+        // only be interested in the label click, so why make them have to test
+        // the node type to figure out whether the click was on the label?
+        target = Event.getTarget(ev);
+        if (Dom.hasClass(target, node.labelStyle) || Dom.getAncestorByClassName(target,node.labelStyle)) {
+            this.logger.log("onLabelClick " + node.label);
+            this.fireEvent('labelClick',node);
+        }
+        
+        //  If it is a toggle cell, toggle
+        if (/\bygtv[tl][mp]h?h?/.test(td.className)) {
+            toggle();
+        } else {
+            if (this._dblClickTimer) {
+                window.clearTimeout(this._dblClickTimer);
+                this._dblClickTimer = null;
+            } else {
+                if (this._hasDblClickSubscriber) {
+                    this._dblClickTimer = window.setTimeout(function () {
+                        self._dblClickTimer = null;
+                        if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
+                            toggle();
+                        }
+                    }, 200);
+                } else {
+                    if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
+                        toggle();
+                    }
+                }
+            }
+        }
+    },
+
+  /**
+     * Event listener for double-click events
+     * @method _onDblClickEvent
+     * @private
+     */
+    _onDblClickEvent: function (ev) {
+        if (!this._hasDblClickSubscriber) { return; }
+        var td = this._getEventTargetTdEl(ev);
+        if (!td) {return;}
+
+        if (!(/\bygtv[tl][mp]h?h?/.test(td.className))) {
+            this.fireEvent('dblClickEvent', {event:ev, node:this.getNodeByElement(td)}); 
+            if (this._dblClickTimer) {
+                window.clearTimeout(this._dblClickTimer);
+                this._dblClickTimer = null;
+            }
+        }
+    },
+  /**
+     * Event listener for mouse over events
+     * @method _onMouseOverEvent
+     * @private
+     */
+    _onMouseOverEvent:function (ev) {
+        var target;
+        if ((target = this._getEventTargetTdEl(ev)) && (target = this.getNodeByElement(target)) && (target = target.getToggleEl())) {
+            target.className = target.className.replace(/\bygtv([lt])([mp])\b/gi,'ygtv$1$2h');
+        }
+    },
+  /**
+     * Event listener for mouse out events
+     * @method _onMouseOutEvent
+     * @private
+     */
+    _onMouseOutEvent: function (ev) {
+        var target;
+        if ((target = this._getEventTargetTdEl(ev)) && (target = this.getNodeByElement(target)) && (target = target.getToggleEl())) {
+            target.className = target.className.replace(/\bygtv([lt])([mp])h\b/gi,'ygtv$1$2');
+        }
+    },
+  /**
+     * Event listener for key down events
+     * @method _onKeyDownEvent
+     * @private
+     */
+    _onKeyDownEvent: function (ev) {
+        var target = Event.getTarget(ev),
+            node = this.getNodeByElement(target),
+            newNode = node,
+            KEY = YAHOO.util.KeyListener.KEY;
+
+        switch(ev.keyCode) {
+            case KEY.UP:
+                this.logger.log('UP');
+                do {
+                    if (newNode.previousSibling) {
+                        newNode = newNode.previousSibling;
+                    } else {
+                        newNode = newNode.parent;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            case KEY.DOWN:
+                this.logger.log('DOWN');
+                do {
+                    if (newNode.nextSibling) {
+                        newNode = newNode.nextSibling;
+                    } else {
+                        newNode.expand();
+                        newNode = (newNode.children.length || null) && newNode.children[0];
+                    }
+                } while (newNode && !newNode._canHaveFocus);
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.LEFT:
+                this.logger.log('LEFT');
+                do {
+                    if (newNode.parent) {
+                        newNode = newNode.parent;
+                    } else {
+                        newNode = newNode.previousSibling;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.RIGHT:
+                this.logger.log('RIGHT');
+                do {
+                    newNode.expand();
+                    if (newNode.children.length) {
+                        newNode = newNode.children[0];
+                    } else {
+                        newNode = newNode.nextSibling;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.ENTER:
+                this.logger.log('ENTER: ' + newNode.href);
+                if (node.href) {
+                    if (node.target) {
+                        window.open(node.href,node.target);
+                    } else {
+                        window.location(node.href);
+                    }
+                } else {
+                    node.toggle();
+                }
+                this.fireEvent('enterKeyPressed',node);
+                Event.preventDefault(ev);
+                break;
+            case KEY.HOME:
+                this.logger.log('HOME');
+                newNode = this.getRoot();
+                if (newNode.children.length) {newNode = newNode.children[0];}
+                if (newNode._canHaveFocus()) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            case KEY.END:
+                this.logger.log('END');
+                newNode = newNode.parent.children;
+                newNode = newNode[newNode.length -1];
+                if (newNode._canHaveFocus()) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            // case KEY.PAGE_UP:
+                // this.logger.log('PAGE_UP');
+                // break;
+            // case KEY.PAGE_DOWN:
+                // this.logger.log('PAGE_DOWN');
+                // break;
+            case 107:  // plus key
+                if (ev.shiftKey) {
+                    this.logger.log('Shift-PLUS');
+                    node.parent.expandAll();
+                } else {
+                    this.logger.log('PLUS');
+                    node.expand();
+                }
+                break;
+            case 109: // minus key
+                if (ev.shiftKey) {
+                    this.logger.log('Shift-MINUS');
+                    node.parent.collapseAll();
+                } else {
+                    this.logger.log('MINUS');
+                    node.collapse();
+                }
+                break;
+            default:
+                break;
+        }
+    },
     /**
      * Renders the tree boilerplate and visible nodes
      * @method render
      */
     render: function() {
-        var html = this.root.getHtml();
-        this.getEl().innerHTML = html;
-		var getTarget = function (ev) {
-			var target = Event.getTarget(ev); 
-			if (target.tagName.toUpperCase() != 'TD') { target = Dom.getAncestorByTagName(target,'td'); }
-			if (Lang.isNull(target)) { return null; }
-			if (target.className.length === 0) {
-				target = target.previousSibling;
-				if (Lang.isNull(target)) { return null; }
-			}
-			return target;
-		};
-		if (!this._hasEvents) {
-			Event.on(
-				this.getEl(),
-				'click',
-				function (ev) {
-					var self = this,
-						el = Event.getTarget(ev),
-						node = this.getNodeByElement(el);
-					if (!node) { return; }
-						
-					var toggle = function () {
-						if (node.expanded) {
-							node.collapse();
-						} else {
-							node.expand();
-						}
-						node.focus();
-					};
-					
-					if (Dom.hasClass(el, node.labelStyle) || Dom.getAncestorByClassName(el,node.labelStyle)) {
-						this.logger.log("onLabelClick " + node.label);
-						this.fireEvent('labelClick',node);
-					}
-					while (el && !Dom.hasClass(el.parentNode,'ygtvrow') && !/ygtv[tl][mp]h?h?/.test(el.className)) {
-						el = Dom.getAncestorByTagName(el,'td');
-					}
-					if (el) {
-						// If it is a spacer cell, do nothing
-						if (/ygtv(blank)?depthcell/.test(el.className)) { return;}
-						//  If it is a toggle cell, toggle
-						if (/ygtv[tl][mp]h?h?/.test(el.className)) {
-							toggle();
-						} else {
-							if (this._dblClickTimer) {
-								window.clearTimeout(this._dblClickTimer);
-								this._dblClickTimer = null;
-							} else {
-								if (this._hasDblClickSubscriber) {
-									this._dblClickTimer = window.setTimeout(function () {
-										self._dblClickTimer = null;
-										if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
-											toggle();
-										}
-									}, 200);
-								} else {
-									if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
-										toggle();
-									}
-								}
-							}
-						}
-					}
-				},
-				this,
-				true
-			);
-			
-			Event.on(
-				this.getEl(),
-				'dblclick',
-				function (ev) {
-					if (!this._hasDblClickSubscriber) { return; }
-					var el = Event.getTarget(ev);
-					while (!Dom.hasClass(el.parentNode,'ygtvrow')) {
-						el = Dom.getAncestorByTagName(el,'td');
-					}
-					if (/ygtv(blank)?depthcell/.test(el.className)) { return;}
-					if (!(/ygtv[tl][mp]h?h?/.test(el.className))) {
-						this.fireEvent('dblClickEvent', {event:ev, node:this.getNodeByElement(el)}); 
-						if (this._dblClickTimer) {
-							window.clearTimeout(this._dblClickTimer);
-							this._dblClickTimer = null;
-						}
-					}
-				},
-				this,
-				true
-			);
-			Event.on(
-				this.getEl(),
-				'mouseover',
-				function (ev) {
-					var target = getTarget(ev);
-					if (target) {
-target.className = target.className.replace(/ygtv([lt])([mp])/gi, 'ygtv$1$2h').replace(/h+/, 'h');
-					}
-				}
-			);
-			Event.on(
-				this.getEl(),
-				'mouseout',
-				function (ev) {
-					var target = getTarget(ev);
-					if (target) {
-						target.className = target.className.replace(/ygtv([lt])([mp])h/gi,'ygtv$1$2');
-					}
-				}
-			);
-			Event.on(
-				this.getEl(),
-				'keydown',
-				function (ev) {
-					var target = Event.getTarget(ev),
-						node = this.getNodeByElement(target),
-						newNode = node,
-						KEY = YAHOO.util.KeyListener.KEY;
-
-					switch(ev.keyCode) {
-						case KEY.UP:
-							this.logger.log('UP');
-							do {
-								if (newNode.previousSibling) {
-									newNode = newNode.previousSibling;
-								} else {
-									newNode = newNode.parent;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.DOWN:
-							this.logger.log('DOWN');
-							do {
-								if (newNode.nextSibling) {
-									newNode = newNode.nextSibling;
-								} else {
-									newNode.expand();
-									newNode = (newNode.children.length || null) && newNode.children[0];
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.LEFT:
-							this.logger.log('LEFT');
-							do {
-								if (newNode.parent) {
-									newNode = newNode.parent;
-								} else {
-									newNode = newNode.previousSibling;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.RIGHT:
-							this.logger.log('RIGHT');
-							do {
-								newNode.expand();
-								if (newNode.children.length) {
-									newNode = newNode.children[0];
-								} else {
-									newNode = newNode.nextSibling;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.ENTER:
-							this.logger.log('ENTER: ' + newNode.href);
-							if (node.href) {
-								if (node.target) {
-									window.open(node.href,node.target);
-								} else {
-									window.location(node.href);
-								}
-							} else {
-								node.toggle();
-							}
-							this.fireEvent('enterKeyPressed',node);
-							Event.preventDefault(ev);
-							break;
-						case KEY.HOME:
-							this.logger.log('HOME');
-							newNode = this.getRoot();
-							if (newNode.children.length) {newNode = newNode.children[0];}
-							if (!newNode.focus()) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.END:
-							this.logger.log('END');
-							newNode = newNode.parent.children;
-							newNode = newNode[newNode.length -1];
-							if (!newNode.focus()) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						// case KEY.PAGE_UP:
-							// this.logger.log('PAGE_UP');
-							// break;
-						// case KEY.PAGE_DOWN:
-							// this.logger.log('PAGE_DOWN');
-							// break;
-						case 107:  // plus key
-							if (ev.shiftKey) {
-								this.logger.log('Shift-PLUS');
-								node.parent.expandAll();
-							} else {
-								this.logger.log('PLUS');
-								node.expand();
-							}
-							break;
-						case 109: // minus key
-							if (ev.shiftKey) {
-								this.logger.log('Shift-MINUS');
-								node.parent.collapseAll();
-							} else {
-								this.logger.log('MINUS');
-								node.collapse();
-							}
-							break;
-						default:
-							break;
-					}
-				},
-				this,
-				true
-			);
-		}
-		this._hasEvents = true;
+        var html = this.root.getHtml(),
+            el = this.getEl();
+        el.innerHTML = html;
+        if (!this._hasEvents) {
+            Event.on(el, 'click', this._onClickEvent, this, true);
+            Event.on(el, 'dblclick', this._onDblClickEvent, this, true);
+            Event.on(el, 'mouseover', this._onMouseOverEvent, this, true);
+            Event.on(el, 'mouseout', this._onMouseOutEvent, this, true);
+            Event.on(el, 'keydown', this._onKeyDownEvent, this, true);
+        }
+        this._hasEvents = true;
     },
-	
+    
   /**
      * Returns the tree's host element
      * @method getEl
@@ -817,12 +950,12 @@
      */
     getNodeByProperty: function(property, value) {
         for (var i in this._nodes) {
-			if (this._nodes.hasOwnProperty(i)) {
-	            var n = this._nodes[i];
-	            if (n.data && value == n.data[property]) {
-	                return n;
-	            }
-			}
+            if (this._nodes.hasOwnProperty(i)) {
+                var n = this._nodes[i];
+                if ((property in n && n[property] == value) || (n.data && value == n.data[property])) {
+                    return n;
+                }
+            }
         }
 
         return null;
@@ -839,12 +972,12 @@
     getNodesByProperty: function(property, value) {
         var values = [];
         for (var i in this._nodes) {
-			if (this._nodes.hasOwnProperty(i)) {
-	            var n = this._nodes[i];
-	            if (n.data && value == n.data[property]) {
-	                values.push(n);
-	            }
-			}
+            if (this._nodes.hasOwnProperty(i)) {
+                var n = this._nodes[i];
+                if ((property in n && n[property] == value) || (n.data && value == n.data[property])) {
+                    values.push(n);
+                }
+            }
         }
 
         return (values.length) ? values : null;
@@ -1020,33 +1153,33 @@
         delete this._nodes[node.index];
     },
 
-	/**
-	* Nulls out the entire TreeView instance and related objects, removes attached
-	* event listeners, and clears out DOM elements inside the container. After
-	* calling this method, the instance reference should be expliclitly nulled by
-	* implementer, as in myDataTable = null. Use with caution!
-	*
-	* @method destroy
-	*/
-	destroy : function() {
-		// Since the label editor can be separated from the main TreeView control
-		// the destroy method for it might not be there.
-		if (this._destroyEditor) { this._destroyEditor(); }
-		var el = this.getEl();
-		Event.removeListener(el,'click');
-		Event.removeListener(el,'dblclick');
-		Event.removeListener(el,'mouseover');
-		Event.removeListener(el,'mouseout');
-		Event.removeListener(el,'keydown');
-		for (var i = 0 ; i < this._nodes.length; i++) {
-			var node = this._nodes[i];
-			if (node && node.destroy) {node.destroy(); }
-		}
-		el.parentNode.removeChild(el);
-		this._hasEvents = false;
-	},
-		
-			
+    /**
+    * Nulls out the entire TreeView instance and related objects, removes attached
+    * event listeners, and clears out DOM elements inside the container. After
+    * calling this method, the instance reference should be expliclitly nulled by
+    * implementer, as in myDataTable = null. Use with caution!
+    *
+    * @method destroy
+    */
+    destroy : function() {
+        // Since the label editor can be separated from the main TreeView control
+        // the destroy method for it might not be there.
+        if (this._destroyEditor) { this._destroyEditor(); }
+        var el = this.getEl();
+        Event.removeListener(el,'click');
+        Event.removeListener(el,'dblclick');
+        Event.removeListener(el,'mouseover');
+        Event.removeListener(el,'mouseout');
+        Event.removeListener(el,'keydown');
+        for (var i = 0 ; i < this._nodes.length; i++) {
+            var node = this._nodes[i];
+            if (node && node.destroy) {node.destroy(); }
+        }
+        el.innerHTML = '';
+        this._hasEvents = false;
+    },
+        
+            
 
 
     /**
@@ -1092,7 +1225,42 @@
      * @param node {Node} the node that was collapsed.
      * @deprecated use treeobj.subscribe("collapse") instead
      */
-    onCollapse: function(node) { }
+    onCollapse: function(node) { },
+    
+    /**
+    * Sets the value of a property for all loaded nodes in the tree.
+    * @method setNodesProperty
+    * @param name {string} Name of the property to be set
+    * @param value {any} value to be set
+    * @param refresh {boolean} if present and true, it does a refresh
+    */
+    setNodesProperty: function(name, value, refresh) {
+        this.root.setNodesProperty(name,value);
+        if (refresh) {
+            this.root.refresh();
+        }
+    },
+    /**
+    * Event listener to toggle node highlight.
+    * Can be assigned as listener to clickEvent, dblClickEvent and enterKeyPressed.
+    * It returns false to prevent the default action.
+    * @method onEventToggleHighlight
+    * @param oArgs {any} it takes the arguments of any of the events mentioned above
+    * @return {false} Always cancels the default action for the event
+    */
+    onEventToggleHighlight: function (oArgs) {
+        var node;
+        if ('node' in oArgs && oArgs.node instanceof Widget.Node) {
+            node = oArgs.node;
+        } else if (oArgs instanceof Widget.Node) {
+            node = oArgs;
+        } else {
+            return false;
+        }
+        node.toggleHighlight();
+        return false;
+    }
+        
 
 };
 
@@ -1167,7 +1335,7 @@
      * @final
      * @default "ygtvfocus"
 
-	*/ 
+    */ 
 TV.FOCUS_CLASS_NAME = 'ygtvfocus';
 
 /**
@@ -1212,9 +1380,9 @@
 Event.addListener(window,"load", TV.preload);
 })();
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 /**
  * The base class for all tree nodes.  The node's presentation and behavior in
  * response to mouse events is handled in Node subclasses.
@@ -1225,7 +1393,8 @@
  * be used to render this node, and any custom attributes that should be
  * stored with the node (which is available in noderef.data).
  * All values in oData will be used to set equally named properties in the node
- * as long as the node does have such properties, they are not undefined, private or functions.
+ * as long as the node does have such properties, they are not undefined, private or functions,
+ * the rest of the values will be stored in noderef.data
  * @param oParent {Node} this node's parent node
  * @param expanded {boolean} the initial expanded/collapsed state (deprecated, use oData.expanded)
  * @constructor
@@ -1280,21 +1449,6 @@
     depth: -1,
 
     /**
-     * The href for the node's label.  If one is not specified, the href will
-     * be set so that it toggles the node.
-     * @property href
-     * @type string
-     */
-    href: null,
-
-    /**
-     * The label href target, defaults to current window
-     * @property target
-     * @type string
-     */
-    target: "_self",
-
-    /**
      * The node's expanded/collapsed state
      * @property expanded
      * @type boolean
@@ -1418,13 +1572,64 @@
      */
     contentStyle: "",
 
+
     /**
      * The generated id that will contain the data passed in by the implementer.
      * @property contentElId
      * @type string
      */
     contentElId: null,
+    
+/** 
+ * Enables node highlighting.  If true, the node can be highlighted and/or propagate highlighting
+ * @property enableHighlight
+ * @type boolean
+ * @default true
+ */
+    enableHighlight: true,
+    
+/** 
+ * Stores the highlight state.  Can be any of:
+ * <ul>
+ * <li>0 - not highlighted</li>
+ * <li>1 - highlighted</li>
+ * <li>2 - some children highlighted</li>
+ * </ul>
+ * @property highlightState
+ * @type integer
+ * @default 0
+ */
+ 
+ highlightState: 0,
+ 
  /**
+ * Tells whether highlighting will be propagated up to the parents of the clicked node
+ * @property propagateHighlightUp
+ * @type boolean
+ * @default false
+ */
+ 
+ propagateHighlightUp: false,
+ 
+ /**
+ * Tells whether highlighting will be propagated down to the children of the clicked node
+ * @property propagateHighlightDown
+ * @type boolean
+ * @default false
+ */
+ 
+ propagateHighlightDown: false,
+ 
+ /**
+  * User-defined className to be added to the Node
+  * @property className
+  * @type string
+  * @default null
+  */
+ 
+ className: null,
+ 
+ /**
      * The node type
      * @property _type
      * @private
@@ -1450,21 +1655,25 @@
      */
     init: function(oData, oParent, expanded) {
 
-        this.data       = oData;
+        this.data = {};
         this.children   = [];
         this.index      = YAHOO.widget.TreeView.nodeCount;
         ++YAHOO.widget.TreeView.nodeCount;
-		this.contentElId = "ygtvcontentel" + this.index;
-		
-		if (Lang.isObject(oData)) {
-			for (var property in oData) {
-				if (property.charAt(0) != '_'  && oData.hasOwnProperty(property) && !Lang.isUndefined(this[property]) && !Lang.isFunction(this[property]) ) {
-					this[property] = oData[property];
-				}
-			}
-		}
-		if (!Lang.isUndefined(expanded) ) {	this.expanded  = expanded;	}
-		
+        this.contentElId = "ygtvcontentel" + this.index;
+        
+        if (Lang.isObject(oData)) {
+            for (var property in oData) {
+                if (oData.hasOwnProperty(property)) {
+                    if (property.charAt(0) != '_'  && !Lang.isUndefined(this[property]) && !Lang.isFunction(this[property]) ) {
+                        this[property] = oData[property];
+                    } else {
+                        this.data[property] = oData[property];
+                    }
+                }
+            }
+        }
+        if (!Lang.isUndefined(expanded) ) { this.expanded  = expanded;  }
+        
         this.logger     = new YAHOO.widget.LogWriter(this.toString());
 
         /**
@@ -1651,11 +1860,11 @@
      * @return Node[]
      */
     getSiblings: function() {
-		var sib =  this.parent.children.slice(0);
-		for (var i=0;i < sib.length && sib[i] != this;i++) {}
-		sib.splice(i,1);
-		if (sib.length) { return sib; }
-		return null;
+        var sib =  this.parent.children.slice(0);
+        for (var i=0;i < sib.length && sib[i] != this;i++) {}
+        sib.splice(i,1);
+        if (sib.length) { return sib; }
+        return null;
     },
 
     /**
@@ -1749,10 +1958,10 @@
         return Dom.get(this.getToggleElId());
     },
     /**
-	* Returns the outer html element for this node's content
-	* @method getContentEl
-	* @return {HTMLElement} the element
-	*/
+    * Returns the outer html element for this node's content
+    * @method getContentEl
+    * @return {HTMLElement} the element
+    */
     getContentEl: function() { 
         return Dom.get(this.contentElId);
     },
@@ -1903,7 +2112,7 @@
         if (this.hasIcon) {
             var el = this.getToggleEl();
             if (el) {
-                el.className = el.className.replace(/ygtv(([tl][pmn]h?)|(loading))/,this.getStyle());
+                el.className = el.className.replace(/\bygtv(([tl][pmn]h?)|(loading))\b/gi,this.getStyle());
             }
         }
     },
@@ -1952,7 +2161,8 @@
      * @method expandAll
      */
     expandAll: function() { 
-        for (var i=0;i<this.children.length;++i) {
+        var l = this.children.length;
+        for (var i=0;i<l;++i) {
             var c = this.children[i];
             if (c.isDynamic()) {
                 this.logger.log("Not supported (lazy load + expand all)");
@@ -2081,12 +2291,7 @@
 
         this.childrenRendered = false;
 
-        var sb = [];
-        sb[sb.length] = '<div class="ygtvitem" id="' + this.getElId() + '">';
-        sb[sb.length] = this.getNodeHtml();
-        sb[sb.length] = this.getChildrenHtml();
-        sb[sb.length] = '</div>';
-        return sb.join("");
+        return ['<div class="ygtvitem" id="' , this.getElId() , '">' ,this.getNodeHtml() , this.getChildrenHtml() ,'</div>'].join("");
     },
 
     /**
@@ -2101,8 +2306,7 @@
 
 
         var sb = [];
-        sb[sb.length] = '<div class="ygtvchildren"';
-        sb[sb.length] = ' id="' + this.getChildrenElId() + '"';
+        sb[sb.length] = '<div class="ygtvchildren" id="' + this.getChildrenElId() + '"';
 
         // This is a workaround for an IE rendering issue, the child div has layout
         // in IE, creating extra space if a leaf node is created with the expanded
@@ -2258,42 +2462,46 @@
         this.logger.log("Generating html");
         var sb = [];
 
-        sb[sb.length] = '<table border="0" cellpadding="0" cellspacing="0" class="ygtvdepth' + this.depth + '">';
-        sb[sb.length] = '<tr class="ygtvrow">';
+        sb[sb.length] = '<table id="ygtvtableel' + this.index + '"border="0" cellpadding="0" cellspacing="0" class="ygtvtable ygtvdepth' + this.depth;
+        if (this.enableHighlight) {
+            sb[sb.length] = ' ygtv-highlight' + this.highlightState;
+        }
+        if (this.className) {
+            sb[sb.length] = ' ' + this.className;
+        }           
+        sb[sb.length] = '"><tr class="ygtvrow">';
         
         for (var i=0;i<this.depth;++i) {
-            sb[sb.length] = '<td class="' + this.getDepthStyle(i) + '"><div class="ygtvspacer"></div></td>';
+            sb[sb.length] = '<td class="ygtvcell ' + this.getDepthStyle(i) + '"><div class="ygtvspacer"></div></td>';
         }
 
         if (this.hasIcon) {
-            sb[sb.length] = '<td'; 
-            sb[sb.length] = ' id="' + this.getToggleElId() + '"';
-            sb[sb.length] = ' class="' + this.getStyle() + '"';
-            sb[sb.length] = '><a href="#" class="ygtvspacer"> </a></td>';
+            sb[sb.length] = '<td id="' + this.getToggleElId();
+            sb[sb.length] = '" class="ygtvcell ';
+            sb[sb.length] = this.getStyle() ;
+            sb[sb.length] = '"><a href="#" class="ygtvspacer"> </a></td>';
         }
 
-        sb[sb.length] = '<td';
-        sb[sb.length] = ' id="' + this.contentElId + '"'; 
-        sb[sb.length] = ' class="' + this.contentStyle  + ' ygtvcontent" ';
+        sb[sb.length] = '<td id="' + this.contentElId; 
+        sb[sb.length] = '" class="ygtvcell ';
+        sb[sb.length] = this.contentStyle  + ' ygtvcontent" ';
         sb[sb.length] = (this.nowrap) ? ' nowrap="nowrap" ' : '';
         sb[sb.length] = ' >';
-		sb[sb.length] = this.getContentHtml();
-        sb[sb.length] = '</td>';
-        sb[sb.length] = '</tr>';
-        sb[sb.length] = '</table>';
+        sb[sb.length] = this.getContentHtml();
+        sb[sb.length] = '</td></tr></table>';
 
         return sb.join("");
 
     },
-	/**
+    /**
      * Get the markup for the contents of the node.  This is designed to be overrided so that we can
      * support different types of nodes.
      * @method getContentHtml
      * @return {string} The HTML that will render the content of this node.
      */
-	getContentHtml: function () {
-		return "";
-	},
+    getContentHtml: function () {
+        return "";
+    },
 
     /**
      * Regenerates the html for this node and its children.  To be used when the
@@ -2307,7 +2515,7 @@
         if (this.hasIcon) {
             var el = this.getToggleEl();
             if (el) {
-                el.className = this.getStyle();
+                el.className = el.className.replace(/\bygtv[lt][nmp]h*\b/gi,this.getStyle());
             }
         }
     },
@@ -2320,77 +2528,122 @@
     toString: function() {
         return this._type + " (" + this.index + ")";
     },
-	/**
-	* array of items that had the focus set on them
-	* so that they can be cleaned when focus is lost
-	* @property _focusHighlightedItems
-	* @type Array of DOM elements
-	* @private
-	*/
-	_focusHighlightedItems: [],
-	_focusedItem: null,
-	/**
-	* Sets the focus on the node element.
-	* It will only be able to set the focus on nodes that have anchor elements in it.  
-	* Toggle or branch icons have anchors and can be focused on.  
-	* If will fail in nodes that have no anchor
-	* @method focus
-	* @return {boolean} success
-	*/
-	focus: function () {
-		var focused = false, self = this;
+    /**
+    * array of items that had the focus set on them
+    * so that they can be cleaned when focus is lost
+    * @property _focusHighlightedItems
+    * @type Array of DOM elements
+    * @private
+    */
+    _focusHighlightedItems: [],
+    /**
+    * DOM element that actually got the browser focus
+    * @property _focusedItem
+    * @type DOM element
+    * @private
+    */
+    _focusedItem: null,
+    
+    /**
+    * Returns true if there are any elements in the node that can 
+    * accept the real actual browser focus
+    * @method _canHaveFocus
+    * @return {boolean} success
+    * @private
+    */
+    _canHaveFocus: function() {
+        return this.getEl().getElementsByTagName('a').length > 0;
+    },
+    /**
+    * Removes the focus of previously selected Node
+    * @method _removeFocus
+    * @private
+    */
+    _removeFocus:function () {
+        if (this._focusedItem) {
+            Event.removeListener(this._focusedItem,'blur');
+            this._focusedItem = null;
+        }
+        var el;
+        while ((el = this._focusHighlightedItems.shift())) {  // yes, it is meant as an assignment, really
+            Dom.removeClass(el,YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
+        }
+    },
+    /**
+    * Sets the focus on the node element.
+    * It will only be able to set the focus on nodes that have anchor elements in it.  
+    * Toggle or branch icons have anchors and can be focused on.  
+    * If will fail in nodes that have no anchor
+    * @method focus
+    * @return {boolean} success
+    */
+    focus: function () {
+        var focused = false, self = this;
 
-		var removeListeners = function () {
-			var el;
-			if (self._focusedItem) {
-				Event.removeListener(self._focusedItem,'blur');
-				self._focusedItem = null;
-			}
-			
-			while ((el = self._focusHighlightedItems.shift())) {  // yes, it is meant as an assignment, really
-				Dom.removeClass(el,YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
-			}
-		};
-		removeListeners();
+        if (this.tree.currentFocus) {
+            this.tree.currentFocus._removeFocus();
+        }
+    
+        var  expandParent = function (node) {
+            if (node.parent) {
+                expandParent(node.parent);
+                node.parent.expand();
+            } 
+        };
+        expandParent(this);
 
-		Dom.getElementsBy  ( 
-			function (el) {
-				return /ygtv(([tl][pmn]h?)|(content))/.test(el.className);
-			} ,
-			'td' , 
-			this.getEl().firstChild , 
-			function (el) {
-				Dom.addClass(el, YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
-				if (!focused) { 
-					var aEl = el.getElementsByTagName('a');
-					if (aEl.length) {
-						aEl = aEl[0];
-						aEl.focus();
-						self._focusedItem = aEl;
-						Event.on(aEl,'blur',removeListeners);
-						focused = true;
-					}
-				}
-				self._focusHighlightedItems.push(el);
-			}
-		);
-		if (!focused) { removeListeners(); }
-		return focused;
-	},
+        Dom.getElementsBy  ( 
+            function (el) {
+                return /ygtv(([tl][pmn]h?)|(content))/.test(el.className);
+            } ,
+            'td' , 
+            self.getEl().firstChild , 
+            function (el) {
+                Dom.addClass(el, YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
+                if (!focused) { 
+                    var aEl = el.getElementsByTagName('a');
+                    if (aEl.length) {
+                        aEl = aEl[0];
+                        aEl.focus();
+                        self._focusedItem = aEl;
+                        Event.on(aEl,'blur',function () {
+                            //console.log('f1');
+                            self.tree.fireEvent('focusChanged',{oldNode:self.tree.currentFocus,newNode:null});
+                            self.tree.currentFocus = null;
+                            self._removeFocus();
+                        });
+                        focused = true;
+                    }
+                }
+                self._focusHighlightedItems.push(el);
+            }
+        );
+        if (focused) { 
+                            //console.log('f2');
+            this.tree.fireEvent('focusChanged',{oldNode:this.tree.currentFocus,newNode:this});
+            this.tree.currentFocus = this;
+        } else {
+                            //console.log('f3');
+            this.tree.fireEvent('focusChanged',{oldNode:self.tree.currentFocus,newNode:null});
+            this.tree.currentFocus = null;
+            this._removeFocus(); 
+        }
+        return focused;
+    },
 
   /**
-     * Count of nodes in tree
+     * Count of nodes in a branch
      * @method getNodeCount
-     * @return {int} number of nodes in the tree
+     * @return {int} number of nodes in the branch
      */
     getNodeCount: function() {
-		for (var i = 0, count = 0;i< this.children.length;i++) {
-			count += this.children[i].getNodeCount();
-		}
+        for (var i = 0, count = 0;i< this.children.length;i++) {
+            count += this.children[i].getNodeCount();
+        }
         return count + 1;
     },
-	
-	  /**
+    
+      /**
      * Returns an object which could be used to build a tree out of this node and its children.
      * It can be passed to the tree constructor to reproduce this node as a tree.
      * It will return false if the node or any children loads dynamically, regardless of whether it is loaded or not.
@@ -2398,29 +2651,35 @@
      * @return {Object | false}  definition of the tree or false if the node or any children is defined as dynamic
      */
     getNodeDefinition: function() {
-	
-		if (this.isDynamic()) { return false; }
-		
-		var def, defs = this.data, children = []; 
-		
-		
-		if (this.href) { defs.href = this.href; }
-		if (this.target != '_self') { defs.target = this.target; }
-		if (this.expanded) {defs.expanded = this.expanded; }
-		if (!this.multiExpand) { defs.multiExpand = this.multiExpand; }
-		if (!this.hasIcon) { defs.hasIcon = this.hasIcon; }
-		if (this.nowrap) { defs.nowrap = this.nowrap; }
-		defs.type = this._type;
-		
-		
-		
-		for (var i = 0; i < this.children.length;i++) {
-			def = this.children[i].getNodeDefinition();
-			if (def === false) { return false;}
-			children.push(def);
-		}
-		if (children.length) { defs.children = children; }
-		return defs;
+    
+        if (this.isDynamic()) { return false; }
+        
+        var def, defs = Lang.merge(this.data), children = []; 
+        
+        
+
+        if (this.expanded) {defs.expanded = this.expanded; }
+        if (!this.multiExpand) { defs.multiExpand = this.multiExpand; }
+        if (!this.renderHidden) { defs.renderHidden = this.renderHidden; }
+        if (!this.hasIcon) { defs.hasIcon = this.hasIcon; }
+        if (this.nowrap) { defs.nowrap = this.nowrap; }
+        if (this.className) { defs.className = this.className; }
+        if (this.editable) { defs.editable = this.editable; }
+        if (this.enableHighlight) { defs.enableHighlight = this.enableHighlight; }
+        if (this.highlightState) { defs.highlightState = this.highlightState; }
+        if (this.propagateHighlightUp) { defs.propagateHighlightUp = this.propagateHighlightUp; }
+        if (this.propagateHighlightDown) { defs.propagateHighlightDown = this.propagateHighlightDown; }
+        defs.type = this._type;
+        
+        
+        
+        for (var i = 0; i < this.children.length;i++) {
+            def = this.children[i].getNodeDefinition();
+            if (def === false) { return false;}
+            children.push(def);
+        }
+        if (children.length) { defs.children = children; }
+        return defs;
     },
 
 
@@ -2431,16 +2690,242 @@
      */
     getToggleLink: function() {
         return 'return false;';
+    },
+    
+    /**
+    * Sets the value of property for this node and all loaded descendants.  
+    * Only public and defined properties can be set, not methods.  
+    * Values for unknown properties will be assigned to the refNode.data object
+    * @method setNodesProperty
+    * @param name {string} Name of the property to be set
+    * @param value {any} value to be set
+    * @param refresh {boolean} if present and true, it does a refresh
+    */
+    setNodesProperty: function(name, value, refresh) {
+        if (name.charAt(0) != '_'  && !Lang.isUndefined(this[name]) && !Lang.isFunction(this[name]) ) {
+            this[name] = value;
+        } else {
+            this.data[name] = value;
+        }
+        for (var i = 0; i < this.children.length;i++) {
+            this.children[i].setNodesProperty(name,value);
+        }
+        if (refresh) {
+            this.refresh();
+        }
+    },
+    /**
+    * Toggles the highlighted state of a Node
+    * @method toggleHighlight
+    */
+    toggleHighlight: function() {
+        if (this.enableHighlight) {
+            // unhighlights only if fully highligthed.  For not or partially highlighted it will highlight
+            if (this.highlightState == 1) {
+                this.unhighlight();
+            } else {
+                this.highlight();
+            }
+        }
+    },
+    
+    /**
+    * Turns highlighting on node.  
+    * @method highlight
+    * @param _silent {boolean} optional, don't fire the highlightEvent
+    */
+    highlight: function(_silent) {
+        if (this.enableHighlight) {
+            if (this.tree.singleNodeHighlight) {
+                if (this.tree._currentlyHighlighted) {
+                    this.tree._currentlyHighlighted.unhighlight();
+                }
+                this.tree._currentlyHighlighted = this;
+            }
+            this.highlightState = 1;
+            this._setHighlightClassName();
+            if (this.propagateHighlightDown) {
+                for (var i = 0;i < this.children.length;i++) {
+                    this.children[i].highlight(true);
+                }
+            }
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+            if (!_silent) {
+                this.tree.fireEvent('highlightEvent',this);
+            }
+        }
+    },
+    /**
+    * Turns highlighting off a node.  
+    * @method unhighlight
+    * @param _silent {boolean} optional, don't fire the highlightEvent
+    */
+    unhighlight: function(_silent) {
+        if (this.enableHighlight) {
+            this.highlightState = 0;
+            this._setHighlightClassName();
+            if (this.propagateHighlightDown) {
+                for (var i = 0;i < this.children.length;i++) {
+                    this.children[i].unhighlight(true);
+                }
+            }
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+            if (!_silent) {
+                this.tree.fireEvent('highlightEvent',this);
+            }
+        }
+    },
+    /** 
+    * Checks whether all or part of the children of a node are highlighted and
+    * sets the node highlight to full, none or partial highlight.
+    * If set to propagate it will further call the parent
+    * @method _childrenHighlighted
+    * @private
+    */
+    _childrenHighlighted: function() {
+        var yes = false, no = false;
+        if (this.enableHighlight) {
+            for (var i = 0;i < this.children.length;i++) {
+                switch(this.children[i].highlightState) {
+                    case 0:
+                        no = true;
+                        break;
+                    case 1:
+                        yes = true;
+                        break;
+                    case 2:
+                        yes = no = true;
+                        break;
+                }
+            }
+            if (yes && no) {
+                this.highlightState = 2;
+            } else if (yes) {
+                this.highlightState = 1;
+            } else {
+                this.highlightState = 0;
+            }
+            this._setHighlightClassName();
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+        }
+    },
+    
+    /**
+    * Changes the classNames on the toggle and content containers to reflect the current highlighting
+    * @method _setHighlightClassName
+    * @private
+    */
+    _setHighlightClassName: function() {
+        var el = Dom.get('ygtvtableel' + this.index);
+        if (el) {
+            el.className = el.className.replace(/\bygtv-highlight\d\b/gi,'ygtv-highlight' + this.highlightState);
+        }
     }
-
+    
 };
 
 YAHOO.augment(YAHOO.widget.Node, YAHOO.util.EventProvider);
 })();
+/**
+ * A custom YAHOO.widget.Node that handles the unique nature of 
+ * the virtual, presentationless root node.
+ * @namespace YAHOO.widget
+ * @class RootNode
+ * @extends YAHOO.widget.Node
+ * @param oTree {YAHOO.widget.TreeView} The tree instance this node belongs to
+ * @constructor
+ */
+YAHOO.widget.RootNode = function(oTree) {
+    // Initialize the node with null params.  The root node is a
+    // special case where the node has no presentation.  So we have
+    // to alter the standard properties a bit.
+    this.init(null, null, true);
+    
+    /*
+     * For the root node, we get the tree reference from as a param
+     * to the constructor instead of from the parent element.
+     */
+    this.tree = oTree;
+};
+
+YAHOO.extend(YAHOO.widget.RootNode, YAHOO.widget.Node, {
+    
+   /**
+     * The node type
+     * @property _type
+      * @type string
+     * @private
+     * @default "RootNode"
+     */
+    _type: "RootNode",
+    
+    // overrides YAHOO.widget.Node
+    getNodeHtml: function() { 
+        return ""; 
+    },
+
+    toString: function() { 
+        return this._type;
+    },
+
+    loadComplete: function() { 
+        this.tree.draw();
+    },
+    
+   /**
+     * Count of nodes in tree.  
+    * It overrides Nodes.getNodeCount because the root node should not be counted.
+     * @method getNodeCount
+     * @return {int} number of nodes in the tree
+     */
+    getNodeCount: function() {
+        for (var i = 0, count = 0;i< this.children.length;i++) {
+            count += this.children[i].getNodeCount();
+        }
+        return count;
+    },
+
+  /**
+     * Returns an object which could be used to build a tree out of this node and its children.
+     * It can be passed to the tree constructor to reproduce this node as a tree.
+     * Since the RootNode is automatically created by treeView, 
+     * its own definition is excluded from the returned node definition
+     * which only contains its children.
+     * @method getNodeDefinition
+     * @return {Object | false}  definition of the tree or false if any child node is defined as dynamic
+     */
+    getNodeDefinition: function() {
+        
+        for (var def, defs = [], i = 0; i < this.children.length;i++) {
+            def = this.children[i].getNodeDefinition();
+            if (def === false) { return false;}
+            defs.push(def);
+        }
+        return defs;
+    },
+
+    collapse: function() {},
+    expand: function() {},
+    getSiblings: function() { return null; },
+    focus: function () {}
+
+});
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 /**
  * The default node presentation.  The first parameter should be
  * either a string that will be used as the node's label, or an object
@@ -2508,8 +2993,23 @@
      * @type string
      */
     title: null,
-	
-/**
+    
+    /**
+     * The href for the node's label.  If one is not specified, the href will
+     * be set so that it toggles the node.
+     * @property href
+     * @type string
+     */
+    href: null,
+
+    /**
+     * The label href target, defaults to current window
+     * @property target
+     * @type string
+     */
+    target: "_self",
+    
+    /**
      * The node type
      * @property _type
      * @private
@@ -2531,15 +3031,15 @@
                 label: oData 
             };
         } else {
-        if (oData.style) {
-            this.labelStyle = oData.style;
+            if (oData.style) {
+                this.labelStyle = oData.style;
+            }
         }
-        }
 
         this.label = oData.label;
 
         this.labelElId = "ygtvlabelel" + this.index;
-		
+        
     },
 
     /**
@@ -2553,18 +3053,18 @@
     },
 
     // overrides YAHOO.widget.Node
-	getContentHtml: function() { 
+    getContentHtml: function() { 
         var sb = [];
         sb[sb.length] = this.href?'<a':'<span';
         sb[sb.length] = ' id="' + this.labelElId + '"';
+        sb[sb.length] = ' class="' + this.labelStyle  + '"';
+        if (this.href) {
+            sb[sb.length] = ' href="' + this.href + '"';
+            sb[sb.length] = ' target="' + this.target + '"';
+        } 
         if (this.title) {
             sb[sb.length] = ' title="' + this.title + '"';
         }
-        sb[sb.length] = ' class="' + this.labelStyle  + '"';
-		if (this.href) {
-			sb[sb.length] = ' href="' + this.href + '"';
-			sb[sb.length] = ' target="' + this.target + '"';
-		} 
         sb[sb.length] = ' >';
         sb[sb.length] = this.label;
         sb[sb.length] = this.href?'</a>':'</span>';
@@ -2581,17 +3081,19 @@
      * @return {Object | false}  definition of the tree or false if this node or any descendant is defined as dynamic
      */
     getNodeDefinition: function() {
-		var def = YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);
-		if (def === false) { return false; }
+        var def = YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
 
-		// Node specific properties
-		def.label = this.label;
-		if (this.labelStyle != 'ygtvlabel') { def.style = this.labelStyle; }
-		if (this.title) { def.title = this.title ; }
+        // Node specific properties
+        def.label = this.label;
+        if (this.labelStyle != 'ygtvlabel') { def.style = this.labelStyle; }
+        if (this.title) { def.title = this.title; }
+        if (this.href) { def.href = this.href; }
+        if (this.target != '_self') { def.target = this.target; }       
 
-		return def;
-	
-	},
+        return def;
+    
+    },
 
     toString: function() { 
         return YAHOO.widget.TextNode.superclass.toString.call(this) + ": " + this.label;
@@ -2599,98 +3101,66 @@
 
     // deprecated
     onLabelClick: function() {
-		return false;
+        return false;
+    },
+    refresh: function() {
+        YAHOO.widget.TextNode.superclass.refresh.call(this);
+        var label = this.getLabelEl();
+        label.innerHTML = this.label;
+        if (label.tagName.toUpperCase() == 'A') {
+            label.href = this.href;
+            label.target = this.target;
+        }
     }
+        
+    
+
+    
 });
 })();
 /**
- * A custom YAHOO.widget.Node that handles the unique nature of 
- * the virtual, presentationless root node.
+ * A menu-specific implementation that differs from TextNode in that only 
+ * one sibling can be expanded at a time.
  * @namespace YAHOO.widget
- * @class RootNode
- * @extends YAHOO.widget.Node
- * @param oTree {YAHOO.widget.TreeView} The tree instance this node belongs to
+ * @class MenuNode
+ * @extends YAHOO.widget.TextNode
+ * @param oData {object} a string or object containing the data that will
+ * be used to render this node.
+ * Providing a string is the same as providing an object with a single property named label.
+ * All values in the oData will be used to set equally named properties in the node
+ * as long as the node does have such properties, they are not undefined, private or functions.
+ * All attributes are made available in noderef.data, which
+ * can be used to store custom attributes.  TreeView.getNode(s)ByProperty
+ * can be used to retrieve a node by one of the attributes.
+ * @param oParent {YAHOO.widget.Node} this node's parent node
+ * @param expanded {boolean} the initial expanded/collapsed state (deprecated; use oData.expanded) 
  * @constructor
  */
-YAHOO.widget.RootNode = function(oTree) {
-	// Initialize the node with null params.  The root node is a
-	// special case where the node has no presentation.  So we have
-	// to alter the standard properties a bit.
-	this.init(null, null, true);
-	
-	/*
-	 * For the root node, we get the tree reference from as a param
-	 * to the constructor instead of from the parent element.
-	 */
-	this.tree = oTree;
+YAHOO.widget.MenuNode = function(oData, oParent, expanded) {
+    YAHOO.widget.MenuNode.superclass.constructor.call(this,oData,oParent,expanded);
+
+   /*
+     * Menus usually allow only one branch to be open at a time.
+     */
+    this.multiExpand = false;
+
 };
 
-YAHOO.extend(YAHOO.widget.RootNode, YAHOO.widget.Node, {
-    
-   /**
+YAHOO.extend(YAHOO.widget.MenuNode, YAHOO.widget.TextNode, {
+
+    /**
      * The node type
      * @property _type
-      * @type string
      * @private
-     * @default "RootNode"
+    * @default "MenuNode"
      */
-    _type: "RootNode",
-	
-    // overrides YAHOO.widget.Node
-    getNodeHtml: function() { 
-        return ""; 
-    },
+    _type: "MenuNode"
 
-    toString: function() { 
-        return this._type;
-    },
-
-    loadComplete: function() { 
-        this.tree.draw();
-    },
-	
-   /**
-     * Count of nodes in tree.  
-    * It overrides Nodes.getNodeCount because the root node should not be counted.
-     * @method getNodeCount
-     * @return {int} number of nodes in the tree
-     */
-    getNodeCount: function() {
-		for (var i = 0, count = 0;i< this.children.length;i++) {
-			count += this.children[i].getNodeCount();
-		}
-        return count;
-    },
-
-  /**
-     * Returns an object which could be used to build a tree out of this node and its children.
-     * It can be passed to the tree constructor to reproduce this node as a tree.
-     * Since the RootNode is automatically created by treeView, 
-     * its own definition is excluded from the returned node definition
-     * which only contains its children.
-     * @method getNodeDefinition
-     * @return {Object | false}  definition of the tree or false if any child node is defined as dynamic
-     */
-    getNodeDefinition: function() {
-		
-		for (var def, defs = [], i = 0; i < this.children.length;i++) {
-			def = this.children[i].getNodeDefinition();
-			if (def === false) { return false;}
-			defs.push(def);
-		}
-		return defs;
-    },
-
-    collapse: function() {},
-    expand: function() {},
-	getSiblings: function() { return null; },
-	focus: function () {}
-
 });
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 
 /**
  * This implementation takes either a string or object for the
@@ -2743,7 +3213,7 @@
      * @type string
      */
     html: null,
-	
+    
 /**
      * The node type
      * @property _type
@@ -2763,8 +3233,8 @@
     initContent: function(oData, hasIcon) { 
         this.setHtml(oData);
         this.contentElId = "ygtvcontentel" + this.index;
-		if (!Lang.isUndefined(hasIcon)) { this.hasIcon  = hasIcon; }
-		
+        if (!Lang.isUndefined(hasIcon)) { this.hasIcon  = hasIcon; }
+        
         this.logger = new YAHOO.widget.LogWriter(this.toString());
     },
 
@@ -2775,7 +3245,6 @@
      */
     setHtml: function(o) {
 
-        this.data = o;
         this.html = (typeof o === "string") ? o : o.html;
 
         var el = this.getContentEl();
@@ -2789,8 +3258,8 @@
     getContentHtml: function() { 
         return this.html;
     },
-	
-	  /**
+    
+      /**
      * Returns an object which could be used to build a tree out of this node and its children.
      * It can be passed to the tree constructor to reproduce this node as a tree.
      * It will return false if any node loads dynamically, regardless of whether it is loaded or not.
@@ -2798,59 +3267,20 @@
      * @return {Object | false}  definition of the tree or false if any node is defined as dynamic
      */
     getNodeDefinition: function() {
-		var def = YAHOO.widget.HTMLNode.superclass.getNodeDefinition.call(this);
-		if (def === false) { return false; }
-		def.html = this.html;
-		return def;
-	
-	}
+        var def = YAHOO.widget.HTMLNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
+        def.html = this.html;
+        return def;
+    
+    }
 });
 })();
-/**
- * A menu-specific implementation that differs from TextNode in that only 
- * one sibling can be expanded at a time.
- * @namespace YAHOO.widget
- * @class MenuNode
- * @extends YAHOO.widget.TextNode
- * @param oData {object} a string or object containing the data that will
- * be used to render this node.
- * Providing a string is the same as providing an object with a single property named label.
- * All values in the oData will be used to set equally named properties in the node
- * as long as the node does have such properties, they are not undefined, private or functions.
- * All attributes are made available in noderef.data, which
- * can be used to store custom attributes.  TreeView.getNode(s)ByProperty
- * can be used to retrieve a node by one of the attributes.
- * @param oParent {YAHOO.widget.Node} this node's parent node
- * @param expanded {boolean} the initial expanded/collapsed state (deprecated; use oData.expanded) 
- * @constructor
- */
-YAHOO.widget.MenuNode = function(oData, oParent, expanded) {
-	YAHOO.widget.MenuNode.superclass.constructor.call(this,oData,oParent,expanded);
-
-   /*
-     * Menus usually allow only one branch to be open at a time.
-     */
-	this.multiExpand = false;
-
-};
-
-YAHOO.extend(YAHOO.widget.MenuNode, YAHOO.widget.TextNode, {
-
-    /**
-     * The node type
-     * @property _type
-     * @private
-    * @default "MenuNode"
-     */
-    _type: "MenuNode"
-
-});
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event,
-		Calendar = YAHOO.widget.Calendar;
-		
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event,
+        Calendar = YAHOO.widget.Calendar;
+        
 /**
  * A Date-specific implementation that differs from TextNode in that it uses 
  * YAHOO.widget.Calendar as an in-line editor, if available
@@ -2871,7 +3301,7 @@
  * @constructor
  */
 YAHOO.widget.DateNode = function(oData, oParent, expanded) {
-	YAHOO.widget.DateNode.superclass.constructor.call(this,oData, oParent, expanded);
+    YAHOO.widget.DateNode.superclass.constructor.call(this,oData, oParent, expanded);
 };
 
 YAHOO.extend(YAHOO.widget.DateNode, YAHOO.widget.TextNode, {
@@ -2884,552 +3314,421 @@
      * @default  "DateNode"
      */
     _type: "DateNode",
-	
-	/**
-	* Configuration object for the Calendar editor, if used.
-	* See <a href="http://developer.yahoo.com/yui/calendar/#internationalization">http://developer.yahoo.com/yui/calendar/#internationalization</a>
-	* @property calendarConfig
-	*/
-	calendarConfig: null,
-	
-	
-	
-	/** 
-	 *  If YAHOO.widget.Calendar is available, it will pop up a Calendar to enter a new date.  Otherwise, it falls back to a plain <input>  textbox
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 */
-	fillEditorContainer: function (editorData) {
-	
-		var cal, container = editorData.inputContainer;
-		
-		if (Lang.isUndefined(Calendar)) {
-			Dom.replaceClass(editorData.editorPanel,'ygtv-edit-DateNode','ygtv-edit-TextNode');
-			YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this, editorData);
-			return;
-		}
-			
-		if (editorData.nodeType != this._type) {
-			editorData.nodeType = this._type;
-			editorData.saveOnEnter = false;
-			
-			editorData.node.destroyEditorContents(editorData);
+    
+    /**
+    * Configuration object for the Calendar editor, if used.
+    * See <a href="http://developer.yahoo.com/yui/calendar/#internationalization">http://developer.yahoo.com/yui/calendar/#internationalization</a>
+    * @property calendarConfig
+    */
+    calendarConfig: null,
+    
+    
+    
+    /** 
+     *  If YAHOO.widget.Calendar is available, it will pop up a Calendar to enter a new date.  Otherwise, it falls back to a plain <input>  textbox
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     */
+    fillEditorContainer: function (editorData) {
+    
+        var cal, container = editorData.inputContainer;
+        
+        if (Lang.isUndefined(Calendar)) {
+            Dom.replaceClass(editorData.editorPanel,'ygtv-edit-DateNode','ygtv-edit-TextNode');
+            YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this, editorData);
+            return;
+        }
+            
+        if (editorData.nodeType != this._type) {
+            editorData.nodeType = this._type;
+            editorData.saveOnEnter = false;
+            
+            editorData.node.destroyEditorContents(editorData);
 
-			editorData.inputObject = cal = new Calendar(container.appendChild(document.createElement('div')));
-			if (this.calendarConfig) { 
-				cal.cfg.applyConfig(this.calendarConfig,true); 
-				cal.cfg.fireQueue();
-			}
-			cal.selectEvent.subscribe(function () {
-				this.tree._closeEditor(true);
-			},this,true);
-		} else {
-			cal = editorData.inputObject;
-		}
+            editorData.inputObject = cal = new Calendar(container.appendChild(document.createElement('div')));
+            if (this.calendarConfig) { 
+                cal.cfg.applyConfig(this.calendarConfig,true); 
+                cal.cfg.fireQueue();
+            }
+            cal.selectEvent.subscribe(function () {
+                this.tree._closeEditor(true);
+            },this,true);
+        } else {
+            cal = editorData.inputObject;
+        }
 
-		cal.cfg.setProperty("selected",this.label, false); 
+        cal.cfg.setProperty("selected",this.label, false); 
 
-		var delim = cal.cfg.getProperty('DATE_FIELD_DELIMITER');
-		var pageDate = this.label.split(delim);
-		cal.cfg.setProperty('pagedate',pageDate[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] + delim + pageDate[cal.cfg.getProperty('MDY_YEAR_POSITION') -1]);
-		cal.cfg.fireQueue();
+        var delim = cal.cfg.getProperty('DATE_FIELD_DELIMITER');
+        var pageDate = this.label.split(delim);
+        cal.cfg.setProperty('pagedate',pageDate[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] + delim + pageDate[cal.cfg.getProperty('MDY_YEAR_POSITION') -1]);
+        cal.cfg.fireQueue();
 
-		cal.render();
-		cal.oDomContainer.focus();
-	},
-	/**
-	* Saves the date entered in the editor into the DateNode label property and displays it.
-	* Overrides Node.saveEditorValue
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 */
-	saveEditorValue: function (editorData) {
-		var node = editorData.node, value;
-		if (Lang.isUndefined(Calendar)) {
-			value = editorData.inputElement.value;
-		} else {
-			var cal = editorData.inputObject,
-				date = cal.getSelectedDates()[0],
-				dd = [];
-				
-			dd[cal.cfg.getProperty('MDY_DAY_POSITION') -1] = date.getDate();
-			dd[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] = date.getMonth() + 1;
-			dd[cal.cfg.getProperty('MDY_YEAR_POSITION') -1] = date.getFullYear();
-			value = dd.join(cal.cfg.getProperty('DATE_FIELD_DELIMITER'));
-		}
+        cal.render();
+        cal.oDomContainer.focus();
+    },
+    /**
+    * Saves the date entered in the editor into the DateNode label property and displays it.
+    * Overrides Node.saveEditorValue
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     */
+    saveEditorValue: function (editorData) {
+        var node = editorData.node, 
+            validator = node.tree.validator,
+            value;
+        if (Lang.isUndefined(Calendar)) {
+            value = editorData.inputElement.value;
+        } else {
+            var cal = editorData.inputObject,
+                date = cal.getSelectedDates()[0],
+                dd = [];
+                
+            dd[cal.cfg.getProperty('MDY_DAY_POSITION') -1] = date.getDate();
+            dd[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] = date.getMonth() + 1;
+            dd[cal.cfg.getProperty('MDY_YEAR_POSITION') -1] = date.getFullYear();
+            value = dd.join(cal.cfg.getProperty('DATE_FIELD_DELIMITER'));
+        }
+        if (Lang.isFunction(validator)) {
+            value = validator(value,node.label,node);
+            if (Lang.isUndefined(value)) { return false; }
+        }
 
-		node.label = value;
-		node.data.label = value;
-		node.getLabelEl().innerHTML = value;
-	}
+        node.label = value;
+        node.getLabelEl().innerHTML = value;
+    },
+  /**
+     * Returns an object which could be used to build a tree out of this node and its children.
+     * It can be passed to the tree constructor to reproduce this node as a tree.
+     * It will return false if the node or any descendant loads dynamically, regardless of whether it is loaded or not.
+     * @method getNodeDefinition
+     * @return {Object | false}  definition of the node or false if this node or any descendant is defined as dynamic
+     */ 
+    getNodeDefinition: function() {
+        var def = YAHOO.widget.DateNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
+        if (this.calendarConfig) { def.calendarConfig = this.calendarConfig; }
+        return def;
+    }
 
+
 });
 })();
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang, 
-		Event = YAHOO.util.Event,
-		TV = YAHOO.widget.TreeView,
-		TVproto = TV.prototype;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang, 
+        Event = YAHOO.util.Event,
+        TV = YAHOO.widget.TreeView,
+        TVproto = TV.prototype;
 
-	/**
-	 * An object to store information used for in-line editing
-	 * for all Nodes of all TreeViews. It contains:
-	 * <ul>
-	* <li>active {boolean}, whether there is an active cell editor </li>
-	* <li>whoHasIt {YAHOO.widget.TreeView} TreeView instance that is currently using the editor</li>
-	* <li>nodeType {string} value of static Node._type property, allows reuse of input element if node is of the same type.</li>
-	* <li>editorPanel {HTMLelement (<div>)} element holding the in-line editor</li>
-	* <li>inputContainer {HTMLelement (<div>)} element which will hold the type-specific input element(s) to be filled by the fillEditorContainer method</li>
-	* <li>buttonsContainer {HTMLelement (<div>)} element which holds the <button> elements for Ok/Cancel.  If you don't want any of the buttons, hide it via CSS styles, don't destroy it</li>
-	* <li>node {YAHOO.widget.Node} reference to the Node being edited</li>
-	* <li>saveOnEnter {boolean}, whether the Enter key should be accepted as a Save command (Esc. is always taken as Cancel), disable for multi-line input elements </li>
-	* </ul>
-	*  Editors are free to use this object to store additional data.
-	 * @property editorData
-	 * @static
-	 * @for YAHOO.widget.TreeView
-	 */
-	TV.editorData = {
-		active:false,
-		whoHasIt:null, // which TreeView has it
-		nodeType:null,
-		editorPanel:null,
-		inputContainer:null,
-		buttonsContainer:null,
-		node:null, // which Node is being edited
-		saveOnEnter:true
-		// Each node type is free to add its own properties to this as it sees fit.
-	};
-	
-	/**
-	* Entry point of the editing plug-in.  
-	* TreeView will call this method if it exists when a node label is clicked
-	* @method _nodeEditing
-	* @param node {YAHOO.widget.Node} the node to be edited
-	* @return {Boolean} true to indicate that the node is editable and prevent any further bubbling of the click.
-	 * @for YAHOO.widget.TreeView
-	*/
-	
-	
-	TVproto._nodeEditing = function (node) {
-		if (node.fillEditorContainer && node.editable) {
-			var ed, topLeft, buttons, button, editorData = TV.editorData;
-			editorData.active = true;
-			editorData.whoHasIt = this;
-			if (!editorData.nodeType) {
-				editorData.editorPanel = ed = document.body.appendChild(document.createElement('div'));
-				Dom.addClass(ed,'ygtv-label-editor');
+    /**
+     * An object to store information used for in-line editing
+     * for all Nodes of all TreeViews. It contains:
+     * <ul>
+    * <li>active {boolean}, whether there is an active cell editor </li>
+    * <li>whoHasIt {YAHOO.widget.TreeView} TreeView instance that is currently using the editor</li>
+    * <li>nodeType {string} value of static Node._type property, allows reuse of input element if node is of the same type.</li>
+    * <li>editorPanel {HTMLelement (<div>)} element holding the in-line editor</li>
+    * <li>inputContainer {HTMLelement (<div>)} element which will hold the type-specific input element(s) to be filled by the fillEditorContainer method</li>
+    * <li>buttonsContainer {HTMLelement (<div>)} element which holds the <button> elements for Ok/Cancel.  If you don't want any of the buttons, hide it via CSS styles, don't destroy it</li>
+    * <li>node {YAHOO.widget.Node} reference to the Node being edited</li>
+    * <li>saveOnEnter {boolean}, whether the Enter key should be accepted as a Save command (Esc. is always taken as Cancel), disable for multi-line input elements </li>
+    * </ul>
+    *  Editors are free to use this object to store additional data.
+     * @property editorData
+     * @static
+     * @for YAHOO.widget.TreeView
+     */
+    TV.editorData = {
+        active:false,
+        whoHasIt:null, // which TreeView has it
+        nodeType:null,
+        editorPanel:null,
+        inputContainer:null,
+        buttonsContainer:null,
+        node:null, // which Node is being edited
+        saveOnEnter:true
+        // Each node type is free to add its own properties to this as it sees fit.
+    };
+    
+    /**
+    * Validator function for edited data, called from the TreeView instance scope, 
+    * receives the arguments (newValue, oldValue, nodeInstance) 
+    * and returns either the validated (or type-converted) value or undefined. 
+    * An undefined return will prevent the editor from closing
+    * @property validator
+    * @default null
+     * @for YAHOO.widget.TreeView
+     */
+    TVproto.validator = null;
+    
+    /**
+    * Entry point of the editing plug-in.  
+    * TreeView will call this method if it exists when a node label is clicked
+    * @method _nodeEditing
+    * @param node {YAHOO.widget.Node} the node to be edited
+    * @return {Boolean} true to indicate that the node is editable and prevent any further bubbling of the click.
+     * @for YAHOO.widget.TreeView
+     * @private
+    */
+    
+    
+    TVproto._nodeEditing = function (node) {
+        if (node.fillEditorContainer && node.editable) {
+            var ed, topLeft, buttons, button, editorData = TV.editorData;
+            editorData.active = true;
+            editorData.whoHasIt = this;
+            if (!editorData.nodeType) {
+                editorData.editorPanel = ed = document.body.appendChild(document.createElement('div'));
+                Dom.addClass(ed,'ygtv-label-editor');
 
-				buttons = editorData.buttonsContainer = ed.appendChild(document.createElement('div'));
-				Dom.addClass(buttons,'ygtv-button-container');
-				button = buttons.appendChild(document.createElement('button'));
-				Dom.addClass(button,'ygtvok');
-				button.innerHTML = ' ';
-				button = buttons.appendChild(document.createElement('button'));
-				Dom.addClass(button,'ygtvcancel');
-				button.innerHTML = ' ';
-				Event.on(buttons, 'click', function (ev) {
-					this.logger.log('click on editor');
-					var target = Event.getTarget(ev);
-					var node = TV.editorData.node;
-					if (Dom.hasClass(target,'ygtvok')) {
-						node.logger.log('ygtvok');
-						Event.stopEvent(ev);
-						this._closeEditor(true);
-					}
-					if (Dom.hasClass(target,'ygtvcancel')) {
-						node.logger.log('ygtvcancel');
-						Event.stopEvent(ev);
-						this._closeEditor(false);
-					}
-				}, this, true);
+                buttons = editorData.buttonsContainer = ed.appendChild(document.createElement('div'));
+                Dom.addClass(buttons,'ygtv-button-container');
+                button = buttons.appendChild(document.createElement('button'));
+                Dom.addClass(button,'ygtvok');
+                button.innerHTML = ' ';
+                button = buttons.appendChild(document.createElement('button'));
+                Dom.addClass(button,'ygtvcancel');
+                button.innerHTML = ' ';
+                Event.on(buttons, 'click', function (ev) {
+                    this.logger.log('click on editor');
+                    var target = Event.getTarget(ev);
+                    var node = TV.editorData.node;
+                    if (Dom.hasClass(target,'ygtvok')) {
+                        node.logger.log('ygtvok');
+                        Event.stopEvent(ev);
+                        this._closeEditor(true);
+                    }
+                    if (Dom.hasClass(target,'ygtvcancel')) {
+                        node.logger.log('ygtvcancel');
+                        Event.stopEvent(ev);
+                        this._closeEditor(false);
+                    }
+                }, this, true);
 
-				editorData.inputContainer = ed.appendChild(document.createElement('div'));
-				Dom.addClass(editorData.inputContainer,'ygtv-input');
-				
-				Event.on(ed,'keydown',function (ev) {
-					var editorData = TV.editorData,
-						KEY = YAHOO.util.KeyListener.KEY;
-					switch (ev.keyCode) {
-						case KEY.ENTER:
-							this.logger.log('ENTER');
-							Event.stopEvent(ev);
-							if (editorData.saveOnEnter) { 
-								this._closeEditor(true);
-							}
-							break;
-						case KEY.ESCAPE:
-							this.logger.log('ESC');
-							Event.stopEvent(ev);
-							this._closeEditor(false);
-							break;
-					}
-				},this,true);
+                editorData.inputContainer = ed.appendChild(document.createElement('div'));
+                Dom.addClass(editorData.inputContainer,'ygtv-input');
+                
+                Event.on(ed,'keydown',function (ev) {
+                    var editorData = TV.editorData,
+                        KEY = YAHOO.util.KeyListener.KEY;
+                    switch (ev.keyCode) {
+                        case KEY.ENTER:
+                            this.logger.log('ENTER');
+                            Event.stopEvent(ev);
+                            if (editorData.saveOnEnter) { 
+                                this._closeEditor(true);
+                            }
+                            break;
+                        case KEY.ESCAPE:
+                            this.logger.log('ESC');
+                            Event.stopEvent(ev);
+                            this._closeEditor(false);
+                            break;
+                    }
+                },this,true);
 
 
-				
-			} else {
-				ed = editorData.editorPanel;
-			}
-			editorData.node = node;
-			if (editorData.nodeType) {
-				Dom.removeClass(ed,'ygtv-edit-' + editorData.nodeType);
-			}
-			Dom.addClass(ed,' ygtv-edit-' + node._type);
-			topLeft = Dom.getXY(node.getContentEl());
-			Dom.setStyle(ed,'left',topLeft[0] + 'px');
-			Dom.setStyle(ed,'top',topLeft[1] + 'px');
-			Dom.setStyle(ed,'display','block');
-			ed.focus();
-			node.fillEditorContainer(editorData);
-
-			return true;  // If inline editor available, don't do anything else.
-		}
-	};
-	
-	/**
-	* Method to be associated with an event (clickEvent, dblClickEvent or enterKeyPressed) to pop up the contents editor
-	*  It calls the corresponding node editNode method.
-	* @method onEventEditNode
-	* @param oArgs {object} Object passed as arguments to TreeView event listeners
-	 * @for YAHOO.widget.TreeView
-	*/
-
-	TVproto.onEventEditNode = function (oArgs) {
-		if (oArgs instanceof YAHOO.widget.Node) {
-			oArgs.editNode();
-		} else if (oArgs.node instanceof YAHOO.widget.Node) {
-			oArgs.node.editNode();
-		}
-	};
-	
-	/**
-	* Method to be called when the inline editing is finished and the editor is to be closed
-	* @method _closeEditor
-	* @param save {Boolean} true if the edited value is to be saved, false if discarded
-	* @private
-	 * @for YAHOO.widget.TreeView
-	*/
-	
-	TVproto._closeEditor = function (save) {
-		var ed = TV.editorData, 
-			node = ed.node;
-		if (save) { 
-			ed.node.saveEditorValue(ed); 
-		}
-		Dom.setStyle(ed.editorPanel,'display','none');	
-		ed.active = false;
-		node.focus();
-	};
-	
-	/**
-	*  Entry point for TreeView's destroy method to destroy whatever the editing plug-in has created
-	* @method _destroyEditor
-	* @private
-	 * @for YAHOO.widget.TreeView
-	*/
-	TVproto._destroyEditor = function() {
-		var ed = TV.editorData;
-		if (ed && ed.nodeType && (!ed.active || ed.whoHasIt === this)) {
-			Event.removeListener(ed.editorPanel,'keydown');
-			Event.removeListener(ed.buttonContainer,'click');
-			ed.node.destroyEditorContents(ed);
-			document.body.removeChild(ed.editorPanel);
-			ed.nodeType = ed.editorPanel = ed.inputContainer = ed.buttonsContainer = ed.whoHasIt = ed.node = null;
-			ed.active = false;
-		}
-	};
-	
-	var Nproto = YAHOO.widget.Node.prototype;
-	
-	/**
-	* Signals if the label is editable.  (Ignored on TextNodes with href set.)
-	* @property editable
-	* @type boolean
-         * @for YAHOO.widget.Node
-	*/
-	Nproto.editable = false;
-	
-	/**
-	* pops up the contents editor, if there is one and the node is declared editable
-	* @method editNode
-	 * @for YAHOO.widget.Node
-	*/
-	
-	Nproto.editNode = function () {
-		this.tree._nodeEditing(this);
-	};
-	
-	
-
-
-	/** Placeholder for a function that should provide the inline node label editor.
-	 *   Leaving it set to null will indicate that this node type is not editable.
-	 * It should be overridden by nodes that provide inline editing.
-	 *  The Node-specific editing element (input box, textarea or whatever) should be inserted into editorData.inputContainer.
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.fillEditorContainer = null;
-
-	
-	/**
-	* Node-specific destroy function to empty the contents of the inline editor panel
-	* This function is the worst case alternative that will purge all possible events and remove the editor contents
-	* Method Event.purgeElement is somewhat costly so if it can be replaced by specifc Event.removeListeners, it is better to do so.
-	* @method destroyEditorContents
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.destroyEditorContents = function (editorData) {
-		// In the worst case, if the input editor (such as the Calendar) has no destroy method
-		// we can only try to remove all possible events on it.
-		Event.purgeElement(editorData.inputContainer,true);
-		editorData.inputContainer.innerHTML = '';
-	};
-
-	/**
-	* Saves the value entered into the editor.
-	* Should be overridden by each node type
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.saveEditorValue = function (editorData) {
-	};
-	
-	var TNproto = YAHOO.widget.TextNode.prototype;
-	
-
-
-	/** 
-	 *  Places an <input>  textbox in the input container and loads the label text into it
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.fillEditorContainer = function (editorData) {
-	
-		var input;
-		// If last node edited is not of the same type as this one, delete it and fill it with our editor
-		if (editorData.nodeType != this._type) {
-			editorData.nodeType = this._type;
-			editorData.saveOnEnter = true;
-			editorData.node.destroyEditorContents(editorData);
-
-			editorData.inputElement = input = editorData.inputContainer.appendChild(document.createElement('input'));
-			
-		} else {
-			// if the last node edited was of the same time, reuse the input element.
-			input = editorData.inputElement;
-		}
-
-		input.value = this.label;
-		input.focus();
-		input.select();
-	};
-	
-	/**
-	* Saves the value entered in the editor into the TextNode label property and displays it
-	* Overrides Node.saveEditorValue
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.saveEditorValue = function (editorData) {
-		var node = editorData.node, value = editorData.inputElement.value;
-		node.label = value;
-		node.data.label = value;
-		node.getLabelEl().innerHTML = value;
-	};
-
-	/**
-	* Destroys the contents of the inline editor panel
-	* Overrides Node.destroyEditorContent
-	* Since we didn't set any event listeners on this inline editor, it is more efficient to avoid the generic method in Node
-	* @method destroyEditorContents
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.destroyEditorContents = function (editorData) {
-		editorData.inputContainer.innerHTML = '';
-	};
-})();
-/**
- * A static factory class for tree view expand/collapse animations
- * @class TVAnim
- * @static
- */
-YAHOO.widget.TVAnim = function() {
-    return {
-        /**
-         * Constant for the fade in animation
-         * @property FADE_IN
-         * @type string
-         * @static
-         */
-        FADE_IN: "TVFadeIn",
-
-        /**
-         * Constant for the fade out animation
-         * @property FADE_OUT
-         * @type string
-         * @static
-         */
-        FADE_OUT: "TVFadeOut",
-
-        /**
-         * Returns a ygAnim instance of the given type
-         * @method getAnim
-         * @param type {string} the type of animation
-         * @param el {HTMLElement} the element to element (probably the children div)
-         * @param callback {function} function to invoke when the animation is done.
-         * @return {YAHOO.util.Animation} the animation instance
-         * @static
-         */
-        getAnim: function(type, el, callback) {
-            if (YAHOO.widget[type]) {
-                return new YAHOO.widget[type](el, callback);
+                
             } else {
-                return null;
+                ed = editorData.editorPanel;
             }
-        },
+            editorData.node = node;
+            if (editorData.nodeType) {
+                Dom.removeClass(ed,'ygtv-edit-' + editorData.nodeType);
+            }
+            Dom.addClass(ed,' ygtv-edit-' + node._type);
+            topLeft = Dom.getXY(node.getContentEl());
+            Dom.setStyle(ed,'left',topLeft[0] + 'px');
+            Dom.setStyle(ed,'top',topLeft[1] + 'px');
+            Dom.setStyle(ed,'display','block');
+            ed.focus();
+            node.fillEditorContainer(editorData);
 
-        /**
-         * Returns true if the specified animation class is available
-         * @method isValid
-         * @param type {string} the type of animation
-         * @return {boolean} true if valid, false if not
-         * @static
-         */
-        isValid: function(type) {
-            return (YAHOO.widget[type]);
+            return true;  // If inline editor available, don't do anything else.
         }
     };
-} ();
-/**
- * A 1/2 second fade-in animation.
- * @class TVFadeIn
- * @constructor
- * @param el {HTMLElement} the element to animate
- * @param callback {function} function to invoke when the animation is finished
- */
-YAHOO.widget.TVFadeIn = function(el, callback) {
+    
     /**
-     * The element to animate
-     * @property el
-     * @type HTMLElement
-     */
-    this.el = el;
+    * Method to be associated with an event (clickEvent, dblClickEvent or enterKeyPressed) to pop up the contents editor
+    *  It calls the corresponding node editNode method.
+    * @method onEventEditNode
+    * @param oArgs {object} Object passed as arguments to TreeView event listeners
+     * @for YAHOO.widget.TreeView
+    */
 
+    TVproto.onEventEditNode = function (oArgs) {
+        if (oArgs instanceof YAHOO.widget.Node) {
+            oArgs.editNode();
+        } else if (oArgs.node instanceof YAHOO.widget.Node) {
+            oArgs.node.editNode();
+        }
+    };
+    
     /**
-     * the callback to invoke when the animation is complete
-     * @property callback
-     * @type function
-     */
-    this.callback = callback;
-
-    this.logger = new YAHOO.widget.LogWriter(this.toString());
-};
-
-YAHOO.widget.TVFadeIn.prototype = {
+    * Method to be called when the inline editing is finished and the editor is to be closed
+    * @method _closeEditor
+    * @param save {Boolean} true if the edited value is to be saved, false if discarded
+    * @private
+     * @for YAHOO.widget.TreeView
+    */
+    
+    TVproto._closeEditor = function (save) {
+        var ed = TV.editorData, 
+            node = ed.node,
+            close = true;
+        if (save) { 
+            close = ed.node.saveEditorValue(ed) !== false; 
+        }
+        if (close) {
+            Dom.setStyle(ed.editorPanel,'display','none');  
+            ed.active = false;
+            node.focus();
+        }
+    };
+    
     /**
-     * Performs the animation
-     * @method animate
-     */
-    animate: function() {
-        var tvanim = this;
+    *  Entry point for TreeView's destroy method to destroy whatever the editing plug-in has created
+    * @method _destroyEditor
+    * @private
+     * @for YAHOO.widget.TreeView
+    */
+    TVproto._destroyEditor = function() {
+        var ed = TV.editorData;
+        if (ed && ed.nodeType && (!ed.active || ed.whoHasIt === this)) {
+            Event.removeListener(ed.editorPanel,'keydown');
+            Event.removeListener(ed.buttonContainer,'click');
+            ed.node.destroyEditorContents(ed);
+            document.body.removeChild(ed.editorPanel);
+            ed.nodeType = ed.editorPanel = ed.inputContainer = ed.buttonsContainer = ed.whoHasIt = ed.node = null;
+            ed.active = false;
+        }
+    };
+    
+    var Nproto = YAHOO.widget.Node.prototype;
+    
+    /**
+    * Signals if the label is editable.  (Ignored on TextNodes with href set.)
+    * @property editable
+    * @type boolean
+         * @for YAHOO.widget.Node
+    */
+    Nproto.editable = false;
+    
+    /**
+    * pops up the contents editor, if there is one and the node is declared editable
+    * @method editNode
+     * @for YAHOO.widget.Node
+    */
+    
+    Nproto.editNode = function () {
+        this.tree._nodeEditing(this);
+    };
+    
+    
 
-        var s = this.el.style;
-        s.opacity = 0.1;
-        s.filter = "alpha(opacity=10)";
-        s.display = "";
 
-        var dur = 0.4; 
-        var a = new YAHOO.util.Anim(this.el, {opacity: {from: 0.1, to: 1, unit:""}}, dur);
-        a.onComplete.subscribe( function() { tvanim.onComplete(); } );
-        a.animate();
-    },
-
-    /**
-     * Clean up and invoke callback
-     * @method onComplete
+    /** Placeholder for a function that should provide the inline node label editor.
+     *   Leaving it set to null will indicate that this node type is not editable.
+     * It should be overridden by nodes that provide inline editing.
+     *  The Node-specific editing element (input box, textarea or whatever) should be inserted into editorData.inputContainer.
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     * @for YAHOO.widget.Node
      */
-    onComplete: function() {
-        this.callback();
-    },
+    Nproto.fillEditorContainer = null;
 
+    
     /**
-     * toString
-     * @method toString
-     * @return {string} the string representation of the instance
+    * Node-specific destroy function to empty the contents of the inline editor panel
+    * This function is the worst case alternative that will purge all possible events and remove the editor contents
+    * Method Event.purgeElement is somewhat costly so if it can be replaced by specifc Event.removeListeners, it is better to do so.
+    * @method destroyEditorContents
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.Node
      */
-    toString: function() {
-        return "TVFadeIn";
-    }
-};
-/**
- * A 1/2 second fade out animation.
- * @class TVFadeOut
- * @constructor
- * @param el {HTMLElement} the element to animate
- * @param callback {Function} function to invoke when the animation is finished
- */
-YAHOO.widget.TVFadeOut = function(el, callback) {
-    /**
-     * The element to animate
-     * @property el
-     * @type HTMLElement
-     */
-    this.el = el;
+    Nproto.destroyEditorContents = function (editorData) {
+        // In the worst case, if the input editor (such as the Calendar) has no destroy method
+        // we can only try to remove all possible events on it.
+        Event.purgeElement(editorData.inputContainer,true);
+        editorData.inputContainer.innerHTML = '';
+    };
 
     /**
-     * the callback to invoke when the animation is complete
-     * @property callback
-     * @type function
+    * Saves the value entered into the editor.
+    * Should be overridden by each node type
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return a return of exactly false will prevent the editor from closing
+     * @for YAHOO.widget.Node
      */
-    this.callback = callback;
+    Nproto.saveEditorValue = function (editorData) {
+    };
+    
+    var TNproto = YAHOO.widget.TextNode.prototype;
+    
 
-    this.logger = new YAHOO.widget.LogWriter(this.toString());
-};
 
-YAHOO.widget.TVFadeOut.prototype = {
-    /**
-     * Performs the animation
-     * @method animate
+    /** 
+     *  Places an <input>  textbox in the input container and loads the label text into it
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     * @for YAHOO.widget.TextNode
      */
-    animate: function() {
-        var tvanim = this;
-        var dur = 0.4;
-        var a = new YAHOO.util.Anim(this.el, {opacity: {from: 1, to: 0.1, unit:""}}, dur);
-        a.onComplete.subscribe( function() { tvanim.onComplete(); } );
-        a.animate();
-    },
+    TNproto.fillEditorContainer = function (editorData) {
+    
+        var input;
+        // If last node edited is not of the same type as this one, delete it and fill it with our editor
+        if (editorData.nodeType != this._type) {
+            editorData.nodeType = this._type;
+            editorData.saveOnEnter = true;
+            editorData.node.destroyEditorContents(editorData);
 
+            editorData.inputElement = input = editorData.inputContainer.appendChild(document.createElement('input'));
+            
+        } else {
+            // if the last node edited was of the same time, reuse the input element.
+            input = editorData.inputElement;
+        }
+
+        input.value = this.label;
+        input.focus();
+        input.select();
+    };
+    
     /**
-     * Clean up and invoke callback
-     * @method onComplete
+    * Saves the value entered in the editor into the TextNode label property and displays it
+    * Overrides Node.saveEditorValue
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.TextNode
      */
-    onComplete: function() {
-        var s = this.el.style;
-        s.display = "none";
-        // s.opacity = 1;
-        s.filter = "alpha(opacity=100)";
-        this.callback();
-    },
+    TNproto.saveEditorValue = function (editorData) {
+        var node = editorData.node, 
+            value = editorData.inputElement.value,
+            validator = node.tree.validator;
+        
+        if (Lang.isFunction(validator)) {
+            value = validator(value,node.label,node);
+            if (Lang.isUndefined(value)) { return false; }
+        }
+        node.label = value;
+        node.getLabelEl().innerHTML = value;
+    };
 
     /**
-     * toString
-     * @method toString
-     * @return {string} the string representation of the instance
+    * Destroys the contents of the inline editor panel
+    * Overrides Node.destroyEditorContent
+    * Since we didn't set any event listeners on this inline editor, it is more efficient to avoid the generic method in Node
+    * @method destroyEditorContents
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.TextNode
      */
-    toString: function() {
-        return "TVFadeOut";
-    }
-};
-YAHOO.register("treeview", YAHOO.widget.TreeView, {version: "2.6.0", build: "1321"});
+    TNproto.destroyEditorContents = function (editorData) {
+        editorData.inputContainer.innerHTML = '';
+    };
+})();
+YAHOO.register("treeview", YAHOO.widget.TreeView, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/treeview/treeview-min.js
===================================================================
--- trunk/root/static/yui/treeview/treeview-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/treeview-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,12 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-(function(){var D=YAHOO.util.Dom,B=YAHOO.util.Event,F=YAHOO.lang,E=YAHOO.widget;YAHOO.widget.TreeView=function(H,G){if(H){this.init(H);}if(G){if(!F.isArray(G)){G=[G];}this.buildTreeFromObject(G);}else{if(F.trim(this._el.innerHTML)){this.buildTreeFromMarkup(H);}}};var C=E.TreeView;C.prototype={id:null,_el:null,_nodes:null,locked:false,_expandAnim:null,_collapseAnim:null,_animCount:0,maxAnim:2,_hasDblClickSubscriber:false,_dblClickTimer:null,setExpandAnim:function(G){this._expandAnim=(E.TVAnim.isValid(G))?G:null;},setCollapseAnim:function(G){this._collapseAnim=(E.TVAnim.isValid(G))?G:null;},animateExpand:function(I,J){if(this._expandAnim&&this._animCount<this.maxAnim){var G=this;var H=E.TVAnim.getAnim(this._expandAnim,I,function(){G.expandComplete(J);});if(H){++this._animCount;this.fireEvent("animStart",{"node":J,"type":"expand"});H.animate();}return true;}return false;},animateCollapse:function(I,J){if(this._collapseAnim&&this._animCount<this.maxAnim){var G=this;var H=E.TVAn!
 im.getAnim(this._collapseAnim,I,function(){G.collapseComplete(J);});if(H){++this._animCount;this.fireEvent("animStart",{"node":J,"type":"collapse"});H.animate();}return true;}return false;},expandComplete:function(G){--this._animCount;this.fireEvent("animComplete",{"node":G,"type":"expand"});},collapseComplete:function(G){--this._animCount;this.fireEvent("animComplete",{"node":G,"type":"collapse"});},init:function(I){this._el=D.get(I);this.id=D.generateId(this._el,"yui-tv-auto-id-");this.createEvent("animStart",this);this.createEvent("animComplete",this);this.createEvent("collapse",this);this.createEvent("collapseComplete",this);this.createEvent("expand",this);this.createEvent("expandComplete",this);this.createEvent("enterKeyPressed",this);this.createEvent("clickEvent",this);var G=this;this.createEvent("dblClickEvent",{scope:this,onSubscribeCallback:function(){G._hasDblClickSubscriber=true;}});this.createEvent("labelClick",this);this._nodes=[];C.trees[this.id]=this;this.roo!
 t=new E.RootNode(this);var H=E.LogWriter;},buildTreeFromObject!
 :functio
n(G){var H=function(P,M){var L,Q,K,J,O,I,N;for(L=0;L<M.length;L++){Q=M[L];if(F.isString(Q)){K=new E.TextNode(Q,P);}else{if(F.isObject(Q)){J=Q.children;delete Q.children;O=Q.type||"text";delete Q.type;switch(O.toLowerCase()){case"text":K=new E.TextNode(Q,P);break;case"menu":K=new E.MenuNode(Q,P);break;case"html":K=new E.HTMLNode(Q,P);break;default:I=E[O];if(F.isObject(I)){for(N=I;N&&N!==E.Node;N=N.superclass.constructor){}if(N){K=new I(Q,P);}else{}}else{}}if(J){H(K,J);}}else{}}}};H(this.root,G);},buildTreeFromMarkup:function(I){var H=function(L,J){var K,M,O,N;for(K=D.getFirstChild(J);K;K=D.getNextSibling(K)){if(K.nodeType==1){switch(K.tagName.toUpperCase()){case"LI":for(O=K.firstChild;O;O=O.nextSibling){if(O.nodeType==3){N=F.trim(O.nodeValue);if(N.length){M=new E.TextNode(N,L,false);}}else{switch(O.tagName.toUpperCase()){case"UL":case"OL":H(M,O);break;case"A":M=new E.TextNode({label:O.innerHTML,href:O.href,target:O.target,title:O.title||O.alt},L,false);break;default:M=new E.H!
 TMLNode(O.parentNode.innerHTML,L,false,true);break;}}}break;case"UL":case"OL":H(M,K);break;}}}};var G=D.getChildrenBy(D.get(I),function(K){var J=K.tagName.toUpperCase();return J=="UL"||J=="OL";});if(G.length){H(this.root,G[0]);}else{}},render:function(){var G=this.root.getHtml();this.getEl().innerHTML=G;var H=function(I){var J=B.getTarget(I);if(J.tagName.toUpperCase()!="TD"){J=D.getAncestorByTagName(J,"td");}if(F.isNull(J)){return null;}if(J.className.length===0){J=J.previousSibling;if(F.isNull(J)){return null;}}return J;};if(!this._hasEvents){B.on(this.getEl(),"click",function(M){var J=this,K=B.getTarget(M),L=this.getNodeByElement(K);if(!L){return ;}var I=function(){if(L.expanded){L.collapse();}else{L.expand();}L.focus();};if(D.hasClass(K,L.labelStyle)||D.getAncestorByClassName(K,L.labelStyle)){this.fireEvent("labelClick",L);}while(K&&!D.hasClass(K.parentNode,"ygtvrow")&&!/ygtv[tl][mp]h?h?/.test(K.className)){K=D.getAncestorByTagName(K,"td");}if(K){if(/ygtv(blank)?depthcel!
 l/.test(K.className)){return ;}if(/ygtv[tl][mp]h?h?/.test(K.cl!
 assName)
){I();}else{if(this._dblClickTimer){window.clearTimeout(this._dblClickTimer);this._dblClickTimer=null;}else{if(this._hasDblClickSubscriber){this._dblClickTimer=window.setTimeout(function(){J._dblClickTimer=null;if(J.fireEvent("clickEvent",{event:M,node:L})!==false){I();}},200);}else{if(J.fireEvent("clickEvent",{event:M,node:L})!==false){I();}}}}}},this,true);B.on(this.getEl(),"dblclick",function(J){if(!this._hasDblClickSubscriber){return ;}var I=B.getTarget(J);while(!D.hasClass(I.parentNode,"ygtvrow")){I=D.getAncestorByTagName(I,"td");}if(/ygtv(blank)?depthcell/.test(I.className)){return ;}if(!(/ygtv[tl][mp]h?h?/.test(I.className))){this.fireEvent("dblClickEvent",{event:J,node:this.getNodeByElement(I)});if(this._dblClickTimer){window.clearTimeout(this._dblClickTimer);this._dblClickTimer=null;}}},this,true);B.on(this.getEl(),"mouseover",function(I){var J=H(I);if(J){J.className=J.className.replace(/ygtv([lt])([mp])/gi,"ygtv$1$2h").replace(/h+/,"h");}});B.on(this.getEl(),"mouse!
 out",function(I){var J=H(I);if(J){J.className=J.className.replace(/ygtv([lt])([mp])h/gi,"ygtv$1$2");}});B.on(this.getEl(),"keydown",function(L){var M=B.getTarget(L),K=this.getNodeByElement(M),J=K,I=YAHOO.util.KeyListener.KEY;switch(L.keyCode){case I.UP:do{if(J.previousSibling){J=J.previousSibling;}else{J=J.parent;}}while(J&&!J.focus());if(!J){K.focus();}B.preventDefault(L);break;case I.DOWN:do{if(J.nextSibling){J=J.nextSibling;}else{J.expand();J=(J.children.length||null)&&J.children[0];}}while(J&&!J.focus());if(!J){K.focus();}B.preventDefault(L);break;case I.LEFT:do{if(J.parent){J=J.parent;}else{J=J.previousSibling;}}while(J&&!J.focus());if(!J){K.focus();}B.preventDefault(L);break;case I.RIGHT:do{J.expand();if(J.children.length){J=J.children[0];}else{J=J.nextSibling;}}while(J&&!J.focus());if(!J){K.focus();}B.preventDefault(L);break;case I.ENTER:if(K.href){if(K.target){window.open(K.href,K.target);}else{window.location(K.href);
-}}else{K.toggle();}this.fireEvent("enterKeyPressed",K);B.preventDefault(L);break;case I.HOME:J=this.getRoot();if(J.children.length){J=J.children[0];}if(!J.focus()){K.focus();}B.preventDefault(L);break;case I.END:J=J.parent.children;J=J[J.length-1];if(!J.focus()){K.focus();}B.preventDefault(L);break;case 107:if(L.shiftKey){K.parent.expandAll();}else{K.expand();}break;case 109:if(L.shiftKey){K.parent.collapseAll();}else{K.collapse();}break;default:break;}},this,true);}this._hasEvents=true;},getEl:function(){if(!this._el){this._el=D.get(this.id);}return this._el;},regNode:function(G){this._nodes[G.index]=G;},getRoot:function(){return this.root;},setDynamicLoad:function(G,H){this.root.setDynamicLoad(G,H);},expandAll:function(){if(!this.locked){this.root.expandAll();}},collapseAll:function(){if(!this.locked){this.root.collapseAll();}},getNodeByIndex:function(H){var G=this._nodes[H];return(G)?G:null;},getNodeByProperty:function(I,H){for(var G in this._nodes){if(this._nodes.hasOwn!
 Property(G)){var J=this._nodes[G];if(J.data&&H==J.data[I]){return J;}}}return null;},getNodesByProperty:function(J,I){var G=[];for(var H in this._nodes){if(this._nodes.hasOwnProperty(H)){var K=this._nodes[H];if(K.data&&I==K.data[J]){G.push(K);}}}return(G.length)?G:null;},getNodeByElement:function(I){var J=I,G,H=/ygtv([^\d]*)(.*)/;do{if(J&&J.id){G=J.id.match(H);if(G&&G[2]){return this.getNodeByIndex(G[2]);}}J=J.parentNode;if(!J||!J.tagName){break;}}while(J.id!==this.id&&J.tagName.toLowerCase()!=="body");return null;},removeNode:function(H,G){if(H.isRoot()){return false;}var I=H.parent;if(I.parent){I=I.parent;}this._deleteNode(H);if(G&&I&&I.childrenRendered){I.refresh();}return true;},_removeChildren_animComplete:function(G){this.unsubscribe(this._removeChildren_animComplete);this.removeChildren(G.node);},removeChildren:function(G){if(G.expanded){if(this._collapseAnim){this.subscribe("animComplete",this._removeChildren_animComplete,this,true);E.Node.prototype.collapse.call(G)!
 ;return ;}G.collapse();}while(G.children.length){this._deleteN!
 ode(G.ch
ildren[0]);}if(G.isRoot()){E.Node.prototype.expand.call(G);}G.childrenRendered=false;G.dynamicLoadComplete=false;G.updateIcon();},_deleteNode:function(G){this.removeChildren(G);this.popNode(G);},popNode:function(J){var K=J.parent;var H=[];for(var I=0,G=K.children.length;I<G;++I){if(K.children[I]!=J){H[H.length]=K.children[I];}}K.children=H;K.childrenRendered=false;if(J.previousSibling){J.previousSibling.nextSibling=J.nextSibling;}if(J.nextSibling){J.nextSibling.previousSibling=J.previousSibling;}J.parent=null;J.previousSibling=null;J.nextSibling=null;J.tree=null;delete this._nodes[J.index];},destroy:function(){if(this._destroyEditor){this._destroyEditor();}var H=this.getEl();B.removeListener(H,"click");B.removeListener(H,"dblclick");B.removeListener(H,"mouseover");B.removeListener(H,"mouseout");B.removeListener(H,"keydown");for(var G=0;G<this._nodes.length;G++){var I=this._nodes[G];if(I&&I.destroy){I.destroy();}}H.parentNode.removeChild(H);this._hasEvents=false;},toString:fu!
 nction(){return"TreeView "+this.id;},getNodeCount:function(){return this.getRoot().getNodeCount();},getTreeDefinition:function(){return this.getRoot().getNodeDefinition();},onExpand:function(G){},onCollapse:function(G){}};var A=C.prototype;A.draw=A.render;YAHOO.augment(C,YAHOO.util.EventProvider);C.nodeCount=0;C.trees=[];C.getTree=function(H){var G=C.trees[H];return(G)?G:null;};C.getNode=function(H,I){var G=C.getTree(H);return(G)?G.getNodeByIndex(I):null;};C.FOCUS_CLASS_NAME="ygtvfocus";C.preload=function(L,K){K=K||"ygtv";var I=["tn","tm","tmh","tp","tph","ln","lm","lmh","lp","lph","loading"];var M=[];for(var G=1;G<I.length;G=G+1){M[M.length]='<span class="'+K+I[G]+'"> </span>';}var J=document.createElement("div");var H=J.style;H.className=K+I[0];H.position="absolute";H.height="1px";H.width="1px";H.top="-1000px";H.left="-1000px";J.innerHTML=M.join("");document.body.appendChild(J);B.removeListener(window,"load",C.preload);};B.addListener(window,"load",C.preload);})();(f!
 unction(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event!
 ;YAHOO.w
idget.Node=function(F,E,D){if(F){this.init(F,E,D);}};YAHOO.widget.Node.prototype={index:0,children:null,tree:null,data:null,parent:null,depth:-1,href:null,target:"_self",expanded:false,multiExpand:true,renderHidden:false,childrenRendered:false,dynamicLoadComplete:false,previousSibling:null,nextSibling:null,_dynLoad:false,dataLoader:null,isLoading:false,hasIcon:true,iconMode:0,nowrap:false,isLeaf:false,contentStyle:"",contentElId:null,_type:"Node",init:function(G,F,D){this.data=G;this.children=[];this.index=YAHOO.widget.TreeView.nodeCount;++YAHOO.widget.TreeView.nodeCount;this.contentElId="ygtvcontentel"+this.index;if(C.isObject(G)){for(var E in G){if(E.charAt(0)!="_"&&G.hasOwnProperty(E)&&!C.isUndefined(this[E])&&!C.isFunction(this[E])){this[E]=G[E];}}}if(!C.isUndefined(D)){this.expanded=D;}this.createEvent("parentChange",this);if(F){F.appendChild(this);}},applyParent:function(E){if(!E){return false;}this.tree=E.tree;this.parent=E;this.depth=E.depth+1;this.tree.regNode(this)!
 ;E.childrenRendered=false;for(var F=0,D=this.children.length;F<D;++F){this.children[F].applyParent(this);}this.fireEvent("parentChange");return true;},appendChild:function(E){if(this.hasChildren()){var D=this.children[this.children.length-1];D.nextSibling=E;E.previousSibling=D;}this.children[this.children.length]=E;E.applyParent(this);if(this.childrenRendered&&this.expanded){this.getChildrenEl().style.display="";}return E;},appendTo:function(D){return D.appendChild(this);},insertBefore:function(D){var F=D.parent;if(F){if(this.tree){this.tree.popNode(this);}var E=D.isChildOf(F);F.children.splice(E,0,this);if(D.previousSibling){D.previousSibling.nextSibling=this;}this.previousSibling=D.previousSibling;this.nextSibling=D;D.previousSibling=this;this.applyParent(F);}return this;},insertAfter:function(D){var F=D.parent;if(F){if(this.tree){this.tree.popNode(this);}var E=D.isChildOf(F);if(!D.nextSibling){this.nextSibling=null;
-return this.appendTo(F);}F.children.splice(E+1,0,this);D.nextSibling.previousSibling=this;this.previousSibling=D;this.nextSibling=D.nextSibling;D.nextSibling=this;this.applyParent(F);}return this;},isChildOf:function(E){if(E&&E.children){for(var F=0,D=E.children.length;F<D;++F){if(E.children[F]===this){return F;}}}return -1;},getSiblings:function(){var D=this.parent.children.slice(0);for(var E=0;E<D.length&&D[E]!=this;E++){}D.splice(E,1);if(D.length){return D;}return null;},showChildren:function(){if(!this.tree.animateExpand(this.getChildrenEl(),this)){if(this.hasChildren()){this.getChildrenEl().style.display="";}}},hideChildren:function(){if(!this.tree.animateCollapse(this.getChildrenEl(),this)){this.getChildrenEl().style.display="none";}},getElId:function(){return"ygtv"+this.index;},getChildrenElId:function(){return"ygtvc"+this.index;},getToggleElId:function(){return"ygtvt"+this.index;},getEl:function(){return B.get(this.getElId());},getChildrenEl:function(){return B.get(!
 this.getChildrenElId());},getToggleEl:function(){return B.get(this.getToggleElId());},getContentEl:function(){return B.get(this.contentElId);},collapse:function(){if(!this.expanded){return ;}var D=this.tree.onCollapse(this);if(false===D){return ;}D=this.tree.fireEvent("collapse",this);if(false===D){return ;}if(!this.getEl()){this.expanded=false;}else{this.hideChildren();this.expanded=false;this.updateIcon();}D=this.tree.fireEvent("collapseComplete",this);},expand:function(F){if(this.expanded&&!F){return ;}var D=true;if(!F){D=this.tree.onExpand(this);if(false===D){return ;}D=this.tree.fireEvent("expand",this);}if(false===D){return ;}if(!this.getEl()){this.expanded=true;return ;}if(!this.childrenRendered){this.getChildrenEl().innerHTML=this.renderChildren();}else{}this.expanded=true;this.updateIcon();if(this.isLoading){this.expanded=false;return ;}if(!this.multiExpand){var G=this.getSiblings();for(var E=0;G&&E<G.length;++E){if(G[E]!=this&&G[E].expanded){G[E].collapse();}}}thi!
 s.showChildren();D=this.tree.fireEvent("expandComplete",this);!
 },update
Icon:function(){if(this.hasIcon){var D=this.getToggleEl();if(D){D.className=D.className.replace(/ygtv(([tl][pmn]h?)|(loading))/,this.getStyle());}}},getStyle:function(){if(this.isLoading){return"ygtvloading";}else{var E=(this.nextSibling)?"t":"l";var D="n";if(this.hasChildren(true)||(this.isDynamic()&&!this.getIconMode())){D=(this.expanded)?"m":"p";}return"ygtv"+E+D;}},getHoverStyle:function(){var D=this.getStyle();if(this.hasChildren(true)&&!this.isLoading){D+="h";}return D;},expandAll:function(){for(var D=0;D<this.children.length;++D){var E=this.children[D];if(E.isDynamic()){break;}else{if(!E.multiExpand){break;}else{E.expand();E.expandAll();}}}},collapseAll:function(){for(var D=0;D<this.children.length;++D){this.children[D].collapse();this.children[D].collapseAll();}},setDynamicLoad:function(D,E){if(D){this.dataLoader=D;this._dynLoad=true;}else{this.dataLoader=null;this._dynLoad=false;}if(E){this.iconMode=E;}},isRoot:function(){return(this==this.tree.root);},isDynamic:fun!
 ction(){if(this.isLeaf){return false;}else{return(!this.isRoot()&&(this._dynLoad||this.tree.root._dynLoad));}},getIconMode:function(){return(this.iconMode||this.tree.root.iconMode);},hasChildren:function(D){if(this.isLeaf){return false;}else{return(this.children.length>0||(D&&this.isDynamic()&&!this.dynamicLoadComplete));}},toggle:function(){if(!this.tree.locked&&(this.hasChildren(true)||this.isDynamic())){if(this.expanded){this.collapse();}else{this.expand();}}},getHtml:function(){this.childrenRendered=false;var D=[];D[D.length]='<div class="ygtvitem" id="'+this.getElId()+'">';D[D.length]=this.getNodeHtml();D[D.length]=this.getChildrenHtml();D[D.length]="</div>";return D.join("");},getChildrenHtml:function(){var D=[];D[D.length]='<div class="ygtvchildren"';D[D.length]=' id="'+this.getChildrenElId()+'"';if(!this.expanded||!this.hasChildren()){D[D.length]=' style="display:none;"';}D[D.length]=">";if((this.hasChildren(true)&&this.expanded)||(this.renderHidden&&!this.isDynamic!
 ())){D[D.length]=this.renderChildren();}D[D.length]="</div>";r!
 eturn D.
join("");},renderChildren:function(){var D=this;if(this.isDynamic()&&!this.dynamicLoadComplete){this.isLoading=true;this.tree.locked=true;if(this.dataLoader){setTimeout(function(){D.dataLoader(D,function(){D.loadComplete();});},10);}else{if(this.tree.root.dataLoader){setTimeout(function(){D.tree.root.dataLoader(D,function(){D.loadComplete();});},10);}else{return"Error: data loader not found or not specified.";}}return"";}else{return this.completeRender();}},completeRender:function(){var E=[];for(var D=0;D<this.children.length;++D){E[E.length]=this.children[D].getHtml();}this.childrenRendered=true;return E.join("");},loadComplete:function(){this.getChildrenEl().innerHTML=this.completeRender();this.dynamicLoadComplete=true;this.isLoading=false;this.expand(true);this.tree.locked=false;},getAncestor:function(E){if(E>=this.depth||E<0){return null;}var D=this.parent;while(D.depth>E){D=D.parent;}return D;},getDepthStyle:function(D){return(this.getAncestor(D).nextSibling)?"ygtvdepth!
 cell":"ygtvblankdepthcell";},getNodeHtml:function(){var E=[];E[E.length]='<table border="0" cellpadding="0" cellspacing="0" class="ygtvdepth'+this.depth+'">';E[E.length]='<tr class="ygtvrow">';for(var D=0;D<this.depth;++D){E[E.length]='<td class="'+this.getDepthStyle(D)+'"><div class="ygtvspacer"></div></td>';}if(this.hasIcon){E[E.length]="<td";E[E.length]=' id="'+this.getToggleElId()+'"';E[E.length]=' class="'+this.getStyle()+'"';E[E.length]='><a href="#" class="ygtvspacer"> </a></td>';}E[E.length]="<td";E[E.length]=' id="'+this.contentElId+'"';E[E.length]=' class="'+this.contentStyle+' ygtvcontent" ';E[E.length]=(this.nowrap)?' nowrap="nowrap" ':"";E[E.length]=" >";E[E.length]=this.getContentHtml();E[E.length]="</td>";E[E.length]="</tr>";E[E.length]="</table>";return E.join("");},getContentHtml:function(){return"";},refresh:function(){this.getChildrenEl().innerHTML=this.completeRender();if(this.hasIcon){var D=this.getToggleEl();
-if(D){D.className=this.getStyle();}}},toString:function(){return this._type+" ("+this.index+")";},_focusHighlightedItems:[],_focusedItem:null,focus:function(){var F=false,D=this;var E=function(){var G;if(D._focusedItem){A.removeListener(D._focusedItem,"blur");D._focusedItem=null;}while((G=D._focusHighlightedItems.shift())){B.removeClass(G,YAHOO.widget.TreeView.FOCUS_CLASS_NAME);}};E();B.getElementsBy(function(G){return/ygtv(([tl][pmn]h?)|(content))/.test(G.className);},"td",this.getEl().firstChild,function(H){B.addClass(H,YAHOO.widget.TreeView.FOCUS_CLASS_NAME);if(!F){var G=H.getElementsByTagName("a");if(G.length){G=G[0];G.focus();D._focusedItem=G;A.on(G,"blur",E);F=true;}}D._focusHighlightedItems.push(H);});if(!F){E();}return F;},getNodeCount:function(){for(var D=0,E=0;D<this.children.length;D++){E+=this.children[D].getNodeCount();}return E+1;},getNodeDefinition:function(){if(this.isDynamic()){return false;}var G,D=this.data,F=[];if(this.href){D.href=this.href;}if(this.tar!
 get!="_self"){D.target=this.target;}if(this.expanded){D.expanded=this.expanded;}if(!this.multiExpand){D.multiExpand=this.multiExpand;}if(!this.hasIcon){D.hasIcon=this.hasIcon;}if(this.nowrap){D.nowrap=this.nowrap;}D.type=this._type;for(var E=0;E<this.children.length;E++){G=this.children[E].getNodeDefinition();if(G===false){return false;}F.push(G);}if(F.length){D.children=F;}return D;},getToggleLink:function(){return"return false;";}};YAHOO.augment(YAHOO.widget.Node,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event;YAHOO.widget.TextNode=function(F,E,D){if(F){if(C.isString(F)){F={label:F};}this.init(F,E,D);this.setUpLabel(F);}};YAHOO.extend(YAHOO.widget.TextNode,YAHOO.widget.Node,{labelStyle:"ygtvlabel",labelElId:null,label:null,title:null,_type:"TextNode",setUpLabel:function(D){if(C.isString(D)){D={label:D};}else{if(D.style){this.labelStyle=D.style;}}this.label=D.label;this.labelElId="ygtvlabelel"+this.index;},getLabelEl:function!
 (){return B.get(this.labelElId);},getContentHtml:function(){va!
 r D=[];D
[D.length]=this.href?"<a":"<span";D[D.length]=' id="'+this.labelElId+'"';if(this.title){D[D.length]=' title="'+this.title+'"';}D[D.length]=' class="'+this.labelStyle+'"';if(this.href){D[D.length]=' href="'+this.href+'"';D[D.length]=' target="'+this.target+'"';}D[D.length]=" >";D[D.length]=this.label;D[D.length]=this.href?"</a>":"</span>";return D.join("");},getNodeDefinition:function(){var D=YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);if(D===false){return false;}D.label=this.label;if(this.labelStyle!="ygtvlabel"){D.style=this.labelStyle;}if(this.title){D.title=this.title;}return D;},toString:function(){return YAHOO.widget.TextNode.superclass.toString.call(this)+": "+this.label;},onLabelClick:function(){return false;}});})();YAHOO.widget.RootNode=function(A){this.init(null,null,true);this.tree=A;};YAHOO.extend(YAHOO.widget.RootNode,YAHOO.widget.Node,{_type:"RootNode",getNodeHtml:function(){return"";},toString:function(){return this._type;},loadComplete:funct!
 ion(){this.tree.draw();},getNodeCount:function(){for(var A=0,B=0;A<this.children.length;A++){B+=this.children[A].getNodeCount();}return B;},getNodeDefinition:function(){for(var C,A=[],B=0;B<this.children.length;B++){C=this.children[B].getNodeDefinition();if(C===false){return false;}A.push(C);}return A;},collapse:function(){},expand:function(){},getSiblings:function(){return null;},focus:function(){}});(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event;YAHOO.widget.HTMLNode=function(G,F,E,D){if(G){this.init(G,F,E);this.initContent(G,D);}};YAHOO.extend(YAHOO.widget.HTMLNode,YAHOO.widget.Node,{contentStyle:"ygtvhtml",html:null,_type:"HTMLNode",initContent:function(E,D){this.setHtml(E);this.contentElId="ygtvcontentel"+this.index;if(!C.isUndefined(D)){this.hasIcon=D;}},setHtml:function(E){this.data=E;this.html=(typeof E==="string")?E:E.html;var D=this.getContentEl();if(D){D.innerHTML=this.html;}},getContentHtml:function(){return this.html;},getNodeDefinition:functi!
 on(){var D=YAHOO.widget.HTMLNode.superclass.getNodeDefinition.!
 call(thi
s);if(D===false){return false;}D.html=this.html;return D;}});})();YAHOO.widget.MenuNode=function(C,B,A){YAHOO.widget.MenuNode.superclass.constructor.call(this,C,B,A);this.multiExpand=false;};YAHOO.extend(YAHOO.widget.MenuNode,YAHOO.widget.TextNode,{_type:"MenuNode"});(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event,D=YAHOO.widget.Calendar;YAHOO.widget.DateNode=function(G,F,E){YAHOO.widget.DateNode.superclass.constructor.call(this,G,F,E);};YAHOO.extend(YAHOO.widget.DateNode,YAHOO.widget.TextNode,{_type:"DateNode",calendarConfig:null,fillEditorContainer:function(G){var H,F=G.inputContainer;if(C.isUndefined(D)){B.replaceClass(G.editorPanel,"ygtv-edit-DateNode","ygtv-edit-TextNode");YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this,G);return ;}if(G.nodeType!=this._type){G.nodeType=this._type;G.saveOnEnter=false;G.node.destroyEditorContents(G);G.inputObject=H=new D(F.appendChild(document.createElement("div")));if(this.calendarConfig){H.cfg.applyConfig!
 (this.calendarConfig,true);H.cfg.fireQueue();}H.selectEvent.subscribe(function(){this.tree._closeEditor(true);},this,true);}else{H=G.inputObject;}H.cfg.setProperty("selected",this.label,false);var I=H.cfg.getProperty("DATE_FIELD_DELIMITER");var E=this.label.split(I);H.cfg.setProperty("pagedate",E[H.cfg.getProperty("MDY_MONTH_POSITION")-1]+I+E[H.cfg.getProperty("MDY_YEAR_POSITION")-1]);H.cfg.fireQueue();H.render();H.oDomContainer.focus();},saveEditorValue:function(F){var H=F.node,I;if(C.isUndefined(D)){I=F.inputElement.value;}else{var J=F.inputObject,G=J.getSelectedDates()[0],E=[];E[J.cfg.getProperty("MDY_DAY_POSITION")-1]=G.getDate();E[J.cfg.getProperty("MDY_MONTH_POSITION")-1]=G.getMonth()+1;E[J.cfg.getProperty("MDY_YEAR_POSITION")-1]=G.getFullYear();I=E.join(J.cfg.getProperty("DATE_FIELD_DELIMITER"));}H.label=I;H.data.label=I;H.getLabelEl().innerHTML=I;}});})();(function(){var E=YAHOO.util.Dom,F=YAHOO.lang,B=YAHOO.util.Event,D=YAHOO.widget.TreeView,C=D.prototype;
-D.editorData={active:false,whoHasIt:null,nodeType:null,editorPanel:null,inputContainer:null,buttonsContainer:null,node:null,saveOnEnter:true};C._nodeEditing=function(M){if(M.fillEditorContainer&&M.editable){var I,K,L,J,H=D.editorData;H.active=true;H.whoHasIt=this;if(!H.nodeType){H.editorPanel=I=document.body.appendChild(document.createElement("div"));E.addClass(I,"ygtv-label-editor");L=H.buttonsContainer=I.appendChild(document.createElement("div"));E.addClass(L,"ygtv-button-container");J=L.appendChild(document.createElement("button"));E.addClass(J,"ygtvok");J.innerHTML=" ";J=L.appendChild(document.createElement("button"));E.addClass(J,"ygtvcancel");J.innerHTML=" ";B.on(L,"click",function(O){var P=B.getTarget(O);var N=D.editorData.node;if(E.hasClass(P,"ygtvok")){B.stopEvent(O);this._closeEditor(true);}if(E.hasClass(P,"ygtvcancel")){B.stopEvent(O);this._closeEditor(false);}},this,true);H.inputContainer=I.appendChild(document.createElement("div"));E.addClass(H.inputContainer,"!
 ygtv-input");B.on(I,"keydown",function(P){var O=D.editorData,N=YAHOO.util.KeyListener.KEY;switch(P.keyCode){case N.ENTER:B.stopEvent(P);if(O.saveOnEnter){this._closeEditor(true);}break;case N.ESCAPE:B.stopEvent(P);this._closeEditor(false);break;}},this,true);}else{I=H.editorPanel;}H.node=M;if(H.nodeType){E.removeClass(I,"ygtv-edit-"+H.nodeType);}E.addClass(I," ygtv-edit-"+M._type);K=E.getXY(M.getContentEl());E.setStyle(I,"left",K[0]+"px");E.setStyle(I,"top",K[1]+"px");E.setStyle(I,"display","block");I.focus();M.fillEditorContainer(H);return true;}};C.onEventEditNode=function(H){if(H instanceof YAHOO.widget.Node){H.editNode();}else{if(H.node instanceof YAHOO.widget.Node){H.node.editNode();}}};C._closeEditor=function(J){var H=D.editorData,I=H.node;if(J){H.node.saveEditorValue(H);}E.setStyle(H.editorPanel,"display","none");H.active=false;I.focus();};C._destroyEditor=function(){var H=D.editorData;if(H&&H.nodeType&&(!H.active||H.whoHasIt===this)){B.removeListener(H.editorPanel,"!
 keydown");B.removeListener(H.buttonContainer,"click");H.node.d!
 estroyEd
itorContents(H);document.body.removeChild(H.editorPanel);H.nodeType=H.editorPanel=H.inputContainer=H.buttonsContainer=H.whoHasIt=H.node=null;H.active=false;}};var G=YAHOO.widget.Node.prototype;G.editable=false;G.editNode=function(){this.tree._nodeEditing(this);};G.fillEditorContainer=null;G.destroyEditorContents=function(H){B.purgeElement(H.inputContainer,true);H.inputContainer.innerHTML="";};G.saveEditorValue=function(H){};var A=YAHOO.widget.TextNode.prototype;A.fillEditorContainer=function(I){var H;if(I.nodeType!=this._type){I.nodeType=this._type;I.saveOnEnter=true;I.node.destroyEditorContents(I);I.inputElement=H=I.inputContainer.appendChild(document.createElement("input"));}else{H=I.inputElement;}H.value=this.label;H.focus();H.select();};A.saveEditorValue=function(H){var I=H.node,J=H.inputElement.value;I.label=J;I.data.label=J;I.getLabelEl().innerHTML=J;};A.destroyEditorContents=function(H){H.inputContainer.innerHTML="";};})();YAHOO.widget.TVAnim=function(){return{FADE_IN!
 :"TVFadeIn",FADE_OUT:"TVFadeOut",getAnim:function(B,A,C){if(YAHOO.widget[B]){return new YAHOO.widget[B](A,C);}else{return null;}},isValid:function(A){return(YAHOO.widget[A]);}};}();YAHOO.widget.TVFadeIn=function(A,B){this.el=A;this.callback=B;};YAHOO.widget.TVFadeIn.prototype={animate:function(){var D=this;var C=this.el.style;C.opacity=0.1;C.filter="alpha(opacity=10)";C.display="";var B=0.4;var A=new YAHOO.util.Anim(this.el,{opacity:{from:0.1,to:1,unit:""}},B);A.onComplete.subscribe(function(){D.onComplete();});A.animate();},onComplete:function(){this.callback();},toString:function(){return"TVFadeIn";}};YAHOO.widget.TVFadeOut=function(A,B){this.el=A;this.callback=B;};YAHOO.widget.TVFadeOut.prototype={animate:function(){var C=this;var B=0.4;var A=new YAHOO.util.Anim(this.el,{opacity:{from:1,to:0.1,unit:""}},B);A.onComplete.subscribe(function(){C.onComplete();});A.animate();},onComplete:function(){var A=this.el.style;A.display="none";A.filter="alpha(opacity=100)";this.callbac!
 k();},toString:function(){return"TVFadeOut";}};YAHOO.register(!
 "treevie
w",YAHOO.widget.TreeView,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+(function(){var D=YAHOO.util.Dom,B=YAHOO.util.Event,F=YAHOO.lang,E=YAHOO.widget;YAHOO.widget.TreeView=function(H,G){if(H){this.init(H);}if(G){if(!F.isArray(G)){G=[G];}this.buildTreeFromObject(G);}else{if(F.trim(this._el.innerHTML)){this.buildTreeFromMarkup(H);}}};var C=E.TreeView;C.prototype={id:null,_el:null,_nodes:null,locked:false,_expandAnim:null,_collapseAnim:null,_animCount:0,maxAnim:2,_hasDblClickSubscriber:false,_dblClickTimer:null,currentFocus:null,singleNodeHighlight:false,_currentlyHighlighted:null,setExpandAnim:function(G){this._expandAnim=(E.TVAnim.isValid(G))?G:null;},setCollapseAnim:function(G){this._collapseAnim=(E.TVAnim.isValid(G))?G:null;},animateExpand:function(I,J){if(this._expandAnim&&this._animCount<this.maxAnim){var G=this;var H=E.TVAnim.getAnim(this._expandAnim,I,function(){G.expandComplete(J);});if(H){++this._animCount;this.fireEvent("animStart",{"node":J,"type":"expand"});H.animate();}return true;}return false;},animateCollapse:function(I,J){if(th!
 is._collapseAnim&&this._animCount<this.maxAnim){var G=this;var H=E.TVAnim.getAnim(this._collapseAnim,I,function(){G.collapseComplete(J);});if(H){++this._animCount;this.fireEvent("animStart",{"node":J,"type":"collapse"});H.animate();}return true;}return false;},expandComplete:function(G){--this._animCount;this.fireEvent("animComplete",{"node":G,"type":"expand"});},collapseComplete:function(G){--this._animCount;this.fireEvent("animComplete",{"node":G,"type":"collapse"});},init:function(I){this._el=D.get(I);this.id=D.generateId(this._el,"yui-tv-auto-id-");this.createEvent("animStart",this);this.createEvent("animComplete",this);this.createEvent("collapse",this);this.createEvent("collapseComplete",this);this.createEvent("expand",this);this.createEvent("expandComplete",this);this.createEvent("enterKeyPressed",this);this.createEvent("clickEvent",this);this.createEvent("focusChanged",this);var G=this;this.createEvent("dblClickEvent",{scope:this,onSubscribeCallback:function(){G._has!
 DblClickSubscriber=true;}});this.createEvent("labelClick",this!
 );this.c
reateEvent("highlightEvent",this);this._nodes=[];C.trees[this.id]=this;this.root=new E.RootNode(this);var H=E.LogWriter;},buildTreeFromObject:function(G){var H=function(P,M){var L,Q,K,J,O,I,N;for(L=0;L<M.length;L++){Q=M[L];if(F.isString(Q)){K=new E.TextNode(Q,P);}else{if(F.isObject(Q)){J=Q.children;delete Q.children;O=Q.type||"text";delete Q.type;switch(F.isString(O)&&O.toLowerCase()){case"text":K=new E.TextNode(Q,P);break;case"menu":K=new E.MenuNode(Q,P);break;case"html":K=new E.HTMLNode(Q,P);break;default:if(F.isString(O)){I=E[O];}else{I=O;}if(F.isObject(I)){for(N=I;N&&N!==E.Node;N=N.superclass.constructor){}if(N){K=new I(Q,P);}else{}}else{}}if(J){H(K,J);}}else{}}}};H(this.root,G);},buildTreeFromMarkup:function(I){var H=function(J){var N,Q,M=[],L={},K,O;for(N=D.getFirstChild(J);N;N=D.getNextSibling(N)){switch(N.tagName.toUpperCase()){case"LI":K="";L={expanded:D.hasClass(N,"expanded"),title:N.title||N.alt||null,className:F.trim(N.className.replace(/\bexpanded\b/,""))||null}!
 ;Q=N.firstChild;if(Q.nodeType==3){K=F.trim(Q.nodeValue.replace(/[\n\t\r]*/g,""));if(K){L.type="text";L.label=K;}else{Q=D.getNextSibling(Q);}}if(!K){if(Q.tagName.toUpperCase()=="A"){L.type="text";L.label=Q.innerHTML;L.href=Q.href;L.target=Q.target;L.title=Q.title||Q.alt||L.title;}else{L.type="html";var P=document.createElement("div");P.appendChild(Q.cloneNode(true));L.html=P.innerHTML;L.hasIcon=true;}}Q=D.getNextSibling(Q);switch(Q&&Q.tagName.toUpperCase()){case"UL":case"OL":L.children=H(Q);break;}if(YAHOO.lang.JSON){O=N.getAttribute("yuiConfig");if(O){O=YAHOO.lang.JSON.parse(O);L=YAHOO.lang.merge(L,O);}}M.push(L);break;case"UL":case"OL":L={type:"text",label:"",children:H(Q)};M.push(L);break;}}return M;};var G=D.getChildrenBy(D.get(I),function(K){var J=K.tagName.toUpperCase();return J=="UL"||J=="OL";});if(G.length){this.buildTreeFromObject(H(G[0]));}else{}},_getEventTargetTdEl:function(H){var I=B.getTarget(H);while(I&&!(I.tagName.toUpperCase()=="TD"&&D.hasClass(I.parentNode,!
 "ygtvrow"))){I=D.getAncestorByTagName(I,"td");}if(F.isNull(I))!
 {return 
null;}if(/\bygtv(blank)?depthcell/.test(I.className)){return null;}if(I.id){var G=I.id.match(/\bygtv([^\d]*)(.*)/);if(G&&G[2]&&this._nodes[G[2]]){return I;}}return null;},_onClickEvent:function(J){var H=this,L=this._getEventTargetTdEl(J),I,K,G=function(){I.toggle();I.focus();try{B.preventDefault(J);}catch(M){}};if(!L){return;}I=this.getNodeByElement(L);if(!I){return;}K=B.getTarget(J);if(D.hasClass(K,I.labelStyle)||D.getAncestorByClassName(K,I.labelStyle)){this.fireEvent("labelClick",I);}if(/\bygtv[tl][mp]h?h?/.test(L.className)){G();}else{if(this._dblClickTimer){window.clearTimeout(this._dblClickTimer);this._dblClickTimer=null;}else{if(this._hasDblClickSubscriber){this._dblClickTimer=window.setTimeout(function(){H._dblClickTimer=null;if(H.fireEvent("clickEvent",{event:J,node:I})!==false){G();}},200);}else{if(H.fireEvent("clickEvent",{event:J,node:I})!==false){G();}}}}},_onDblClickEvent:function(G){if(!this._hasDblClickSubscriber){return;}var H=this._getEventTargetTdEl(G);if(!
 !H){return;}if(!(/\bygtv[tl][mp]h?h?/.test(H.className))){this.fireEvent("dblClickEvent",{event:G,node:this.getNodeByElement(H)});if(this._dblClickTimer){window.clearTimeout(this._dblClickTimer);this._dblClickTimer=null;}}},_onMouseOverEvent:function(G){var H;if((H=this._getEventTargetTdEl(G))&&(H=this.getNodeByElement(H))&&(H=H.getToggleEl())){H.className=H.className.replace(/\bygtv([lt])([mp])\b/gi,"ygtv$1$2h");}},_onMouseOutEvent:function(G){var H;if((H=this._getEventTargetTdEl(G))&&(H=this.getNodeByElement(H))&&(H=H.getToggleEl())){H.className=H.className.replace(/\bygtv([lt])([mp])h\b/gi,"ygtv$1$2");}},_onKeyDownEvent:function(J){var K=B.getTarget(J),I=this.getNodeByElement(K),H=I,G=YAHOO.util.KeyListener.KEY;switch(J.keyCode){case G.UP:do{if(H.previousSibling){H=H.previousSibling;}else{H=H.parent;}}while(H&&!H._canHaveFocus());if(H){H.focus();}B.preventDefault(J);break;case G.DOWN:do{if(H.nextSibling){H=H.nextSibling;
+}else{H.expand();H=(H.children.length||null)&&H.children[0];}}while(H&&!H._canHaveFocus);if(H){H.focus();}B.preventDefault(J);break;case G.LEFT:do{if(H.parent){H=H.parent;}else{H=H.previousSibling;}}while(H&&!H._canHaveFocus());if(H){H.focus();}B.preventDefault(J);break;case G.RIGHT:do{H.expand();if(H.children.length){H=H.children[0];}else{H=H.nextSibling;}}while(H&&!H._canHaveFocus());if(H){H.focus();}B.preventDefault(J);break;case G.ENTER:if(I.href){if(I.target){window.open(I.href,I.target);}else{window.location(I.href);}}else{I.toggle();}this.fireEvent("enterKeyPressed",I);B.preventDefault(J);break;case G.HOME:H=this.getRoot();if(H.children.length){H=H.children[0];}if(H._canHaveFocus()){H.focus();}B.preventDefault(J);break;case G.END:H=H.parent.children;H=H[H.length-1];if(H._canHaveFocus()){H.focus();}B.preventDefault(J);break;case 107:if(J.shiftKey){I.parent.expandAll();}else{I.expand();}break;case 109:if(J.shiftKey){I.parent.collapseAll();}else{I.collapse();}break;defa!
 ult:break;}},render:function(){var G=this.root.getHtml(),H=this.getEl();H.innerHTML=G;if(!this._hasEvents){B.on(H,"click",this._onClickEvent,this,true);B.on(H,"dblclick",this._onDblClickEvent,this,true);B.on(H,"mouseover",this._onMouseOverEvent,this,true);B.on(H,"mouseout",this._onMouseOutEvent,this,true);B.on(H,"keydown",this._onKeyDownEvent,this,true);}this._hasEvents=true;},getEl:function(){if(!this._el){this._el=D.get(this.id);}return this._el;},regNode:function(G){this._nodes[G.index]=G;},getRoot:function(){return this.root;},setDynamicLoad:function(G,H){this.root.setDynamicLoad(G,H);},expandAll:function(){if(!this.locked){this.root.expandAll();}},collapseAll:function(){if(!this.locked){this.root.collapseAll();}},getNodeByIndex:function(H){var G=this._nodes[H];return(G)?G:null;},getNodeByProperty:function(I,H){for(var G in this._nodes){if(this._nodes.hasOwnProperty(G)){var J=this._nodes[G];if((I in J&&J[I]==H)||(J.data&&H==J.data[I])){return J;}}}return null;},getNodes!
 ByProperty:function(J,I){var G=[];for(var H in this._nodes){if!
 (this._n
odes.hasOwnProperty(H)){var K=this._nodes[H];if((J in K&&K[J]==I)||(K.data&&I==K.data[J])){G.push(K);}}}return(G.length)?G:null;},getNodeByElement:function(I){var J=I,G,H=/ygtv([^\d]*)(.*)/;do{if(J&&J.id){G=J.id.match(H);if(G&&G[2]){return this.getNodeByIndex(G[2]);}}J=J.parentNode;if(!J||!J.tagName){break;}}while(J.id!==this.id&&J.tagName.toLowerCase()!=="body");return null;},removeNode:function(H,G){if(H.isRoot()){return false;}var I=H.parent;if(I.parent){I=I.parent;}this._deleteNode(H);if(G&&I&&I.childrenRendered){I.refresh();}return true;},_removeChildren_animComplete:function(G){this.unsubscribe(this._removeChildren_animComplete);this.removeChildren(G.node);},removeChildren:function(G){if(G.expanded){if(this._collapseAnim){this.subscribe("animComplete",this._removeChildren_animComplete,this,true);E.Node.prototype.collapse.call(G);return;}G.collapse();}while(G.children.length){this._deleteNode(G.children[0]);}if(G.isRoot()){E.Node.prototype.expand.call(G);}G.childrenRend!
 ered=false;G.dynamicLoadComplete=false;G.updateIcon();},_deleteNode:function(G){this.removeChildren(G);this.popNode(G);},popNode:function(J){var K=J.parent;var H=[];for(var I=0,G=K.children.length;I<G;++I){if(K.children[I]!=J){H[H.length]=K.children[I];}}K.children=H;K.childrenRendered=false;if(J.previousSibling){J.previousSibling.nextSibling=J.nextSibling;}if(J.nextSibling){J.nextSibling.previousSibling=J.previousSibling;}J.parent=null;J.previousSibling=null;J.nextSibling=null;J.tree=null;delete this._nodes[J.index];},destroy:function(){if(this._destroyEditor){this._destroyEditor();}var H=this.getEl();B.removeListener(H,"click");B.removeListener(H,"dblclick");B.removeListener(H,"mouseover");B.removeListener(H,"mouseout");B.removeListener(H,"keydown");for(var G=0;G<this._nodes.length;G++){var I=this._nodes[G];if(I&&I.destroy){I.destroy();}}H.innerHTML="";this._hasEvents=false;},toString:function(){return"TreeView "+this.id;},getNodeCount:function(){return this.getRoot().get!
 NodeCount();},getTreeDefinition:function(){return this.getRoot!
 ().getNo
deDefinition();},onExpand:function(G){},onCollapse:function(G){},setNodesProperty:function(G,I,H){this.root.setNodesProperty(G,I);if(H){this.root.refresh();}},onEventToggleHighlight:function(H){var G;if("node" in H&&H.node instanceof E.Node){G=H.node;}else{if(H instanceof E.Node){G=H;}else{return false;}}G.toggleHighlight();return false;}};var A=C.prototype;A.draw=A.render;YAHOO.augment(C,YAHOO.util.EventProvider);C.nodeCount=0;C.trees=[];C.getTree=function(H){var G=C.trees[H];return(G)?G:null;};C.getNode=function(H,I){var G=C.getTree(H);return(G)?G.getNodeByIndex(I):null;};C.FOCUS_CLASS_NAME="ygtvfocus";C.preload=function(L,K){K=K||"ygtv";var I=["tn","tm","tmh","tp","tph","ln","lm","lmh","lp","lph","loading"];var M=[];for(var G=1;G<I.length;G=G+1){M[M.length]='<span class="'+K+I[G]+'"> </span>';}var J=document.createElement("div");var H=J.style;H.className=K+I[0];H.position="absolute";H.height="1px";H.width="1px";H.top="-1000px";H.left="-1000px";J.innerHTML=M.join("");!
 document.body.appendChild(J);B.removeListener(window,"load",C.preload);};B.addListener(window,"load",C.preload);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event;YAHOO.widget.Node=function(F,E,D){if(F){this.init(F,E,D);}};YAHOO.widget.Node.prototype={index:0,children:null,tree:null,data:null,parent:null,depth:-1,expanded:false,multiExpand:true,renderHidden:false,childrenRendered:false,dynamicLoadComplete:false,previousSibling:null,nextSibling:null,_dynLoad:false,dataLoader:null,isLoading:false,hasIcon:true,iconMode:0,nowrap:false,isLeaf:false,contentStyle:"",contentElId:null,enableHighlight:true,highlightState:0,propagateHighlightUp:false,propagateHighlightDown:false,className:null,_type:"Node",init:function(G,F,D){this.data={};this.children=[];this.index=YAHOO.widget.TreeView.nodeCount;++YAHOO.widget.TreeView.nodeCount;this.contentElId="ygtvcontentel"+this.index;if(C.isObject(G)){for(var E in G){if(G.hasOwnProperty(E)){if(E.charAt(0)!="_"&&!C.isUndefine!
 d(this[E])&&!C.isFunction(this[E])){this[E]=G[E];
+}else{this.data[E]=G[E];}}}}if(!C.isUndefined(D)){this.expanded=D;}this.createEvent("parentChange",this);if(F){F.appendChild(this);}},applyParent:function(E){if(!E){return false;}this.tree=E.tree;this.parent=E;this.depth=E.depth+1;this.tree.regNode(this);E.childrenRendered=false;for(var F=0,D=this.children.length;F<D;++F){this.children[F].applyParent(this);}this.fireEvent("parentChange");return true;},appendChild:function(E){if(this.hasChildren()){var D=this.children[this.children.length-1];D.nextSibling=E;E.previousSibling=D;}this.children[this.children.length]=E;E.applyParent(this);if(this.childrenRendered&&this.expanded){this.getChildrenEl().style.display="";}return E;},appendTo:function(D){return D.appendChild(this);},insertBefore:function(D){var F=D.parent;if(F){if(this.tree){this.tree.popNode(this);}var E=D.isChildOf(F);F.children.splice(E,0,this);if(D.previousSibling){D.previousSibling.nextSibling=this;}this.previousSibling=D.previousSibling;this.nextSibling=D;D.prev!
 iousSibling=this;this.applyParent(F);}return this;},insertAfter:function(D){var F=D.parent;if(F){if(this.tree){this.tree.popNode(this);}var E=D.isChildOf(F);if(!D.nextSibling){this.nextSibling=null;return this.appendTo(F);}F.children.splice(E+1,0,this);D.nextSibling.previousSibling=this;this.previousSibling=D;this.nextSibling=D.nextSibling;D.nextSibling=this;this.applyParent(F);}return this;},isChildOf:function(E){if(E&&E.children){for(var F=0,D=E.children.length;F<D;++F){if(E.children[F]===this){return F;}}}return -1;},getSiblings:function(){var D=this.parent.children.slice(0);for(var E=0;E<D.length&&D[E]!=this;E++){}D.splice(E,1);if(D.length){return D;}return null;},showChildren:function(){if(!this.tree.animateExpand(this.getChildrenEl(),this)){if(this.hasChildren()){this.getChildrenEl().style.display="";}}},hideChildren:function(){if(!this.tree.animateCollapse(this.getChildrenEl(),this)){this.getChildrenEl().style.display="none";}},getElId:function(){return"ygtv"+this.in!
 dex;},getChildrenElId:function(){return"ygtvc"+this.index;},ge!
 tToggleE
lId:function(){return"ygtvt"+this.index;},getEl:function(){return B.get(this.getElId());},getChildrenEl:function(){return B.get(this.getChildrenElId());},getToggleEl:function(){return B.get(this.getToggleElId());},getContentEl:function(){return B.get(this.contentElId);},collapse:function(){if(!this.expanded){return;}var D=this.tree.onCollapse(this);if(false===D){return;}D=this.tree.fireEvent("collapse",this);if(false===D){return;}if(!this.getEl()){this.expanded=false;}else{this.hideChildren();this.expanded=false;this.updateIcon();}D=this.tree.fireEvent("collapseComplete",this);},expand:function(F){if(this.expanded&&!F){return;}var D=true;if(!F){D=this.tree.onExpand(this);if(false===D){return;}D=this.tree.fireEvent("expand",this);}if(false===D){return;}if(!this.getEl()){this.expanded=true;return;}if(!this.childrenRendered){this.getChildrenEl().innerHTML=this.renderChildren();}else{}this.expanded=true;this.updateIcon();if(this.isLoading){this.expanded=false;return;}if(!this.mu!
 ltiExpand){var G=this.getSiblings();for(var E=0;G&&E<G.length;++E){if(G[E]!=this&&G[E].expanded){G[E].collapse();}}}this.showChildren();D=this.tree.fireEvent("expandComplete",this);},updateIcon:function(){if(this.hasIcon){var D=this.getToggleEl();if(D){D.className=D.className.replace(/\bygtv(([tl][pmn]h?)|(loading))\b/gi,this.getStyle());}}},getStyle:function(){if(this.isLoading){return"ygtvloading";}else{var E=(this.nextSibling)?"t":"l";var D="n";if(this.hasChildren(true)||(this.isDynamic()&&!this.getIconMode())){D=(this.expanded)?"m":"p";}return"ygtv"+E+D;}},getHoverStyle:function(){var D=this.getStyle();if(this.hasChildren(true)&&!this.isLoading){D+="h";}return D;},expandAll:function(){var D=this.children.length;for(var E=0;E<D;++E){var F=this.children[E];if(F.isDynamic()){break;}else{if(!F.multiExpand){break;}else{F.expand();F.expandAll();}}}},collapseAll:function(){for(var D=0;D<this.children.length;++D){this.children[D].collapse();this.children[D].collapseAll();}},set!
 DynamicLoad:function(D,E){if(D){this.dataLoader=D;this._dynLoa!
 d=true;}
else{this.dataLoader=null;this._dynLoad=false;}if(E){this.iconMode=E;}},isRoot:function(){return(this==this.tree.root);},isDynamic:function(){if(this.isLeaf){return false;}else{return(!this.isRoot()&&(this._dynLoad||this.tree.root._dynLoad));}},getIconMode:function(){return(this.iconMode||this.tree.root.iconMode);},hasChildren:function(D){if(this.isLeaf){return false;}else{return(this.children.length>0||(D&&this.isDynamic()&&!this.dynamicLoadComplete));}},toggle:function(){if(!this.tree.locked&&(this.hasChildren(true)||this.isDynamic())){if(this.expanded){this.collapse();}else{this.expand();}}},getHtml:function(){this.childrenRendered=false;return['<div class="ygtvitem" id="',this.getElId(),'">',this.getNodeHtml(),this.getChildrenHtml(),"</div>"].join("");},getChildrenHtml:function(){var D=[];D[D.length]='<div class="ygtvchildren" id="'+this.getChildrenElId()+'"';if(!this.expanded||!this.hasChildren()){D[D.length]=' style="display:none;"';}D[D.length]=">";if((this.hasChildre!
 n(true)&&this.expanded)||(this.renderHidden&&!this.isDynamic())){D[D.length]=this.renderChildren();}D[D.length]="</div>";return D.join("");},renderChildren:function(){var D=this;if(this.isDynamic()&&!this.dynamicLoadComplete){this.isLoading=true;this.tree.locked=true;if(this.dataLoader){setTimeout(function(){D.dataLoader(D,function(){D.loadComplete();});},10);}else{if(this.tree.root.dataLoader){setTimeout(function(){D.tree.root.dataLoader(D,function(){D.loadComplete();});},10);}else{return"Error: data loader not found or not specified.";}}return"";}else{return this.completeRender();}},completeRender:function(){var E=[];for(var D=0;D<this.children.length;++D){E[E.length]=this.children[D].getHtml();}this.childrenRendered=true;return E.join("");},loadComplete:function(){this.getChildrenEl().innerHTML=this.completeRender();this.dynamicLoadComplete=true;this.isLoading=false;this.expand(true);this.tree.locked=false;
+},getAncestor:function(E){if(E>=this.depth||E<0){return null;}var D=this.parent;while(D.depth>E){D=D.parent;}return D;},getDepthStyle:function(D){return(this.getAncestor(D).nextSibling)?"ygtvdepthcell":"ygtvblankdepthcell";},getNodeHtml:function(){var E=[];E[E.length]='<table id="ygtvtableel'+this.index+'"border="0" cellpadding="0" cellspacing="0" class="ygtvtable ygtvdepth'+this.depth;if(this.enableHighlight){E[E.length]=" ygtv-highlight"+this.highlightState;}if(this.className){E[E.length]=" "+this.className;}E[E.length]='"><tr class="ygtvrow">';for(var D=0;D<this.depth;++D){E[E.length]='<td class="ygtvcell '+this.getDepthStyle(D)+'"><div class="ygtvspacer"></div></td>';}if(this.hasIcon){E[E.length]='<td id="'+this.getToggleElId();E[E.length]='" class="ygtvcell ';E[E.length]=this.getStyle();E[E.length]='"><a href="#" class="ygtvspacer"> </a></td>';}E[E.length]='<td id="'+this.contentElId;E[E.length]='" class="ygtvcell ';E[E.length]=this.contentStyle+' ygtvcontent" ';E!
 [E.length]=(this.nowrap)?' nowrap="nowrap" ':"";E[E.length]=" >";E[E.length]=this.getContentHtml();E[E.length]="</td></tr></table>";return E.join("");},getContentHtml:function(){return"";},refresh:function(){this.getChildrenEl().innerHTML=this.completeRender();if(this.hasIcon){var D=this.getToggleEl();if(D){D.className=D.className.replace(/\bygtv[lt][nmp]h*\b/gi,this.getStyle());}}},toString:function(){return this._type+" ("+this.index+")";},_focusHighlightedItems:[],_focusedItem:null,_canHaveFocus:function(){return this.getEl().getElementsByTagName("a").length>0;},_removeFocus:function(){if(this._focusedItem){A.removeListener(this._focusedItem,"blur");this._focusedItem=null;}var D;while((D=this._focusHighlightedItems.shift())){B.removeClass(D,YAHOO.widget.TreeView.FOCUS_CLASS_NAME);}},focus:function(){var F=false,D=this;if(this.tree.currentFocus){this.tree.currentFocus._removeFocus();}var E=function(G){if(G.parent){E(G.parent);G.parent.expand();}};E(this);B.getElementsBy(f!
 unction(G){return/ygtv(([tl][pmn]h?)|(content))/.test(G.classN!
 ame);},"
td",D.getEl().firstChild,function(H){B.addClass(H,YAHOO.widget.TreeView.FOCUS_CLASS_NAME);if(!F){var G=H.getElementsByTagName("a");if(G.length){G=G[0];G.focus();D._focusedItem=G;A.on(G,"blur",function(){D.tree.fireEvent("focusChanged",{oldNode:D.tree.currentFocus,newNode:null});D.tree.currentFocus=null;D._removeFocus();});F=true;}}D._focusHighlightedItems.push(H);});if(F){this.tree.fireEvent("focusChanged",{oldNode:this.tree.currentFocus,newNode:this});this.tree.currentFocus=this;}else{this.tree.fireEvent("focusChanged",{oldNode:D.tree.currentFocus,newNode:null});this.tree.currentFocus=null;this._removeFocus();}return F;},getNodeCount:function(){for(var D=0,E=0;D<this.children.length;D++){E+=this.children[D].getNodeCount();}return E+1;},getNodeDefinition:function(){if(this.isDynamic()){return false;}var G,D=C.merge(this.data),F=[];if(this.expanded){D.expanded=this.expanded;}if(!this.multiExpand){D.multiExpand=this.multiExpand;}if(!this.renderHidden){D.renderHidden=this.rende!
 rHidden;}if(!this.hasIcon){D.hasIcon=this.hasIcon;}if(this.nowrap){D.nowrap=this.nowrap;}if(this.className){D.className=this.className;}if(this.editable){D.editable=this.editable;}if(this.enableHighlight){D.enableHighlight=this.enableHighlight;}if(this.highlightState){D.highlightState=this.highlightState;}if(this.propagateHighlightUp){D.propagateHighlightUp=this.propagateHighlightUp;}if(this.propagateHighlightDown){D.propagateHighlightDown=this.propagateHighlightDown;}D.type=this._type;for(var E=0;E<this.children.length;E++){G=this.children[E].getNodeDefinition();if(G===false){return false;}F.push(G);}if(F.length){D.children=F;}return D;},getToggleLink:function(){return"return false;";},setNodesProperty:function(D,G,F){if(D.charAt(0)!="_"&&!C.isUndefined(this[D])&&!C.isFunction(this[D])){this[D]=G;}else{this.data[D]=G;}for(var E=0;E<this.children.length;E++){this.children[E].setNodesProperty(D,G);}if(F){this.refresh();}},toggleHighlight:function(){if(this.enableHighlight){i!
 f(this.highlightState==1){this.unhighlight();}else{this.highli!
 ght();}}
},highlight:function(E){if(this.enableHighlight){if(this.tree.singleNodeHighlight){if(this.tree._currentlyHighlighted){this.tree._currentlyHighlighted.unhighlight();}this.tree._currentlyHighlighted=this;}this.highlightState=1;this._setHighlightClassName();if(this.propagateHighlightDown){for(var D=0;D<this.children.length;D++){this.children[D].highlight(true);}}if(this.propagateHighlightUp){if(this.parent){this.parent._childrenHighlighted();}}if(!E){this.tree.fireEvent("highlightEvent",this);}}},unhighlight:function(E){if(this.enableHighlight){this.highlightState=0;this._setHighlightClassName();if(this.propagateHighlightDown){for(var D=0;D<this.children.length;D++){this.children[D].unhighlight(true);}}if(this.propagateHighlightUp){if(this.parent){this.parent._childrenHighlighted();}}if(!E){this.tree.fireEvent("highlightEvent",this);}}},_childrenHighlighted:function(){var F=false,E=false;if(this.enableHighlight){for(var D=0;D<this.children.length;D++){switch(this.children[D].h!
 ighlightState){case 0:E=true;break;case 1:F=true;break;case 2:F=E=true;break;}}if(F&&E){this.highlightState=2;}else{if(F){this.highlightState=1;}else{this.highlightState=0;}}this._setHighlightClassName();if(this.propagateHighlightUp){if(this.parent){this.parent._childrenHighlighted();}}}},_setHighlightClassName:function(){var D=B.get("ygtvtableel"+this.index);if(D){D.className=D.className.replace(/\bygtv-highlight\d\b/gi,"ygtv-highlight"+this.highlightState);}}};YAHOO.augment(YAHOO.widget.Node,YAHOO.util.EventProvider);})();YAHOO.widget.RootNode=function(A){this.init(null,null,true);this.tree=A;};YAHOO.extend(YAHOO.widget.RootNode,YAHOO.widget.Node,{_type:"RootNode",getNodeHtml:function(){return"";},toString:function(){return this._type;},loadComplete:function(){this.tree.draw();},getNodeCount:function(){for(var A=0,B=0;A<this.children.length;A++){B+=this.children[A].getNodeCount();}return B;},getNodeDefinition:function(){for(var C,A=[],B=0;
+B<this.children.length;B++){C=this.children[B].getNodeDefinition();if(C===false){return false;}A.push(C);}return A;},collapse:function(){},expand:function(){},getSiblings:function(){return null;},focus:function(){}});(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event;YAHOO.widget.TextNode=function(F,E,D){if(F){if(C.isString(F)){F={label:F};}this.init(F,E,D);this.setUpLabel(F);}};YAHOO.extend(YAHOO.widget.TextNode,YAHOO.widget.Node,{labelStyle:"ygtvlabel",labelElId:null,label:null,title:null,href:null,target:"_self",_type:"TextNode",setUpLabel:function(D){if(C.isString(D)){D={label:D};}else{if(D.style){this.labelStyle=D.style;}}this.label=D.label;this.labelElId="ygtvlabelel"+this.index;},getLabelEl:function(){return B.get(this.labelElId);},getContentHtml:function(){var D=[];D[D.length]=this.href?"<a":"<span";D[D.length]=' id="'+this.labelElId+'"';D[D.length]=' class="'+this.labelStyle+'"';if(this.href){D[D.length]=' href="'+this.href+'"';D[D.length]=' target="'!
 +this.target+'"';}if(this.title){D[D.length]=' title="'+this.title+'"';}D[D.length]=" >";D[D.length]=this.label;D[D.length]=this.href?"</a>":"</span>";return D.join("");},getNodeDefinition:function(){var D=YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);if(D===false){return false;}D.label=this.label;if(this.labelStyle!="ygtvlabel"){D.style=this.labelStyle;}if(this.title){D.title=this.title;}if(this.href){D.href=this.href;}if(this.target!="_self"){D.target=this.target;}return D;},toString:function(){return YAHOO.widget.TextNode.superclass.toString.call(this)+": "+this.label;},onLabelClick:function(){return false;},refresh:function(){YAHOO.widget.TextNode.superclass.refresh.call(this);var D=this.getLabelEl();D.innerHTML=this.label;if(D.tagName.toUpperCase()=="A"){D.href=this.href;D.target=this.target;}}});})();YAHOO.widget.MenuNode=function(C,B,A){YAHOO.widget.MenuNode.superclass.constructor.call(this,C,B,A);this.multiExpand=false;};YAHOO.extend(YAHOO.widget.Men!
 uNode,YAHOO.widget.TextNode,{_type:"MenuNode"});(function(){va!
 r B=YAHO
O.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event;YAHOO.widget.HTMLNode=function(G,F,E,D){if(G){this.init(G,F,E);this.initContent(G,D);}};YAHOO.extend(YAHOO.widget.HTMLNode,YAHOO.widget.Node,{contentStyle:"ygtvhtml",html:null,_type:"HTMLNode",initContent:function(E,D){this.setHtml(E);this.contentElId="ygtvcontentel"+this.index;if(!C.isUndefined(D)){this.hasIcon=D;}},setHtml:function(E){this.html=(typeof E==="string")?E:E.html;var D=this.getContentEl();if(D){D.innerHTML=this.html;}},getContentHtml:function(){return this.html;},getNodeDefinition:function(){var D=YAHOO.widget.HTMLNode.superclass.getNodeDefinition.call(this);if(D===false){return false;}D.html=this.html;return D;}});})();(function(){var B=YAHOO.util.Dom,C=YAHOO.lang,A=YAHOO.util.Event,D=YAHOO.widget.Calendar;YAHOO.widget.DateNode=function(G,F,E){YAHOO.widget.DateNode.superclass.constructor.call(this,G,F,E);};YAHOO.extend(YAHOO.widget.DateNode,YAHOO.widget.TextNode,{_type:"DateNode",calendarConfig:null,fillEditorContaine!
 r:function(G){var H,F=G.inputContainer;if(C.isUndefined(D)){B.replaceClass(G.editorPanel,"ygtv-edit-DateNode","ygtv-edit-TextNode");YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this,G);return;}if(G.nodeType!=this._type){G.nodeType=this._type;G.saveOnEnter=false;G.node.destroyEditorContents(G);G.inputObject=H=new D(F.appendChild(document.createElement("div")));if(this.calendarConfig){H.cfg.applyConfig(this.calendarConfig,true);H.cfg.fireQueue();}H.selectEvent.subscribe(function(){this.tree._closeEditor(true);},this,true);}else{H=G.inputObject;}H.cfg.setProperty("selected",this.label,false);var I=H.cfg.getProperty("DATE_FIELD_DELIMITER");var E=this.label.split(I);H.cfg.setProperty("pagedate",E[H.cfg.getProperty("MDY_MONTH_POSITION")-1]+I+E[H.cfg.getProperty("MDY_YEAR_POSITION")-1]);H.cfg.fireQueue();H.render();H.oDomContainer.focus();},saveEditorValue:function(F){var I=F.node,H=I.tree.validator,J;if(C.isUndefined(D)){J=F.inputElement.value;}else{var K=F.inputObje!
 ct,G=K.getSelectedDates()[0],E=[];E[K.cfg.getProperty("MDY_DAY!
 _POSITIO
N")-1]=G.getDate();E[K.cfg.getProperty("MDY_MONTH_POSITION")-1]=G.getMonth()+1;E[K.cfg.getProperty("MDY_YEAR_POSITION")-1]=G.getFullYear();J=E.join(K.cfg.getProperty("DATE_FIELD_DELIMITER"));}if(C.isFunction(H)){J=H(J,I.label,I);if(C.isUndefined(J)){return false;}}I.label=J;I.getLabelEl().innerHTML=J;},getNodeDefinition:function(){var E=YAHOO.widget.DateNode.superclass.getNodeDefinition.call(this);if(E===false){return false;}if(this.calendarConfig){E.calendarConfig=this.calendarConfig;}return E;}});})();(function(){var E=YAHOO.util.Dom,F=YAHOO.lang,B=YAHOO.util.Event,D=YAHOO.widget.TreeView,C=D.prototype;D.editorData={active:false,whoHasIt:null,nodeType:null,editorPanel:null,inputContainer:null,buttonsContainer:null,node:null,saveOnEnter:true};C.validator=null;C._nodeEditing=function(M){if(M.fillEditorContainer&&M.editable){var I,K,L,J,H=D.editorData;H.active=true;H.whoHasIt=this;if(!H.nodeType){H.editorPanel=I=document.body.appendChild(document.createElement("div"));E.addCl!
 ass(I,"ygtv-label-editor");L=H.buttonsContainer=I.appendChild(document.createElement("div"));E.addClass(L,"ygtv-button-container");J=L.appendChild(document.createElement("button"));E.addClass(J,"ygtvok");J.innerHTML=" ";J=L.appendChild(document.createElement("button"));E.addClass(J,"ygtvcancel");J.innerHTML=" ";B.on(L,"click",function(O){var P=B.getTarget(O);var N=D.editorData.node;if(E.hasClass(P,"ygtvok")){B.stopEvent(O);this._closeEditor(true);}if(E.hasClass(P,"ygtvcancel")){B.stopEvent(O);this._closeEditor(false);}},this,true);H.inputContainer=I.appendChild(document.createElement("div"));E.addClass(H.inputContainer,"ygtv-input");B.on(I,"keydown",function(P){var O=D.editorData,N=YAHOO.util.KeyListener.KEY;switch(P.keyCode){case N.ENTER:B.stopEvent(P);if(O.saveOnEnter){this._closeEditor(true);}break;case N.ESCAPE:B.stopEvent(P);this._closeEditor(false);break;}},this,true);}else{I=H.editorPanel;}H.node=M;
+if(H.nodeType){E.removeClass(I,"ygtv-edit-"+H.nodeType);}E.addClass(I," ygtv-edit-"+M._type);K=E.getXY(M.getContentEl());E.setStyle(I,"left",K[0]+"px");E.setStyle(I,"top",K[1]+"px");E.setStyle(I,"display","block");I.focus();M.fillEditorContainer(H);return true;}};C.onEventEditNode=function(H){if(H instanceof YAHOO.widget.Node){H.editNode();}else{if(H.node instanceof YAHOO.widget.Node){H.node.editNode();}}};C._closeEditor=function(J){var H=D.editorData,I=H.node,K=true;if(J){K=H.node.saveEditorValue(H)!==false;}if(K){E.setStyle(H.editorPanel,"display","none");H.active=false;I.focus();}};C._destroyEditor=function(){var H=D.editorData;if(H&&H.nodeType&&(!H.active||H.whoHasIt===this)){B.removeListener(H.editorPanel,"keydown");B.removeListener(H.buttonContainer,"click");H.node.destroyEditorContents(H);document.body.removeChild(H.editorPanel);H.nodeType=H.editorPanel=H.inputContainer=H.buttonsContainer=H.whoHasIt=H.node=null;H.active=false;}};var G=YAHOO.widget.Node.prototype;G.ed!
 itable=false;G.editNode=function(){this.tree._nodeEditing(this);};G.fillEditorContainer=null;G.destroyEditorContents=function(H){B.purgeElement(H.inputContainer,true);H.inputContainer.innerHTML="";};G.saveEditorValue=function(H){};var A=YAHOO.widget.TextNode.prototype;A.fillEditorContainer=function(I){var H;if(I.nodeType!=this._type){I.nodeType=this._type;I.saveOnEnter=true;I.node.destroyEditorContents(I);I.inputElement=H=I.inputContainer.appendChild(document.createElement("input"));}else{H=I.inputElement;}H.value=this.label;H.focus();H.select();};A.saveEditorValue=function(H){var J=H.node,K=H.inputElement.value,I=J.tree.validator;if(F.isFunction(I)){K=I(K,J.label,J);if(F.isUndefined(K)){return false;}}J.label=K;J.getLabelEl().innerHTML=K;};A.destroyEditorContents=function(H){H.inputContainer.innerHTML="";};})();YAHOO.register("treeview",YAHOO.widget.TreeView,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/treeview/treeview.js
===================================================================
--- trunk/root/static/yui/treeview/treeview.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/treeview/treeview.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,21 +1,23 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Event = YAHOO.util.Event,
-		Lang = YAHOO.lang,
-		Widget = YAHOO.widget;
+    var Dom = YAHOO.util.Dom,
+        Event = YAHOO.util.Event,
+        Lang = YAHOO.lang,
+        Widget = YAHOO.widget;
+        
+    
 
 /**
  * The treeview widget is a generic tree building tool.
  * @module treeview
  * @title TreeView Widget
  * @requires yahoo, event
- * @optional animation
+ * @optional animation, json
  * @namespace YAHOO.widget
  */
 
@@ -26,19 +28,19 @@
  * @uses YAHOO.util.EventProvider
  * @constructor
  * @param {string|HTMLElement} id The id of the element, or the element itself that the tree will be inserted into.  Existing markup in this element, if valid, will be used to build the tree
- * @param {Array|object|string}  oConfig (optional)  An array containing the definition of the tree.  Objects will be converted to arrays of one element.  A string will produce a single TextNode
+ * @param {Array|object|string}  oConfig (optional)  An array containing the definition of the tree.  (see buildTreeFromObject)
  * 
  */
 YAHOO.widget.TreeView = function(id, oConfig) {
     if (id) { this.init(id); }
-	if (oConfig) {
-		if (!Lang.isArray(oConfig)) {
-			oConfig = [oConfig];
-		}
-		this.buildTreeFromObject(oConfig);
-	} else if (Lang.trim(this._el.innerHTML)) {
-		this.buildTreeFromMarkup(id);
-	}
+    if (oConfig) {
+        if (!Lang.isArray(oConfig)) {
+            oConfig = [oConfig];
+        }
+        this.buildTreeFromObject(oConfig);
+    } else if (Lang.trim(this._el.innerHTML)) {
+        this.buildTreeFromMarkup(id);
+    }
 };
 
 var TV = Widget.TreeView;
@@ -115,7 +117,7 @@
      * @private
      */
     _hasDblClickSubscriber: false,
-	
+    
     /**
      * Stores the timer used to check for double clicks
      * @property _dblClickTimer
@@ -124,6 +126,32 @@
      */
     _dblClickTimer: null,
 
+  /**
+     * A reference to the Node currently having the focus or null if none.
+     * @property currentFocus
+     * @type YAHOO.widget.Node
+     */
+    currentFocus: null,
+    
+    /**
+    * If true, only one Node can be highlighted at a time
+    * @property singleNodeHighlight
+    * @type boolean
+    * @default false
+    */
+    
+    singleNodeHighlight: false,
+    
+    /**
+    * A reference to the Node that is currently highlighted.
+    * It is only meaningful if singleNodeHighlight is enabled
+    * @property _currentlyHighlighted
+    * @type YAHOO.widget.Node
+    * @default null
+    * @private
+    */
+    
+    _currentlyHighlighted: null,
 
     /**
      * Sets up the animation for expanding children
@@ -238,8 +266,8 @@
      * @private
      */
     init: function(id) {
-		this._el = Dom.get(id);
-		this.id = Dom.generateId(this._el,"yui-tv-auto-id-");
+        this._el = Dom.get(id);
+        this.id = Dom.generateId(this._el,"yui-tv-auto-id-");
 
     /**
          * When animation is enabled, this event fires when the animation
@@ -304,42 +332,66 @@
          * @param {YAHOO.widget.Node} node the node that has the focus
          */
         this.createEvent("enterKeyPressed", this);
-		
+        
     /**
          * Fires when the label in a TextNode or MenuNode or content in an HTMLNode receives a Click.
-	* The listener may return false to cancel toggling and focusing on the node.
+    * The listener may return false to cancel toggling and focusing on the node.
          * @event clickEvent
          * @type CustomEvent
          * @param oArgs.event  {HTMLEvent} The event object
          * @param oArgs.node {YAHOO.widget.Node} node the node that was clicked
          */
         this.createEvent("clickEvent", this);
+        
+    /**
+         * Fires when the focus receives the focus, when it changes from a Node 
+    * to another Node or when it is completely lost (blurred)
+         * @event focusChanged
+         * @type CustomEvent
+         * @param oArgs.oldNode  {YAHOO.widget.Node} Node that had the focus or null if none
+         * @param oArgs.newNode {YAHOO.widget.Node} Node that receives the focus or null if none
+         */
+        
+        this.createEvent('focusChanged',this);
 
-	/**
+    /**
          * Fires when the label in a TextNode or MenuNode or content in an HTMLNode receives a double Click
          * @event dblClickEvent
          * @type CustomEvent
          * @param oArgs.event  {HTMLEvent} The event object
          * @param oArgs.node {YAHOO.widget.Node} node the node that was clicked
          */
-		var self = this;
+        var self = this;
         this.createEvent("dblClickEvent", {
-			scope:this,
-			onSubscribeCallback: function() {
-				self._hasDblClickSubscriber = true;
-			}
-		});
-		
-	/**
+            scope:this,
+            onSubscribeCallback: function() {
+                self._hasDblClickSubscriber = true;
+            }
+        });
+        
+    /**
          * Custom event that is fired when the text node label is clicked. 
          *  The node clicked is  provided as an argument
          *
          * @event labelClick
          * @type CustomEvent
          * @param {YAHOO.widget.Node} node the node clicked
-	* @deprecated use clickEvent or dblClickEvent
+    * @deprecated use clickEvent or dblClickEvent
          */
-		this.createEvent("labelClick", this);
+        this.createEvent("labelClick", this);
+        
+    /**
+     * Custom event fired when the highlight of a node changes.
+     * The node that triggered the change is provided as an argument:
+     * The status of the highlight can be checked in 
+     * <a href="YAHOO.widget.Node.html#property_highlightState">nodeRef.highlightState</a>.
+     * Depending on <a href="YAHOO.widget.Node.html#property_propagateHighlight">nodeRef.propagateHighlight</a>, other nodes might have changed
+     * @event highlightEvent
+     * @type CustomEvent
+        * @param node{YAHOO.widget.Node} the node that started the change in highlighting state
+    */
+        this.createEvent("highlightEvent",this);
+     
 
 
         this._nodes = [];
@@ -353,7 +405,7 @@
         var LW = Widget.LogWriter;
 
 
-		
+        
         // YAHOO.util.Event.onContentReady(this.id, this.handleAvailable, this, true);
         // YAHOO.util.Event.on(this.id, "click", this.handleClick, this, true);
     },
@@ -363,343 +415,423 @@
         //Event.on(this.id, 
     //},
  /**
-     * Builds the TreeView from an object.  This is the method called by the constructor to build the tree when it has a second argument.
+     * Builds the TreeView from an object.  
+     * This is the method called by the constructor to build the tree when it has a second argument.
+     *  A tree can be described by an array of objects, each object corresponding to a node.
+     *  Node descriptions may contain values for any property of a node plus the following extra properties: <ul>
+     * <li>type:  can be one of the following:<ul>
+     *  <li> A shortname for a node type (<code>'text','menu','html'</code>) </li>
+     * <li>The name of a Node class under YAHOO.widget (<code>'TextNode', 'MenuNode', 'DateNode'</code>, etc) </li>
+     * <li>a reference to an actual class: <code>YAHOO.widget.DateNode</code></li></ul></li>
+     * <li>children: an array containing further node definitions</li></ul>
      * @method buildTreeFromObject
      * @param  oConfig {Array}  array containing a full description of the tree
      * 
      */
-	buildTreeFromObject: function (oConfig) {
-		var build = function (parent, oConfig) {
-			var i, item, node, children, type, NodeType, ThisType;
-			for (i = 0; i < oConfig.length; i++) {
-				item = oConfig[i];
-				if (Lang.isString(item)) {
-					node = new Widget.TextNode(item, parent);
-				} else if (Lang.isObject(item)) {
-					children = item.children;
-					delete item.children;
-					type = item.type || 'text';
-					delete item.type;
-					switch (type.toLowerCase()) {
-						case 'text':
-							node = new Widget.TextNode(item, parent);
-							break;
-						case 'menu':
-							node = new Widget.MenuNode(item, parent);
-							break;
-						case 'html':
-							node = new Widget.HTMLNode(item, parent);
-							break;
-						default:
-							NodeType = Widget[type];
-							if (Lang.isObject(NodeType)) {
-								for (ThisType = NodeType; ThisType && ThisType !== Widget.Node; ThisType = ThisType.superclass.constructor) {}
-								if (ThisType) {
-									node = new NodeType(item, parent);
-								} else {
-								}
-							} else {
-							}
-					}
-					if (children) {
-						build(node,children);
-					}
-				} else {
-				}
-			}
-		};
-							
-					
-		build(this.root,oConfig);
-	},
+    buildTreeFromObject: function (oConfig) {
+        var build = function (parent, oConfig) {
+            var i, item, node, children, type, NodeType, ThisType;
+            for (i = 0; i < oConfig.length; i++) {
+                item = oConfig[i];
+                if (Lang.isString(item)) {
+                    node = new Widget.TextNode(item, parent);
+                } else if (Lang.isObject(item)) {
+                    children = item.children;
+                    delete item.children;
+                    type = item.type || 'text';
+                    delete item.type;
+                    switch (Lang.isString(type) && type.toLowerCase()) {
+                        case 'text':
+                            node = new Widget.TextNode(item, parent);
+                            break;
+                        case 'menu':
+                            node = new Widget.MenuNode(item, parent);
+                            break;
+                        case 'html':
+                            node = new Widget.HTMLNode(item, parent);
+                            break;
+                        default:
+                            if (Lang.isString(type)) {
+                                NodeType = Widget[type];
+                            } else {
+                                NodeType = type;
+                            }
+                            if (Lang.isObject(NodeType)) {
+                                for (ThisType = NodeType; ThisType && ThisType !== Widget.Node; ThisType = ThisType.superclass.constructor) {}
+                                if (ThisType) {
+                                    node = new NodeType(item, parent);
+                                } else {
+                                }
+                            } else {
+                            }
+                    }
+                    if (children) {
+                        build(node,children);
+                    }
+                } else {
+                }
+            }
+        };
+                            
+                    
+        build(this.root,oConfig);
+    },
 /**
-     * Builds the TreeView from existing markup.   Markup should consist of <UL> or <OL> elements, possibly nested.  
-     * Depending what the <LI> elements contain the following will be created: <ul>
-     * 	         <li>plain text:  a regular TextNode</li>
-     * 	         <li>an (un-)ordered list: a nested branch</li>
-     * 	         <li>anything else: an HTMLNode</li></ul>
+     * Builds the TreeView from existing markup.   Markup should consist of <UL> or <OL> elements containing <LI> elements.  
+     * Each <LI> can have one element used as label and a second optional element which is to be a <UL> or <OL>
+     * containing nested nodes.
+     * Depending on what the first element of the <LI> element is, the following Nodes will be created: <ul>
+     *           <li>plain text:  a regular TextNode</li>
+     *           <li>anchor <A>: a TextNode with its <code>href</code> and <code>target</code> taken from the anchor</li>
+     *           <li>anything else: an HTMLNode</li></ul>
      * Only the first  outermost (un-)ordered list in the markup and its children will be parsed.
-     * Tree will be fully collapsed.
-     *  HTMLNodes have hasIcon set to true if the markup for that node has a className called hasIcon.
+     * Nodes will be collapsed unless  an  <LI>  tag has a className called 'expanded'.
+     * All other className attributes will be copied over to the Node className property.
+     * If the <LI> element contains an attribute called <code>yuiConfig</code>, its contents should be a JSON-encoded object
+     * as the one used in method <a href="#method_buildTreeFromObject">buildTreeFromObject</a>.
      * @method buildTreeFromMarkup
-     * @param {string|HTMLElement} id the id of the element that contains the markup or a reference to it.
+     * @param  id{string|HTMLElement} The id of the element that contains the markup or a reference to it.
      */
-	buildTreeFromMarkup: function (id) {
-		var build = function (parent,markup) {
-			var el, node, child, text;
-			for (el = Dom.getFirstChild(markup); el; el = Dom.getNextSibling(el)) {
-				if (el.nodeType == 1) {
-					switch (el.tagName.toUpperCase()) {
-						case 'LI':
-							for (child = el.firstChild; child; child = child.nextSibling) {
-								if (child.nodeType == 3) {
-									text = Lang.trim(child.nodeValue);
-									if (text.length) {
-										node = new Widget.TextNode(text, parent, false);
-									}
-								} else {
-									switch (child.tagName.toUpperCase()) {
-										case 'UL':
-										case 'OL':
-											build(node,child);
-											break;
-										case 'A':
-											node = new Widget.TextNode({
-												label:child.innerHTML,
-												href: child.href,
-												target:child.target,
-												title:child.title ||child.alt
-											},parent,false);
-											break;
-										default:
-											node = new Widget.HTMLNode(child.parentNode.innerHTML, parent, false, true);
-											break;
-									}
-								}
-							}
-							break;
-						case 'UL':
-						case 'OL':
-							build(node, el);
-							break;
-					}
-				}
-			}
-		
-		};
-		var markup = Dom.getChildrenBy(Dom.get(id),function (el) { 
-			var tag = el.tagName.toUpperCase();
-			return  tag == 'UL' || tag == 'OL';
-		});
-		if (markup.length) {
-			build(this.root, markup[0]);
-		} else {
-		}
-	},
+    buildTreeFromMarkup: function (id) {
+        var build = function (markup) {
+            var el, child, branch = [], config = {}, label, yuiConfig;
+            // Dom's getFirstChild and getNextSibling skip over text elements
+            for (el = Dom.getFirstChild(markup); el; el = Dom.getNextSibling(el)) {
+                switch (el.tagName.toUpperCase()) {
+                    case 'LI':
+                        label = '';
+                        config = {
+                            expanded: Dom.hasClass(el,'expanded'),
+                            title: el.title || el.alt || null,
+                            className: Lang.trim(el.className.replace(/\bexpanded\b/,'')) || null
+                        };
+                        // I cannot skip over text elements here because I want them for labels
+                        child = el.firstChild;
+                        if (child.nodeType == 3) {
+                            // nodes with only whitespace, tabs and new lines don't count, they are probably just formatting.
+                            label = Lang.trim(child.nodeValue.replace(/[\n\t\r]*/g,''));
+                            if (label) {
+                                config.type = 'text';
+                                config.label = label;
+                            } else {
+                                child = Dom.getNextSibling(child);
+                            }
+                        }
+                        if (!label) {
+                            if (child.tagName.toUpperCase() == 'A') {
+                                config.type = 'text';
+                                config.label = child.innerHTML;
+                                config.href = child.href;
+                                config.target = child.target;
+                                config.title = child.title || child.alt || config.title;
+                            } else {
+                                config.type = 'html';
+                                var d = document.createElement('div');
+                                d.appendChild(child.cloneNode(true));
+                                config.html = d.innerHTML;
+                                config.hasIcon = true;
+                            }
+                        }
+                        // see if after the label it has a further list which will become children of this node.
+                        child = Dom.getNextSibling(child);
+                        switch (child && child.tagName.toUpperCase()) {
+                            case 'UL':
+                            case 'OL':
+                                config.children = build(child);
+                                break;
+                        }
+                        // if there are further elements or text, it will be ignored.
+                        
+                        if (YAHOO.lang.JSON) {
+                            yuiConfig = el.getAttribute('yuiConfig');
+                            if (yuiConfig) {
+                                yuiConfig = YAHOO.lang.JSON.parse(yuiConfig);
+                                config = YAHOO.lang.merge(config,yuiConfig);
+                            }
+                        }
+                        
+                        branch.push(config);
+                        break;
+                    case 'UL':
+                    case 'OL':
+                        config = {
+                            type: 'text',
+                            label: '',
+                            children: build(child)
+                        };
+                        branch.push(config);
+                        break;
+                }
+            }
+            return branch;
+        };
+
+        var markup = Dom.getChildrenBy(Dom.get(id),function (el) { 
+            var tag = el.tagName.toUpperCase();
+            return  tag == 'UL' || tag == 'OL';
+        });
+        if (markup.length) {
+            this.buildTreeFromObject(build(markup[0]));
+        } else {
+        }
+    },
+  /**
+     * Returns the TD element where the event has occurred
+     * @method _getEventTargetTdEl
+     * @private
+     */
+    _getEventTargetTdEl: function (ev) {
+        var target = Event.getTarget(ev); 
+        // go up looking for a TD with a className with a ygtv prefix
+        while (target && !(target.tagName.toUpperCase() == 'TD' && Dom.hasClass(target.parentNode,'ygtvrow'))) { 
+            target = Dom.getAncestorByTagName(target,'td'); 
+        }
+        if (Lang.isNull(target)) { return null; }
+        // If it is a spacer cell, do nothing
+        if (/\bygtv(blank)?depthcell/.test(target.className)) { return null;}
+        // If it has an id, search for the node number and see if it belongs to a node in this tree.
+        if (target.id) {
+            var m = target.id.match(/\bygtv([^\d]*)(.*)/);
+            if (m && m[2] && this._nodes[m[2]]) {
+                return target;
+            }
+        }
+        return null;
+    },
+  /**
+     * Event listener for click events
+     * @method _onClickEvent
+     * @private
+     */
+    _onClickEvent: function (ev) {
+        var self = this,
+            td = this._getEventTargetTdEl(ev),
+            node,
+            target,
+            toggle = function () {
+                node.toggle();
+                node.focus();
+                try {
+                    Event.preventDefault(ev);
+                } catch (e) {
+                    // @TODO
+                    // For some reason IE8 is providing an event object with
+                    // most of the fields missing, but only when clicking on
+                    // the node's label, and only when working with inline
+                    // editing.  This generates a "Member not found" error
+                    // in that browser.  Determine if this is a browser
+                    // bug, or a problem with this code.  Already checked to
+                    // see if the problem has to do with access the event
+                    // in the outer scope, and that isn't the problem.
+                    // Maybe the markup for inline editing is broken.
+                }
+            };
+
+        if (!td) {
+            return; 
+        }
+
+        node = this.getNodeByElement(td);
+        if (!node) { 
+            return; 
+        }
+        
+        // exception to handle deprecated event labelClick
+        // @TODO take another look at this deprecation.  It is common for people to
+        // only be interested in the label click, so why make them have to test
+        // the node type to figure out whether the click was on the label?
+        target = Event.getTarget(ev);
+        if (Dom.hasClass(target, node.labelStyle) || Dom.getAncestorByClassName(target,node.labelStyle)) {
+            this.fireEvent('labelClick',node);
+        }
+        
+        //  If it is a toggle cell, toggle
+        if (/\bygtv[tl][mp]h?h?/.test(td.className)) {
+            toggle();
+        } else {
+            if (this._dblClickTimer) {
+                window.clearTimeout(this._dblClickTimer);
+                this._dblClickTimer = null;
+            } else {
+                if (this._hasDblClickSubscriber) {
+                    this._dblClickTimer = window.setTimeout(function () {
+                        self._dblClickTimer = null;
+                        if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
+                            toggle();
+                        }
+                    }, 200);
+                } else {
+                    if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
+                        toggle();
+                    }
+                }
+            }
+        }
+    },
+
+  /**
+     * Event listener for double-click events
+     * @method _onDblClickEvent
+     * @private
+     */
+    _onDblClickEvent: function (ev) {
+        if (!this._hasDblClickSubscriber) { return; }
+        var td = this._getEventTargetTdEl(ev);
+        if (!td) {return;}
+
+        if (!(/\bygtv[tl][mp]h?h?/.test(td.className))) {
+            this.fireEvent('dblClickEvent', {event:ev, node:this.getNodeByElement(td)}); 
+            if (this._dblClickTimer) {
+                window.clearTimeout(this._dblClickTimer);
+                this._dblClickTimer = null;
+            }
+        }
+    },
+  /**
+     * Event listener for mouse over events
+     * @method _onMouseOverEvent
+     * @private
+     */
+    _onMouseOverEvent:function (ev) {
+        var target;
+        if ((target = this._getEventTargetTdEl(ev)) && (target = this.getNodeByElement(target)) && (target = target.getToggleEl())) {
+            target.className = target.className.replace(/\bygtv([lt])([mp])\b/gi,'ygtv$1$2h');
+        }
+    },
+  /**
+     * Event listener for mouse out events
+     * @method _onMouseOutEvent
+     * @private
+     */
+    _onMouseOutEvent: function (ev) {
+        var target;
+        if ((target = this._getEventTargetTdEl(ev)) && (target = this.getNodeByElement(target)) && (target = target.getToggleEl())) {
+            target.className = target.className.replace(/\bygtv([lt])([mp])h\b/gi,'ygtv$1$2');
+        }
+    },
+  /**
+     * Event listener for key down events
+     * @method _onKeyDownEvent
+     * @private
+     */
+    _onKeyDownEvent: function (ev) {
+        var target = Event.getTarget(ev),
+            node = this.getNodeByElement(target),
+            newNode = node,
+            KEY = YAHOO.util.KeyListener.KEY;
+
+        switch(ev.keyCode) {
+            case KEY.UP:
+                do {
+                    if (newNode.previousSibling) {
+                        newNode = newNode.previousSibling;
+                    } else {
+                        newNode = newNode.parent;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            case KEY.DOWN:
+                do {
+                    if (newNode.nextSibling) {
+                        newNode = newNode.nextSibling;
+                    } else {
+                        newNode.expand();
+                        newNode = (newNode.children.length || null) && newNode.children[0];
+                    }
+                } while (newNode && !newNode._canHaveFocus);
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.LEFT:
+                do {
+                    if (newNode.parent) {
+                        newNode = newNode.parent;
+                    } else {
+                        newNode = newNode.previousSibling;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.RIGHT:
+                do {
+                    newNode.expand();
+                    if (newNode.children.length) {
+                        newNode = newNode.children[0];
+                    } else {
+                        newNode = newNode.nextSibling;
+                    }
+                } while (newNode && !newNode._canHaveFocus());
+                if (newNode) { newNode.focus();}
+                Event.preventDefault(ev);
+                break;
+            case KEY.ENTER:
+                if (node.href) {
+                    if (node.target) {
+                        window.open(node.href,node.target);
+                    } else {
+                        window.location(node.href);
+                    }
+                } else {
+                    node.toggle();
+                }
+                this.fireEvent('enterKeyPressed',node);
+                Event.preventDefault(ev);
+                break;
+            case KEY.HOME:
+                newNode = this.getRoot();
+                if (newNode.children.length) {newNode = newNode.children[0];}
+                if (newNode._canHaveFocus()) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            case KEY.END:
+                newNode = newNode.parent.children;
+                newNode = newNode[newNode.length -1];
+                if (newNode._canHaveFocus()) { newNode.focus(); }
+                Event.preventDefault(ev);
+                break;
+            // case KEY.PAGE_UP:
+                // break;
+            // case KEY.PAGE_DOWN:
+                // break;
+            case 107:  // plus key
+                if (ev.shiftKey) {
+                    node.parent.expandAll();
+                } else {
+                    node.expand();
+                }
+                break;
+            case 109: // minus key
+                if (ev.shiftKey) {
+                    node.parent.collapseAll();
+                } else {
+                    node.collapse();
+                }
+                break;
+            default:
+                break;
+        }
+    },
     /**
      * Renders the tree boilerplate and visible nodes
      * @method render
      */
     render: function() {
-        var html = this.root.getHtml();
-        this.getEl().innerHTML = html;
-		var getTarget = function (ev) {
-			var target = Event.getTarget(ev); 
-			if (target.tagName.toUpperCase() != 'TD') { target = Dom.getAncestorByTagName(target,'td'); }
-			if (Lang.isNull(target)) { return null; }
-			if (target.className.length === 0) {
-				target = target.previousSibling;
-				if (Lang.isNull(target)) { return null; }
-			}
-			return target;
-		};
-		if (!this._hasEvents) {
-			Event.on(
-				this.getEl(),
-				'click',
-				function (ev) {
-					var self = this,
-						el = Event.getTarget(ev),
-						node = this.getNodeByElement(el);
-					if (!node) { return; }
-						
-					var toggle = function () {
-						if (node.expanded) {
-							node.collapse();
-						} else {
-							node.expand();
-						}
-						node.focus();
-					};
-					
-					if (Dom.hasClass(el, node.labelStyle) || Dom.getAncestorByClassName(el,node.labelStyle)) {
-						this.fireEvent('labelClick',node);
-					}
-					while (el && !Dom.hasClass(el.parentNode,'ygtvrow') && !/ygtv[tl][mp]h?h?/.test(el.className)) {
-						el = Dom.getAncestorByTagName(el,'td');
-					}
-					if (el) {
-						// If it is a spacer cell, do nothing
-						if (/ygtv(blank)?depthcell/.test(el.className)) { return;}
-						//  If it is a toggle cell, toggle
-						if (/ygtv[tl][mp]h?h?/.test(el.className)) {
-							toggle();
-						} else {
-							if (this._dblClickTimer) {
-								window.clearTimeout(this._dblClickTimer);
-								this._dblClickTimer = null;
-							} else {
-								if (this._hasDblClickSubscriber) {
-									this._dblClickTimer = window.setTimeout(function () {
-										self._dblClickTimer = null;
-										if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
-											toggle();
-										}
-									}, 200);
-								} else {
-									if (self.fireEvent('clickEvent', {event:ev,node:node}) !== false) { 
-										toggle();
-									}
-								}
-							}
-						}
-					}
-				},
-				this,
-				true
-			);
-			
-			Event.on(
-				this.getEl(),
-				'dblclick',
-				function (ev) {
-					if (!this._hasDblClickSubscriber) { return; }
-					var el = Event.getTarget(ev);
-					while (!Dom.hasClass(el.parentNode,'ygtvrow')) {
-						el = Dom.getAncestorByTagName(el,'td');
-					}
-					if (/ygtv(blank)?depthcell/.test(el.className)) { return;}
-					if (!(/ygtv[tl][mp]h?h?/.test(el.className))) {
-						this.fireEvent('dblClickEvent', {event:ev, node:this.getNodeByElement(el)}); 
-						if (this._dblClickTimer) {
-							window.clearTimeout(this._dblClickTimer);
-							this._dblClickTimer = null;
-						}
-					}
-				},
-				this,
-				true
-			);
-			Event.on(
-				this.getEl(),
-				'mouseover',
-				function (ev) {
-					var target = getTarget(ev);
-					if (target) {
-target.className = target.className.replace(/ygtv([lt])([mp])/gi, 'ygtv$1$2h').replace(/h+/, 'h');
-					}
-				}
-			);
-			Event.on(
-				this.getEl(),
-				'mouseout',
-				function (ev) {
-					var target = getTarget(ev);
-					if (target) {
-						target.className = target.className.replace(/ygtv([lt])([mp])h/gi,'ygtv$1$2');
-					}
-				}
-			);
-			Event.on(
-				this.getEl(),
-				'keydown',
-				function (ev) {
-					var target = Event.getTarget(ev),
-						node = this.getNodeByElement(target),
-						newNode = node,
-						KEY = YAHOO.util.KeyListener.KEY;
-
-					switch(ev.keyCode) {
-						case KEY.UP:
-							do {
-								if (newNode.previousSibling) {
-									newNode = newNode.previousSibling;
-								} else {
-									newNode = newNode.parent;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.DOWN:
-							do {
-								if (newNode.nextSibling) {
-									newNode = newNode.nextSibling;
-								} else {
-									newNode.expand();
-									newNode = (newNode.children.length || null) && newNode.children[0];
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.LEFT:
-							do {
-								if (newNode.parent) {
-									newNode = newNode.parent;
-								} else {
-									newNode = newNode.previousSibling;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.RIGHT:
-							do {
-								newNode.expand();
-								if (newNode.children.length) {
-									newNode = newNode.children[0];
-								} else {
-									newNode = newNode.nextSibling;
-								}
-							} while (newNode && !newNode.focus());
-							if (!newNode) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.ENTER:
-							if (node.href) {
-								if (node.target) {
-									window.open(node.href,node.target);
-								} else {
-									window.location(node.href);
-								}
-							} else {
-								node.toggle();
-							}
-							this.fireEvent('enterKeyPressed',node);
-							Event.preventDefault(ev);
-							break;
-						case KEY.HOME:
-							newNode = this.getRoot();
-							if (newNode.children.length) {newNode = newNode.children[0];}
-							if (!newNode.focus()) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						case KEY.END:
-							newNode = newNode.parent.children;
-							newNode = newNode[newNode.length -1];
-							if (!newNode.focus()) { node.focus(); }
-							Event.preventDefault(ev);
-							break;
-						// case KEY.PAGE_UP:
-							// break;
-						// case KEY.PAGE_DOWN:
-							// break;
-						case 107:  // plus key
-							if (ev.shiftKey) {
-								node.parent.expandAll();
-							} else {
-								node.expand();
-							}
-							break;
-						case 109: // minus key
-							if (ev.shiftKey) {
-								node.parent.collapseAll();
-							} else {
-								node.collapse();
-							}
-							break;
-						default:
-							break;
-					}
-				},
-				this,
-				true
-			);
-		}
-		this._hasEvents = true;
+        var html = this.root.getHtml(),
+            el = this.getEl();
+        el.innerHTML = html;
+        if (!this._hasEvents) {
+            Event.on(el, 'click', this._onClickEvent, this, true);
+            Event.on(el, 'dblclick', this._onDblClickEvent, this, true);
+            Event.on(el, 'mouseover', this._onMouseOverEvent, this, true);
+            Event.on(el, 'mouseout', this._onMouseOutEvent, this, true);
+            Event.on(el, 'keydown', this._onKeyDownEvent, this, true);
+        }
+        this._hasEvents = true;
     },
-	
+    
   /**
      * Returns the tree's host element
      * @method getEl
@@ -790,12 +922,12 @@
      */
     getNodeByProperty: function(property, value) {
         for (var i in this._nodes) {
-			if (this._nodes.hasOwnProperty(i)) {
-	            var n = this._nodes[i];
-	            if (n.data && value == n.data[property]) {
-	                return n;
-	            }
-			}
+            if (this._nodes.hasOwnProperty(i)) {
+                var n = this._nodes[i];
+                if ((property in n && n[property] == value) || (n.data && value == n.data[property])) {
+                    return n;
+                }
+            }
         }
 
         return null;
@@ -812,12 +944,12 @@
     getNodesByProperty: function(property, value) {
         var values = [];
         for (var i in this._nodes) {
-			if (this._nodes.hasOwnProperty(i)) {
-	            var n = this._nodes[i];
-	            if (n.data && value == n.data[property]) {
-	                values.push(n);
-	            }
-			}
+            if (this._nodes.hasOwnProperty(i)) {
+                var n = this._nodes[i];
+                if ((property in n && n[property] == value) || (n.data && value == n.data[property])) {
+                    values.push(n);
+                }
+            }
         }
 
         return (values.length) ? values : null;
@@ -992,33 +1124,33 @@
         delete this._nodes[node.index];
     },
 
-	/**
-	* Nulls out the entire TreeView instance and related objects, removes attached
-	* event listeners, and clears out DOM elements inside the container. After
-	* calling this method, the instance reference should be expliclitly nulled by
-	* implementer, as in myDataTable = null. Use with caution!
-	*
-	* @method destroy
-	*/
-	destroy : function() {
-		// Since the label editor can be separated from the main TreeView control
-		// the destroy method for it might not be there.
-		if (this._destroyEditor) { this._destroyEditor(); }
-		var el = this.getEl();
-		Event.removeListener(el,'click');
-		Event.removeListener(el,'dblclick');
-		Event.removeListener(el,'mouseover');
-		Event.removeListener(el,'mouseout');
-		Event.removeListener(el,'keydown');
-		for (var i = 0 ; i < this._nodes.length; i++) {
-			var node = this._nodes[i];
-			if (node && node.destroy) {node.destroy(); }
-		}
-		el.parentNode.removeChild(el);
-		this._hasEvents = false;
-	},
-		
-			
+    /**
+    * Nulls out the entire TreeView instance and related objects, removes attached
+    * event listeners, and clears out DOM elements inside the container. After
+    * calling this method, the instance reference should be expliclitly nulled by
+    * implementer, as in myDataTable = null. Use with caution!
+    *
+    * @method destroy
+    */
+    destroy : function() {
+        // Since the label editor can be separated from the main TreeView control
+        // the destroy method for it might not be there.
+        if (this._destroyEditor) { this._destroyEditor(); }
+        var el = this.getEl();
+        Event.removeListener(el,'click');
+        Event.removeListener(el,'dblclick');
+        Event.removeListener(el,'mouseover');
+        Event.removeListener(el,'mouseout');
+        Event.removeListener(el,'keydown');
+        for (var i = 0 ; i < this._nodes.length; i++) {
+            var node = this._nodes[i];
+            if (node && node.destroy) {node.destroy(); }
+        }
+        el.innerHTML = '';
+        this._hasEvents = false;
+    },
+        
+            
 
 
     /**
@@ -1064,7 +1196,42 @@
      * @param node {Node} the node that was collapsed.
      * @deprecated use treeobj.subscribe("collapse") instead
      */
-    onCollapse: function(node) { }
+    onCollapse: function(node) { },
+    
+    /**
+    * Sets the value of a property for all loaded nodes in the tree.
+    * @method setNodesProperty
+    * @param name {string} Name of the property to be set
+    * @param value {any} value to be set
+    * @param refresh {boolean} if present and true, it does a refresh
+    */
+    setNodesProperty: function(name, value, refresh) {
+        this.root.setNodesProperty(name,value);
+        if (refresh) {
+            this.root.refresh();
+        }
+    },
+    /**
+    * Event listener to toggle node highlight.
+    * Can be assigned as listener to clickEvent, dblClickEvent and enterKeyPressed.
+    * It returns false to prevent the default action.
+    * @method onEventToggleHighlight
+    * @param oArgs {any} it takes the arguments of any of the events mentioned above
+    * @return {false} Always cancels the default action for the event
+    */
+    onEventToggleHighlight: function (oArgs) {
+        var node;
+        if ('node' in oArgs && oArgs.node instanceof Widget.Node) {
+            node = oArgs.node;
+        } else if (oArgs instanceof Widget.Node) {
+            node = oArgs;
+        } else {
+            return false;
+        }
+        node.toggleHighlight();
+        return false;
+    }
+        
 
 };
 
@@ -1139,7 +1306,7 @@
      * @final
      * @default "ygtvfocus"
 
-	*/ 
+    */ 
 TV.FOCUS_CLASS_NAME = 'ygtvfocus';
 
 /**
@@ -1183,9 +1350,9 @@
 Event.addListener(window,"load", TV.preload);
 })();
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 /**
  * The base class for all tree nodes.  The node's presentation and behavior in
  * response to mouse events is handled in Node subclasses.
@@ -1196,7 +1363,8 @@
  * be used to render this node, and any custom attributes that should be
  * stored with the node (which is available in noderef.data).
  * All values in oData will be used to set equally named properties in the node
- * as long as the node does have such properties, they are not undefined, private or functions.
+ * as long as the node does have such properties, they are not undefined, private or functions,
+ * the rest of the values will be stored in noderef.data
  * @param oParent {Node} this node's parent node
  * @param expanded {boolean} the initial expanded/collapsed state (deprecated, use oData.expanded)
  * @constructor
@@ -1251,21 +1419,6 @@
     depth: -1,
 
     /**
-     * The href for the node's label.  If one is not specified, the href will
-     * be set so that it toggles the node.
-     * @property href
-     * @type string
-     */
-    href: null,
-
-    /**
-     * The label href target, defaults to current window
-     * @property target
-     * @type string
-     */
-    target: "_self",
-
-    /**
      * The node's expanded/collapsed state
      * @property expanded
      * @type boolean
@@ -1389,13 +1542,64 @@
      */
     contentStyle: "",
 
+
     /**
      * The generated id that will contain the data passed in by the implementer.
      * @property contentElId
      * @type string
      */
     contentElId: null,
+    
+/** 
+ * Enables node highlighting.  If true, the node can be highlighted and/or propagate highlighting
+ * @property enableHighlight
+ * @type boolean
+ * @default true
+ */
+    enableHighlight: true,
+    
+/** 
+ * Stores the highlight state.  Can be any of:
+ * <ul>
+ * <li>0 - not highlighted</li>
+ * <li>1 - highlighted</li>
+ * <li>2 - some children highlighted</li>
+ * </ul>
+ * @property highlightState
+ * @type integer
+ * @default 0
+ */
+ 
+ highlightState: 0,
+ 
  /**
+ * Tells whether highlighting will be propagated up to the parents of the clicked node
+ * @property propagateHighlightUp
+ * @type boolean
+ * @default false
+ */
+ 
+ propagateHighlightUp: false,
+ 
+ /**
+ * Tells whether highlighting will be propagated down to the children of the clicked node
+ * @property propagateHighlightDown
+ * @type boolean
+ * @default false
+ */
+ 
+ propagateHighlightDown: false,
+ 
+ /**
+  * User-defined className to be added to the Node
+  * @property className
+  * @type string
+  * @default null
+  */
+ 
+ className: null,
+ 
+ /**
      * The node type
      * @property _type
      * @private
@@ -1421,21 +1625,25 @@
      */
     init: function(oData, oParent, expanded) {
 
-        this.data       = oData;
+        this.data = {};
         this.children   = [];
         this.index      = YAHOO.widget.TreeView.nodeCount;
         ++YAHOO.widget.TreeView.nodeCount;
-		this.contentElId = "ygtvcontentel" + this.index;
-		
-		if (Lang.isObject(oData)) {
-			for (var property in oData) {
-				if (property.charAt(0) != '_'  && oData.hasOwnProperty(property) && !Lang.isUndefined(this[property]) && !Lang.isFunction(this[property]) ) {
-					this[property] = oData[property];
-				}
-			}
-		}
-		if (!Lang.isUndefined(expanded) ) {	this.expanded  = expanded;	}
-		
+        this.contentElId = "ygtvcontentel" + this.index;
+        
+        if (Lang.isObject(oData)) {
+            for (var property in oData) {
+                if (oData.hasOwnProperty(property)) {
+                    if (property.charAt(0) != '_'  && !Lang.isUndefined(this[property]) && !Lang.isFunction(this[property]) ) {
+                        this[property] = oData[property];
+                    } else {
+                        this.data[property] = oData[property];
+                    }
+                }
+            }
+        }
+        if (!Lang.isUndefined(expanded) ) { this.expanded  = expanded;  }
+        
 
         /**
          * The parentChange event is fired when a parent element is applied
@@ -1617,11 +1825,11 @@
      * @return Node[]
      */
     getSiblings: function() {
-		var sib =  this.parent.children.slice(0);
-		for (var i=0;i < sib.length && sib[i] != this;i++) {}
-		sib.splice(i,1);
-		if (sib.length) { return sib; }
-		return null;
+        var sib =  this.parent.children.slice(0);
+        for (var i=0;i < sib.length && sib[i] != this;i++) {}
+        sib.splice(i,1);
+        if (sib.length) { return sib; }
+        return null;
     },
 
     /**
@@ -1714,10 +1922,10 @@
         return Dom.get(this.getToggleElId());
     },
     /**
-	* Returns the outer html element for this node's content
-	* @method getContentEl
-	* @return {HTMLElement} the element
-	*/
+    * Returns the outer html element for this node's content
+    * @method getContentEl
+    * @return {HTMLElement} the element
+    */
     getContentEl: function() { 
         return Dom.get(this.contentElId);
     },
@@ -1862,7 +2070,7 @@
         if (this.hasIcon) {
             var el = this.getToggleEl();
             if (el) {
-                el.className = el.className.replace(/ygtv(([tl][pmn]h?)|(loading))/,this.getStyle());
+                el.className = el.className.replace(/\bygtv(([tl][pmn]h?)|(loading))\b/gi,this.getStyle());
             }
         }
     },
@@ -1908,7 +2116,8 @@
      * @method expandAll
      */
     expandAll: function() { 
-        for (var i=0;i<this.children.length;++i) {
+        var l = this.children.length;
+        for (var i=0;i<l;++i) {
             var c = this.children[i];
             if (c.isDynamic()) {
                 break;
@@ -2034,12 +2243,7 @@
 
         this.childrenRendered = false;
 
-        var sb = [];
-        sb[sb.length] = '<div class="ygtvitem" id="' + this.getElId() + '">';
-        sb[sb.length] = this.getNodeHtml();
-        sb[sb.length] = this.getChildrenHtml();
-        sb[sb.length] = '</div>';
-        return sb.join("");
+        return ['<div class="ygtvitem" id="' , this.getElId() , '">' ,this.getNodeHtml() , this.getChildrenHtml() ,'</div>'].join("");
     },
 
     /**
@@ -2054,8 +2258,7 @@
 
 
         var sb = [];
-        sb[sb.length] = '<div class="ygtvchildren"';
-        sb[sb.length] = ' id="' + this.getChildrenElId() + '"';
+        sb[sb.length] = '<div class="ygtvchildren" id="' + this.getChildrenElId() + '"';
 
         // This is a workaround for an IE rendering issue, the child div has layout
         // in IE, creating extra space if a leaf node is created with the expanded
@@ -2198,42 +2401,46 @@
     getNodeHtml: function() { 
         var sb = [];
 
-        sb[sb.length] = '<table border="0" cellpadding="0" cellspacing="0" class="ygtvdepth' + this.depth + '">';
-        sb[sb.length] = '<tr class="ygtvrow">';
+        sb[sb.length] = '<table id="ygtvtableel' + this.index + '"border="0" cellpadding="0" cellspacing="0" class="ygtvtable ygtvdepth' + this.depth;
+        if (this.enableHighlight) {
+            sb[sb.length] = ' ygtv-highlight' + this.highlightState;
+        }
+        if (this.className) {
+            sb[sb.length] = ' ' + this.className;
+        }           
+        sb[sb.length] = '"><tr class="ygtvrow">';
         
         for (var i=0;i<this.depth;++i) {
-            sb[sb.length] = '<td class="' + this.getDepthStyle(i) + '"><div class="ygtvspacer"></div></td>';
+            sb[sb.length] = '<td class="ygtvcell ' + this.getDepthStyle(i) + '"><div class="ygtvspacer"></div></td>';
         }
 
         if (this.hasIcon) {
-            sb[sb.length] = '<td'; 
-            sb[sb.length] = ' id="' + this.getToggleElId() + '"';
-            sb[sb.length] = ' class="' + this.getStyle() + '"';
-            sb[sb.length] = '><a href="#" class="ygtvspacer"> </a></td>';
+            sb[sb.length] = '<td id="' + this.getToggleElId();
+            sb[sb.length] = '" class="ygtvcell ';
+            sb[sb.length] = this.getStyle() ;
+            sb[sb.length] = '"><a href="#" class="ygtvspacer"> </a></td>';
         }
 
-        sb[sb.length] = '<td';
-        sb[sb.length] = ' id="' + this.contentElId + '"'; 
-        sb[sb.length] = ' class="' + this.contentStyle  + ' ygtvcontent" ';
+        sb[sb.length] = '<td id="' + this.contentElId; 
+        sb[sb.length] = '" class="ygtvcell ';
+        sb[sb.length] = this.contentStyle  + ' ygtvcontent" ';
         sb[sb.length] = (this.nowrap) ? ' nowrap="nowrap" ' : '';
         sb[sb.length] = ' >';
-		sb[sb.length] = this.getContentHtml();
-        sb[sb.length] = '</td>';
-        sb[sb.length] = '</tr>';
-        sb[sb.length] = '</table>';
+        sb[sb.length] = this.getContentHtml();
+        sb[sb.length] = '</td></tr></table>';
 
         return sb.join("");
 
     },
-	/**
+    /**
      * Get the markup for the contents of the node.  This is designed to be overrided so that we can
      * support different types of nodes.
      * @method getContentHtml
      * @return {string} The HTML that will render the content of this node.
      */
-	getContentHtml: function () {
-		return "";
-	},
+    getContentHtml: function () {
+        return "";
+    },
 
     /**
      * Regenerates the html for this node and its children.  To be used when the
@@ -2247,7 +2454,7 @@
         if (this.hasIcon) {
             var el = this.getToggleEl();
             if (el) {
-                el.className = this.getStyle();
+                el.className = el.className.replace(/\bygtv[lt][nmp]h*\b/gi,this.getStyle());
             }
         }
     },
@@ -2260,77 +2467,122 @@
     toString: function() {
         return this._type + " (" + this.index + ")";
     },
-	/**
-	* array of items that had the focus set on them
-	* so that they can be cleaned when focus is lost
-	* @property _focusHighlightedItems
-	* @type Array of DOM elements
-	* @private
-	*/
-	_focusHighlightedItems: [],
-	_focusedItem: null,
-	/**
-	* Sets the focus on the node element.
-	* It will only be able to set the focus on nodes that have anchor elements in it.  
-	* Toggle or branch icons have anchors and can be focused on.  
-	* If will fail in nodes that have no anchor
-	* @method focus
-	* @return {boolean} success
-	*/
-	focus: function () {
-		var focused = false, self = this;
+    /**
+    * array of items that had the focus set on them
+    * so that they can be cleaned when focus is lost
+    * @property _focusHighlightedItems
+    * @type Array of DOM elements
+    * @private
+    */
+    _focusHighlightedItems: [],
+    /**
+    * DOM element that actually got the browser focus
+    * @property _focusedItem
+    * @type DOM element
+    * @private
+    */
+    _focusedItem: null,
+    
+    /**
+    * Returns true if there are any elements in the node that can 
+    * accept the real actual browser focus
+    * @method _canHaveFocus
+    * @return {boolean} success
+    * @private
+    */
+    _canHaveFocus: function() {
+        return this.getEl().getElementsByTagName('a').length > 0;
+    },
+    /**
+    * Removes the focus of previously selected Node
+    * @method _removeFocus
+    * @private
+    */
+    _removeFocus:function () {
+        if (this._focusedItem) {
+            Event.removeListener(this._focusedItem,'blur');
+            this._focusedItem = null;
+        }
+        var el;
+        while ((el = this._focusHighlightedItems.shift())) {  // yes, it is meant as an assignment, really
+            Dom.removeClass(el,YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
+        }
+    },
+    /**
+    * Sets the focus on the node element.
+    * It will only be able to set the focus on nodes that have anchor elements in it.  
+    * Toggle or branch icons have anchors and can be focused on.  
+    * If will fail in nodes that have no anchor
+    * @method focus
+    * @return {boolean} success
+    */
+    focus: function () {
+        var focused = false, self = this;
 
-		var removeListeners = function () {
-			var el;
-			if (self._focusedItem) {
-				Event.removeListener(self._focusedItem,'blur');
-				self._focusedItem = null;
-			}
-			
-			while ((el = self._focusHighlightedItems.shift())) {  // yes, it is meant as an assignment, really
-				Dom.removeClass(el,YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
-			}
-		};
-		removeListeners();
+        if (this.tree.currentFocus) {
+            this.tree.currentFocus._removeFocus();
+        }
+    
+        var  expandParent = function (node) {
+            if (node.parent) {
+                expandParent(node.parent);
+                node.parent.expand();
+            } 
+        };
+        expandParent(this);
 
-		Dom.getElementsBy  ( 
-			function (el) {
-				return /ygtv(([tl][pmn]h?)|(content))/.test(el.className);
-			} ,
-			'td' , 
-			this.getEl().firstChild , 
-			function (el) {
-				Dom.addClass(el, YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
-				if (!focused) { 
-					var aEl = el.getElementsByTagName('a');
-					if (aEl.length) {
-						aEl = aEl[0];
-						aEl.focus();
-						self._focusedItem = aEl;
-						Event.on(aEl,'blur',removeListeners);
-						focused = true;
-					}
-				}
-				self._focusHighlightedItems.push(el);
-			}
-		);
-		if (!focused) { removeListeners(); }
-		return focused;
-	},
+        Dom.getElementsBy  ( 
+            function (el) {
+                return /ygtv(([tl][pmn]h?)|(content))/.test(el.className);
+            } ,
+            'td' , 
+            self.getEl().firstChild , 
+            function (el) {
+                Dom.addClass(el, YAHOO.widget.TreeView.FOCUS_CLASS_NAME );
+                if (!focused) { 
+                    var aEl = el.getElementsByTagName('a');
+                    if (aEl.length) {
+                        aEl = aEl[0];
+                        aEl.focus();
+                        self._focusedItem = aEl;
+                        Event.on(aEl,'blur',function () {
+                            //console.log('f1');
+                            self.tree.fireEvent('focusChanged',{oldNode:self.tree.currentFocus,newNode:null});
+                            self.tree.currentFocus = null;
+                            self._removeFocus();
+                        });
+                        focused = true;
+                    }
+                }
+                self._focusHighlightedItems.push(el);
+            }
+        );
+        if (focused) { 
+                            //console.log('f2');
+            this.tree.fireEvent('focusChanged',{oldNode:this.tree.currentFocus,newNode:this});
+            this.tree.currentFocus = this;
+        } else {
+                            //console.log('f3');
+            this.tree.fireEvent('focusChanged',{oldNode:self.tree.currentFocus,newNode:null});
+            this.tree.currentFocus = null;
+            this._removeFocus(); 
+        }
+        return focused;
+    },
 
   /**
-     * Count of nodes in tree
+     * Count of nodes in a branch
      * @method getNodeCount
-     * @return {int} number of nodes in the tree
+     * @return {int} number of nodes in the branch
      */
     getNodeCount: function() {
-		for (var i = 0, count = 0;i< this.children.length;i++) {
-			count += this.children[i].getNodeCount();
-		}
+        for (var i = 0, count = 0;i< this.children.length;i++) {
+            count += this.children[i].getNodeCount();
+        }
         return count + 1;
     },
-	
-	  /**
+    
+      /**
      * Returns an object which could be used to build a tree out of this node and its children.
      * It can be passed to the tree constructor to reproduce this node as a tree.
      * It will return false if the node or any children loads dynamically, regardless of whether it is loaded or not.
@@ -2338,29 +2590,35 @@
      * @return {Object | false}  definition of the tree or false if the node or any children is defined as dynamic
      */
     getNodeDefinition: function() {
-	
-		if (this.isDynamic()) { return false; }
-		
-		var def, defs = this.data, children = []; 
-		
-		
-		if (this.href) { defs.href = this.href; }
-		if (this.target != '_self') { defs.target = this.target; }
-		if (this.expanded) {defs.expanded = this.expanded; }
-		if (!this.multiExpand) { defs.multiExpand = this.multiExpand; }
-		if (!this.hasIcon) { defs.hasIcon = this.hasIcon; }
-		if (this.nowrap) { defs.nowrap = this.nowrap; }
-		defs.type = this._type;
-		
-		
-		
-		for (var i = 0; i < this.children.length;i++) {
-			def = this.children[i].getNodeDefinition();
-			if (def === false) { return false;}
-			children.push(def);
-		}
-		if (children.length) { defs.children = children; }
-		return defs;
+    
+        if (this.isDynamic()) { return false; }
+        
+        var def, defs = Lang.merge(this.data), children = []; 
+        
+        
+
+        if (this.expanded) {defs.expanded = this.expanded; }
+        if (!this.multiExpand) { defs.multiExpand = this.multiExpand; }
+        if (!this.renderHidden) { defs.renderHidden = this.renderHidden; }
+        if (!this.hasIcon) { defs.hasIcon = this.hasIcon; }
+        if (this.nowrap) { defs.nowrap = this.nowrap; }
+        if (this.className) { defs.className = this.className; }
+        if (this.editable) { defs.editable = this.editable; }
+        if (this.enableHighlight) { defs.enableHighlight = this.enableHighlight; }
+        if (this.highlightState) { defs.highlightState = this.highlightState; }
+        if (this.propagateHighlightUp) { defs.propagateHighlightUp = this.propagateHighlightUp; }
+        if (this.propagateHighlightDown) { defs.propagateHighlightDown = this.propagateHighlightDown; }
+        defs.type = this._type;
+        
+        
+        
+        for (var i = 0; i < this.children.length;i++) {
+            def = this.children[i].getNodeDefinition();
+            if (def === false) { return false;}
+            children.push(def);
+        }
+        if (children.length) { defs.children = children; }
+        return defs;
     },
 
 
@@ -2371,16 +2629,242 @@
      */
     getToggleLink: function() {
         return 'return false;';
+    },
+    
+    /**
+    * Sets the value of property for this node and all loaded descendants.  
+    * Only public and defined properties can be set, not methods.  
+    * Values for unknown properties will be assigned to the refNode.data object
+    * @method setNodesProperty
+    * @param name {string} Name of the property to be set
+    * @param value {any} value to be set
+    * @param refresh {boolean} if present and true, it does a refresh
+    */
+    setNodesProperty: function(name, value, refresh) {
+        if (name.charAt(0) != '_'  && !Lang.isUndefined(this[name]) && !Lang.isFunction(this[name]) ) {
+            this[name] = value;
+        } else {
+            this.data[name] = value;
+        }
+        for (var i = 0; i < this.children.length;i++) {
+            this.children[i].setNodesProperty(name,value);
+        }
+        if (refresh) {
+            this.refresh();
+        }
+    },
+    /**
+    * Toggles the highlighted state of a Node
+    * @method toggleHighlight
+    */
+    toggleHighlight: function() {
+        if (this.enableHighlight) {
+            // unhighlights only if fully highligthed.  For not or partially highlighted it will highlight
+            if (this.highlightState == 1) {
+                this.unhighlight();
+            } else {
+                this.highlight();
+            }
+        }
+    },
+    
+    /**
+    * Turns highlighting on node.  
+    * @method highlight
+    * @param _silent {boolean} optional, don't fire the highlightEvent
+    */
+    highlight: function(_silent) {
+        if (this.enableHighlight) {
+            if (this.tree.singleNodeHighlight) {
+                if (this.tree._currentlyHighlighted) {
+                    this.tree._currentlyHighlighted.unhighlight();
+                }
+                this.tree._currentlyHighlighted = this;
+            }
+            this.highlightState = 1;
+            this._setHighlightClassName();
+            if (this.propagateHighlightDown) {
+                for (var i = 0;i < this.children.length;i++) {
+                    this.children[i].highlight(true);
+                }
+            }
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+            if (!_silent) {
+                this.tree.fireEvent('highlightEvent',this);
+            }
+        }
+    },
+    /**
+    * Turns highlighting off a node.  
+    * @method unhighlight
+    * @param _silent {boolean} optional, don't fire the highlightEvent
+    */
+    unhighlight: function(_silent) {
+        if (this.enableHighlight) {
+            this.highlightState = 0;
+            this._setHighlightClassName();
+            if (this.propagateHighlightDown) {
+                for (var i = 0;i < this.children.length;i++) {
+                    this.children[i].unhighlight(true);
+                }
+            }
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+            if (!_silent) {
+                this.tree.fireEvent('highlightEvent',this);
+            }
+        }
+    },
+    /** 
+    * Checks whether all or part of the children of a node are highlighted and
+    * sets the node highlight to full, none or partial highlight.
+    * If set to propagate it will further call the parent
+    * @method _childrenHighlighted
+    * @private
+    */
+    _childrenHighlighted: function() {
+        var yes = false, no = false;
+        if (this.enableHighlight) {
+            for (var i = 0;i < this.children.length;i++) {
+                switch(this.children[i].highlightState) {
+                    case 0:
+                        no = true;
+                        break;
+                    case 1:
+                        yes = true;
+                        break;
+                    case 2:
+                        yes = no = true;
+                        break;
+                }
+            }
+            if (yes && no) {
+                this.highlightState = 2;
+            } else if (yes) {
+                this.highlightState = 1;
+            } else {
+                this.highlightState = 0;
+            }
+            this._setHighlightClassName();
+            if (this.propagateHighlightUp) {
+                if (this.parent) {
+                    this.parent._childrenHighlighted();
+                }
+            }
+        }
+    },
+    
+    /**
+    * Changes the classNames on the toggle and content containers to reflect the current highlighting
+    * @method _setHighlightClassName
+    * @private
+    */
+    _setHighlightClassName: function() {
+        var el = Dom.get('ygtvtableel' + this.index);
+        if (el) {
+            el.className = el.className.replace(/\bygtv-highlight\d\b/gi,'ygtv-highlight' + this.highlightState);
+        }
     }
-
+    
 };
 
 YAHOO.augment(YAHOO.widget.Node, YAHOO.util.EventProvider);
 })();
+/**
+ * A custom YAHOO.widget.Node that handles the unique nature of 
+ * the virtual, presentationless root node.
+ * @namespace YAHOO.widget
+ * @class RootNode
+ * @extends YAHOO.widget.Node
+ * @param oTree {YAHOO.widget.TreeView} The tree instance this node belongs to
+ * @constructor
+ */
+YAHOO.widget.RootNode = function(oTree) {
+    // Initialize the node with null params.  The root node is a
+    // special case where the node has no presentation.  So we have
+    // to alter the standard properties a bit.
+    this.init(null, null, true);
+    
+    /*
+     * For the root node, we get the tree reference from as a param
+     * to the constructor instead of from the parent element.
+     */
+    this.tree = oTree;
+};
+
+YAHOO.extend(YAHOO.widget.RootNode, YAHOO.widget.Node, {
+    
+   /**
+     * The node type
+     * @property _type
+      * @type string
+     * @private
+     * @default "RootNode"
+     */
+    _type: "RootNode",
+    
+    // overrides YAHOO.widget.Node
+    getNodeHtml: function() { 
+        return ""; 
+    },
+
+    toString: function() { 
+        return this._type;
+    },
+
+    loadComplete: function() { 
+        this.tree.draw();
+    },
+    
+   /**
+     * Count of nodes in tree.  
+    * It overrides Nodes.getNodeCount because the root node should not be counted.
+     * @method getNodeCount
+     * @return {int} number of nodes in the tree
+     */
+    getNodeCount: function() {
+        for (var i = 0, count = 0;i< this.children.length;i++) {
+            count += this.children[i].getNodeCount();
+        }
+        return count;
+    },
+
+  /**
+     * Returns an object which could be used to build a tree out of this node and its children.
+     * It can be passed to the tree constructor to reproduce this node as a tree.
+     * Since the RootNode is automatically created by treeView, 
+     * its own definition is excluded from the returned node definition
+     * which only contains its children.
+     * @method getNodeDefinition
+     * @return {Object | false}  definition of the tree or false if any child node is defined as dynamic
+     */
+    getNodeDefinition: function() {
+        
+        for (var def, defs = [], i = 0; i < this.children.length;i++) {
+            def = this.children[i].getNodeDefinition();
+            if (def === false) { return false;}
+            defs.push(def);
+        }
+        return defs;
+    },
+
+    collapse: function() {},
+    expand: function() {},
+    getSiblings: function() { return null; },
+    focus: function () {}
+
+});
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 /**
  * The default node presentation.  The first parameter should be
  * either a string that will be used as the node's label, or an object
@@ -2447,8 +2931,23 @@
      * @type string
      */
     title: null,
-	
-/**
+    
+    /**
+     * The href for the node's label.  If one is not specified, the href will
+     * be set so that it toggles the node.
+     * @property href
+     * @type string
+     */
+    href: null,
+
+    /**
+     * The label href target, defaults to current window
+     * @property target
+     * @type string
+     */
+    target: "_self",
+    
+    /**
      * The node type
      * @property _type
      * @private
@@ -2470,15 +2969,15 @@
                 label: oData 
             };
         } else {
-        if (oData.style) {
-            this.labelStyle = oData.style;
+            if (oData.style) {
+                this.labelStyle = oData.style;
+            }
         }
-        }
 
         this.label = oData.label;
 
         this.labelElId = "ygtvlabelel" + this.index;
-		
+        
     },
 
     /**
@@ -2492,18 +2991,18 @@
     },
 
     // overrides YAHOO.widget.Node
-	getContentHtml: function() { 
+    getContentHtml: function() { 
         var sb = [];
         sb[sb.length] = this.href?'<a':'<span';
         sb[sb.length] = ' id="' + this.labelElId + '"';
+        sb[sb.length] = ' class="' + this.labelStyle  + '"';
+        if (this.href) {
+            sb[sb.length] = ' href="' + this.href + '"';
+            sb[sb.length] = ' target="' + this.target + '"';
+        } 
         if (this.title) {
             sb[sb.length] = ' title="' + this.title + '"';
         }
-        sb[sb.length] = ' class="' + this.labelStyle  + '"';
-		if (this.href) {
-			sb[sb.length] = ' href="' + this.href + '"';
-			sb[sb.length] = ' target="' + this.target + '"';
-		} 
         sb[sb.length] = ' >';
         sb[sb.length] = this.label;
         sb[sb.length] = this.href?'</a>':'</span>';
@@ -2520,17 +3019,19 @@
      * @return {Object | false}  definition of the tree or false if this node or any descendant is defined as dynamic
      */
     getNodeDefinition: function() {
-		var def = YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);
-		if (def === false) { return false; }
+        var def = YAHOO.widget.TextNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
 
-		// Node specific properties
-		def.label = this.label;
-		if (this.labelStyle != 'ygtvlabel') { def.style = this.labelStyle; }
-		if (this.title) { def.title = this.title ; }
+        // Node specific properties
+        def.label = this.label;
+        if (this.labelStyle != 'ygtvlabel') { def.style = this.labelStyle; }
+        if (this.title) { def.title = this.title; }
+        if (this.href) { def.href = this.href; }
+        if (this.target != '_self') { def.target = this.target; }       
 
-		return def;
-	
-	},
+        return def;
+    
+    },
 
     toString: function() { 
         return YAHOO.widget.TextNode.superclass.toString.call(this) + ": " + this.label;
@@ -2538,98 +3039,66 @@
 
     // deprecated
     onLabelClick: function() {
-		return false;
+        return false;
+    },
+    refresh: function() {
+        YAHOO.widget.TextNode.superclass.refresh.call(this);
+        var label = this.getLabelEl();
+        label.innerHTML = this.label;
+        if (label.tagName.toUpperCase() == 'A') {
+            label.href = this.href;
+            label.target = this.target;
+        }
     }
+        
+    
+
+    
 });
 })();
 /**
- * A custom YAHOO.widget.Node that handles the unique nature of 
- * the virtual, presentationless root node.
+ * A menu-specific implementation that differs from TextNode in that only 
+ * one sibling can be expanded at a time.
  * @namespace YAHOO.widget
- * @class RootNode
- * @extends YAHOO.widget.Node
- * @param oTree {YAHOO.widget.TreeView} The tree instance this node belongs to
+ * @class MenuNode
+ * @extends YAHOO.widget.TextNode
+ * @param oData {object} a string or object containing the data that will
+ * be used to render this node.
+ * Providing a string is the same as providing an object with a single property named label.
+ * All values in the oData will be used to set equally named properties in the node
+ * as long as the node does have such properties, they are not undefined, private or functions.
+ * All attributes are made available in noderef.data, which
+ * can be used to store custom attributes.  TreeView.getNode(s)ByProperty
+ * can be used to retrieve a node by one of the attributes.
+ * @param oParent {YAHOO.widget.Node} this node's parent node
+ * @param expanded {boolean} the initial expanded/collapsed state (deprecated; use oData.expanded) 
  * @constructor
  */
-YAHOO.widget.RootNode = function(oTree) {
-	// Initialize the node with null params.  The root node is a
-	// special case where the node has no presentation.  So we have
-	// to alter the standard properties a bit.
-	this.init(null, null, true);
-	
-	/*
-	 * For the root node, we get the tree reference from as a param
-	 * to the constructor instead of from the parent element.
-	 */
-	this.tree = oTree;
+YAHOO.widget.MenuNode = function(oData, oParent, expanded) {
+    YAHOO.widget.MenuNode.superclass.constructor.call(this,oData,oParent,expanded);
+
+   /*
+     * Menus usually allow only one branch to be open at a time.
+     */
+    this.multiExpand = false;
+
 };
 
-YAHOO.extend(YAHOO.widget.RootNode, YAHOO.widget.Node, {
-    
-   /**
+YAHOO.extend(YAHOO.widget.MenuNode, YAHOO.widget.TextNode, {
+
+    /**
      * The node type
      * @property _type
-      * @type string
      * @private
-     * @default "RootNode"
+    * @default "MenuNode"
      */
-    _type: "RootNode",
-	
-    // overrides YAHOO.widget.Node
-    getNodeHtml: function() { 
-        return ""; 
-    },
+    _type: "MenuNode"
 
-    toString: function() { 
-        return this._type;
-    },
-
-    loadComplete: function() { 
-        this.tree.draw();
-    },
-	
-   /**
-     * Count of nodes in tree.  
-    * It overrides Nodes.getNodeCount because the root node should not be counted.
-     * @method getNodeCount
-     * @return {int} number of nodes in the tree
-     */
-    getNodeCount: function() {
-		for (var i = 0, count = 0;i< this.children.length;i++) {
-			count += this.children[i].getNodeCount();
-		}
-        return count;
-    },
-
-  /**
-     * Returns an object which could be used to build a tree out of this node and its children.
-     * It can be passed to the tree constructor to reproduce this node as a tree.
-     * Since the RootNode is automatically created by treeView, 
-     * its own definition is excluded from the returned node definition
-     * which only contains its children.
-     * @method getNodeDefinition
-     * @return {Object | false}  definition of the tree or false if any child node is defined as dynamic
-     */
-    getNodeDefinition: function() {
-		
-		for (var def, defs = [], i = 0; i < this.children.length;i++) {
-			def = this.children[i].getNodeDefinition();
-			if (def === false) { return false;}
-			defs.push(def);
-		}
-		return defs;
-    },
-
-    collapse: function() {},
-    expand: function() {},
-	getSiblings: function() { return null; },
-	focus: function () {}
-
 });
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event;
 
 /**
  * This implementation takes either a string or object for the
@@ -2682,7 +3151,7 @@
      * @type string
      */
     html: null,
-	
+    
 /**
      * The node type
      * @property _type
@@ -2702,8 +3171,8 @@
     initContent: function(oData, hasIcon) { 
         this.setHtml(oData);
         this.contentElId = "ygtvcontentel" + this.index;
-		if (!Lang.isUndefined(hasIcon)) { this.hasIcon  = hasIcon; }
-		
+        if (!Lang.isUndefined(hasIcon)) { this.hasIcon  = hasIcon; }
+        
     },
 
     /**
@@ -2713,7 +3182,6 @@
      */
     setHtml: function(o) {
 
-        this.data = o;
         this.html = (typeof o === "string") ? o : o.html;
 
         var el = this.getContentEl();
@@ -2727,8 +3195,8 @@
     getContentHtml: function() { 
         return this.html;
     },
-	
-	  /**
+    
+      /**
      * Returns an object which could be used to build a tree out of this node and its children.
      * It can be passed to the tree constructor to reproduce this node as a tree.
      * It will return false if any node loads dynamically, regardless of whether it is loaded or not.
@@ -2736,59 +3204,20 @@
      * @return {Object | false}  definition of the tree or false if any node is defined as dynamic
      */
     getNodeDefinition: function() {
-		var def = YAHOO.widget.HTMLNode.superclass.getNodeDefinition.call(this);
-		if (def === false) { return false; }
-		def.html = this.html;
-		return def;
-	
-	}
+        var def = YAHOO.widget.HTMLNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
+        def.html = this.html;
+        return def;
+    
+    }
 });
 })();
-/**
- * A menu-specific implementation that differs from TextNode in that only 
- * one sibling can be expanded at a time.
- * @namespace YAHOO.widget
- * @class MenuNode
- * @extends YAHOO.widget.TextNode
- * @param oData {object} a string or object containing the data that will
- * be used to render this node.
- * Providing a string is the same as providing an object with a single property named label.
- * All values in the oData will be used to set equally named properties in the node
- * as long as the node does have such properties, they are not undefined, private or functions.
- * All attributes are made available in noderef.data, which
- * can be used to store custom attributes.  TreeView.getNode(s)ByProperty
- * can be used to retrieve a node by one of the attributes.
- * @param oParent {YAHOO.widget.Node} this node's parent node
- * @param expanded {boolean} the initial expanded/collapsed state (deprecated; use oData.expanded) 
- * @constructor
- */
-YAHOO.widget.MenuNode = function(oData, oParent, expanded) {
-	YAHOO.widget.MenuNode.superclass.constructor.call(this,oData,oParent,expanded);
-
-   /*
-     * Menus usually allow only one branch to be open at a time.
-     */
-	this.multiExpand = false;
-
-};
-
-YAHOO.extend(YAHOO.widget.MenuNode, YAHOO.widget.TextNode, {
-
-    /**
-     * The node type
-     * @property _type
-     * @private
-    * @default "MenuNode"
-     */
-    _type: "MenuNode"
-
-});
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang,
-		Event = YAHOO.util.Event,
-		Calendar = YAHOO.widget.Calendar;
-		
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang,
+        Event = YAHOO.util.Event,
+        Calendar = YAHOO.widget.Calendar;
+        
 /**
  * A Date-specific implementation that differs from TextNode in that it uses 
  * YAHOO.widget.Calendar as an in-line editor, if available
@@ -2809,7 +3238,7 @@
  * @constructor
  */
 YAHOO.widget.DateNode = function(oData, oParent, expanded) {
-	YAHOO.widget.DateNode.superclass.constructor.call(this,oData, oParent, expanded);
+    YAHOO.widget.DateNode.superclass.constructor.call(this,oData, oParent, expanded);
 };
 
 YAHOO.extend(YAHOO.widget.DateNode, YAHOO.widget.TextNode, {
@@ -2822,545 +3251,416 @@
      * @default  "DateNode"
      */
     _type: "DateNode",
-	
-	/**
-	* Configuration object for the Calendar editor, if used.
-	* See <a href="http://developer.yahoo.com/yui/calendar/#internationalization">http://developer.yahoo.com/yui/calendar/#internationalization</a>
-	* @property calendarConfig
-	*/
-	calendarConfig: null,
-	
-	
-	
-	/** 
-	 *  If YAHOO.widget.Calendar is available, it will pop up a Calendar to enter a new date.  Otherwise, it falls back to a plain <input>  textbox
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 */
-	fillEditorContainer: function (editorData) {
-	
-		var cal, container = editorData.inputContainer;
-		
-		if (Lang.isUndefined(Calendar)) {
-			Dom.replaceClass(editorData.editorPanel,'ygtv-edit-DateNode','ygtv-edit-TextNode');
-			YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this, editorData);
-			return;
-		}
-			
-		if (editorData.nodeType != this._type) {
-			editorData.nodeType = this._type;
-			editorData.saveOnEnter = false;
-			
-			editorData.node.destroyEditorContents(editorData);
+    
+    /**
+    * Configuration object for the Calendar editor, if used.
+    * See <a href="http://developer.yahoo.com/yui/calendar/#internationalization">http://developer.yahoo.com/yui/calendar/#internationalization</a>
+    * @property calendarConfig
+    */
+    calendarConfig: null,
+    
+    
+    
+    /** 
+     *  If YAHOO.widget.Calendar is available, it will pop up a Calendar to enter a new date.  Otherwise, it falls back to a plain <input>  textbox
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     */
+    fillEditorContainer: function (editorData) {
+    
+        var cal, container = editorData.inputContainer;
+        
+        if (Lang.isUndefined(Calendar)) {
+            Dom.replaceClass(editorData.editorPanel,'ygtv-edit-DateNode','ygtv-edit-TextNode');
+            YAHOO.widget.DateNode.superclass.fillEditorContainer.call(this, editorData);
+            return;
+        }
+            
+        if (editorData.nodeType != this._type) {
+            editorData.nodeType = this._type;
+            editorData.saveOnEnter = false;
+            
+            editorData.node.destroyEditorContents(editorData);
 
-			editorData.inputObject = cal = new Calendar(container.appendChild(document.createElement('div')));
-			if (this.calendarConfig) { 
-				cal.cfg.applyConfig(this.calendarConfig,true); 
-				cal.cfg.fireQueue();
-			}
-			cal.selectEvent.subscribe(function () {
-				this.tree._closeEditor(true);
-			},this,true);
-		} else {
-			cal = editorData.inputObject;
-		}
+            editorData.inputObject = cal = new Calendar(container.appendChild(document.createElement('div')));
+            if (this.calendarConfig) { 
+                cal.cfg.applyConfig(this.calendarConfig,true); 
+                cal.cfg.fireQueue();
+            }
+            cal.selectEvent.subscribe(function () {
+                this.tree._closeEditor(true);
+            },this,true);
+        } else {
+            cal = editorData.inputObject;
+        }
 
-		cal.cfg.setProperty("selected",this.label, false); 
+        cal.cfg.setProperty("selected",this.label, false); 
 
-		var delim = cal.cfg.getProperty('DATE_FIELD_DELIMITER');
-		var pageDate = this.label.split(delim);
-		cal.cfg.setProperty('pagedate',pageDate[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] + delim + pageDate[cal.cfg.getProperty('MDY_YEAR_POSITION') -1]);
-		cal.cfg.fireQueue();
+        var delim = cal.cfg.getProperty('DATE_FIELD_DELIMITER');
+        var pageDate = this.label.split(delim);
+        cal.cfg.setProperty('pagedate',pageDate[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] + delim + pageDate[cal.cfg.getProperty('MDY_YEAR_POSITION') -1]);
+        cal.cfg.fireQueue();
 
-		cal.render();
-		cal.oDomContainer.focus();
-	},
-	/**
-	* Saves the date entered in the editor into the DateNode label property and displays it.
-	* Overrides Node.saveEditorValue
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 */
-	saveEditorValue: function (editorData) {
-		var node = editorData.node, value;
-		if (Lang.isUndefined(Calendar)) {
-			value = editorData.inputElement.value;
-		} else {
-			var cal = editorData.inputObject,
-				date = cal.getSelectedDates()[0],
-				dd = [];
-				
-			dd[cal.cfg.getProperty('MDY_DAY_POSITION') -1] = date.getDate();
-			dd[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] = date.getMonth() + 1;
-			dd[cal.cfg.getProperty('MDY_YEAR_POSITION') -1] = date.getFullYear();
-			value = dd.join(cal.cfg.getProperty('DATE_FIELD_DELIMITER'));
-		}
+        cal.render();
+        cal.oDomContainer.focus();
+    },
+    /**
+    * Saves the date entered in the editor into the DateNode label property and displays it.
+    * Overrides Node.saveEditorValue
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     */
+    saveEditorValue: function (editorData) {
+        var node = editorData.node, 
+            validator = node.tree.validator,
+            value;
+        if (Lang.isUndefined(Calendar)) {
+            value = editorData.inputElement.value;
+        } else {
+            var cal = editorData.inputObject,
+                date = cal.getSelectedDates()[0],
+                dd = [];
+                
+            dd[cal.cfg.getProperty('MDY_DAY_POSITION') -1] = date.getDate();
+            dd[cal.cfg.getProperty('MDY_MONTH_POSITION') -1] = date.getMonth() + 1;
+            dd[cal.cfg.getProperty('MDY_YEAR_POSITION') -1] = date.getFullYear();
+            value = dd.join(cal.cfg.getProperty('DATE_FIELD_DELIMITER'));
+        }
+        if (Lang.isFunction(validator)) {
+            value = validator(value,node.label,node);
+            if (Lang.isUndefined(value)) { return false; }
+        }
 
-		node.label = value;
-		node.data.label = value;
-		node.getLabelEl().innerHTML = value;
-	}
+        node.label = value;
+        node.getLabelEl().innerHTML = value;
+    },
+  /**
+     * Returns an object which could be used to build a tree out of this node and its children.
+     * It can be passed to the tree constructor to reproduce this node as a tree.
+     * It will return false if the node or any descendant loads dynamically, regardless of whether it is loaded or not.
+     * @method getNodeDefinition
+     * @return {Object | false}  definition of the node or false if this node or any descendant is defined as dynamic
+     */ 
+    getNodeDefinition: function() {
+        var def = YAHOO.widget.DateNode.superclass.getNodeDefinition.call(this);
+        if (def === false) { return false; }
+        if (this.calendarConfig) { def.calendarConfig = this.calendarConfig; }
+        return def;
+    }
 
+
 });
 })();
 (function () {
-	var Dom = YAHOO.util.Dom,
-		Lang = YAHOO.lang, 
-		Event = YAHOO.util.Event,
-		TV = YAHOO.widget.TreeView,
-		TVproto = TV.prototype;
+    var Dom = YAHOO.util.Dom,
+        Lang = YAHOO.lang, 
+        Event = YAHOO.util.Event,
+        TV = YAHOO.widget.TreeView,
+        TVproto = TV.prototype;
 
-	/**
-	 * An object to store information used for in-line editing
-	 * for all Nodes of all TreeViews. It contains:
-	 * <ul>
-	* <li>active {boolean}, whether there is an active cell editor </li>
-	* <li>whoHasIt {YAHOO.widget.TreeView} TreeView instance that is currently using the editor</li>
-	* <li>nodeType {string} value of static Node._type property, allows reuse of input element if node is of the same type.</li>
-	* <li>editorPanel {HTMLelement (<div>)} element holding the in-line editor</li>
-	* <li>inputContainer {HTMLelement (<div>)} element which will hold the type-specific input element(s) to be filled by the fillEditorContainer method</li>
-	* <li>buttonsContainer {HTMLelement (<div>)} element which holds the <button> elements for Ok/Cancel.  If you don't want any of the buttons, hide it via CSS styles, don't destroy it</li>
-	* <li>node {YAHOO.widget.Node} reference to the Node being edited</li>
-	* <li>saveOnEnter {boolean}, whether the Enter key should be accepted as a Save command (Esc. is always taken as Cancel), disable for multi-line input elements </li>
-	* </ul>
-	*  Editors are free to use this object to store additional data.
-	 * @property editorData
-	 * @static
-	 * @for YAHOO.widget.TreeView
-	 */
-	TV.editorData = {
-		active:false,
-		whoHasIt:null, // which TreeView has it
-		nodeType:null,
-		editorPanel:null,
-		inputContainer:null,
-		buttonsContainer:null,
-		node:null, // which Node is being edited
-		saveOnEnter:true
-		// Each node type is free to add its own properties to this as it sees fit.
-	};
-	
-	/**
-	* Entry point of the editing plug-in.  
-	* TreeView will call this method if it exists when a node label is clicked
-	* @method _nodeEditing
-	* @param node {YAHOO.widget.Node} the node to be edited
-	* @return {Boolean} true to indicate that the node is editable and prevent any further bubbling of the click.
-	 * @for YAHOO.widget.TreeView
-	*/
-	
-	
-	TVproto._nodeEditing = function (node) {
-		if (node.fillEditorContainer && node.editable) {
-			var ed, topLeft, buttons, button, editorData = TV.editorData;
-			editorData.active = true;
-			editorData.whoHasIt = this;
-			if (!editorData.nodeType) {
-				editorData.editorPanel = ed = document.body.appendChild(document.createElement('div'));
-				Dom.addClass(ed,'ygtv-label-editor');
+    /**
+     * An object to store information used for in-line editing
+     * for all Nodes of all TreeViews. It contains:
+     * <ul>
+    * <li>active {boolean}, whether there is an active cell editor </li>
+    * <li>whoHasIt {YAHOO.widget.TreeView} TreeView instance that is currently using the editor</li>
+    * <li>nodeType {string} value of static Node._type property, allows reuse of input element if node is of the same type.</li>
+    * <li>editorPanel {HTMLelement (<div>)} element holding the in-line editor</li>
+    * <li>inputContainer {HTMLelement (<div>)} element which will hold the type-specific input element(s) to be filled by the fillEditorContainer method</li>
+    * <li>buttonsContainer {HTMLelement (<div>)} element which holds the <button> elements for Ok/Cancel.  If you don't want any of the buttons, hide it via CSS styles, don't destroy it</li>
+    * <li>node {YAHOO.widget.Node} reference to the Node being edited</li>
+    * <li>saveOnEnter {boolean}, whether the Enter key should be accepted as a Save command (Esc. is always taken as Cancel), disable for multi-line input elements </li>
+    * </ul>
+    *  Editors are free to use this object to store additional data.
+     * @property editorData
+     * @static
+     * @for YAHOO.widget.TreeView
+     */
+    TV.editorData = {
+        active:false,
+        whoHasIt:null, // which TreeView has it
+        nodeType:null,
+        editorPanel:null,
+        inputContainer:null,
+        buttonsContainer:null,
+        node:null, // which Node is being edited
+        saveOnEnter:true
+        // Each node type is free to add its own properties to this as it sees fit.
+    };
+    
+    /**
+    * Validator function for edited data, called from the TreeView instance scope, 
+    * receives the arguments (newValue, oldValue, nodeInstance) 
+    * and returns either the validated (or type-converted) value or undefined. 
+    * An undefined return will prevent the editor from closing
+    * @property validator
+    * @default null
+     * @for YAHOO.widget.TreeView
+     */
+    TVproto.validator = null;
+    
+    /**
+    * Entry point of the editing plug-in.  
+    * TreeView will call this method if it exists when a node label is clicked
+    * @method _nodeEditing
+    * @param node {YAHOO.widget.Node} the node to be edited
+    * @return {Boolean} true to indicate that the node is editable and prevent any further bubbling of the click.
+     * @for YAHOO.widget.TreeView
+     * @private
+    */
+    
+    
+    TVproto._nodeEditing = function (node) {
+        if (node.fillEditorContainer && node.editable) {
+            var ed, topLeft, buttons, button, editorData = TV.editorData;
+            editorData.active = true;
+            editorData.whoHasIt = this;
+            if (!editorData.nodeType) {
+                editorData.editorPanel = ed = document.body.appendChild(document.createElement('div'));
+                Dom.addClass(ed,'ygtv-label-editor');
 
-				buttons = editorData.buttonsContainer = ed.appendChild(document.createElement('div'));
-				Dom.addClass(buttons,'ygtv-button-container');
-				button = buttons.appendChild(document.createElement('button'));
-				Dom.addClass(button,'ygtvok');
-				button.innerHTML = ' ';
-				button = buttons.appendChild(document.createElement('button'));
-				Dom.addClass(button,'ygtvcancel');
-				button.innerHTML = ' ';
-				Event.on(buttons, 'click', function (ev) {
-					var target = Event.getTarget(ev);
-					var node = TV.editorData.node;
-					if (Dom.hasClass(target,'ygtvok')) {
-						Event.stopEvent(ev);
-						this._closeEditor(true);
-					}
-					if (Dom.hasClass(target,'ygtvcancel')) {
-						Event.stopEvent(ev);
-						this._closeEditor(false);
-					}
-				}, this, true);
+                buttons = editorData.buttonsContainer = ed.appendChild(document.createElement('div'));
+                Dom.addClass(buttons,'ygtv-button-container');
+                button = buttons.appendChild(document.createElement('button'));
+                Dom.addClass(button,'ygtvok');
+                button.innerHTML = ' ';
+                button = buttons.appendChild(document.createElement('button'));
+                Dom.addClass(button,'ygtvcancel');
+                button.innerHTML = ' ';
+                Event.on(buttons, 'click', function (ev) {
+                    var target = Event.getTarget(ev);
+                    var node = TV.editorData.node;
+                    if (Dom.hasClass(target,'ygtvok')) {
+                        Event.stopEvent(ev);
+                        this._closeEditor(true);
+                    }
+                    if (Dom.hasClass(target,'ygtvcancel')) {
+                        Event.stopEvent(ev);
+                        this._closeEditor(false);
+                    }
+                }, this, true);
 
-				editorData.inputContainer = ed.appendChild(document.createElement('div'));
-				Dom.addClass(editorData.inputContainer,'ygtv-input');
-				
-				Event.on(ed,'keydown',function (ev) {
-					var editorData = TV.editorData,
-						KEY = YAHOO.util.KeyListener.KEY;
-					switch (ev.keyCode) {
-						case KEY.ENTER:
-							Event.stopEvent(ev);
-							if (editorData.saveOnEnter) { 
-								this._closeEditor(true);
-							}
-							break;
-						case KEY.ESCAPE:
-							Event.stopEvent(ev);
-							this._closeEditor(false);
-							break;
-					}
-				},this,true);
+                editorData.inputContainer = ed.appendChild(document.createElement('div'));
+                Dom.addClass(editorData.inputContainer,'ygtv-input');
+                
+                Event.on(ed,'keydown',function (ev) {
+                    var editorData = TV.editorData,
+                        KEY = YAHOO.util.KeyListener.KEY;
+                    switch (ev.keyCode) {
+                        case KEY.ENTER:
+                            Event.stopEvent(ev);
+                            if (editorData.saveOnEnter) { 
+                                this._closeEditor(true);
+                            }
+                            break;
+                        case KEY.ESCAPE:
+                            Event.stopEvent(ev);
+                            this._closeEditor(false);
+                            break;
+                    }
+                },this,true);
 
 
-				
-			} else {
-				ed = editorData.editorPanel;
-			}
-			editorData.node = node;
-			if (editorData.nodeType) {
-				Dom.removeClass(ed,'ygtv-edit-' + editorData.nodeType);
-			}
-			Dom.addClass(ed,' ygtv-edit-' + node._type);
-			topLeft = Dom.getXY(node.getContentEl());
-			Dom.setStyle(ed,'left',topLeft[0] + 'px');
-			Dom.setStyle(ed,'top',topLeft[1] + 'px');
-			Dom.setStyle(ed,'display','block');
-			ed.focus();
-			node.fillEditorContainer(editorData);
-
-			return true;  // If inline editor available, don't do anything else.
-		}
-	};
-	
-	/**
-	* Method to be associated with an event (clickEvent, dblClickEvent or enterKeyPressed) to pop up the contents editor
-	*  It calls the corresponding node editNode method.
-	* @method onEventEditNode
-	* @param oArgs {object} Object passed as arguments to TreeView event listeners
-	 * @for YAHOO.widget.TreeView
-	*/
-
-	TVproto.onEventEditNode = function (oArgs) {
-		if (oArgs instanceof YAHOO.widget.Node) {
-			oArgs.editNode();
-		} else if (oArgs.node instanceof YAHOO.widget.Node) {
-			oArgs.node.editNode();
-		}
-	};
-	
-	/**
-	* Method to be called when the inline editing is finished and the editor is to be closed
-	* @method _closeEditor
-	* @param save {Boolean} true if the edited value is to be saved, false if discarded
-	* @private
-	 * @for YAHOO.widget.TreeView
-	*/
-	
-	TVproto._closeEditor = function (save) {
-		var ed = TV.editorData, 
-			node = ed.node;
-		if (save) { 
-			ed.node.saveEditorValue(ed); 
-		}
-		Dom.setStyle(ed.editorPanel,'display','none');	
-		ed.active = false;
-		node.focus();
-	};
-	
-	/**
-	*  Entry point for TreeView's destroy method to destroy whatever the editing plug-in has created
-	* @method _destroyEditor
-	* @private
-	 * @for YAHOO.widget.TreeView
-	*/
-	TVproto._destroyEditor = function() {
-		var ed = TV.editorData;
-		if (ed && ed.nodeType && (!ed.active || ed.whoHasIt === this)) {
-			Event.removeListener(ed.editorPanel,'keydown');
-			Event.removeListener(ed.buttonContainer,'click');
-			ed.node.destroyEditorContents(ed);
-			document.body.removeChild(ed.editorPanel);
-			ed.nodeType = ed.editorPanel = ed.inputContainer = ed.buttonsContainer = ed.whoHasIt = ed.node = null;
-			ed.active = false;
-		}
-	};
-	
-	var Nproto = YAHOO.widget.Node.prototype;
-	
-	/**
-	* Signals if the label is editable.  (Ignored on TextNodes with href set.)
-	* @property editable
-	* @type boolean
-         * @for YAHOO.widget.Node
-	*/
-	Nproto.editable = false;
-	
-	/**
-	* pops up the contents editor, if there is one and the node is declared editable
-	* @method editNode
-	 * @for YAHOO.widget.Node
-	*/
-	
-	Nproto.editNode = function () {
-		this.tree._nodeEditing(this);
-	};
-	
-	
-
-
-	/** Placeholder for a function that should provide the inline node label editor.
-	 *   Leaving it set to null will indicate that this node type is not editable.
-	 * It should be overridden by nodes that provide inline editing.
-	 *  The Node-specific editing element (input box, textarea or whatever) should be inserted into editorData.inputContainer.
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.fillEditorContainer = null;
-
-	
-	/**
-	* Node-specific destroy function to empty the contents of the inline editor panel
-	* This function is the worst case alternative that will purge all possible events and remove the editor contents
-	* Method Event.purgeElement is somewhat costly so if it can be replaced by specifc Event.removeListeners, it is better to do so.
-	* @method destroyEditorContents
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.destroyEditorContents = function (editorData) {
-		// In the worst case, if the input editor (such as the Calendar) has no destroy method
-		// we can only try to remove all possible events on it.
-		Event.purgeElement(editorData.inputContainer,true);
-		editorData.inputContainer.innerHTML = '';
-	};
-
-	/**
-	* Saves the value entered into the editor.
-	* Should be overridden by each node type
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.Node
-	 */
-	Nproto.saveEditorValue = function (editorData) {
-	};
-	
-	var TNproto = YAHOO.widget.TextNode.prototype;
-	
-
-
-	/** 
-	 *  Places an <input>  textbox in the input container and loads the label text into it
-	 * @method fillEditorContainer
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @return void
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.fillEditorContainer = function (editorData) {
-	
-		var input;
-		// If last node edited is not of the same type as this one, delete it and fill it with our editor
-		if (editorData.nodeType != this._type) {
-			editorData.nodeType = this._type;
-			editorData.saveOnEnter = true;
-			editorData.node.destroyEditorContents(editorData);
-
-			editorData.inputElement = input = editorData.inputContainer.appendChild(document.createElement('input'));
-			
-		} else {
-			// if the last node edited was of the same time, reuse the input element.
-			input = editorData.inputElement;
-		}
-
-		input.value = this.label;
-		input.focus();
-		input.select();
-	};
-	
-	/**
-	* Saves the value entered in the editor into the TextNode label property and displays it
-	* Overrides Node.saveEditorValue
-	* @method saveEditorValue
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.saveEditorValue = function (editorData) {
-		var node = editorData.node, value = editorData.inputElement.value;
-		node.label = value;
-		node.data.label = value;
-		node.getLabelEl().innerHTML = value;
-	};
-
-	/**
-	* Destroys the contents of the inline editor panel
-	* Overrides Node.destroyEditorContent
-	* Since we didn't set any event listeners on this inline editor, it is more efficient to avoid the generic method in Node
-	* @method destroyEditorContents
-	 * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
-	 * @for YAHOO.widget.TextNode
-	 */
-	TNproto.destroyEditorContents = function (editorData) {
-		editorData.inputContainer.innerHTML = '';
-	};
-})();
-/**
- * A static factory class for tree view expand/collapse animations
- * @class TVAnim
- * @static
- */
-YAHOO.widget.TVAnim = function() {
-    return {
-        /**
-         * Constant for the fade in animation
-         * @property FADE_IN
-         * @type string
-         * @static
-         */
-        FADE_IN: "TVFadeIn",
-
-        /**
-         * Constant for the fade out animation
-         * @property FADE_OUT
-         * @type string
-         * @static
-         */
-        FADE_OUT: "TVFadeOut",
-
-        /**
-         * Returns a ygAnim instance of the given type
-         * @method getAnim
-         * @param type {string} the type of animation
-         * @param el {HTMLElement} the element to element (probably the children div)
-         * @param callback {function} function to invoke when the animation is done.
-         * @return {YAHOO.util.Animation} the animation instance
-         * @static
-         */
-        getAnim: function(type, el, callback) {
-            if (YAHOO.widget[type]) {
-                return new YAHOO.widget[type](el, callback);
+                
             } else {
-                return null;
+                ed = editorData.editorPanel;
             }
-        },
+            editorData.node = node;
+            if (editorData.nodeType) {
+                Dom.removeClass(ed,'ygtv-edit-' + editorData.nodeType);
+            }
+            Dom.addClass(ed,' ygtv-edit-' + node._type);
+            topLeft = Dom.getXY(node.getContentEl());
+            Dom.setStyle(ed,'left',topLeft[0] + 'px');
+            Dom.setStyle(ed,'top',topLeft[1] + 'px');
+            Dom.setStyle(ed,'display','block');
+            ed.focus();
+            node.fillEditorContainer(editorData);
 
-        /**
-         * Returns true if the specified animation class is available
-         * @method isValid
-         * @param type {string} the type of animation
-         * @return {boolean} true if valid, false if not
-         * @static
-         */
-        isValid: function(type) {
-            return (YAHOO.widget[type]);
+            return true;  // If inline editor available, don't do anything else.
         }
     };
-} ();
-/**
- * A 1/2 second fade-in animation.
- * @class TVFadeIn
- * @constructor
- * @param el {HTMLElement} the element to animate
- * @param callback {function} function to invoke when the animation is finished
- */
-YAHOO.widget.TVFadeIn = function(el, callback) {
+    
     /**
-     * The element to animate
-     * @property el
-     * @type HTMLElement
-     */
-    this.el = el;
+    * Method to be associated with an event (clickEvent, dblClickEvent or enterKeyPressed) to pop up the contents editor
+    *  It calls the corresponding node editNode method.
+    * @method onEventEditNode
+    * @param oArgs {object} Object passed as arguments to TreeView event listeners
+     * @for YAHOO.widget.TreeView
+    */
 
+    TVproto.onEventEditNode = function (oArgs) {
+        if (oArgs instanceof YAHOO.widget.Node) {
+            oArgs.editNode();
+        } else if (oArgs.node instanceof YAHOO.widget.Node) {
+            oArgs.node.editNode();
+        }
+    };
+    
     /**
-     * the callback to invoke when the animation is complete
-     * @property callback
-     * @type function
-     */
-    this.callback = callback;
-
-};
-
-YAHOO.widget.TVFadeIn.prototype = {
+    * Method to be called when the inline editing is finished and the editor is to be closed
+    * @method _closeEditor
+    * @param save {Boolean} true if the edited value is to be saved, false if discarded
+    * @private
+     * @for YAHOO.widget.TreeView
+    */
+    
+    TVproto._closeEditor = function (save) {
+        var ed = TV.editorData, 
+            node = ed.node,
+            close = true;
+        if (save) { 
+            close = ed.node.saveEditorValue(ed) !== false; 
+        }
+        if (close) {
+            Dom.setStyle(ed.editorPanel,'display','none');  
+            ed.active = false;
+            node.focus();
+        }
+    };
+    
     /**
-     * Performs the animation
-     * @method animate
-     */
-    animate: function() {
-        var tvanim = this;
+    *  Entry point for TreeView's destroy method to destroy whatever the editing plug-in has created
+    * @method _destroyEditor
+    * @private
+     * @for YAHOO.widget.TreeView
+    */
+    TVproto._destroyEditor = function() {
+        var ed = TV.editorData;
+        if (ed && ed.nodeType && (!ed.active || ed.whoHasIt === this)) {
+            Event.removeListener(ed.editorPanel,'keydown');
+            Event.removeListener(ed.buttonContainer,'click');
+            ed.node.destroyEditorContents(ed);
+            document.body.removeChild(ed.editorPanel);
+            ed.nodeType = ed.editorPanel = ed.inputContainer = ed.buttonsContainer = ed.whoHasIt = ed.node = null;
+            ed.active = false;
+        }
+    };
+    
+    var Nproto = YAHOO.widget.Node.prototype;
+    
+    /**
+    * Signals if the label is editable.  (Ignored on TextNodes with href set.)
+    * @property editable
+    * @type boolean
+         * @for YAHOO.widget.Node
+    */
+    Nproto.editable = false;
+    
+    /**
+    * pops up the contents editor, if there is one and the node is declared editable
+    * @method editNode
+     * @for YAHOO.widget.Node
+    */
+    
+    Nproto.editNode = function () {
+        this.tree._nodeEditing(this);
+    };
+    
+    
 
-        var s = this.el.style;
-        s.opacity = 0.1;
-        s.filter = "alpha(opacity=10)";
-        s.display = "";
 
-        var dur = 0.4; 
-        var a = new YAHOO.util.Anim(this.el, {opacity: {from: 0.1, to: 1, unit:""}}, dur);
-        a.onComplete.subscribe( function() { tvanim.onComplete(); } );
-        a.animate();
-    },
-
-    /**
-     * Clean up and invoke callback
-     * @method onComplete
+    /** Placeholder for a function that should provide the inline node label editor.
+     *   Leaving it set to null will indicate that this node type is not editable.
+     * It should be overridden by nodes that provide inline editing.
+     *  The Node-specific editing element (input box, textarea or whatever) should be inserted into editorData.inputContainer.
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     * @for YAHOO.widget.Node
      */
-    onComplete: function() {
-        this.callback();
-    },
+    Nproto.fillEditorContainer = null;
 
+    
     /**
-     * toString
-     * @method toString
-     * @return {string} the string representation of the instance
+    * Node-specific destroy function to empty the contents of the inline editor panel
+    * This function is the worst case alternative that will purge all possible events and remove the editor contents
+    * Method Event.purgeElement is somewhat costly so if it can be replaced by specifc Event.removeListeners, it is better to do so.
+    * @method destroyEditorContents
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.Node
      */
-    toString: function() {
-        return "TVFadeIn";
-    }
-};
-/**
- * A 1/2 second fade out animation.
- * @class TVFadeOut
- * @constructor
- * @param el {HTMLElement} the element to animate
- * @param callback {Function} function to invoke when the animation is finished
- */
-YAHOO.widget.TVFadeOut = function(el, callback) {
-    /**
-     * The element to animate
-     * @property el
-     * @type HTMLElement
-     */
-    this.el = el;
+    Nproto.destroyEditorContents = function (editorData) {
+        // In the worst case, if the input editor (such as the Calendar) has no destroy method
+        // we can only try to remove all possible events on it.
+        Event.purgeElement(editorData.inputContainer,true);
+        editorData.inputContainer.innerHTML = '';
+    };
 
     /**
-     * the callback to invoke when the animation is complete
-     * @property callback
-     * @type function
+    * Saves the value entered into the editor.
+    * Should be overridden by each node type
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return a return of exactly false will prevent the editor from closing
+     * @for YAHOO.widget.Node
      */
-    this.callback = callback;
+    Nproto.saveEditorValue = function (editorData) {
+    };
+    
+    var TNproto = YAHOO.widget.TextNode.prototype;
+    
 
-};
 
-YAHOO.widget.TVFadeOut.prototype = {
-    /**
-     * Performs the animation
-     * @method animate
+    /** 
+     *  Places an <input>  textbox in the input container and loads the label text into it
+     * @method fillEditorContainer
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @return void
+     * @for YAHOO.widget.TextNode
      */
-    animate: function() {
-        var tvanim = this;
-        var dur = 0.4;
-        var a = new YAHOO.util.Anim(this.el, {opacity: {from: 1, to: 0.1, unit:""}}, dur);
-        a.onComplete.subscribe( function() { tvanim.onComplete(); } );
-        a.animate();
-    },
+    TNproto.fillEditorContainer = function (editorData) {
+    
+        var input;
+        // If last node edited is not of the same type as this one, delete it and fill it with our editor
+        if (editorData.nodeType != this._type) {
+            editorData.nodeType = this._type;
+            editorData.saveOnEnter = true;
+            editorData.node.destroyEditorContents(editorData);
 
+            editorData.inputElement = input = editorData.inputContainer.appendChild(document.createElement('input'));
+            
+        } else {
+            // if the last node edited was of the same time, reuse the input element.
+            input = editorData.inputElement;
+        }
+
+        input.value = this.label;
+        input.focus();
+        input.select();
+    };
+    
     /**
-     * Clean up and invoke callback
-     * @method onComplete
+    * Saves the value entered in the editor into the TextNode label property and displays it
+    * Overrides Node.saveEditorValue
+    * @method saveEditorValue
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.TextNode
      */
-    onComplete: function() {
-        var s = this.el.style;
-        s.display = "none";
-        // s.opacity = 1;
-        s.filter = "alpha(opacity=100)";
-        this.callback();
-    },
+    TNproto.saveEditorValue = function (editorData) {
+        var node = editorData.node, 
+            value = editorData.inputElement.value,
+            validator = node.tree.validator;
+        
+        if (Lang.isFunction(validator)) {
+            value = validator(value,node.label,node);
+            if (Lang.isUndefined(value)) { return false; }
+        }
+        node.label = value;
+        node.getLabelEl().innerHTML = value;
+    };
 
     /**
-     * toString
-     * @method toString
-     * @return {string} the string representation of the instance
+    * Destroys the contents of the inline editor panel
+    * Overrides Node.destroyEditorContent
+    * Since we didn't set any event listeners on this inline editor, it is more efficient to avoid the generic method in Node
+    * @method destroyEditorContents
+     * @param editorData {YAHOO.widget.TreeView.editorData}  a shortcut to the static object holding editing information
+     * @for YAHOO.widget.TextNode
      */
-    toString: function() {
-        return "TVFadeOut";
-    }
-};
-YAHOO.register("treeview", YAHOO.widget.TreeView, {version: "2.6.0", build: "1321"});
+    TNproto.destroyEditorContents = function (editorData) {
+        editorData.inputContainer.innerHTML = '';
+    };
+})();
+YAHOO.register("treeview", YAHOO.widget.TreeView, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/uploader/README
===================================================================
--- trunk/root/static/yui/uploader/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,30 +0,0 @@
-YUI Library - Uploader - Release Notes
-
-2.6.0
-  * Changes due to new security rules in Flash Player 10:
-     * Browse() function has been eliminated; the uploader now has to have an internal Flash UI.
-     * The Uploader can be rendered as a transparent Flash layer, or as a skinned button.
-     * Mouse events on the Uploader are exposed to JavaScript.
-
-  * Known issues:
-	 * The intended behavior of the uploader is not to send any cookies with its requests. Due to a limitation 
-	   of the Windows networking library, when running in IE, the uploader sends the cookies with the upload.
-	   However, you cannot rely on this behavior for authentication, because it's absent in other browsers. 
-	   As a workaround, we suggest either using a cookieless upload method or appending document.cookie
-	   to the upload request.
-	 * There are some known issues around keyboard interaction with the uploader. In particular, when the 
-	   uploader is rendered as a transparent layer, it does not respond to keyboard presses - only mouse
-	   functionality is available. When the uploader is rendered as an image, it receives "Space" and "Enter" 
-	   key presses as triggers, but only if the focus is on the uploader component itself. Keyboard tabbing 
-	   to the component behaves differently in different browsers.
-	 * Because of Flash limitations, the uploader does not support basic authentication.
-	 * Because of Flash limitations, the uploader behavior when working through a proxy server is inconsistent 
-	   and unreliable.
-     * When uploading to HTTPS servers, be aware that Flash does not support self-signed certificates. You 
-       would need to obtain certificates from a recognized certificate authority.
-
-2.5.1
-  * Fix to ensure UploadCancel fires when expected.
-  
-2.5.0
-  * Experimental release
\ No newline at end of file

Modified: trunk/root/static/yui/uploader/assets/uploader.swf
===================================================================
(Binary files differ)

Added: trunk/root/static/yui/uploader/uploader-debug.js
===================================================================
--- trunk/root/static/yui/uploader/uploader-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1057 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
+/*!
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+
+YAHOO.namespace("deconcept"); 
+	
+YAHOO.deconcept = YAHOO.deconcept || {};
+
+if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
+{
+	YAHOO.deconcept.util = {};
+}
+
+if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
+{
+	YAHOO.deconcept.SWFObjectUtil = {};
+}
+
+YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
+{
+	if(!document.getElementById) { return; }
+	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
+	this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
+	this.params = {};
+	this.variables = {};
+	this.attributes = [];
+	if(swf) { this.setAttribute('swf', swf); }
+	if(id) { this.setAttribute('id', id); }
+	if(w) { this.setAttribute('width', w); }
+	if(h) { this.setAttribute('height', h); }
+	if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
+	this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
+	if (!window.opera && document.all && this.installedVer.major > 7)
+	{
+		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
+		YAHOO.deconcept.SWFObject.doPrepUnload = true;
+	}
+	if(c)
+	{
+		this.addParam('bgcolor', c);
+	}
+	var q = quality ? quality : 'high';
+	this.addParam('quality', q);
+	this.setAttribute('useExpressInstall', false);
+	this.setAttribute('doExpressInstall', false);
+	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
+	this.setAttribute('xiRedirectUrl', xir);
+	this.setAttribute('redirectUrl', '');
+	if(redirectUrl)
+	{
+		this.setAttribute('redirectUrl', redirectUrl);
+	}
+};
+
+YAHOO.deconcept.SWFObject.prototype =
+{
+	useExpressInstall: function(path)
+	{
+		this.xiSWFPath = !path ? "expressinstall.swf" : path;
+		this.setAttribute('useExpressInstall', true);
+	},
+	setAttribute: function(name, value){
+		this.attributes[name] = value;
+	},
+	getAttribute: function(name){
+		return this.attributes[name];
+	},
+	addParam: function(name, value){
+		this.params[name] = value;
+	},
+	getParams: function(){
+		return this.params;
+	},
+	addVariable: function(name, value){
+		this.variables[name] = value;
+	},
+	getVariable: function(name){
+		return this.variables[name];
+	},
+	getVariables: function(){
+		return this.variables;
+	},
+	getVariablePairs: function(){
+		var variablePairs = [];
+		var key;
+		var variables = this.getVariables();
+		for(key in variables)
+		{
+			if(variables.hasOwnProperty(key))
+			{
+				variablePairs[variablePairs.length] = key +"="+ variables[key];
+			}
+		}
+		return variablePairs;
+	},
+	getSWFHTML: function() {
+		var swfNode = "";
+		var params = {};
+		var key = "";
+		var pairs = "";
+		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "PlugIn");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
+			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += [key] +'="'+ params[key] +'" ';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
+			swfNode += '/>';
+		} else { // PC IE
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "ActiveX");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
+			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
+			swfNode += "</object>";
+		}
+		return swfNode;
+	},
+	write: function(elementId)
+	{
+		if(this.getAttribute('useExpressInstall')) {
+			// check to see if we need to do an express install
+			var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
+			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
+				this.setAttribute('doExpressInstall', true);
+				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
+				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+				this.addVariable("MMdoctitle", document.title);
+			}
+		}
+		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
+		{
+			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
+			n.innerHTML = this.getSWFHTML();
+			return true;
+		}
+		else
+		{
+			if(this.getAttribute('redirectUrl') !== "")
+			{
+				document.location.replace(this.getAttribute('redirectUrl'));
+			}
+		}
+		return false;
+	}
+};
+
+/* ---- detection functions ---- */
+YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
+{
+	var axo = null;
+	var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
+	if(navigator.plugins && navigator.mimeTypes.length)
+	{
+		var x = navigator.plugins["Shockwave Flash"];
+		if(x && x.description)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+		}
+	}
+	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
+	{ // if Windows CE
+		var counter = 3;
+		while(axo)
+		{
+			try
+			{
+				counter++;
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
+//				document.write("player v: "+ counter);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
+			}
+			catch(e)
+			{
+				axo = null;
+			}
+		}
+	}
+	else
+	{ // Win IE (non mobile)
+		// do minor version lookup in IE, but avoid fp6 crashing issues
+		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+		try
+		{
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+		}
+		catch(e)
+		{
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
+				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
+			}
+			catch(e)
+			{
+				if(PlayerVersion.major == 6)
+				{
+					return PlayerVersion;
+				}
+			}
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+			}
+			catch(e) {}
+		}
+		
+		if(axo !== null)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+		}
+	}
+	return PlayerVersion;
+};
+
+YAHOO.deconcept.PlayerVersion = function(arrVersion)
+{
+	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
+	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
+	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
+};
+
+YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
+{
+	if(this.major < fv.major)
+	{
+		return false;
+	}
+	if(this.major > fv.major)
+	{
+		return true;
+	}
+	if(this.minor < fv.minor)
+	{
+		return false;
+	}
+	if(this.minor > fv.minor)
+	{
+		return true;
+	}
+	if(this.rev < fv.rev)
+	{
+		return false;
+	}
+	return true;
+};
+
+/* ---- get value of query string param ---- */
+YAHOO.deconcept.util =
+{
+	getRequestParameter: function(param)
+	{
+		var q = document.location.search || document.location.hash;
+		if(param === null) { return q; }
+		if(q)
+		{
+			var pairs = q.substring(1).split("&");
+			for(var i=0; i < pairs.length; i++)
+			{
+				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
+				{
+					return pairs[i].substring((pairs[i].indexOf("=") + 1));
+				}
+			}
+		}
+		return "";
+	}
+};
+
+/* fix for video streaming bug */
+YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
+{
+	var objects = document.getElementsByTagName("OBJECT");
+	for(var i = objects.length - 1; i >= 0; i--)
+	{
+		objects[i].style.display = 'none';
+		for(var x in objects[i])
+		{
+			if(typeof objects[i][x] == 'function')
+			{
+				objects[i][x] = function(){};
+			}
+		}
+	}
+};
+
+// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
+if(YAHOO.deconcept.SWFObject.doPrepUnload)
+{
+	if(!YAHOO.deconcept.unloadSet)
+	{
+		YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
+		{
+			__flash_unloadHandler = function(){};
+			__flash_savedUnloadHandler = function(){};
+			window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
+		};
+		window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
+		YAHOO.deconcept.unloadSet = true;
+	}
+}
+
+/* add document.getElementById if needed (mobile IE < 5) */
+if(!document.getElementById && document.all)
+{
+	document.getElementById = function(id) { return document.all[id]; };
+}
+/**
+ * Wraps Flash embedding functionality and allows communication with SWF through
+ * attributes.
+ *
+ * @namespace YAHOO.widget
+ * @class FlashAdapter
+ * @uses YAHOO.util.AttributeProvider
+ */
+YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes, buttonSkin)
+{
+	
+	this._queue = this._queue || [];
+	this._events = this._events || {};
+	this._configs = this._configs || {};
+	attributes = attributes || {};
+	
+	//the Flash Player external interface code from Adobe doesn't play nicely
+	//with the default value, yui-gen, in IE
+	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
+	attributes.version = attributes.version || "9.0.45";
+	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
+	
+	//we can't use the initial attributes right away
+	//so save them for once the SWF finishes loading
+	this._attributes = attributes;
+	
+	this._swfURL = swfURL;
+	this._containerID = containerID;
+	
+	//embed the SWF file in the page
+	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
+		attributes.backgroundColor, attributes.expressInstall, attributes.wmode, buttonSkin);
+	
+	/**
+	 * Fires when the SWF is initialized and communication is possible.
+	 * @event contentReady
+	 */
+	//Fix for iframe cross-domain issue with FF2x 
+	try
+	{
+		this.createEvent("contentReady");
+	}
+	catch(e){}
+};
+
+YAHOO.widget.FlashAdapter.owners = YAHOO.widget.FlashAdapter.owners || {};
+
+YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
+{
+	/**
+	 * The URL of the SWF file.
+	 * @property _swfURL
+	 * @type String
+	 * @private
+	 */
+	_swfURL: null,
+
+	/**
+	 * The ID of the containing DIV.
+	 * @property _containerID
+	 * @type String
+	 * @private
+	 */
+	_containerID: null,
+
+	/**
+	 * A reference to the embedded SWF file.
+	 * @property _swf
+	 * @private
+	 */
+	_swf: null,
+
+	/**
+	 * The id of this instance.
+	 * @property _id
+	 * @type String
+	 * @private
+	 */
+	_id: null,
+
+	/**
+	 * Indicates whether the SWF has been initialized and is ready
+	 * to communicate with JavaScript
+	 * @property _initialized
+	 * @type Boolean
+	 * @private
+	 */
+	_initialized: false,
+	
+	/**
+	 * The initializing attributes are stored here until the SWF is ready.
+	 * @property _attributes
+	 * @type Object
+	 * @private
+	 */
+	_attributes: null, //the intializing attributes
+
+	/**
+	 * Public accessor to the unique name of the FlashAdapter instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the FlashAdapter instance.
+	 */
+	toString: function()
+	{
+		return "FlashAdapter " + this._id;
+	},
+
+	/**
+	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
+	 * event listeners and clears out DOM elements inside the container. After calling
+	 * this method, the instance reference should be expliclitly nulled by implementer,
+	 * as in myChart = null. Use with caution!
+	 *
+	 * @method destroy
+	 */
+	destroy: function()
+	{
+		//kill the Flash Player instance
+		if(this._swf)
+		{
+			var container = YAHOO.util.Dom.get(this._containerID);
+			container.removeChild(this._swf);
+		}
+		
+		var instanceName = this._id;
+		
+		//null out properties
+		for(var prop in this)
+		{
+			if(YAHOO.lang.hasOwnProperty(this, prop))
+			{
+				this[prop] = null;
+			}
+		}
+		
+		YAHOO.log("FlashAdapter instance destroyed: " + instanceName);
+	},
+
+	/**
+	 * Embeds the SWF in the page and associates it with this instance.
+	 *
+	 * @method _embedSWF
+	 * @private
+	 */
+	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode, buttonSkin)
+	{
+		//standard SWFObject embed
+		var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
+
+		if(expressInstall)
+		{
+			swfObj.useExpressInstall(expressInstall);
+		}
+
+		//make sure we can communicate with ExternalInterface
+		swfObj.addParam("allowScriptAccess", "always");
+		
+		if(wmode)
+		{
+			swfObj.addParam("wmode", wmode);
+		}
+		
+		swfObj.addParam("menu", "false");
+		
+		//again, a useful ExternalInterface trick
+		swfObj.addVariable("allowedDomain", document.location.hostname);
+
+		//tell the SWF which HTML element it is in
+		swfObj.addVariable("elementID", swfID);
+
+		// set the name of the function to call when the swf has an event
+		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
+		if (buttonSkin) {
+		swfObj.addVariable("buttonSkin", buttonSkin);
+		}
+		var container = YAHOO.util.Dom.get(containerID);
+		var result = swfObj.write(container);
+		if(result)
+		{
+			this._swf = YAHOO.util.Dom.get(swfID);
+			YAHOO.widget.FlashAdapter.owners[swfID] = this;
+		}
+		else
+		{
+			YAHOO.log("Unable to load SWF " + swfURL);
+		}
+	},
+
+	/**
+	 * Handles or re-dispatches events received from the SWF.
+	 *
+	 * @method _eventHandler
+	 * @private
+	 */
+	_eventHandler: function(event)
+	{
+		var type = event.type;
+		switch(type)
+		{
+			case "swfReady":
+   				this._loadHandler();
+				return;
+			case "log":
+				YAHOO.log(event.message, event.category, this.toString());
+				return;
+		}
+		
+		
+		//be sure to return after your case or the event will automatically fire!
+		this.fireEvent(type, event);
+	},
+
+	/**
+	 * Called when the SWF has been initialized.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		this._initialized = false;
+		this._initAttributes(this._attributes);
+		this.setAttributes(this._attributes, true);
+		
+		this._initialized = true;
+		this.fireEvent("contentReady");
+	},
+	
+	set: function(name, value)
+	{
+		//save all the attributes in case the swf reloads
+		//so that we can pass them in again
+		this._attributes[name] = value;
+		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		//should be overridden if other attributes need to be set up
+
+		/**
+		 * @attribute wmode
+		 * @description Sets the window mode of the Flash Player control. May be
+		 *		"window", "opaque", or "transparent". Only available in the constructor
+		 *		because it may not be set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute expressInstall
+		 * @description URL pointing to a SWF file that handles Flash Player's express
+		 *		install feature. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute version
+		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute backgroundColor
+		 * @description The background color of the SWF. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute altText
+		 * @description The alternative text to provide for screen readers and other assistive technology.
+		 * @type String
+		 */
+		this.getAttributeConfig("altText",
+		{
+			method: this._getAltText
+		});
+		this.setAttributeConfig("altText",
+		{
+			method: this._setAltText
+		});
+		
+		/**
+		 * @attribute swfURL
+		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		this.getAttributeConfig("swfURL",
+		{
+			method: this._getSWFURL
+		});
+	},
+	
+	/**
+	 * Getter for swfURL attribute.
+	 *
+	 * @method _getSWFURL
+	 * @private
+	 */
+	_getSWFURL: function()
+	{
+		return this._swfURL;
+	},
+	
+	/**
+	 * Getter for altText attribute.
+	 *
+	 * @method _getAltText
+	 * @private
+	 */
+	_getAltText: function()
+	{
+		return this._swf.getAltText();
+	},
+
+	/**
+	 * Setter for altText attribute.
+	 *
+	 * @method _setAltText
+	 * @private
+	 */
+	_setAltText: function(value)
+	{
+		return this._swf.setAltText(value);
+	}
+});
+
+
+/**
+ * Receives event messages from SWF and passes them to the correct instance
+ * of FlashAdapter.
+ *
+ * @method YAHOO.widget.FlashAdapter.eventHandler
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
+{
+
+	if(!YAHOO.widget.FlashAdapter.owners[elementID])
+	{
+		//fix for ie: if owner doesn't exist yet, try again in a moment
+		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
+	}
+	else
+	{
+		YAHOO.widget.FlashAdapter.owners[elementID]._eventHandler(event);
+	}
+};
+
+/**
+ * The number of proxy functions that have been created.
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
+
+/**
+ * Creates a globally accessible function that wraps a function reference.
+ * Returns the proxy function's name as a string for use by the SWF through
+ * ExternalInterface.
+ *
+ * @method YAHOO.widget.FlashAdapter.createProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
+{
+	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
+	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
+	{
+		return func.apply(null, arguments);
+	};
+	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
+	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
+};
+
+/**
+ * Removes a function created with createProxyFunction()
+ * 
+ * @method YAHOO.widget.FlashAdapter.removeProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
+{
+	//quick error check
+	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
+	{
+		return;
+	}
+	
+	funcName = funcName.substr(26);
+	YAHOO.widget.FlashAdapter[funcName] = null;
+};
+/**
+ * The YUI Uploader Control
+ * @module uploader
+ * @description <p>YUI Uploader provides file upload functionality that goes beyond the basic browser-based methods. 
+ * Specifically, the YUI Uploader allows for:
+ * <ol>
+ * <li> Multiple file selection in a single "Open File" dialog.</li>
+ * <li> File extension filters to facilitate the user's selection.</li>
+ * <li> Progress tracking for file uploads.</li>
+ * <li> A range of file metadata: filename, size, date created, date modified, and author.</li>
+ * <li> A set of events dispatched on various aspects of the file upload process: file selection, upload progress, upload completion, etc.</li>
+ * <li> Inclusion of additional data in the file upload POST request.</li>
+ * <li> Faster file upload on broadband connections due to the modified SEND buffer size.</li>
+ * <li> Same-page server response upon completion of the file upload.</li>
+ * </ol>
+ * </p>
+ * @title Uploader
+ * @namespace YAHOO.widget
+ * @requires yahoo, dom, element, event
+ */
+/**
+ * Uploader class for the YUI Uploader component.
+ *
+ * @namespace YAHOO.widget
+ * @class Uploader
+ * @uses YAHOO.widget.FlashAdapter
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param buttonSkin {String} [optional]. If defined, the uploader is 
+ * rendered as a button. This parameter must provide the URL of a button
+ * skin sprite image. Acceptable types are: jpg, gif, png and swf. The 
+ * sprite is divided evenly into four sections along its height (e.g., if
+ * the sprite is 200 px tall, it's divided into four sections 50px each).
+ * Each section is used as a skin for a specific state of the button: top
+ * section is "up", second section is "over", third section is "down", and
+ * fourth section is "disabled". 
+ * If the parameter is not supplied, the uploader is rendered transparent,
+ * and it's the developer's responsibility to create a visible UI below it.
+ * @param forceTransparent {Boolean} This parameter, if true, forces the Flash
+ * UI to be rendered with wmode set to "transparent". This behavior is useful 
+ * in conjunction with non-rectangular button skins with PNG transparency. 
+ * The parameter is false by default, and ignored if no buttonSkin is defined.
+  */
+YAHOO.widget.Uploader = function(containerId, buttonSkin, forceTransparent)
+{
+	var newWMode = "window";
+
+	if (!(buttonSkin) || (buttonSkin && forceTransparent)) {
+		newWMode = "transparent";
+	}
+
+	
+ 	YAHOO.widget.Uploader.superclass.constructor.call(this, YAHOO.widget.Uploader.SWFURL, containerId, {wmode:newWMode}, buttonSkin);
+
+	/**
+	 * Fires when the mouse is pressed over the Uploader.
+	 * Only fires when the Uploader UI is enabled and
+	 * the render type is 'transparent'.
+	 *
+	 * @event mouseDown
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("mouseDown");
+	
+	/**
+	 * Fires when the mouse is released over the Uploader.
+	 * Only fires when the Uploader UI is enabled and
+	 * the render type is 'transparent'.
+	 *
+	 * @event mouseUp
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("mouseUp");
+
+	/**
+	 * Fires when the mouse rolls over the Uploader.
+	 *
+	 * @event rollOver
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("rollOver");
+	
+	/**
+	 * Fires when the mouse rolls out of the Uploader.
+	 *
+	 * @event rollOut
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("rollOut");
+	
+	/**
+	 * Fires when the uploader is clicked.
+	 *
+	 * @event click
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("click");
+	
+	/**
+	 * Fires when the user has finished selecting files in the "Open File" dialog.
+	 *
+	 * @event fileSelect
+	 * @param event.type {String} The event type
+	 * @param event.fileList {Object} A dictionary of objects with file information
+	 * @param event.fileList[].size {Number} File size in bytes for a specific file in fileList
+	 * @param event.fileList[].cDate {Date} Creation date for a specific file in fileList
+	 * @param event.fileList[].mDate {Date} Modification date for a specific file in fileList
+	 * @param event.fileList[].name {String} File name for a specific file in fileList
+	 * @param event.fileList[].id {String} Unique file id of a specific file in fileList
+	 */
+	this.createEvent("fileSelect");
+
+	/**
+	 * Fires when an upload of a specific file has started.
+	 *
+	 * @event uploadStart
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file that's started to upload
+	 */
+	this.createEvent("uploadStart");
+
+	/**
+	 * Fires when new information about the upload progress for a specific file is available.
+	 *
+	 * @event uploadProgress
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file with which the upload progress data is associated
+	 * @param bytesLoaded {Number} The number of bytes of the file uploaded so far
+	 * @param bytesTotal {Number} The total size of the file
+	 */
+	this.createEvent("uploadProgress");
+	
+	/**
+	 * Fires when an upload for a specific file is cancelled.
+	 *
+	 * @event uploadCancel
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file with which the upload has been cancelled.
+	 */	
+	this.createEvent("uploadCancel");
+
+	/**
+	 * Fires when an upload for a specific file is complete.
+	 *
+	 * @event uploadComplete
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file for which the upload has been completed.
+	 */	
+	this.createEvent("uploadComplete");
+
+	/**
+	 * Fires when the server sends data in response to a completed upload.
+	 *
+	 * @event uploadCompleteData
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file for which the upload has been completed.
+	 * @param event.data {String} The raw data returned by the server in response to the upload.
+	 */	
+	this.createEvent("uploadCompleteData");
+	
+	/**
+	 * Fires when an upload error occurs.
+	 *
+	 * @event uploadError
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file that was being uploaded when the error has occurred.
+	 * @param event.status {String} The status message associated with the error.
+	 */	
+	this.createEvent("uploadError");
+}
+
+/**
+ * Location of the Uploader SWF
+ *
+ * @property Chart.SWFURL
+ * @private
+ * @static
+ * @final
+ * @default "assets/uploader.swf"
+ */
+YAHOO.widget.Uploader.SWFURL = "assets/uploader.swf";
+
+YAHOO.extend(YAHOO.widget.Uploader, YAHOO.widget.FlashAdapter,
+{	
+/**
+ * Starts the upload of the file specified by fileID to the location specified by uploadScriptPath.
+ *
+ * @param fileID {String} The id of the file to start uploading.
+ * @param uploadScriptPath {String} The URL of the upload location.
+ * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
+ * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
+ * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
+ * </code> 
+ */
+	upload: function(fileID, uploadScriptPath, method, vars, fieldName)
+	{
+		this._swf.upload(fileID, uploadScriptPath, method, vars, fieldName);
+	},
+	
+/**
+ * Starts uploading all files in the queue. If this function is called, the upload queue is automatically managed.
+ *
+ * @param uploadScriptPath {String} The URL of the upload location.
+ * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
+ * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
+ * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
+ * </code> 
+ */
+	uploadAll: function(uploadScriptPath, method, vars, fieldName)
+	{
+		this._swf.uploadAll(uploadScriptPath, method, vars, fieldName);
+	},
+
+/**
+ * Cancels the upload of a specified file. If no file id is specified, all ongoing uploads are cancelled.
+ *
+ * @param fileID {String} The ID of the file whose upload should be cancelled.
+ */
+	cancel: function(fileID)
+	{
+		this._swf.cancel(fileID);
+	},
+
+/**
+ * Clears the list of files queued for upload.
+ *
+ */
+	clearFileList: function()
+	{
+		this._swf.clearFileList();
+	},
+	
+/**
+ * Removes the specified file from the upload queue. 
+ *
+ * @param fileID {String} The id of the file to remove from the upload queue. 
+ */
+	removeFile: function (fileID) 
+	{
+		this._swf.removeFile(fileID);
+	},
+
+/**
+ * Turns the logging functionality on.
+ * Uses Flash internal trace logging, as well as YUI Logger, if available.
+ *
+ * @param allowLogging {Boolean} If true, logs are output; otherwise, no logs are produced.
+ */
+    setAllowLogging: function (allowLogging)
+    {
+      	this._swf.setAllowLogging(allowLogging);
+    },
+
+/**
+ * Sets the number of simultaneous uploads when using uploadAll()
+ * The minimum value is 1, and maximum value is 5. The default value is 2.
+ *
+ * @param simUploadLimit {int} Number of simultaneous uploads, between 1 and 5.
+ */
+    setSimUploadLimit : function (simUploadLimit)
+    {
+       this._swf.setSimUploadLimit(simUploadLimit);
+    },
+
+/**
+ * Sets the flag allowing users to select multiple files for the upload.
+ *
+ * @param allowMultipleFiles {Boolean} If true, multiple files can be selected. False by default.
+ */     
+    setAllowMultipleFiles : function (allowMultipleFiles) 
+    {
+       this._swf.setAllowMultipleFiles(allowMultipleFiles);
+    },
+
+/**
+ * Sets the file filters for the "Browse" dialog.
+ *
+ *  @param newFilterArray An array of sets of key-value pairs of the form
+ *  {extensions: extensionString, description: descriptionString, [optional]macType: macTypeString}
+ *  The extensions string is a semicolon-delimited list of elements of the form "*.xxx", 
+ *  e.g. "*.jpg;*.gif;*.png". 
+ */       
+    setFileFilters : function (fileFilters) 
+    {
+       this._swf.setFileFilters(fileFilters);
+    },
+
+	/**
+	 * Enables the mouse events on the Uploader.
+	 * If the uploader is being rendered as a button,
+	 * then the button's skin is set to "up"
+	 * (first section of the button skin sprite).
+	 *
+	 */
+	enable : function ()
+	{
+		this._swf.enable();
+	},
+
+	/**
+	 * Disables the mouse events on the Uploader.
+	 * If the uploader is being rendered as a button,
+	 * then the button's skin is set to "disabled"
+	 * (fourth section of the button skin sprite).
+	 *
+	 */
+	disable : function () 
+	{
+		this._swf.disable();
+	}
+});
+YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/uploader/uploader-experimental-debug.js
===================================================================
--- trunk/root/static/yui/uploader/uploader-experimental-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader-experimental-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
 /*!
@@ -10,24 +10,28 @@
  *
  * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
  * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
  */
-var deconcept = deconcept || {};
 
-if(typeof deconcept.util == "undefined" || !deconcept.util)
+YAHOO.namespace("deconcept"); 
+	
+YAHOO.deconcept = YAHOO.deconcept || {};
+
+if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
 {
-	deconcept.util = {};
+	YAHOO.deconcept.util = {};
 }
 
-if(typeof deconcept.SWFObjectUtil == "undefined" || !deconcept.SWFObjectUtil)
+if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
 {
-	deconcept.SWFObjectUtil = {};
+	YAHOO.deconcept.SWFObjectUtil = {};
 }
 
-deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
+YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
 {
 	if(!document.getElementById) { return; }
 	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
-	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
+	this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
 	this.params = {};
 	this.variables = {};
 	this.attributes = [];
@@ -35,12 +39,12 @@
 	if(id) { this.setAttribute('id', id); }
 	if(w) { this.setAttribute('width', w); }
 	if(h) { this.setAttribute('height', h); }
-	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
-	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
+	if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
+	this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
 	if (!window.opera && document.all && this.installedVer.major > 7)
 	{
 		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
-		deconcept.SWFObject.doPrepUnload = true;
+		YAHOO.deconcept.SWFObject.doPrepUnload = true;
 	}
 	if(c)
 	{
@@ -59,7 +63,7 @@
 	}
 };
 
-deconcept.SWFObject.prototype =
+YAHOO.deconcept.SWFObject.prototype =
 {
 	useExpressInstall: function(path)
 	{
@@ -148,7 +152,7 @@
 	{
 		if(this.getAttribute('useExpressInstall')) {
 			// check to see if we need to do an express install
-			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
+			var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
 			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
 				this.setAttribute('doExpressInstall', true);
 				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
@@ -174,16 +178,16 @@
 };
 
 /* ---- detection functions ---- */
-deconcept.SWFObjectUtil.getPlayerVersion = function()
+YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
 {
 	var axo = null;
-	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
+	var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
 	if(navigator.plugins && navigator.mimeTypes.length)
 	{
 		var x = navigator.plugins["Shockwave Flash"];
 		if(x && x.description)
 		{
-			PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
 		}
 	}
 	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
@@ -196,7 +200,7 @@
 				counter++;
 				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
 //				document.write("player v: "+ counter);
-				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
 			}
 			catch(e)
 			{
@@ -217,7 +221,7 @@
 			try
 			{
 				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
 				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
 			}
 			catch(e)
@@ -236,20 +240,20 @@
 		
 		if(axo !== null)
 		{
-			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
 		}
 	}
 	return PlayerVersion;
 };
 
-deconcept.PlayerVersion = function(arrVersion)
+YAHOO.deconcept.PlayerVersion = function(arrVersion)
 {
 	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
 	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
 	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
 };
 
-deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
+YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
 {
 	if(this.major < fv.major)
 	{
@@ -275,7 +279,7 @@
 };
 
 /* ---- get value of query string param ---- */
-deconcept.util =
+YAHOO.deconcept.util =
 {
 	getRequestParameter: function(param)
 	{
@@ -297,7 +301,7 @@
 };
 
 /* fix for video streaming bug */
-deconcept.SWFObjectUtil.cleanupSWFs = function()
+YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
 {
 	var objects = document.getElementsByTagName("OBJECT");
 	for(var i = objects.length - 1; i >= 0; i--)
@@ -314,18 +318,18 @@
 };
 
 // fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
-if(deconcept.SWFObject.doPrepUnload)
+if(YAHOO.deconcept.SWFObject.doPrepUnload)
 {
-	if(!deconcept.unloadSet)
+	if(!YAHOO.deconcept.unloadSet)
 	{
-		deconcept.SWFObjectUtil.prepUnload = function()
+		YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
 		{
 			__flash_unloadHandler = function(){};
 			__flash_savedUnloadHandler = function(){};
-			window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
+			window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
 		};
-		window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
-		deconcept.unloadSet = true;
+		window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
+		YAHOO.deconcept.unloadSet = true;
 	}
 }
 
@@ -334,11 +338,6 @@
 {
 	document.getElementById = function(id) { return document.all[id]; };
 }
-
-/* add some aliases for ease of use/backwards compatibility */
-var getQueryParamValue = deconcept.util.getRequestParameter;
-var FlashObject = deconcept.SWFObject; // for legacy support
-var SWFObject = deconcept.SWFObject;
 /**
  * Wraps Flash embedding functionality and allows communication with SWF through
  * attributes.
@@ -349,7 +348,7 @@
  */
 YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes, buttonSkin)
 {
-	// set up the initial events and attributes stuff
+	
 	this._queue = this._queue || [];
 	this._events = this._events || {};
 	this._configs = this._configs || {};
@@ -384,6 +383,8 @@
 	catch(e){}
 };
 
+YAHOO.widget.FlashAdapter.owners = YAHOO.widget.FlashAdapter.owners || {};
+
 YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
 {
 	/**
@@ -485,7 +486,7 @@
 	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode, buttonSkin)
 	{
 		//standard SWFObject embed
-		var swfObj = new deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
+		var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
 
 		if(expressInstall)
 		{
@@ -518,9 +519,7 @@
 		if(result)
 		{
 			this._swf = YAHOO.util.Dom.get(swfID);
-			//if successful, let's add an owner property to the SWF reference
-			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
-			this._swf.owner = this;
+			YAHOO.widget.FlashAdapter.owners[swfID] = this;
 		}
 		else
 		{
@@ -547,6 +546,7 @@
 				return;
 		}
 		
+		
 		//be sure to return after your case or the event will automatically fire!
 		this.fireEvent(type, event);
 	},
@@ -675,6 +675,7 @@
 	}
 });
 
+
 /**
  * Receives event messages from SWF and passes them to the correct instance
  * of FlashAdapter.
@@ -685,15 +686,15 @@
  */
 YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
 {
-	var loadedSWF = YAHOO.util.Dom.get(elementID);
-	if(!loadedSWF.owner)
+
+	if(!YAHOO.widget.FlashAdapter.owners[elementID])
 	{
 		//fix for ie: if owner doesn't exist yet, try again in a moment
 		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
 	}
 	else
 	{
-		loadedSWF.owner._eventHandler(event);
+		YAHOO.widget.FlashAdapter.owners[elementID]._eventHandler(event);
 	}
 };
 
@@ -780,19 +781,22 @@
  * fourth section is "disabled". 
  * If the parameter is not supplied, the uploader is rendered transparent,
  * and it's the developer's responsibility to create a visible UI below it.
+ * @param forceTransparent {Boolean} This parameter, if true, forces the Flash
+ * UI to be rendered with wmode set to "transparent". This behavior is useful 
+ * in conjunction with non-rectangular button skins with PNG transparency. 
+ * The parameter is false by default, and ignored if no buttonSkin is defined.
   */
-YAHOO.widget.Uploader = function(containerId, buttonSkin)
+YAHOO.widget.Uploader = function(containerId, buttonSkin, forceTransparent)
 {
 	var newWMode = "window";
 
-	if (!(buttonSkin)) {
+	if (!(buttonSkin) || (buttonSkin && forceTransparent)) {
 		newWMode = "transparent";
 	}
+
 	
  	YAHOO.widget.Uploader.superclass.constructor.call(this, YAHOO.widget.Uploader.SWFURL, containerId, {wmode:newWMode}, buttonSkin);
 
-	this._swf.tabIndex="1";
-
 	/**
 	 * Fires when the mouse is pressed over the Uploader.
 	 * Only fires when the Uploader UI is enabled and
@@ -842,7 +846,7 @@
 	 *
 	 * @event fileSelect
 	 * @param event.type {String} The event type
-	 * @param event.fileList {Array} An array of objects with file information
+	 * @param event.fileList {Object} A dictionary of objects with file information
 	 * @param event.fileList[].size {Number} File size in bytes for a specific file in fileList
 	 * @param event.fileList[].cDate {Date} Creation date for a specific file in fileList
 	 * @param event.fileList[].mDate {Date} Modification date for a specific file in fileList
@@ -931,14 +935,6 @@
  * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
  * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
  * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
- * @param headers {Object} An object containing variables that should be set as headers in the POST request. The following header names
- * cannot be used: 
- * <code>
- * Accept-Charset, Accept-Encoding, Accept-Ranges, Age, Allow, Allowed, Authorization, Charge-To, Connect, Connection, 
- * Content-Length, Content-Location, Content-Range, Cookie, Date, Delete, ETag, Expect, Get, Head, Host, Keep-Alive, 
- * Last-Modified, Location, Max-Forwards, Options, Post, Proxy-Authenticate, Proxy-Authorization, Proxy-Connection, 
- * Public, Put, Range, Referer, Request-Range, Retry-After, Server, TE, Trace, Trailer, Transfer-Encoding, Upgrade, 
- * URI, User-Agent, Vary, Via, Warning, WWW-Authenticate, x-flash-version.
  * </code> 
  */
 	upload: function(fileID, uploadScriptPath, method, vars, fieldName)
@@ -953,14 +949,6 @@
  * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
  * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
  * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
- * @param headers {Object} An object containing variables that should be set as headers in the POST request. The following header names
- * cannot be used: 
- * <code>
- * Accept-Charset, Accept-Encoding, Accept-Ranges, Age, Allow, Allowed, Authorization, Charge-To, Connect, Connection, 
- * Content-Length, Content-Location, Content-Range, Cookie, Date, Delete, ETag, Expect, Get, Head, Host, Keep-Alive, 
- * Last-Modified, Location, Max-Forwards, Options, Post, Proxy-Authenticate, Proxy-Authorization, Proxy-Connection, 
- * Public, Put, Range, Referer, Request-Range, Retry-After, Server, TE, Trace, Trailer, Transfer-Encoding, Upgrade, 
- * URI, User-Agent, Vary, Via, Warning, WWW-Authenticate, x-flash-version.
  * </code> 
  */
 	uploadAll: function(uploadScriptPath, method, vars, fieldName)
@@ -1005,7 +993,7 @@
  */
     setAllowLogging: function (allowLogging)
     {
-       this._swf.setAllowLogging(allowLogging);
+      	this._swf.setAllowLogging(allowLogging);
     },
 
 /**
@@ -1066,4 +1054,4 @@
 		this._swf.disable();
 	}
 });
-YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.6.0", build: "1321"});
+YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/uploader/uploader-experimental-min.js
===================================================================
--- trunk/root/static/yui/uploader/uploader-experimental-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader-experimental-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,14 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/*
- * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
- *
- * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-var deconcept=deconcept||{};if(typeof deconcept.util=="undefined"||!deconcept.util){deconcept.util={};}if(typeof deconcept.SWFObjectUtil=="undefined"||!deconcept.SWFObjectUtil){deconcept.SWFObjectUtil={};}deconcept.SWFObject=function(E,C,K,F,H,J,L,G,A,D){if(!document.getElementById){return ;}this.DETECT_KEY=D?D:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params={};this.variables={};this.attributes=[];if(E){this.setAttribute("swf",E);}if(C){this.setAttribute("id",C);}if(K){this.setAttribute("width",K);}if(F){this.setAttribute("height",F);}if(H){this.setAttribute("version",new deconcept.PlayerVersion(H.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(J){this.addParam("bgcolor",J);}var B=L?L:"high";this.addParam("quality",B);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressIn!
 stall",false);var I=(G)?G:window.location;this.setAttribute("xiRedirectUrl",I);this.setAttribute("redirectUrl","");if(A){this.setAttribute("redirectUrl",A);}};deconcept.SWFObject.prototype={useExpressInstall:function(A){this.xiSWFPath=!A?"expressinstall.swf":A;this.setAttribute("useExpressInstall",true);},setAttribute:function(A,B){this.attributes[A]=B;},getAttribute:function(A){return this.attributes[A];},addParam:function(A,B){this.params[A]=B;},getParams:function(){return this.params;},addVariable:function(A,B){this.variables[A]=B;},getVariable:function(A){return this.variables[A];},getVariables:function(){return this.variables;},getVariablePairs:function(){var A=[];var B;var C=this.getVariables();for(B in C){if(C.hasOwnProperty(B)){A[A.length]=B+"="+C[B];}}return A;},getSWFHTML:function(){var D="";var C={};var A="";var B="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","Pl!
 ugIn");this.setAttribute("swf",this.xiSWFPath);}D='<embed type!
 ="applic
ation/x-shockwave-flash" src="'+this.getAttribute("swf")+'" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'"';D+=' id="'+this.getAttribute("id")+'" name="'+this.getAttribute("id")+'" ';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+=[A]+'="'+C[A]+'" ';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='flashvars="'+B+'"';}D+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}D='<object id="'+this.getAttribute("id")+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'">';D+='<param name="movie" value="'+this.getAttribute("swf")+'" />';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+='<param name="'+A+'" value="'+C[A]+'" />';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='!
 <param name="flashvars" value="'+B+'" />';}D+="</object>";}return D;},write:function(A){if(this.getAttribute("useExpressInstall")){var B=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(B)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var C=(typeof A=="string")?document.getElementById(A):A;C.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!==""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var D=null;var C=new deconcept.PlayerVersion([0,0,0]);if(navigator.p!
 lugins&&navigator.mimeTypes.length){var A=navigator.plugins["S!
 hockwave
 Flash"];if(A&&A.description){C=new deconcept.PlayerVersion(A.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var B=3;while(D){try{B++;D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+B);C=new deconcept.PlayerVersion([B,0,0]);}catch(E){D=null;}}}else{try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(E){try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");C=new deconcept.PlayerVersion([6,0,21]);D.AllowScriptAccess="always";}catch(E){if(C.major==6){return C;}}try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(E){}}if(D!==null){C=new deconcept.PlayerVersion(D.GetVariable("$version").split(" ")[1].split(","));}}}return C;};deconcept.PlayerVersion=function(A){this.major=A[0]!==null?parseInt(A[0],0):0;this.minor=A[1]!==null?parseInt(A[1],0):0;this.rev=A[2]!==null?parseInt(A[2],0):0;};deconcept.PlayerVersion.prototype.versionIsVal!
 id=function(A){if(this.major<A.major){return false;}if(this.major>A.major){return true;}if(this.minor<A.minor){return false;}if(this.minor>A.minor){return true;}if(this.rev<A.rev){return false;}return true;};deconcept.util={getRequestParameter:function(D){var C=document.location.search||document.location.hash;if(D===null){return C;}if(C){var B=C.substring(1).split("&");for(var A=0;A<B.length;A++){if(B[A].substring(0,B[A].indexOf("="))==D){return B[A].substring((B[A].indexOf("=")+1));}}}return"";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var C=document.getElementsByTagName("OBJECT");for(var B=C.length-1;B>=0;B--){C[B].style.display="none";for(var A in C[B]){if(typeof C[B][A]=="function"){C[B][A]=function(){};
-}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(A){return document.all[A];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;YAHOO.widget.FlashAdapter=function(E,A,B,C){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};B=B||{};this._id=B.id=B.id||YAHOO.util.Dom.generateId(null,"yuigen");B.version=B.version||"9.0.45";B.backgroundColor=B.backgroundColor||"#ffffff";this._attributes=B;this._swfURL=E;this._containerID=A;this._embedSWF(this._swfURL,this._containerID,B.id,B.version,B.ba!
 ckgroundColor,B.expressInstall,B.wmode,C);try{this.createEvent("contentReady");}catch(D){}};YAHOO.extend(YAHOO.widget.FlashAdapter,YAHOO.util.AttributeProvider,{_swfURL:null,_containerID:null,_swf:null,_id:null,_initialized:false,_attributes:null,toString:function(){return"FlashAdapter "+this._id;},destroy:function(){if(this._swf){var B=YAHOO.util.Dom.get(this._containerID);B.removeChild(this._swf);}var A=this._id;for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}},_embedSWF:function(J,I,E,C,F,G,B,H){var D=new deconcept.SWFObject(J,E,"100%","100%",C,F);if(G){D.useExpressInstall(G);}D.addParam("allowScriptAccess","always");if(B){D.addParam("wmode",B);}D.addParam("menu","false");D.addVariable("allowedDomain",document.location.hostname);D.addVariable("elementID",E);D.addVariable("eventHandler","YAHOO.widget.FlashAdapter.eventHandler");if(H){D.addVariable("buttonSkin",H);}var A=YAHOO.util.Dom.get(I);var K=D.write(A);if(K){this._swf=YAHOO.util.Dom.get(E);th!
 is._swf.owner=this;}else{}},_eventHandler:function(B){var A=B.!
 type;swi
tch(A){case"swfReady":this._loadHandler();return ;case"log":return ;}this.fireEvent(A,B);},_loadHandler:function(){this._initialized=false;this._initAttributes(this._attributes);this.setAttributes(this._attributes,true);this._initialized=true;this.fireEvent("contentReady");},set:function(A,B){this._attributes[A]=B;YAHOO.widget.FlashAdapter.superclass.set.call(this,A,B);},_initAttributes:function(A){this.getAttributeConfig("altText",{method:this._getAltText});this.setAttributeConfig("altText",{method:this._setAltText});this.getAttributeConfig("swfURL",{method:this._getSWFURL});},_getSWFURL:function(){return this._swfURL;},_getAltText:function(){return this._swf.getAltText();},_setAltText:function(A){return this._swf.setAltText(A);}});YAHOO.widget.FlashAdapter.eventHandler=function(A,C){var B=YAHOO.util.Dom.get(A);if(!B.owner){setTimeout(function(){YAHOO.widget.FlashAdapter.eventHandler(A,C);},0);}else{B.owner._eventHandler(C);}};YAHOO.widget.FlashAdapter.proxyFunctionCount=0;!
 YAHOO.widget.FlashAdapter.createProxyFunction=function(B){var A=YAHOO.widget.FlashAdapter.proxyFunctionCount;YAHOO.widget.FlashAdapter["proxyFunction"+A]=function(){return B.apply(null,arguments);};YAHOO.widget.FlashAdapter.proxyFunctionCount++;return"YAHOO.widget.FlashAdapter.proxyFunction"+A.toString();};YAHOO.widget.FlashAdapter.removeProxyFunction=function(A){if(!A||A.indexOf("YAHOO.widget.FlashAdapter.proxyFunction")<0){return ;}A=A.substr(26);YAHOO.widget.FlashAdapter[A]=null;};YAHOO.widget.Uploader=function(A,B){var C="window";if(!(B)){C="transparent";}YAHOO.widget.Uploader.superclass.constructor.call(this,YAHOO.widget.Uploader.SWFURL,A,{wmode:C},B);this._swf.tabIndex="1";this.createEvent("mouseDown");this.createEvent("mouseUp");this.createEvent("rollOver");this.createEvent("rollOut");this.createEvent("click");this.createEvent("fileSelect");this.createEvent("uploadStart");this.createEvent("uploadProgress");this.createEvent("uploadCancel");this.createEvent("uploadComp!
 lete");this.createEvent("uploadCompleteData");this.createEvent!
 ("upload
Error");};YAHOO.widget.Uploader.SWFURL="assets/uploader.swf";YAHOO.extend(YAHOO.widget.Uploader,YAHOO.widget.FlashAdapter,{upload:function(A,B,E,C,D){this._swf.upload(A,B,E,C,D);},uploadAll:function(A,D,B,C){this._swf.uploadAll(A,D,B,C);},cancel:function(A){this._swf.cancel(A);},clearFileList:function(){this._swf.clearFileList();},removeFile:function(A){this._swf.removeFile(A);},setAllowLogging:function(A){this._swf.setAllowLogging(A);},setSimUploadLimit:function(A){this._swf.setSimUploadLimit(A);},setAllowMultipleFiles:function(A){this._swf.setAllowMultipleFiles(A);},setFileFilters:function(A){this._swf.setFileFilters(A);},enable:function(){this._swf.enable();},disable:function(){this._swf.disable();}});YAHOO.register("uploader",YAHOO.widget.Uploader,{version:"2.6.0",build:"1321"});
\ No newline at end of file

Deleted: trunk/root/static/yui/uploader/uploader-experimental.js
===================================================================
--- trunk/root/static/yui/uploader/uploader-experimental.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader-experimental.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,1066 +0,0 @@
-/*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
-*/
-/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
-/*!
- * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
- *
- * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- */
-var deconcept = deconcept || {};
-
-if(typeof deconcept.util == "undefined" || !deconcept.util)
-{
-	deconcept.util = {};
-}
-
-if(typeof deconcept.SWFObjectUtil == "undefined" || !deconcept.SWFObjectUtil)
-{
-	deconcept.SWFObjectUtil = {};
-}
-
-deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
-{
-	if(!document.getElementById) { return; }
-	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
-	this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
-	this.params = {};
-	this.variables = {};
-	this.attributes = [];
-	if(swf) { this.setAttribute('swf', swf); }
-	if(id) { this.setAttribute('id', id); }
-	if(w) { this.setAttribute('width', w); }
-	if(h) { this.setAttribute('height', h); }
-	if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
-	this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
-	if (!window.opera && document.all && this.installedVer.major > 7)
-	{
-		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
-		deconcept.SWFObject.doPrepUnload = true;
-	}
-	if(c)
-	{
-		this.addParam('bgcolor', c);
-	}
-	var q = quality ? quality : 'high';
-	this.addParam('quality', q);
-	this.setAttribute('useExpressInstall', false);
-	this.setAttribute('doExpressInstall', false);
-	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
-	this.setAttribute('xiRedirectUrl', xir);
-	this.setAttribute('redirectUrl', '');
-	if(redirectUrl)
-	{
-		this.setAttribute('redirectUrl', redirectUrl);
-	}
-};
-
-deconcept.SWFObject.prototype =
-{
-	useExpressInstall: function(path)
-	{
-		this.xiSWFPath = !path ? "expressinstall.swf" : path;
-		this.setAttribute('useExpressInstall', true);
-	},
-	setAttribute: function(name, value){
-		this.attributes[name] = value;
-	},
-	getAttribute: function(name){
-		return this.attributes[name];
-	},
-	addParam: function(name, value){
-		this.params[name] = value;
-	},
-	getParams: function(){
-		return this.params;
-	},
-	addVariable: function(name, value){
-		this.variables[name] = value;
-	},
-	getVariable: function(name){
-		return this.variables[name];
-	},
-	getVariables: function(){
-		return this.variables;
-	},
-	getVariablePairs: function(){
-		var variablePairs = [];
-		var key;
-		var variables = this.getVariables();
-		for(key in variables)
-		{
-			if(variables.hasOwnProperty(key))
-			{
-				variablePairs[variablePairs.length] = key +"="+ variables[key];
-			}
-		}
-		return variablePairs;
-	},
-	getSWFHTML: function() {
-		var swfNode = "";
-		var params = {};
-		var key = "";
-		var pairs = "";
-		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "PlugIn");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
-			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += [key] +'="'+ params[key] +'" ';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
-			swfNode += '/>';
-		} else { // PC IE
-			if (this.getAttribute("doExpressInstall")) {
-				this.addVariable("MMplayerType", "ActiveX");
-				this.setAttribute('swf', this.xiSWFPath);
-			}
-			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
-			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
-			params = this.getParams();
-			for(key in params)
-			{
-				if(params.hasOwnProperty(key))
-				{
-					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
-				}
-			}
-			pairs = this.getVariablePairs().join("&");
-			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
-			swfNode += "</object>";
-		}
-		return swfNode;
-	},
-	write: function(elementId)
-	{
-		if(this.getAttribute('useExpressInstall')) {
-			// check to see if we need to do an express install
-			var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);
-			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
-				this.setAttribute('doExpressInstall', true);
-				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
-				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
-				this.addVariable("MMdoctitle", document.title);
-			}
-		}
-		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
-		{
-			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
-			n.innerHTML = this.getSWFHTML();
-			return true;
-		}
-		else
-		{
-			if(this.getAttribute('redirectUrl') !== "")
-			{
-				document.location.replace(this.getAttribute('redirectUrl'));
-			}
-		}
-		return false;
-	}
-};
-
-/* ---- detection functions ---- */
-deconcept.SWFObjectUtil.getPlayerVersion = function()
-{
-	var axo = null;
-	var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);
-	if(navigator.plugins && navigator.mimeTypes.length)
-	{
-		var x = navigator.plugins["Shockwave Flash"];
-		if(x && x.description)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
-		}
-	}
-	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
-	{ // if Windows CE
-		var counter = 3;
-		while(axo)
-		{
-			try
-			{
-				counter++;
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
-//				document.write("player v: "+ counter);
-				PlayerVersion = new deconcept.PlayerVersion([counter,0,0]);
-			}
-			catch(e)
-			{
-				axo = null;
-			}
-		}
-	}
-	else
-	{ // Win IE (non mobile)
-		// do minor version lookup in IE, but avoid fp6 crashing issues
-		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
-		try
-		{
-			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
-		}
-		catch(e)
-		{
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-				PlayerVersion = new deconcept.PlayerVersion([6,0,21]);
-				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
-			}
-			catch(e)
-			{
-				if(PlayerVersion.major == 6)
-				{
-					return PlayerVersion;
-				}
-			}
-			try
-			{
-				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
-			}
-			catch(e) {}
-		}
-		
-		if(axo !== null)
-		{
-			PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
-		}
-	}
-	return PlayerVersion;
-};
-
-deconcept.PlayerVersion = function(arrVersion)
-{
-	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
-	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
-	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
-};
-
-deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
-{
-	if(this.major < fv.major)
-	{
-		return false;
-	}
-	if(this.major > fv.major)
-	{
-		return true;
-	}
-	if(this.minor < fv.minor)
-	{
-		return false;
-	}
-	if(this.minor > fv.minor)
-	{
-		return true;
-	}
-	if(this.rev < fv.rev)
-	{
-		return false;
-	}
-	return true;
-};
-
-/* ---- get value of query string param ---- */
-deconcept.util =
-{
-	getRequestParameter: function(param)
-	{
-		var q = document.location.search || document.location.hash;
-		if(param === null) { return q; }
-		if(q)
-		{
-			var pairs = q.substring(1).split("&");
-			for(var i=0; i < pairs.length; i++)
-			{
-				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
-				{
-					return pairs[i].substring((pairs[i].indexOf("=") + 1));
-				}
-			}
-		}
-		return "";
-	}
-};
-
-/* fix for video streaming bug */
-deconcept.SWFObjectUtil.cleanupSWFs = function()
-{
-	var objects = document.getElementsByTagName("OBJECT");
-	for(var i = objects.length - 1; i >= 0; i--)
-	{
-		objects[i].style.display = 'none';
-		for(var x in objects[i])
-		{
-			if(typeof objects[i][x] == 'function')
-			{
-				objects[i][x] = function(){};
-			}
-		}
-	}
-};
-
-// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
-if(deconcept.SWFObject.doPrepUnload)
-{
-	if(!deconcept.unloadSet)
-	{
-		deconcept.SWFObjectUtil.prepUnload = function()
-		{
-			__flash_unloadHandler = function(){};
-			__flash_savedUnloadHandler = function(){};
-			window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs);
-		};
-		window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload);
-		deconcept.unloadSet = true;
-	}
-}
-
-/* add document.getElementById if needed (mobile IE < 5) */
-if(!document.getElementById && document.all)
-{
-	document.getElementById = function(id) { return document.all[id]; };
-}
-
-/* add some aliases for ease of use/backwards compatibility */
-var getQueryParamValue = deconcept.util.getRequestParameter;
-var FlashObject = deconcept.SWFObject; // for legacy support
-var SWFObject = deconcept.SWFObject;
-/**
- * Wraps Flash embedding functionality and allows communication with SWF through
- * attributes.
- *
- * @namespace YAHOO.widget
- * @class FlashAdapter
- * @uses YAHOO.util.AttributeProvider
- */
-YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes, buttonSkin)
-{
-	// set up the initial events and attributes stuff
-	this._queue = this._queue || [];
-	this._events = this._events || {};
-	this._configs = this._configs || {};
-	attributes = attributes || {};
-	
-	//the Flash Player external interface code from Adobe doesn't play nicely
-	//with the default value, yui-gen, in IE
-	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
-	attributes.version = attributes.version || "9.0.45";
-	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
-	
-	//we can't use the initial attributes right away
-	//so save them for once the SWF finishes loading
-	this._attributes = attributes;
-	
-	this._swfURL = swfURL;
-	this._containerID = containerID;
-	
-	//embed the SWF file in the page
-	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
-		attributes.backgroundColor, attributes.expressInstall, attributes.wmode, buttonSkin);
-	
-	/**
-	 * Fires when the SWF is initialized and communication is possible.
-	 * @event contentReady
-	 */
-	//Fix for iframe cross-domain issue with FF2x 
-	try
-	{
-		this.createEvent("contentReady");
-	}
-	catch(e){}
-};
-
-YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
-{
-	/**
-	 * The URL of the SWF file.
-	 * @property _swfURL
-	 * @type String
-	 * @private
-	 */
-	_swfURL: null,
-
-	/**
-	 * The ID of the containing DIV.
-	 * @property _containerID
-	 * @type String
-	 * @private
-	 */
-	_containerID: null,
-
-	/**
-	 * A reference to the embedded SWF file.
-	 * @property _swf
-	 * @private
-	 */
-	_swf: null,
-
-	/**
-	 * The id of this instance.
-	 * @property _id
-	 * @type String
-	 * @private
-	 */
-	_id: null,
-
-	/**
-	 * Indicates whether the SWF has been initialized and is ready
-	 * to communicate with JavaScript
-	 * @property _initialized
-	 * @type Boolean
-	 * @private
-	 */
-	_initialized: false,
-	
-	/**
-	 * The initializing attributes are stored here until the SWF is ready.
-	 * @property _attributes
-	 * @type Object
-	 * @private
-	 */
-	_attributes: null, //the intializing attributes
-
-	/**
-	 * Public accessor to the unique name of the FlashAdapter instance.
-	 *
-	 * @method toString
-	 * @return {String} Unique name of the FlashAdapter instance.
-	 */
-	toString: function()
-	{
-		return "FlashAdapter " + this._id;
-	},
-
-	/**
-	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
-	 * event listeners and clears out DOM elements inside the container. After calling
-	 * this method, the instance reference should be expliclitly nulled by implementer,
-	 * as in myChart = null. Use with caution!
-	 *
-	 * @method destroy
-	 */
-	destroy: function()
-	{
-		//kill the Flash Player instance
-		if(this._swf)
-		{
-			var container = YAHOO.util.Dom.get(this._containerID);
-			container.removeChild(this._swf);
-		}
-		
-		var instanceName = this._id;
-		
-		//null out properties
-		for(var prop in this)
-		{
-			if(YAHOO.lang.hasOwnProperty(this, prop))
-			{
-				this[prop] = null;
-			}
-		}
-		
-	},
-
-	/**
-	 * Embeds the SWF in the page and associates it with this instance.
-	 *
-	 * @method _embedSWF
-	 * @private
-	 */
-	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode, buttonSkin)
-	{
-		//standard SWFObject embed
-		var swfObj = new deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
-
-		if(expressInstall)
-		{
-			swfObj.useExpressInstall(expressInstall);
-		}
-
-		//make sure we can communicate with ExternalInterface
-		swfObj.addParam("allowScriptAccess", "always");
-		
-		if(wmode)
-		{
-			swfObj.addParam("wmode", wmode);
-		}
-		
-		swfObj.addParam("menu", "false");
-		
-		//again, a useful ExternalInterface trick
-		swfObj.addVariable("allowedDomain", document.location.hostname);
-
-		//tell the SWF which HTML element it is in
-		swfObj.addVariable("elementID", swfID);
-
-		// set the name of the function to call when the swf has an event
-		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
-		if (buttonSkin) {
-		swfObj.addVariable("buttonSkin", buttonSkin);
-		}
-		var container = YAHOO.util.Dom.get(containerID);
-		var result = swfObj.write(container);
-		if(result)
-		{
-			this._swf = YAHOO.util.Dom.get(swfID);
-			//if successful, let's add an owner property to the SWF reference
-			//this will allow the event handler to communicate with a YAHOO.widget.FlashAdapter
-			this._swf.owner = this;
-		}
-		else
-		{
-		}
-	},
-
-	/**
-	 * Handles or re-dispatches events received from the SWF.
-	 *
-	 * @method _eventHandler
-	 * @private
-	 */
-	_eventHandler: function(event)
-	{
-		var type = event.type;
-		switch(type)
-		{
-			case "swfReady":
-   				this._loadHandler();
-				return;
-			case "log":
-				return;
-		}
-		
-		//be sure to return after your case or the event will automatically fire!
-		this.fireEvent(type, event);
-	},
-
-	/**
-	 * Called when the SWF has been initialized.
-	 *
-	 * @method _loadHandler
-	 * @private
-	 */
-	_loadHandler: function()
-	{
-		this._initialized = false;
-		this._initAttributes(this._attributes);
-		this.setAttributes(this._attributes, true);
-		
-		this._initialized = true;
-		this.fireEvent("contentReady");
-	},
-	
-	set: function(name, value)
-	{
-		//save all the attributes in case the swf reloads
-		//so that we can pass them in again
-		this._attributes[name] = value;
-		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
-	},
-	
-	/**
-	 * Initializes the attributes.
-	 *
-	 * @method _initAttributes
-	 * @private
-	 */
-	_initAttributes: function(attributes)
-	{
-		//should be overridden if other attributes need to be set up
-
-		/**
-		 * @attribute wmode
-		 * @description Sets the window mode of the Flash Player control. May be
-		 *		"window", "opaque", or "transparent". Only available in the constructor
-		 *		because it may not be set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute expressInstall
-		 * @description URL pointing to a SWF file that handles Flash Player's express
-		 *		install feature. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute version
-		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-
-		/**
-		 * @attribute backgroundColor
-		 * @description The background color of the SWF. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		 
-		/**
-		 * @attribute altText
-		 * @description The alternative text to provide for screen readers and other assistive technology.
-		 * @type String
-		 */
-		this.getAttributeConfig("altText",
-		{
-			method: this._getAltText
-		});
-		this.setAttributeConfig("altText",
-		{
-			method: this._setAltText
-		});
-		
-		/**
-		 * @attribute swfURL
-		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
-		 *		set after Flash Player has been embedded in the page.
-		 * @type String
-		 */
-		this.getAttributeConfig("swfURL",
-		{
-			method: this._getSWFURL
-		});
-	},
-	
-	/**
-	 * Getter for swfURL attribute.
-	 *
-	 * @method _getSWFURL
-	 * @private
-	 */
-	_getSWFURL: function()
-	{
-		return this._swfURL;
-	},
-	
-	/**
-	 * Getter for altText attribute.
-	 *
-	 * @method _getAltText
-	 * @private
-	 */
-	_getAltText: function()
-	{
-		return this._swf.getAltText();
-	},
-
-	/**
-	 * Setter for altText attribute.
-	 *
-	 * @method _setAltText
-	 * @private
-	 */
-	_setAltText: function(value)
-	{
-		return this._swf.setAltText(value);
-	}
-});
-
-/**
- * Receives event messages from SWF and passes them to the correct instance
- * of FlashAdapter.
- *
- * @method YAHOO.widget.FlashAdapter.eventHandler
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
-{
-	var loadedSWF = YAHOO.util.Dom.get(elementID);
-	if(!loadedSWF.owner)
-	{
-		//fix for ie: if owner doesn't exist yet, try again in a moment
-		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
-	}
-	else
-	{
-		loadedSWF.owner._eventHandler(event);
-	}
-};
-
-/**
- * The number of proxy functions that have been created.
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
-
-/**
- * Creates a globally accessible function that wraps a function reference.
- * Returns the proxy function's name as a string for use by the SWF through
- * ExternalInterface.
- *
- * @method YAHOO.widget.FlashAdapter.createProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
-{
-	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
-	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
-	{
-		return func.apply(null, arguments);
-	};
-	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
-	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
-};
-
-/**
- * Removes a function created with createProxyFunction()
- * 
- * @method YAHOO.widget.FlashAdapter.removeProxyFunction
- * @static
- * @private
- */
-YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
-{
-	//quick error check
-	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
-	{
-		return;
-	}
-	
-	funcName = funcName.substr(26);
-	YAHOO.widget.FlashAdapter[funcName] = null;
-};
-/**
- * The YUI Uploader Control
- * @module uploader
- * @description <p>YUI Uploader provides file upload functionality that goes beyond the basic browser-based methods. 
- * Specifically, the YUI Uploader allows for:
- * <ol>
- * <li> Multiple file selection in a single "Open File" dialog.</li>
- * <li> File extension filters to facilitate the user's selection.</li>
- * <li> Progress tracking for file uploads.</li>
- * <li> A range of file metadata: filename, size, date created, date modified, and author.</li>
- * <li> A set of events dispatched on various aspects of the file upload process: file selection, upload progress, upload completion, etc.</li>
- * <li> Inclusion of additional data in the file upload POST request.</li>
- * <li> Faster file upload on broadband connections due to the modified SEND buffer size.</li>
- * <li> Same-page server response upon completion of the file upload.</li>
- * </ol>
- * </p>
- * @title Uploader
- * @namespace YAHOO.widget
- * @requires yahoo, dom, element, event
- */
-/**
- * Uploader class for the YUI Uploader component.
- *
- * @namespace YAHOO.widget
- * @class Uploader
- * @uses YAHOO.widget.FlashAdapter
- * @constructor
- * @param containerId {HTMLElement} Container element for the Flash Player instance.
- * @param buttonSkin {String} [optional]. If defined, the uploader is 
- * rendered as a button. This parameter must provide the URL of a button
- * skin sprite image. Acceptable types are: jpg, gif, png and swf. The 
- * sprite is divided evenly into four sections along its height (e.g., if
- * the sprite is 200 px tall, it's divided into four sections 50px each).
- * Each section is used as a skin for a specific state of the button: top
- * section is "up", second section is "over", third section is "down", and
- * fourth section is "disabled". 
- * If the parameter is not supplied, the uploader is rendered transparent,
- * and it's the developer's responsibility to create a visible UI below it.
-  */
-YAHOO.widget.Uploader = function(containerId, buttonSkin)
-{
-	var newWMode = "window";
-
-	if (!(buttonSkin)) {
-		newWMode = "transparent";
-	}
-	
- 	YAHOO.widget.Uploader.superclass.constructor.call(this, YAHOO.widget.Uploader.SWFURL, containerId, {wmode:newWMode}, buttonSkin);
-
-	this._swf.tabIndex="1";
-
-	/**
-	 * Fires when the mouse is pressed over the Uploader.
-	 * Only fires when the Uploader UI is enabled and
-	 * the render type is 'transparent'.
-	 *
-	 * @event mouseDown
-	 * @param event.type {String} The event type
-	 */
-	this.createEvent("mouseDown");
-	
-	/**
-	 * Fires when the mouse is released over the Uploader.
-	 * Only fires when the Uploader UI is enabled and
-	 * the render type is 'transparent'.
-	 *
-	 * @event mouseUp
-	 * @param event.type {String} The event type
-	 */
-	this.createEvent("mouseUp");
-
-	/**
-	 * Fires when the mouse rolls over the Uploader.
-	 *
-	 * @event rollOver
-	 * @param event.type {String} The event type
-	 */
-	this.createEvent("rollOver");
-	
-	/**
-	 * Fires when the mouse rolls out of the Uploader.
-	 *
-	 * @event rollOut
-	 * @param event.type {String} The event type
-	 */
-	this.createEvent("rollOut");
-	
-	/**
-	 * Fires when the uploader is clicked.
-	 *
-	 * @event click
-	 * @param event.type {String} The event type
-	 */
-	this.createEvent("click");
-	
-	/**
-	 * Fires when the user has finished selecting files in the "Open File" dialog.
-	 *
-	 * @event fileSelect
-	 * @param event.type {String} The event type
-	 * @param event.fileList {Array} An array of objects with file information
-	 * @param event.fileList[].size {Number} File size in bytes for a specific file in fileList
-	 * @param event.fileList[].cDate {Date} Creation date for a specific file in fileList
-	 * @param event.fileList[].mDate {Date} Modification date for a specific file in fileList
-	 * @param event.fileList[].name {String} File name for a specific file in fileList
-	 * @param event.fileList[].id {String} Unique file id of a specific file in fileList
-	 */
-	this.createEvent("fileSelect");
-
-	/**
-	 * Fires when an upload of a specific file has started.
-	 *
-	 * @event uploadStart
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file that's started to upload
-	 */
-	this.createEvent("uploadStart");
-
-	/**
-	 * Fires when new information about the upload progress for a specific file is available.
-	 *
-	 * @event uploadProgress
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file with which the upload progress data is associated
-	 * @param bytesLoaded {Number} The number of bytes of the file uploaded so far
-	 * @param bytesTotal {Number} The total size of the file
-	 */
-	this.createEvent("uploadProgress");
-	
-	/**
-	 * Fires when an upload for a specific file is cancelled.
-	 *
-	 * @event uploadCancel
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file with which the upload has been cancelled.
-	 */	
-	this.createEvent("uploadCancel");
-
-	/**
-	 * Fires when an upload for a specific file is complete.
-	 *
-	 * @event uploadComplete
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file for which the upload has been completed.
-	 */	
-	this.createEvent("uploadComplete");
-
-	/**
-	 * Fires when the server sends data in response to a completed upload.
-	 *
-	 * @event uploadCompleteData
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file for which the upload has been completed.
-	 * @param event.data {String} The raw data returned by the server in response to the upload.
-	 */	
-	this.createEvent("uploadCompleteData");
-	
-	/**
-	 * Fires when an upload error occurs.
-	 *
-	 * @event uploadError
-	 * @param event.type {String} The event type
-	 * @param event.id {String} The id of the file that was being uploaded when the error has occurred.
-	 * @param event.status {String} The status message associated with the error.
-	 */	
-	this.createEvent("uploadError");
-}
-
-/**
- * Location of the Uploader SWF
- *
- * @property Chart.SWFURL
- * @private
- * @static
- * @final
- * @default "assets/uploader.swf"
- */
-YAHOO.widget.Uploader.SWFURL = "assets/uploader.swf";
-
-YAHOO.extend(YAHOO.widget.Uploader, YAHOO.widget.FlashAdapter,
-{	
-/**
- * Starts the upload of the file specified by fileID to the location specified by uploadScriptPath.
- *
- * @param fileID {String} The id of the file to start uploading.
- * @param uploadScriptPath {String} The URL of the upload location.
- * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
- * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
- * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
- * @param headers {Object} An object containing variables that should be set as headers in the POST request. The following header names
- * cannot be used: 
- * <code>
- * Accept-Charset, Accept-Encoding, Accept-Ranges, Age, Allow, Allowed, Authorization, Charge-To, Connect, Connection, 
- * Content-Length, Content-Location, Content-Range, Cookie, Date, Delete, ETag, Expect, Get, Head, Host, Keep-Alive, 
- * Last-Modified, Location, Max-Forwards, Options, Post, Proxy-Authenticate, Proxy-Authorization, Proxy-Connection, 
- * Public, Put, Range, Referer, Request-Range, Retry-After, Server, TE, Trace, Trailer, Transfer-Encoding, Upgrade, 
- * URI, User-Agent, Vary, Via, Warning, WWW-Authenticate, x-flash-version.
- * </code> 
- */
-	upload: function(fileID, uploadScriptPath, method, vars, fieldName)
-	{
-		this._swf.upload(fileID, uploadScriptPath, method, vars, fieldName);
-	},
-	
-/**
- * Starts uploading all files in the queue. If this function is called, the upload queue is automatically managed.
- *
- * @param uploadScriptPath {String} The URL of the upload location.
- * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
- * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
- * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
- * @param headers {Object} An object containing variables that should be set as headers in the POST request. The following header names
- * cannot be used: 
- * <code>
- * Accept-Charset, Accept-Encoding, Accept-Ranges, Age, Allow, Allowed, Authorization, Charge-To, Connect, Connection, 
- * Content-Length, Content-Location, Content-Range, Cookie, Date, Delete, ETag, Expect, Get, Head, Host, Keep-Alive, 
- * Last-Modified, Location, Max-Forwards, Options, Post, Proxy-Authenticate, Proxy-Authorization, Proxy-Connection, 
- * Public, Put, Range, Referer, Request-Range, Retry-After, Server, TE, Trace, Trailer, Transfer-Encoding, Upgrade, 
- * URI, User-Agent, Vary, Via, Warning, WWW-Authenticate, x-flash-version.
- * </code> 
- */
-	uploadAll: function(uploadScriptPath, method, vars, fieldName)
-	{
-		this._swf.uploadAll(uploadScriptPath, method, vars, fieldName);
-	},
-
-/**
- * Cancels the upload of a specified file. If no file id is specified, all ongoing uploads are cancelled.
- *
- * @param fileID {String} The ID of the file whose upload should be cancelled.
- */
-	cancel: function(fileID)
-	{
-		this._swf.cancel(fileID);
-	},
-
-/**
- * Clears the list of files queued for upload.
- *
- */
-	clearFileList: function()
-	{
-		this._swf.clearFileList();
-	},
-	
-/**
- * Removes the specified file from the upload queue. 
- *
- * @param fileID {String} The id of the file to remove from the upload queue. 
- */
-	removeFile: function (fileID) 
-	{
-		this._swf.removeFile(fileID);
-	},
-
-/**
- * Turns the logging functionality on.
- * Uses Flash internal trace logging, as well as YUI Logger, if available.
- *
- * @param allowLogging {Boolean} If true, logs are output; otherwise, no logs are produced.
- */
-    setAllowLogging: function (allowLogging)
-    {
-       this._swf.setAllowLogging(allowLogging);
-    },
-
-/**
- * Sets the number of simultaneous uploads when using uploadAll()
- * The minimum value is 1, and maximum value is 5. The default value is 2.
- *
- * @param simUploadLimit {int} Number of simultaneous uploads, between 1 and 5.
- */
-    setSimUploadLimit : function (simUploadLimit)
-    {
-       this._swf.setSimUploadLimit(simUploadLimit);
-    },
-
-/**
- * Sets the flag allowing users to select multiple files for the upload.
- *
- * @param allowMultipleFiles {Boolean} If true, multiple files can be selected. False by default.
- */     
-    setAllowMultipleFiles : function (allowMultipleFiles) 
-    {
-       this._swf.setAllowMultipleFiles(allowMultipleFiles);
-    },
-
-/**
- * Sets the file filters for the "Browse" dialog.
- *
- *  @param newFilterArray An array of sets of key-value pairs of the form
- *  {extensions: extensionString, description: descriptionString, [optional]macType: macTypeString}
- *  The extensions string is a semicolon-delimited list of elements of the form "*.xxx", 
- *  e.g. "*.jpg;*.gif;*.png". 
- */       
-    setFileFilters : function (fileFilters) 
-    {
-       this._swf.setFileFilters(fileFilters);
-    },
-
-	/**
-	 * Enables the mouse events on the Uploader.
-	 * If the uploader is being rendered as a button,
-	 * then the button's skin is set to "up"
-	 * (first section of the button skin sprite).
-	 *
-	 */
-	enable : function ()
-	{
-		this._swf.enable();
-	},
-
-	/**
-	 * Disables the mouse events on the Uploader.
-	 * If the uploader is being rendered as a button,
-	 * then the button's skin is set to "disabled"
-	 * (fourth section of the button skin sprite).
-	 *
-	 */
-	disable : function () 
-	{
-		this._swf.disable();
-	}
-});
-YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.6.0", build: "1321"});

Added: trunk/root/static/yui/uploader/uploader-min.js
===================================================================
--- trunk/root/static/yui/uploader/uploader-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,15 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+YAHOO.namespace("deconcept");YAHOO.deconcept=YAHOO.deconcept||{};if(typeof YAHOO.deconcept.util=="undefined"||!YAHOO.deconcept.util){YAHOO.deconcept.util={};}if(typeof YAHOO.deconcept.SWFObjectUtil=="undefined"||!YAHOO.deconcept.SWFObjectUtil){YAHOO.deconcept.SWFObjectUtil={};}YAHOO.deconcept.SWFObject=function(E,C,K,F,H,J,L,G,A,D){if(!document.getElementById){return;}this.DETECT_KEY=D?D:"detectflash";this.skipDetect=YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);this.params={};this.variables={};this.attributes=[];if(E){this.setAttribute("swf",E);}if(C){this.setAttribute("id",C);}if(K){this.setAttribute("width",K);}if(F){this.setAttribute("height",F);}if(H){this.setAttribute("version",new YAHOO.deconcept.PlayerVersion(H.toString().split(".")));}this.installedVer=YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){YAHOO.deconcept.SWFObject.doPrepUnload=true;}if(J){this.addParam("bgcolor",J);}var B=L?L:"high";!
 this.addParam("quality",B);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var I=(G)?G:window.location;this.setAttribute("xiRedirectUrl",I);this.setAttribute("redirectUrl","");if(A){this.setAttribute("redirectUrl",A);}};YAHOO.deconcept.SWFObject.prototype={useExpressInstall:function(A){this.xiSWFPath=!A?"expressinstall.swf":A;this.setAttribute("useExpressInstall",true);},setAttribute:function(A,B){this.attributes[A]=B;},getAttribute:function(A){return this.attributes[A];},addParam:function(A,B){this.params[A]=B;},getParams:function(){return this.params;},addVariable:function(A,B){this.variables[A]=B;},getVariable:function(A){return this.variables[A];},getVariables:function(){return this.variables;},getVariablePairs:function(){var A=[];var B;var C=this.getVariables();for(B in C){if(C.hasOwnProperty(B)){A[A.length]=B+"="+C[B];}}return A;},getSWFHTML:function(){var D="";var C={};var A="";var B="";if(navigator.plugins&&navigator.mimeType!
 s&&navigator.mimeTypes.length){if(this.getAttribute("doExpress!
 Install"
)){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}D='<embed type="application/x-shockwave-flash" src="'+this.getAttribute("swf")+'" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'"';D+=' id="'+this.getAttribute("id")+'" name="'+this.getAttribute("id")+'" ';C=this.getParams();for(A in C){if(C.hasOwnProperty(A)){D+=[A]+'="'+C[A]+'" ';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='flashvars="'+B+'"';}D+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}D='<object id="'+this.getAttribute("id")+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getAttribute("width")+'" height="'+this.getAttribute("height")+'" style="'+this.getAttribute("style")+'">';D+='<param name="movie" value="'+this.getAttribute("swf")+'" />';C=this.getParams();for(A in C){if(C.hasOwnPropert!
 y(A)){D+='<param name="'+A+'" value="'+C[A]+'" />';}}B=this.getVariablePairs().join("&");if(B.length>0){D+='<param name="flashvars" value="'+B+'" />';}D+="</object>";}return D;},write:function(A){if(this.getAttribute("useExpressInstall")){var B=new YAHOO.deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(B)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var C=(typeof A=="string")?document.getElementById(A):A;C.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!==""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};YAHOO.!
 deconcept.SWFObjectUtil.getPlayerVersion=function(){var D=null!
 ;var C=n
ew YAHOO.deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var A=navigator.plugins["Shockwave Flash"];if(A&&A.description){C=new YAHOO.deconcept.PlayerVersion(A.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var B=3;while(D){try{B++;D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+B);C=new YAHOO.deconcept.PlayerVersion([B,0,0]);}catch(E){D=null;}}}else{try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(E){try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");C=new YAHOO.deconcept.PlayerVersion([6,0,21]);D.AllowScriptAccess="always";}catch(E){if(C.major==6){return C;}}try{D=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(E){}}if(D!==null){C=new YAHOO.deconcept.PlayerVersion(D.GetVariable("$version").split(" ")[1].split(","));}}}return C;};YAHOO.deconcept.PlayerVersion=function(A){this.major=A[0]!!
 ==null?parseInt(A[0],0):0;this.minor=A[1]!==null?parseInt(A[1],0):0;this.rev=A[2]!==null?parseInt(A[2],0):0;};YAHOO.deconcept.PlayerVersion.prototype.versionIsValid=function(A){if(this.major<A.major){return false;}if(this.major>A.major){return true;}if(this.minor<A.minor){return false;}if(this.minor>A.minor){return true;}if(this.rev<A.rev){return false;}return true;};YAHOO.deconcept.util={getRequestParameter:function(D){var C=document.location.search||document.location.hash;if(D===null){return C;}if(C){var B=C.substring(1).split("&");for(var A=0;A<B.length;A++){if(B[A].substring(0,B[A].indexOf("="))==D){return B[A].substring((B[A].indexOf("=")+1));}}}return"";
+}};YAHOO.deconcept.SWFObjectUtil.cleanupSWFs=function(){var C=document.getElementsByTagName("OBJECT");for(var B=C.length-1;B>=0;B--){C[B].style.display="none";for(var A in C[B]){if(typeof C[B][A]=="function"){C[B][A]=function(){};}}}};if(YAHOO.deconcept.SWFObject.doPrepUnload){if(!YAHOO.deconcept.unloadSet){YAHOO.deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",YAHOO.deconcept.SWFObjectUtil.prepUnload);YAHOO.deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(A){return document.all[A];};}YAHOO.widget.FlashAdapter=function(E,A,B,C){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};B=B||{};this._id=B.id=B.id||YAHOO.util.Dom.generateId(null,"yuigen");B.version=B.version||"9.0.45";B.backgroundColor=B.backgrou!
 ndColor||"#ffffff";this._attributes=B;this._swfURL=E;this._containerID=A;this._embedSWF(this._swfURL,this._containerID,B.id,B.version,B.backgroundColor,B.expressInstall,B.wmode,C);try{this.createEvent("contentReady");}catch(D){}};YAHOO.widget.FlashAdapter.owners=YAHOO.widget.FlashAdapter.owners||{};YAHOO.extend(YAHOO.widget.FlashAdapter,YAHOO.util.AttributeProvider,{_swfURL:null,_containerID:null,_swf:null,_id:null,_initialized:false,_attributes:null,toString:function(){return"FlashAdapter "+this._id;},destroy:function(){if(this._swf){var B=YAHOO.util.Dom.get(this._containerID);B.removeChild(this._swf);}var A=this._id;for(var C in this){if(YAHOO.lang.hasOwnProperty(this,C)){this[C]=null;}}},_embedSWF:function(J,I,E,C,F,G,B,H){var D=new YAHOO.deconcept.SWFObject(J,E,"100%","100%",C,F);if(G){D.useExpressInstall(G);}D.addParam("allowScriptAccess","always");if(B){D.addParam("wmode",B);}D.addParam("menu","false");D.addVariable("allowedDomain",document.location.hostname);D.addVar!
 iable("elementID",E);D.addVariable("eventHandler","YAHOO.widge!
 t.FlashA
dapter.eventHandler");if(H){D.addVariable("buttonSkin",H);}var A=YAHOO.util.Dom.get(I);var K=D.write(A);if(K){this._swf=YAHOO.util.Dom.get(E);YAHOO.widget.FlashAdapter.owners[E]=this;}else{}},_eventHandler:function(B){var A=B.type;switch(A){case"swfReady":this._loadHandler();return;case"log":return;}this.fireEvent(A,B);},_loadHandler:function(){this._initialized=false;this._initAttributes(this._attributes);this.setAttributes(this._attributes,true);this._initialized=true;this.fireEvent("contentReady");},set:function(A,B){this._attributes[A]=B;YAHOO.widget.FlashAdapter.superclass.set.call(this,A,B);},_initAttributes:function(A){this.getAttributeConfig("altText",{method:this._getAltText});this.setAttributeConfig("altText",{method:this._setAltText});this.getAttributeConfig("swfURL",{method:this._getSWFURL});},_getSWFURL:function(){return this._swfURL;},_getAltText:function(){return this._swf.getAltText();},_setAltText:function(A){return this._swf.setAltText(A);}});YAHOO.widget.F!
 lashAdapter.eventHandler=function(A,B){if(!YAHOO.widget.FlashAdapter.owners[A]){setTimeout(function(){YAHOO.widget.FlashAdapter.eventHandler(A,B);},0);}else{YAHOO.widget.FlashAdapter.owners[A]._eventHandler(B);}};YAHOO.widget.FlashAdapter.proxyFunctionCount=0;YAHOO.widget.FlashAdapter.createProxyFunction=function(B){var A=YAHOO.widget.FlashAdapter.proxyFunctionCount;YAHOO.widget.FlashAdapter["proxyFunction"+A]=function(){return B.apply(null,arguments);};YAHOO.widget.FlashAdapter.proxyFunctionCount++;return"YAHOO.widget.FlashAdapter.proxyFunction"+A.toString();};YAHOO.widget.FlashAdapter.removeProxyFunction=function(A){if(!A||A.indexOf("YAHOO.widget.FlashAdapter.proxyFunction")<0){return;}A=A.substr(26);YAHOO.widget.FlashAdapter[A]=null;};YAHOO.widget.Uploader=function(A,B,D){var C="window";if(!(B)||(B&&D)){C="transparent";}YAHOO.widget.Uploader.superclass.constructor.call(this,YAHOO.widget.Uploader.SWFURL,A,{wmode:C},B);this.createEvent("mouseDown");this.createEvent("mouseU!
 p");this.createEvent("rollOver");this.createEvent("rollOut");t!
 his.crea
teEvent("click");this.createEvent("fileSelect");this.createEvent("uploadStart");this.createEvent("uploadProgress");this.createEvent("uploadCancel");this.createEvent("uploadComplete");this.createEvent("uploadCompleteData");this.createEvent("uploadError");};YAHOO.widget.Uploader.SWFURL="assets/uploader.swf";YAHOO.extend(YAHOO.widget.Uploader,YAHOO.widget.FlashAdapter,{upload:function(A,B,E,C,D){this._swf.upload(A,B,E,C,D);},uploadAll:function(A,D,B,C){this._swf.uploadAll(A,D,B,C);},cancel:function(A){this._swf.cancel(A);},clearFileList:function(){this._swf.clearFileList();},removeFile:function(A){this._swf.removeFile(A);},setAllowLogging:function(A){this._swf.setAllowLogging(A);},setSimUploadLimit:function(A){this._swf.setSimUploadLimit(A);},setAllowMultipleFiles:function(A){this._swf.setAllowMultipleFiles(A);},setFileFilters:function(A){this._swf.setFileFilters(A);},enable:function(){this._swf.enable();},disable:function(){this._swf.disable();}});YAHOO.register("uploader",YAH!
 OO.widget.Uploader,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Added: trunk/root/static/yui/uploader/uploader.js
===================================================================
--- trunk/root/static/yui/uploader/uploader.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/uploader/uploader.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -0,0 +1,1054 @@
+/*
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
+Code licensed under the BSD License:
+http://developer.yahoo.net/yui/license.txt
+version: 2.7.0
+*/
+/*extern ActiveXObject, __flash_unloadHandler, __flash_savedUnloadHandler */
+/*!
+ * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ * @namespace YAHOO
+ */
+
+YAHOO.namespace("deconcept"); 
+	
+YAHOO.deconcept = YAHOO.deconcept || {};
+
+if(typeof YAHOO.deconcept.util == "undefined" || !YAHOO.deconcept.util)
+{
+	YAHOO.deconcept.util = {};
+}
+
+if(typeof YAHOO.deconcept.SWFObjectUtil == "undefined" || !YAHOO.deconcept.SWFObjectUtil)
+{
+	YAHOO.deconcept.SWFObjectUtil = {};
+}
+
+YAHOO.deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
+{
+	if(!document.getElementById) { return; }
+	this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
+	this.skipDetect = YAHOO.deconcept.util.getRequestParameter(this.DETECT_KEY);
+	this.params = {};
+	this.variables = {};
+	this.attributes = [];
+	if(swf) { this.setAttribute('swf', swf); }
+	if(id) { this.setAttribute('id', id); }
+	if(w) { this.setAttribute('width', w); }
+	if(h) { this.setAttribute('height', h); }
+	if(ver) { this.setAttribute('version', new YAHOO.deconcept.PlayerVersion(ver.toString().split("."))); }
+	this.installedVer = YAHOO.deconcept.SWFObjectUtil.getPlayerVersion();
+	if (!window.opera && document.all && this.installedVer.major > 7)
+	{
+		// only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
+		YAHOO.deconcept.SWFObject.doPrepUnload = true;
+	}
+	if(c)
+	{
+		this.addParam('bgcolor', c);
+	}
+	var q = quality ? quality : 'high';
+	this.addParam('quality', q);
+	this.setAttribute('useExpressInstall', false);
+	this.setAttribute('doExpressInstall', false);
+	var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
+	this.setAttribute('xiRedirectUrl', xir);
+	this.setAttribute('redirectUrl', '');
+	if(redirectUrl)
+	{
+		this.setAttribute('redirectUrl', redirectUrl);
+	}
+};
+
+YAHOO.deconcept.SWFObject.prototype =
+{
+	useExpressInstall: function(path)
+	{
+		this.xiSWFPath = !path ? "expressinstall.swf" : path;
+		this.setAttribute('useExpressInstall', true);
+	},
+	setAttribute: function(name, value){
+		this.attributes[name] = value;
+	},
+	getAttribute: function(name){
+		return this.attributes[name];
+	},
+	addParam: function(name, value){
+		this.params[name] = value;
+	},
+	getParams: function(){
+		return this.params;
+	},
+	addVariable: function(name, value){
+		this.variables[name] = value;
+	},
+	getVariable: function(name){
+		return this.variables[name];
+	},
+	getVariables: function(){
+		return this.variables;
+	},
+	getVariablePairs: function(){
+		var variablePairs = [];
+		var key;
+		var variables = this.getVariables();
+		for(key in variables)
+		{
+			if(variables.hasOwnProperty(key))
+			{
+				variablePairs[variablePairs.length] = key +"="+ variables[key];
+			}
+		}
+		return variablePairs;
+	},
+	getSWFHTML: function() {
+		var swfNode = "";
+		var params = {};
+		var key = "";
+		var pairs = "";
+		if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "PlugIn");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'"';
+			swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += [key] +'="'+ params[key] +'" ';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }
+			swfNode += '/>';
+		} else { // PC IE
+			if (this.getAttribute("doExpressInstall")) {
+				this.addVariable("MMplayerType", "ActiveX");
+				this.setAttribute('swf', this.xiSWFPath);
+			}
+			swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'" style="'+ this.getAttribute('style') +'">';
+			swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';
+			params = this.getParams();
+			for(key in params)
+			{
+				if(params.hasOwnProperty(key))
+				{
+					swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';
+				}
+			}
+			pairs = this.getVariablePairs().join("&");
+			if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}
+			swfNode += "</object>";
+		}
+		return swfNode;
+	},
+	write: function(elementId)
+	{
+		if(this.getAttribute('useExpressInstall')) {
+			// check to see if we need to do an express install
+			var expressInstallReqVer = new YAHOO.deconcept.PlayerVersion([6,0,65]);
+			if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {
+				this.setAttribute('doExpressInstall', true);
+				this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));
+				document.title = document.title.slice(0, 47) + " - Flash Player Installation";
+				this.addVariable("MMdoctitle", document.title);
+			}
+		}
+		if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version')))
+		{
+			var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;
+			n.innerHTML = this.getSWFHTML();
+			return true;
+		}
+		else
+		{
+			if(this.getAttribute('redirectUrl') !== "")
+			{
+				document.location.replace(this.getAttribute('redirectUrl'));
+			}
+		}
+		return false;
+	}
+};
+
+/* ---- detection functions ---- */
+YAHOO.deconcept.SWFObjectUtil.getPlayerVersion = function()
+{
+	var axo = null;
+	var PlayerVersion = new YAHOO.deconcept.PlayerVersion([0,0,0]);
+	if(navigator.plugins && navigator.mimeTypes.length)
+	{
+		var x = navigator.plugins["Shockwave Flash"];
+		if(x && x.description)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));
+		}
+	}
+	else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0)
+	{ // if Windows CE
+		var counter = 3;
+		while(axo)
+		{
+			try
+			{
+				counter++;
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter);
+//				document.write("player v: "+ counter);
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([counter,0,0]);
+			}
+			catch(e)
+			{
+				axo = null;
+			}
+		}
+	}
+	else
+	{ // Win IE (non mobile)
+		// do minor version lookup in IE, but avoid fp6 crashing issues
+		// see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
+		try
+		{
+			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
+		}
+		catch(e)
+		{
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
+				PlayerVersion = new YAHOO.deconcept.PlayerVersion([6,0,21]);
+				axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
+			}
+			catch(e)
+			{
+				if(PlayerVersion.major == 6)
+				{
+					return PlayerVersion;
+				}
+			}
+			try
+			{
+				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
+			}
+			catch(e) {}
+		}
+		
+		if(axo !== null)
+		{
+			PlayerVersion = new YAHOO.deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
+		}
+	}
+	return PlayerVersion;
+};
+
+YAHOO.deconcept.PlayerVersion = function(arrVersion)
+{
+	this.major = arrVersion[0] !== null ? parseInt(arrVersion[0], 0) : 0;
+	this.minor = arrVersion[1] !== null ? parseInt(arrVersion[1], 0) : 0;
+	this.rev = arrVersion[2] !== null ? parseInt(arrVersion[2], 0) : 0;
+};
+
+YAHOO.deconcept.PlayerVersion.prototype.versionIsValid = function(fv)
+{
+	if(this.major < fv.major)
+	{
+		return false;
+	}
+	if(this.major > fv.major)
+	{
+		return true;
+	}
+	if(this.minor < fv.minor)
+	{
+		return false;
+	}
+	if(this.minor > fv.minor)
+	{
+		return true;
+	}
+	if(this.rev < fv.rev)
+	{
+		return false;
+	}
+	return true;
+};
+
+/* ---- get value of query string param ---- */
+YAHOO.deconcept.util =
+{
+	getRequestParameter: function(param)
+	{
+		var q = document.location.search || document.location.hash;
+		if(param === null) { return q; }
+		if(q)
+		{
+			var pairs = q.substring(1).split("&");
+			for(var i=0; i < pairs.length; i++)
+			{
+				if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
+				{
+					return pairs[i].substring((pairs[i].indexOf("=") + 1));
+				}
+			}
+		}
+		return "";
+	}
+};
+
+/* fix for video streaming bug */
+YAHOO.deconcept.SWFObjectUtil.cleanupSWFs = function()
+{
+	var objects = document.getElementsByTagName("OBJECT");
+	for(var i = objects.length - 1; i >= 0; i--)
+	{
+		objects[i].style.display = 'none';
+		for(var x in objects[i])
+		{
+			if(typeof objects[i][x] == 'function')
+			{
+				objects[i][x] = function(){};
+			}
+		}
+	}
+};
+
+// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
+if(YAHOO.deconcept.SWFObject.doPrepUnload)
+{
+	if(!YAHOO.deconcept.unloadSet)
+	{
+		YAHOO.deconcept.SWFObjectUtil.prepUnload = function()
+		{
+			__flash_unloadHandler = function(){};
+			__flash_savedUnloadHandler = function(){};
+			window.attachEvent("onunload", YAHOO.deconcept.SWFObjectUtil.cleanupSWFs);
+		};
+		window.attachEvent("onbeforeunload", YAHOO.deconcept.SWFObjectUtil.prepUnload);
+		YAHOO.deconcept.unloadSet = true;
+	}
+}
+
+/* add document.getElementById if needed (mobile IE < 5) */
+if(!document.getElementById && document.all)
+{
+	document.getElementById = function(id) { return document.all[id]; };
+}
+/**
+ * Wraps Flash embedding functionality and allows communication with SWF through
+ * attributes.
+ *
+ * @namespace YAHOO.widget
+ * @class FlashAdapter
+ * @uses YAHOO.util.AttributeProvider
+ */
+YAHOO.widget.FlashAdapter = function(swfURL, containerID, attributes, buttonSkin)
+{
+	
+	this._queue = this._queue || [];
+	this._events = this._events || {};
+	this._configs = this._configs || {};
+	attributes = attributes || {};
+	
+	//the Flash Player external interface code from Adobe doesn't play nicely
+	//with the default value, yui-gen, in IE
+	this._id = attributes.id = attributes.id || YAHOO.util.Dom.generateId(null, "yuigen");
+	attributes.version = attributes.version || "9.0.45";
+	attributes.backgroundColor = attributes.backgroundColor || "#ffffff";
+	
+	//we can't use the initial attributes right away
+	//so save them for once the SWF finishes loading
+	this._attributes = attributes;
+	
+	this._swfURL = swfURL;
+	this._containerID = containerID;
+	
+	//embed the SWF file in the page
+	this._embedSWF(this._swfURL, this._containerID, attributes.id, attributes.version,
+		attributes.backgroundColor, attributes.expressInstall, attributes.wmode, buttonSkin);
+	
+	/**
+	 * Fires when the SWF is initialized and communication is possible.
+	 * @event contentReady
+	 */
+	//Fix for iframe cross-domain issue with FF2x 
+	try
+	{
+		this.createEvent("contentReady");
+	}
+	catch(e){}
+};
+
+YAHOO.widget.FlashAdapter.owners = YAHOO.widget.FlashAdapter.owners || {};
+
+YAHOO.extend(YAHOO.widget.FlashAdapter, YAHOO.util.AttributeProvider,
+{
+	/**
+	 * The URL of the SWF file.
+	 * @property _swfURL
+	 * @type String
+	 * @private
+	 */
+	_swfURL: null,
+
+	/**
+	 * The ID of the containing DIV.
+	 * @property _containerID
+	 * @type String
+	 * @private
+	 */
+	_containerID: null,
+
+	/**
+	 * A reference to the embedded SWF file.
+	 * @property _swf
+	 * @private
+	 */
+	_swf: null,
+
+	/**
+	 * The id of this instance.
+	 * @property _id
+	 * @type String
+	 * @private
+	 */
+	_id: null,
+
+	/**
+	 * Indicates whether the SWF has been initialized and is ready
+	 * to communicate with JavaScript
+	 * @property _initialized
+	 * @type Boolean
+	 * @private
+	 */
+	_initialized: false,
+	
+	/**
+	 * The initializing attributes are stored here until the SWF is ready.
+	 * @property _attributes
+	 * @type Object
+	 * @private
+	 */
+	_attributes: null, //the intializing attributes
+
+	/**
+	 * Public accessor to the unique name of the FlashAdapter instance.
+	 *
+	 * @method toString
+	 * @return {String} Unique name of the FlashAdapter instance.
+	 */
+	toString: function()
+	{
+		return "FlashAdapter " + this._id;
+	},
+
+	/**
+	 * Nulls out the entire FlashAdapter instance and related objects and removes attached
+	 * event listeners and clears out DOM elements inside the container. After calling
+	 * this method, the instance reference should be expliclitly nulled by implementer,
+	 * as in myChart = null. Use with caution!
+	 *
+	 * @method destroy
+	 */
+	destroy: function()
+	{
+		//kill the Flash Player instance
+		if(this._swf)
+		{
+			var container = YAHOO.util.Dom.get(this._containerID);
+			container.removeChild(this._swf);
+		}
+		
+		var instanceName = this._id;
+		
+		//null out properties
+		for(var prop in this)
+		{
+			if(YAHOO.lang.hasOwnProperty(this, prop))
+			{
+				this[prop] = null;
+			}
+		}
+		
+	},
+
+	/**
+	 * Embeds the SWF in the page and associates it with this instance.
+	 *
+	 * @method _embedSWF
+	 * @private
+	 */
+	_embedSWF: function(swfURL, containerID, swfID, version, backgroundColor, expressInstall, wmode, buttonSkin)
+	{
+		//standard SWFObject embed
+		var swfObj = new YAHOO.deconcept.SWFObject(swfURL, swfID, "100%", "100%", version, backgroundColor);
+
+		if(expressInstall)
+		{
+			swfObj.useExpressInstall(expressInstall);
+		}
+
+		//make sure we can communicate with ExternalInterface
+		swfObj.addParam("allowScriptAccess", "always");
+		
+		if(wmode)
+		{
+			swfObj.addParam("wmode", wmode);
+		}
+		
+		swfObj.addParam("menu", "false");
+		
+		//again, a useful ExternalInterface trick
+		swfObj.addVariable("allowedDomain", document.location.hostname);
+
+		//tell the SWF which HTML element it is in
+		swfObj.addVariable("elementID", swfID);
+
+		// set the name of the function to call when the swf has an event
+		swfObj.addVariable("eventHandler", "YAHOO.widget.FlashAdapter.eventHandler");
+		if (buttonSkin) {
+		swfObj.addVariable("buttonSkin", buttonSkin);
+		}
+		var container = YAHOO.util.Dom.get(containerID);
+		var result = swfObj.write(container);
+		if(result)
+		{
+			this._swf = YAHOO.util.Dom.get(swfID);
+			YAHOO.widget.FlashAdapter.owners[swfID] = this;
+		}
+		else
+		{
+		}
+	},
+
+	/**
+	 * Handles or re-dispatches events received from the SWF.
+	 *
+	 * @method _eventHandler
+	 * @private
+	 */
+	_eventHandler: function(event)
+	{
+		var type = event.type;
+		switch(type)
+		{
+			case "swfReady":
+   				this._loadHandler();
+				return;
+			case "log":
+				return;
+		}
+		
+		
+		//be sure to return after your case or the event will automatically fire!
+		this.fireEvent(type, event);
+	},
+
+	/**
+	 * Called when the SWF has been initialized.
+	 *
+	 * @method _loadHandler
+	 * @private
+	 */
+	_loadHandler: function()
+	{
+		this._initialized = false;
+		this._initAttributes(this._attributes);
+		this.setAttributes(this._attributes, true);
+		
+		this._initialized = true;
+		this.fireEvent("contentReady");
+	},
+	
+	set: function(name, value)
+	{
+		//save all the attributes in case the swf reloads
+		//so that we can pass them in again
+		this._attributes[name] = value;
+		YAHOO.widget.FlashAdapter.superclass.set.call(this, name, value);
+	},
+	
+	/**
+	 * Initializes the attributes.
+	 *
+	 * @method _initAttributes
+	 * @private
+	 */
+	_initAttributes: function(attributes)
+	{
+		//should be overridden if other attributes need to be set up
+
+		/**
+		 * @attribute wmode
+		 * @description Sets the window mode of the Flash Player control. May be
+		 *		"window", "opaque", or "transparent". Only available in the constructor
+		 *		because it may not be set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute expressInstall
+		 * @description URL pointing to a SWF file that handles Flash Player's express
+		 *		install feature. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute version
+		 * @description Minimum required version for the SWF file. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+
+		/**
+		 * @attribute backgroundColor
+		 * @description The background color of the SWF. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		 
+		/**
+		 * @attribute altText
+		 * @description The alternative text to provide for screen readers and other assistive technology.
+		 * @type String
+		 */
+		this.getAttributeConfig("altText",
+		{
+			method: this._getAltText
+		});
+		this.setAttributeConfig("altText",
+		{
+			method: this._setAltText
+		});
+		
+		/**
+		 * @attribute swfURL
+		 * @description Absolute or relative URL to the SWF displayed by the FlashAdapter. Only available in the constructor because it may not be
+		 *		set after Flash Player has been embedded in the page.
+		 * @type String
+		 */
+		this.getAttributeConfig("swfURL",
+		{
+			method: this._getSWFURL
+		});
+	},
+	
+	/**
+	 * Getter for swfURL attribute.
+	 *
+	 * @method _getSWFURL
+	 * @private
+	 */
+	_getSWFURL: function()
+	{
+		return this._swfURL;
+	},
+	
+	/**
+	 * Getter for altText attribute.
+	 *
+	 * @method _getAltText
+	 * @private
+	 */
+	_getAltText: function()
+	{
+		return this._swf.getAltText();
+	},
+
+	/**
+	 * Setter for altText attribute.
+	 *
+	 * @method _setAltText
+	 * @private
+	 */
+	_setAltText: function(value)
+	{
+		return this._swf.setAltText(value);
+	}
+});
+
+
+/**
+ * Receives event messages from SWF and passes them to the correct instance
+ * of FlashAdapter.
+ *
+ * @method YAHOO.widget.FlashAdapter.eventHandler
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.eventHandler = function(elementID, event)
+{
+
+	if(!YAHOO.widget.FlashAdapter.owners[elementID])
+	{
+		//fix for ie: if owner doesn't exist yet, try again in a moment
+		setTimeout(function() { YAHOO.widget.FlashAdapter.eventHandler( elementID, event ); }, 0);
+	}
+	else
+	{
+		YAHOO.widget.FlashAdapter.owners[elementID]._eventHandler(event);
+	}
+};
+
+/**
+ * The number of proxy functions that have been created.
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.proxyFunctionCount = 0;
+
+/**
+ * Creates a globally accessible function that wraps a function reference.
+ * Returns the proxy function's name as a string for use by the SWF through
+ * ExternalInterface.
+ *
+ * @method YAHOO.widget.FlashAdapter.createProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.createProxyFunction = function(func)
+{
+	var index = YAHOO.widget.FlashAdapter.proxyFunctionCount;
+	YAHOO.widget.FlashAdapter["proxyFunction" + index] = function()
+	{
+		return func.apply(null, arguments);
+	};
+	YAHOO.widget.FlashAdapter.proxyFunctionCount++;
+	return "YAHOO.widget.FlashAdapter.proxyFunction" + index.toString();
+};
+
+/**
+ * Removes a function created with createProxyFunction()
+ * 
+ * @method YAHOO.widget.FlashAdapter.removeProxyFunction
+ * @static
+ * @private
+ */
+YAHOO.widget.FlashAdapter.removeProxyFunction = function(funcName)
+{
+	//quick error check
+	if(!funcName || funcName.indexOf("YAHOO.widget.FlashAdapter.proxyFunction") < 0)
+	{
+		return;
+	}
+	
+	funcName = funcName.substr(26);
+	YAHOO.widget.FlashAdapter[funcName] = null;
+};
+/**
+ * The YUI Uploader Control
+ * @module uploader
+ * @description <p>YUI Uploader provides file upload functionality that goes beyond the basic browser-based methods. 
+ * Specifically, the YUI Uploader allows for:
+ * <ol>
+ * <li> Multiple file selection in a single "Open File" dialog.</li>
+ * <li> File extension filters to facilitate the user's selection.</li>
+ * <li> Progress tracking for file uploads.</li>
+ * <li> A range of file metadata: filename, size, date created, date modified, and author.</li>
+ * <li> A set of events dispatched on various aspects of the file upload process: file selection, upload progress, upload completion, etc.</li>
+ * <li> Inclusion of additional data in the file upload POST request.</li>
+ * <li> Faster file upload on broadband connections due to the modified SEND buffer size.</li>
+ * <li> Same-page server response upon completion of the file upload.</li>
+ * </ol>
+ * </p>
+ * @title Uploader
+ * @namespace YAHOO.widget
+ * @requires yahoo, dom, element, event
+ */
+/**
+ * Uploader class for the YUI Uploader component.
+ *
+ * @namespace YAHOO.widget
+ * @class Uploader
+ * @uses YAHOO.widget.FlashAdapter
+ * @constructor
+ * @param containerId {HTMLElement} Container element for the Flash Player instance.
+ * @param buttonSkin {String} [optional]. If defined, the uploader is 
+ * rendered as a button. This parameter must provide the URL of a button
+ * skin sprite image. Acceptable types are: jpg, gif, png and swf. The 
+ * sprite is divided evenly into four sections along its height (e.g., if
+ * the sprite is 200 px tall, it's divided into four sections 50px each).
+ * Each section is used as a skin for a specific state of the button: top
+ * section is "up", second section is "over", third section is "down", and
+ * fourth section is "disabled". 
+ * If the parameter is not supplied, the uploader is rendered transparent,
+ * and it's the developer's responsibility to create a visible UI below it.
+ * @param forceTransparent {Boolean} This parameter, if true, forces the Flash
+ * UI to be rendered with wmode set to "transparent". This behavior is useful 
+ * in conjunction with non-rectangular button skins with PNG transparency. 
+ * The parameter is false by default, and ignored if no buttonSkin is defined.
+  */
+YAHOO.widget.Uploader = function(containerId, buttonSkin, forceTransparent)
+{
+	var newWMode = "window";
+
+	if (!(buttonSkin) || (buttonSkin && forceTransparent)) {
+		newWMode = "transparent";
+	}
+
+	
+ 	YAHOO.widget.Uploader.superclass.constructor.call(this, YAHOO.widget.Uploader.SWFURL, containerId, {wmode:newWMode}, buttonSkin);
+
+	/**
+	 * Fires when the mouse is pressed over the Uploader.
+	 * Only fires when the Uploader UI is enabled and
+	 * the render type is 'transparent'.
+	 *
+	 * @event mouseDown
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("mouseDown");
+	
+	/**
+	 * Fires when the mouse is released over the Uploader.
+	 * Only fires when the Uploader UI is enabled and
+	 * the render type is 'transparent'.
+	 *
+	 * @event mouseUp
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("mouseUp");
+
+	/**
+	 * Fires when the mouse rolls over the Uploader.
+	 *
+	 * @event rollOver
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("rollOver");
+	
+	/**
+	 * Fires when the mouse rolls out of the Uploader.
+	 *
+	 * @event rollOut
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("rollOut");
+	
+	/**
+	 * Fires when the uploader is clicked.
+	 *
+	 * @event click
+	 * @param event.type {String} The event type
+	 */
+	this.createEvent("click");
+	
+	/**
+	 * Fires when the user has finished selecting files in the "Open File" dialog.
+	 *
+	 * @event fileSelect
+	 * @param event.type {String} The event type
+	 * @param event.fileList {Object} A dictionary of objects with file information
+	 * @param event.fileList[].size {Number} File size in bytes for a specific file in fileList
+	 * @param event.fileList[].cDate {Date} Creation date for a specific file in fileList
+	 * @param event.fileList[].mDate {Date} Modification date for a specific file in fileList
+	 * @param event.fileList[].name {String} File name for a specific file in fileList
+	 * @param event.fileList[].id {String} Unique file id of a specific file in fileList
+	 */
+	this.createEvent("fileSelect");
+
+	/**
+	 * Fires when an upload of a specific file has started.
+	 *
+	 * @event uploadStart
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file that's started to upload
+	 */
+	this.createEvent("uploadStart");
+
+	/**
+	 * Fires when new information about the upload progress for a specific file is available.
+	 *
+	 * @event uploadProgress
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file with which the upload progress data is associated
+	 * @param bytesLoaded {Number} The number of bytes of the file uploaded so far
+	 * @param bytesTotal {Number} The total size of the file
+	 */
+	this.createEvent("uploadProgress");
+	
+	/**
+	 * Fires when an upload for a specific file is cancelled.
+	 *
+	 * @event uploadCancel
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file with which the upload has been cancelled.
+	 */	
+	this.createEvent("uploadCancel");
+
+	/**
+	 * Fires when an upload for a specific file is complete.
+	 *
+	 * @event uploadComplete
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file for which the upload has been completed.
+	 */	
+	this.createEvent("uploadComplete");
+
+	/**
+	 * Fires when the server sends data in response to a completed upload.
+	 *
+	 * @event uploadCompleteData
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file for which the upload has been completed.
+	 * @param event.data {String} The raw data returned by the server in response to the upload.
+	 */	
+	this.createEvent("uploadCompleteData");
+	
+	/**
+	 * Fires when an upload error occurs.
+	 *
+	 * @event uploadError
+	 * @param event.type {String} The event type
+	 * @param event.id {String} The id of the file that was being uploaded when the error has occurred.
+	 * @param event.status {String} The status message associated with the error.
+	 */	
+	this.createEvent("uploadError");
+}
+
+/**
+ * Location of the Uploader SWF
+ *
+ * @property Chart.SWFURL
+ * @private
+ * @static
+ * @final
+ * @default "assets/uploader.swf"
+ */
+YAHOO.widget.Uploader.SWFURL = "assets/uploader.swf";
+
+YAHOO.extend(YAHOO.widget.Uploader, YAHOO.widget.FlashAdapter,
+{	
+/**
+ * Starts the upload of the file specified by fileID to the location specified by uploadScriptPath.
+ *
+ * @param fileID {String} The id of the file to start uploading.
+ * @param uploadScriptPath {String} The URL of the upload location.
+ * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
+ * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
+ * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
+ * </code> 
+ */
+	upload: function(fileID, uploadScriptPath, method, vars, fieldName)
+	{
+		this._swf.upload(fileID, uploadScriptPath, method, vars, fieldName);
+	},
+	
+/**
+ * Starts uploading all files in the queue. If this function is called, the upload queue is automatically managed.
+ *
+ * @param uploadScriptPath {String} The URL of the upload location.
+ * @param method {String} Either "GET" or "POST", specifying how the variables accompanying the file upload POST request should be submitted. "GET" by default.
+ * @param vars {Object} The object containing variables to be sent in the same request as the file upload.
+ * @param fieldName {String} The name of the variable in the POST request containing the file data. "Filedata" by default.
+ * </code> 
+ */
+	uploadAll: function(uploadScriptPath, method, vars, fieldName)
+	{
+		this._swf.uploadAll(uploadScriptPath, method, vars, fieldName);
+	},
+
+/**
+ * Cancels the upload of a specified file. If no file id is specified, all ongoing uploads are cancelled.
+ *
+ * @param fileID {String} The ID of the file whose upload should be cancelled.
+ */
+	cancel: function(fileID)
+	{
+		this._swf.cancel(fileID);
+	},
+
+/**
+ * Clears the list of files queued for upload.
+ *
+ */
+	clearFileList: function()
+	{
+		this._swf.clearFileList();
+	},
+	
+/**
+ * Removes the specified file from the upload queue. 
+ *
+ * @param fileID {String} The id of the file to remove from the upload queue. 
+ */
+	removeFile: function (fileID) 
+	{
+		this._swf.removeFile(fileID);
+	},
+
+/**
+ * Turns the logging functionality on.
+ * Uses Flash internal trace logging, as well as YUI Logger, if available.
+ *
+ * @param allowLogging {Boolean} If true, logs are output; otherwise, no logs are produced.
+ */
+    setAllowLogging: function (allowLogging)
+    {
+      	this._swf.setAllowLogging(allowLogging);
+    },
+
+/**
+ * Sets the number of simultaneous uploads when using uploadAll()
+ * The minimum value is 1, and maximum value is 5. The default value is 2.
+ *
+ * @param simUploadLimit {int} Number of simultaneous uploads, between 1 and 5.
+ */
+    setSimUploadLimit : function (simUploadLimit)
+    {
+       this._swf.setSimUploadLimit(simUploadLimit);
+    },
+
+/**
+ * Sets the flag allowing users to select multiple files for the upload.
+ *
+ * @param allowMultipleFiles {Boolean} If true, multiple files can be selected. False by default.
+ */     
+    setAllowMultipleFiles : function (allowMultipleFiles) 
+    {
+       this._swf.setAllowMultipleFiles(allowMultipleFiles);
+    },
+
+/**
+ * Sets the file filters for the "Browse" dialog.
+ *
+ *  @param newFilterArray An array of sets of key-value pairs of the form
+ *  {extensions: extensionString, description: descriptionString, [optional]macType: macTypeString}
+ *  The extensions string is a semicolon-delimited list of elements of the form "*.xxx", 
+ *  e.g. "*.jpg;*.gif;*.png". 
+ */       
+    setFileFilters : function (fileFilters) 
+    {
+       this._swf.setFileFilters(fileFilters);
+    },
+
+	/**
+	 * Enables the mouse events on the Uploader.
+	 * If the uploader is being rendered as a button,
+	 * then the button's skin is set to "up"
+	 * (first section of the button skin sprite).
+	 *
+	 */
+	enable : function ()
+	{
+		this._swf.enable();
+	},
+
+	/**
+	 * Disables the mouse events on the Uploader.
+	 * If the uploader is being rendered as a button,
+	 * then the button's skin is set to "disabled"
+	 * (fourth section of the button skin sprite).
+	 *
+	 */
+	disable : function () 
+	{
+		this._swf.disable();
+	}
+});
+YAHOO.register("uploader", YAHOO.widget.Uploader, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/utilities/README
===================================================================
--- trunk/root/static/yui/utilities/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/utilities/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,40 +0,0 @@
-utilities.js - Release Notes
-
-*** NOTE ***
-
-This document is not updated with each release.  Changes to
-the utilities.js source are noted in the README
-file for each component that comprises this aggregate:
-
-yahoo/README
-dom/README
-event/README
-connection/README
-animation/README
-dragdrop/README
-element/README
-get/README
-yuiloader/README
-
-*************
-
-The utilities.js file rolls up all of the YUI utility components into a single
-file; it includes the following components:
-
-* Yahoo Global Object
-* Event
-* Dom
-* Connection Manager
-* Animation
-* Drag & Drop
-* Element
-* Get
-* YUI Loader
-
-For implementations that use four or more  of these files, it may prove
-more efficient to include utilities.js as opposed to including separate files
-for each component.
-
-Note: If you require only the Yahoo Global Object, Event Utility and Dom
-collection, consider using the special yahoo-dom-event.js aggregate instead.
-

Modified: trunk/root/static/yui/utilities/utilities.js
===================================================================
--- trunk/root/static/yui/utilities/utilities.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/utilities/utilities.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,20 +1,22 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/A!
 ppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeo!
 f D==="boolean";},isFunction:function(D){return typeof D==="fu!
 nction";
},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2]!
 ;if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:funct!
 ion(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";f!
 or(;;){I
=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E!
 ,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.6.0",build:"1321"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);
-};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return ;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.context||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return ;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varN!
 ame){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return ;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return ;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X!
 .insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1)!
 {W.remov
eChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,!
 h);}else{}return ;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.6.0",build:"1321"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.6.0/build/","base":"http://yui.yahooapis.com/2.6.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/a!
 nimation-min.js","requires":["dom","event"]},"autocomplete":{"!
 type":"j
s","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-beta-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-experimental-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","eve!
 nt"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-beta-min.js","requires":["dom","event"]},"event"!
 :{"type":"js","path":"event/event-min.js","requires":["yahoo"]!
 },"fonts
":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-beta-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"typ!
 e":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-beta-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-beta-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","anim!
 ation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{!
 "type":"
js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-experimental.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersede!
 s":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=!
 B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueO!
 f"],D={isArray:function(G){return A.toString.apply(G)===F;},is!
 Boolean:
function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error(!
 "Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.leng!
 th>1){N.pop();}N.push("}");}return N.join("");},substitute:fun!
 ction(V,
H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if!
 (!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1799"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"s!
 tylesheet","href":T},U);
+};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName)!
 {U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.inser!
 tBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.rem!
 oveChild
(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}el!
 se{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.7.0",build:"1799"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.7.0/build/","base":"http://yui.yahooapis.com/2.7.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animatio!
 n-min.js","requires":["dom","event"]},"autocomplete":{"type":"!
 js","pat
h":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdro!
 p","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/ev!
 ent-min.js","requires":["yahoo"]},"fonts":{"type":"css","path"!
 :"fonts/
fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator!
 -min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"ed!
 itor"},"slider":{"type":"js","path":"slider/slider-min.js","re!
 quires":
["dragdrop"],"optional":["animation"],"skinnable":true},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloa!
 der-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
 i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollu!
 ps=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?ar!
 guments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.r!
 equired,
a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:func!
 tion(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.Obj!
 ectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<t!
 his.forc
e.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseS!
 kin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});
-}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return ;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return ;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};!
 this.insert(null,"css");return ;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return ;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return ;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName|!
 |"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();!
 ";var re
f=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return ;}if(mname){if(mname!==this._loading){return ;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return ;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return ;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c!
 =function(o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return ;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp),f.replaceStr):str;},_url:function(path){var u=this.base||"",f=this.filter;u=u+path;return this._filter(u);}};})();(function(){var B=YAHOO.util,F=YAHOO.lang,L,J,K={},G={},N=window.document;YAHOO.env._id_counter=YAHOO.en!
 v._id_counter||0;var C=YAHOO.env.ua.opera,M=YAHOO.env.ua.webki!
 t,A=YAHO
O.env.ua.gecko,H=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var O=function(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return K[Q];}var R=Q;while(E.HYPHEN.exec(R)){R=R.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}K[Q]=R;return R;};var P=function(R){var Q=G[R];if(!Q){Q=new RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");G[R]=Q;}return Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=function(Q,T){var S=null;if(T=="float"){T="cssFloat";}var R=Q.ownerDocument.defaultView.getComputedStyle(Q,"");if(R){S=R[O(T)];}return Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&H){L=function(Q,S){switch(O(S)){case"opacity":var U=100;try{U=Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(T){try{U=Q.filters("alpha").opacity;}catch(T){}}return U/100;case"float":S="styleFloat";default:var R=Q.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{L=function(Q,R){return Q.style[R];};}}if(H){J=function!
 (Q,R,S){switch(R){case"opacity":if(F.isString(Q.style.filter)){Q.style.filter="alpha(opacity="+S*100+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=1;}}break;case"float":R="styleFloat";default:Q.style[R]=S;}};}else{J=function(Q,R,S){if(R=="float"){R="cssFloat";}Q.style[R]=S;};}var D=function(Q,R){return Q&&Q.nodeType==1&&(!R||R(Q));};YAHOO.util.Dom={get:function(S){if(S){if(S.nodeType||S.item){return S;}if(typeof S==="string"){return N.getElementById(S);}if("length" in S){var T=[];for(var R=0,Q=S.length;R<Q;++R){T[T.length]=B.Dom.get(S[R]);}return T;}return S;}return null;},getStyle:function(Q,S){S=O(S);var R=function(T){return L(T,S);};return B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=O(S);var R=function(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}return I(S);};return B.Dom.batch(Q,R,B!
 .Dom,true);},getX:function(Q){var R=function(S){return B.Dom.g!
 etXY(S)[
0];};return B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var R=function(S){return B.Dom.getXY(S)[1];};return B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var R=function(W){var V=this.getStyle(W,"position");if(V=="static"){this.setStyle(W,"position","relative");V="relative";}var Y=this.getXY(W);if(Y===false){return false;}var X=[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top"),10)];if(isNaN(X[0])){X[0]=(V=="relative")?0:W.offsetLeft;}if(isNaN(X[1])){X[1]=(V=="relative")?0:W.offsetTop;}if(T[0]!==null){W.style.left=T[0]-Y[0]+X[0]+"px";}if(T[1]!==null){W.style.top=T[1]-Y[1]+X[1]+"px";}if(!S){var U=this.getXY(W);if((T[0]!==null&&U[0]!=T[0])||(T[1]!==null&&U[1]!=T[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function(Q,R){B.Dom.setXY(Q,[null,R]);},getRegion:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument!
 .body){return false;}var T=B.Region.getRegion(S);return T;};return B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){U=F.trim(U);Y=Y||"*";V=(V)?B.Dom.get(V):null||N;if(!V){return[];}var R=[],Q=V.getElementsByTagName(Y),X=P(U);for(var S=0,T=Q.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=Q[S];if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var Q=P(R);var T=function(U){return Q.test(U.className);};return B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var S=function(T){if(this.hasClass(T,Q)){return false;}T.className=F.trim([T.className,Q].join(" "));return true;};return B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=P(R);var T=function(W){var V=false,X=W.className;if(R&&X&&this.hasClass(W,R)){W.className=X.replace(Q," ");if(this.hasClass(W,R)){this.removeClass(W,R);}W.className=F.trim(W.classN!
 ame);if(W.className===""){var U=(W.hasAttribute)?"class":"clas!
 sName";W
.removeAttribute(U);}V=true;}return V;};return B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R===Q){return false;}var S=P(R);var U=function(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return true;}V.className=V.className.replace(S," "+Q+" ");if(this.hasClass(V,R)){this.removeClass(V,R);}V.className=F.trim(V.className);return true;};return B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=S||"yui-gen";var R=function(T){if(T&&T.id){return T.id;}var U=S+YAHOO.env._id_counter++;if(T){T.id=U;}return U;};return B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:function(R,S){R=B.Dom.get(R);S=B.Dom.get(S);var Q=false;if((R&&S)&&(R.nodeType&&S.nodeType)){if(R.contains&&R!==S){Q=R.contains(S);}else{if(R.compareDocumentPosition){Q=!!(R.compareDocumentPosition(S)&16);}}}else{}return Q;},inDocument:function(Q){return this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=R||"*";S=(S)?B.Dom.get(S):null||N;if(!S){return[];}var!
  T=[],W=S.getElementsByTagName(R);for(var V=0,Q=W.length;V<Q;++V){if(X(W[V])){T[T.length]=W[V];if(U){U(W[V]);}}}return T;},batch:function(U,X,W,S){U=(U&&(U.tagName||U.item))?U:B.Dom.get(U);if(!U||!X){return false;}var T=(S)?W:window;if(U.tagName||U.length===undefined){return X.call(T,U,W);}var V=[];for(var R=0,Q=U.length;R<Q;++R){V[V.length]=X.call(T,U[R],W);}return V;},getDocumentHeight:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollHeight:N.documentElement.scrollHeight;var Q=Math.max(R,B.Dom.getViewportHeight());return Q;},getDocumentWidth:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollWidth:N.documentElement.scrollWidth;var Q=Math.max(R,B.Dom.getViewportWidth());return Q;},getViewportHeight:function(){var Q=self.innerHeight;
-var R=N.compatMode;if((R||H)&&!C){Q=(R=="CSS1Compat")?N.documentElement.clientHeight:N.body.clientHeight;}return Q;},getViewportWidth:function(){var Q=self.innerWidth;var R=N.compatMode;if(R||H){Q=(R=="CSS1Compat")?N.documentElement.clientWidth:N.body.clientWidth;}return Q;},getAncestorBy:function(Q,R){while((Q=Q.parentNode)){if(D(Q,R)){return Q;}}return null;},getAncestorByClassName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return B.Dom.hasClass(T,Q);};return B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return T.tagName&&T.tagName.toUpperCase()==Q.toUpperCase();};return B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=Q.previousSibling;if(D(Q,R)){return Q;}}return null;},getPreviousSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=Q.nextSibling;if(D(Q,R)){return Q;}}retur!
 n null;},getNextSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var R=(D(Q.firstChild,S))?Q.firstChild:null;return R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return null;}var R=(D(Q.lastChild,S))?Q.lastChild:null;return R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=B.Dom.get(Q);return B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var S=B.Dom.getFirstChildBy(R,T);var Q=S?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length]=U;}return false;});return Q;},getChildren:function(Q){Q=B.Dom.get(Q);if(!Q){}return B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScrollTop:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollTop,Q.bo!
 dy.scrollTop);},insertBefore:function(R,Q){R=B.Dom.get(R);Q=B.!
 Dom.get(
Q);if(!R||!Q||!Q.parentNode){return null;}return Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}if(Q.nextSibling){return Q.parentNode.insertBefore(R,Q.nextSibling);}else{return Q.parentNode.appendChild(R);}},getClientRegion:function(){var S=B.Dom.getDocumentScrollTop(),R=B.Dom.getDocumentScrollLeft(),T=B.Dom.getViewportWidth()+R,Q=B.Dom.getViewportHeight()+S;return new B.Region(S,T,Q,R);}};var I=function(){if(N.documentElement.getBoundingClientRect){return function(S){var T=S.getBoundingClientRect(),R=Math.round;var Q=S.ownerDocument;return[R(T.left+B.Dom.getDocumentScrollLeft(Q)),R(T.top+B.Dom.getDocumentScrollTop(Q))];};}else{return function(S){var T=[S.offsetLeft,S.offsetTop];var R=S.offsetParent;var Q=(M&&B.Dom.getStyle(S,"position")=="absolute"&&S.offsetParent==S.ownerDocument.body);if(R!=S){while(R){T[0]+=R.offsetLeft;T[1]+=R.offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=="absolute"){Q=!
 true;}R=R.offsetParent;}}if(Q){T[0]-=S.ownerDocument.body.offsetLeft;T[1]-=S.ownerDocument.body.offsetTop;}R=S.parentNode;while(R.tagName&&!E.ROOT_TAG.test(R.tagName)){if(R.scrollTop||R.scrollLeft){T[0]-=R.scrollLeft;T[1]-=R.scrollTop;}R=R.parentNode;}return T;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.r!
 ight);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this!
 .left,E.
left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.6.0",build:"1321"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.!
 CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this!
 .type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(!
 false===
G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F!
 =[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(R,O,S,Q,P){var M=(YAHOO.lang.isString(R))?[R]:R;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:S,override:Q,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(O,M,P,N){this.onAvailable(O,M,P,N,true);},onDOMReady:function(M,O,N){if(this.DOMReady){setTimeout(function(){var P=window;if(N){if(N===true){P=O;}else{P=N;}}M.call(P,"DOMReady",[],O);},0!
 );}else{this.DOMReadyEvent.subscribe(M,O,N);}},_addListener:fu!
 nction(O
,M,X,S,N,a){if(!X||!X.call){return false;}if(this._isValidCollection(O)){var Y=true;for(var T=0,V=O.length;T<V;++T){Y=this._addListener(O[T],M,X,S,N,a)&&Y;}return Y;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event._addListener(O,M,X,S,N,a);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,X,S,N,a];return true;}var b=O;if(N){if(N===true){b=S;}else{b=N;}}var P=function(c){return X.call(b,YAHOO.util.Event.getEvent(c,O),S);};var Z=[O,M,X,P,b,S,N,a];var U=I.length;I[U]=Z;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(Z);}else{try{this._simpleAdd(O,M,P,a);}catch(W){this.lastError=W;this._removeListener(O,M,X,a);return false;}}return true;},addListener:function(O,Q,N,P,M){return this._addListener(O,Q,!
 N,P,M,false);},addFocusListener:function(O,N,P,M){return this._addListener(O,K,N,P,M,true);},removeFocusListener:function(N,M){return this._removeListener(N,K,M,true);},addBlurListener:function(O,N,P,M){return this._addListener(O,L,N,P,M,true);},removeBlurListener:function(N,M){return this._removeListener(N,L,M,true);},fireLegacyEvent:function(Q,O){var S=true,M,U,T,V,R;U=E[O].slice();for(var N=0,P=U.length;N<P;++N){T=U[N];if(T&&T[this.WFN]){V=T[this.ADJ_SCOPE];R=T[this.WFN].call(V,Q);S=(S&&R);}}M=G[O];if(M&&M[2]){M[2](Q);}return S;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},_removeListener:function(N,M,V,Y){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this._removeListener(N[Q],M,V,Y)&&W);}return W;}}if(!V||!V.call){return thi!
 s.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>!
 -1;Q--){
X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[4];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],Y);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
-I.splice(S,1);return true;},removeListener:function(N,O,M){return this._removeListener(N,O,M,false);},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stop!
 Propagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_!
 load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready!
 ();M._tr
yPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.override){if(W.override===true){U=W.obj;}else{U=W.override;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:fun!
 ction(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this._removeListener(O,N.type,N.fn,N.capture);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],capture:P[this.CAPTURE],index:S});}}}}return(R.length)?R:null;},_unload:function(S){var M=YAHOO.util.Event,P,O,N,R,Q,T=J.slice();for(P=0,R=J.length;P<R;++P){N=T[P];if(N){var U=window;if(N[M.ADJ_SCOPE]){if(N[M.ADJ_SCOPE]===true){U=N[M.UNLOAD_OBJ];}else{U=N[M.ADJ_SCOPE];}}N[M.FN].call(U,M.getEvent(S,N[M.EL]),N[M.UNL!
 OAD_OBJ]);T[P]=null;N=null;U=null;}}J=null;if(I){for(O=I.lengt!
 h-1;O>-1
;O--){N=I[O];if(N){M._removeListener(N[M.EL],N[M.TYPE],N[M.FN],N[M.CAPTURE],O);}}N=null;}G=null;M._simpleRemove(window,"unload",M._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=!
 EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};th!
 is.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAH!
 OO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var!
  ref=eva
l(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c=function!
 (o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.7.0",build:"1799"});
+(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.lengt!
 h;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){retu!
 rn function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){sw!
 itch(x){
case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return functio!
 n(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.!
 Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,!
 p,AA);}A
C=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(!
 Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
+},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}retur!
 n G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHei!
 ght;}return G;},getViewportWidth:function(){var G=self.innerWi!
 dth,Y=K[
t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))!
 ?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(!
 Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibl!
 ing){ret
urn G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(!
 H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
+}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomW!
 idth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=nul!
 l,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;re!
 turn a+I
;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy!
 :"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1799"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E!
 ="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.u!
 til.Cust
omEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.cal!
 l(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){!
 return"Subscriber { obj: "+this.obj+", overrideContext: "+(thi!
 s.overri
deContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:fu!
 nction(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{tr!
 y{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.rem!
 oveListe
ner(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-!
 1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
+I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefau!
 lt:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPre!
 loadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!!
 M.DOMRea
dy){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var!
  O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(!
 P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O!
 [N.TYPE]
,O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
 /* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
-if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};
-var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}retur!
 n I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D!
 .fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyC!
 ode,J);b
reak;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.6.0",build:"1321"});YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_h!
 eaders:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(B){var A=YAHOO.util.Event.getTarget(B);if(A.nodeName.toLowerCase()=="input"&&(A.type&&A.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(A.name)+"="+encodeURIComponent(A.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEven!
 t("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),!
 abortEve
nt:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;!
 try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&t!
 his._isFormSubmit===false){this.initHeader("Content-Type",this!
 ._defaul
t_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fi!
 re(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAl!
 lResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;!
 E++){var
 B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;
-}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return ;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return ;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!P&&K){K=encodeURIComponent(K)+"=!
 ";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}else{F[O++]=K+I;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},create!
 Frame:function(A){var B="yuiIO"+this._transaction_id;var C;if(!
 YAHOO.en
v.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode!
 .setAttribute("target",I);if(YAHOO.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(YAHOO.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.document.XMLDocume!
 nt?L.contentWindow.document.XMLDocument:L.contentWindow.docume!
 nt;}catc
h(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}YAHOO.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};YAHOO.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallIn!
 Progress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.6.0",build:"1321"});(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,E,D){if(this.patterns.noNegatives.test(C)){E=(E>0)?E:0;}B.Dom.setStyle(this.getEl(),C,E+D);},getAttribute:functi!
 on(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="aut!
 o"&&!thi
s.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=!
 B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTim!
 e(),currentFrame:this.currentFrame};O.toString=function(){retu!
 rn("dura
tion: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};th!
 is.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K!
 =J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new functio!
 n(){this
.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2]!
 ,10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];}return null;};B.getAttribute=function(E){var G=this.getEl();
-if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.!
 runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){t!
 his.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);i!
 f(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){!
 G.fire(L
,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1799"});YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded!
 ",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(C){var B=YAHOO.util.Event.getTarget(C),A=B.nodeName.toLowerCase();if((A==="input"||A==="button")&&(B.type&&B.type.toLowerCase()=="submit")){YAHOO.util.Connect._submitElementValue=encodeURIComponent(B.name)+"="+encodeURIComponent(B.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","st!
 art"],onComplete:["completeEvent","complete"],onSuccess:["succ!
 essEvent
","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(F){var E,A;try{A=new XMLHttpRequest();E={conn:A,tId:F};}catch(D){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);E={conn:A,tId:F};break;}catch(C){}}}finally{return E;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:fu!
 nction(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()==="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setH!
 eader(D);}this.handleReadyState(D,E);D.conn.send(A||"");if(thi!
 s._isFor
mSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){var B;for(B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argu!
 ment:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}ca!
 tch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.!
 status;D
.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;
+}else{this._has_http_headers=true;}},setHeader:function(A){var B;if(this._has_default_headers){for(B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]);}}}if(this._has_http_headers){for(B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(M,H,C){var L,B,K,I,P,J=false,F=[],O=0,E,G,D,N,A;this.resetFormState();if(typeof M=="string"){L=(document.getElementById(M)||document.forms[M]);}else{if(typeof M=="object"){L=M;}else{return;}}if(H){this.createFrame(C?C:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=L;return;}for(E=0,G=L.elements.length;E<G;++E){B=L.elements[E];P=B.disabled;K=B.name;if(!!
 P&&K){K=encodeURIComponent(K)+"=";I=encodeURIComponent(B.value);switch(B.type){case"select-one":if(B.selectedIndex>-1){A=B.options[B.selectedIndex];F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}break;case"select-multiple":if(B.selectedIndex>-1){for(D=B.selectedIndex,N=B.options.length;D<N;++D){A=B.options[D];if(A.selected){F[O++]=K+encodeURIComponent((A.attributes.value&&A.attributes.value.specified)?A.value:A.text);}}}break;case"radio":case"checkbox":if(B.checked){F[O++]=K+I;}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(J===false){if(this._hasSubmitListener&&this._submitElementValue){F[O++]=this._submitElementValue;}J=true;}break;default:F[O++]=K+I;}}}this._isFormSubmit=true;this._sFormData=F.join("&");this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormD!
 ata="";},createFrame:function(A){var B="yuiIO"+this._transacti!
 on_id;va
r C;if(YAHOO.env.ua.ie){C=document.createElement('<iframe id="'+B+'" name="'+B+'" />');if(typeof A=="boolean"){C.src="javascript:false";}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[],B=A.split("&"),C,E;for(C=0;C<B.length;C++){E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=decodeURIComponent(B[C].substring(0,E));D[C].value=decodeURIComponent(B[C].substring(E+1));this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,N,E,C){var I="yuiIO"+D.tId,J="multipart/form-data",L=document.getElementById(I),O=this,K=(N&&N.argument)?N.argument:null,M,H,B,G;var A={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST")!
 ;this._formNode.setAttribute("target",I);if(YAHOO.env.ua.ie){this._formNode.setAttribute("encoding",J);}else{this._formNode.setAttribute("enctype",J);}if(C){M=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,K);if(D.startEvent){D.startEvent.fire(D,K);}if(N&&N.timeout){this._timeOut[D.tId]=window.setTimeout(function(){O.abort(D,N,true);},N.timeout);}if(M&&M.length>0){for(H=0;H<M.length;H++){this._formNode.removeChild(M[H]);}}for(B in A){if(YAHOO.lang.hasOwnProperty(A,B)){if(A[B]){this._formNode.setAttribute(B,A[B]);}else{this._formNode.removeAttribute(B);}}}this.resetFormState();var F=function(){if(N&&N.timeout){window.clearTimeout(O._timeOut[D.tId]);delete O._timeOut[D.tId];}O.completeEvent.fire(D,K);if(D.completeEvent){D.completeEvent.fire(D,K);}G={tId:D.tId,argument:N.argument};try{G.responseText=L.contentWindow.document.body?L.contentWindow.document.body.innerHTML:L.contentWindow.document.documentElement.textContent;G.responseXML=L.contentWindow.doc!
 ument.XMLDocument?L.contentWindow.document.XMLDocument:L.conte!
 ntWindow
.document;}catch(P){}if(N&&N.upload){if(!N.scope){N.upload(G);}else{N.upload.apply(N.scope,[G]);}}O.uploadEvent.fire(G);if(D.uploadEvent){D.uploadEvent.fire(G);}YAHOO.util.Event.removeListener(L,"load",F);setTimeout(function(){document.body.removeChild(L);O.releaseObject(D);},100);};YAHOO.util.Event.addListener(L,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}retu!
 rn D;},isCallInProgress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.7.0",build:"1799"});(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if("style" in D){B.Dom!
 .setStyle(D,C,F+E);}else{if(C in D){D[C]=F;}}},getAttribute:fu!
 nction(C
){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style" in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit!
 ))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.s!
 etRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=functio!
 n(){var 
O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.!
 fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.durati!
 on*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);!
 }if(K>0&
&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],!
 16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
+}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return !H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;!
 ++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
 /*
 TERMS OF USE - EASING EQUATIONS
 Open source under the BSD License.
@@ -28,9 +30,9 @@
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
-YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,!
 B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.562!
 5*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,!
 C){if(B<
C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.!
 patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);}else{E.Dom.setXY(H,E.Dom.getXY(H));
-}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0!
 ]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.6.0",build:"1321"});if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.style.position="absolute";C.style.zInde!
 x="99999";B.setStyle(C,"opacity","0");this._shim=C;A.on(C,"mou!
 seup",th
is.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){co!
 ntinue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.hand!
 leIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDra!
 gDrop:fu
nction(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F.startDrag(F.startX,F.startY);F.from!
 Timeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4EndDrag(E);C.fireEvent("b4EndDragEvent"!
 ,{e:E});}if(C.events.endDrag){C.endDrag(E);C.fireEvent("endDra!
 gEvent",
{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocked()||a.dragOnly){return ;}var N=YAHO!
 O.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
+YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,!
 B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.562!
 5*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,!
 C){if(B<
C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.!
 patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0] instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
+}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[th!
 is.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.7.0",build:"1799"});if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement("div");C.id="yui-ddm-shim";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display="none";C.style.backgroundColor="red";C.sty!
 le.position="absolute";C.style.zIndex="99999";B.setStyle(C,"op!
 acity","
0");this._shim=C;A.on(C,"mouseup",this.handleMouseUp,this,true);A.on(C,"mousemove",this.handleMouseMove,this,true);A.on(window,"scroll",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+"px";C.style.width=B.getDocumentWidth()+"px";C.style.top="0";C.style.left="0";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D="0";if(this._debugShim){D=".5";}B.setStyle(C,"opacity",D);this._sizeShim();C.style.display="block";}},_deactivateShim:function(){this._shim.style.display="none";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.!
 ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(C){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},r!
 egHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D!
 ]={};}th
is.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;E<C;++E){if(D[E].id==F.id){return true;}}return false;},isTypeOfDD:function(C){return(C&&C.__ygDragDrop);},isHandle:function(D,C){return(this.handleIds[D]&&this.handleIds[D][C]);},getDDById:function(D){for(var C in this.ids){if(this.ids[C][D]){return this.ids[C][D];}}return null;},handleMouseDown:function(E,D){this.currentTarget=YAHOO.util.Event.getTarget(E);this.dragCurrent=D;var C=D.getEl();this.startX=YAHOO.util.Event.getPageX(E);this.startY=YAHOO.util.Event.getPageY(E);this.deltaX=this.startX-C.offsetLeft;this.deltaY=this.startY-C.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var F=YAHOO.util.DDM;F!
 .startDrag(F.startX,F.startY);F.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(C,E){if(this.dragCurrent&&this.dragCurrent.useShim){this._shimState=this.useShim;this.useShim=true;}this._activateShim();clearTimeout(this.clickTimeout);var D=this.dragCurrent;if(D&&D.events.b4StartDrag){D.b4StartDrag(C,E);D.fireEvent("b4StartDragEvent",{x:C,y:E});}if(D&&D.events.startDrag){D.startDrag(C,E);D.fireEvent("startDragEvent",{x:C,y:E});}this.dragThreshMet=true;},handleMouseUp:function(C){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.fromTimeout=false;this.handleMouseMove(C);}this.fromTimeout=false;this.fireEvents(C,true);}else{}this.stopDrag(C);this.stopEvent(C);}},stopEvent:function(C){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(C);}if(this.preventDefault){YAHOO.util.Event.preventDefault(C);}},stopDrag:function(E,D){var C=this.dragCurrent;if(C&&!D){if(this.dragThreshMet){if(C.events.b4EndDrag){C.b4End!
 Drag(E);C.fireEvent("b4EndDragEvent",{e:E});}if(C.events.endDr!
 ag){C.en
dDrag(E);C.fireEvent("endDragEvent",{e:E});}}if(C.events.mouseUp){C.onMouseUp(E);C.fireEvent("mouseUpEvent",{e:E});}}if(this._shimActive){this._deactivateShim();if(this.dragCurrent&&this.dragCurrent.useShim){this.useShim=this._shimState;this._shimState=false;}}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(F){var C=this.dragCurrent;if(C){if(YAHOO.util.Event.isIE&&!F.button){this.stopEvent(F);return this.handleMouseUp(F);}else{if(F.clientX<0||F.clientY<0){}}if(!this.dragThreshMet){var E=Math.abs(this.startX-YAHOO.util.Event.getPageX(F));var D=Math.abs(this.startY-YAHOO.util.Event.getPageY(F));if(E>this.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent("b4DragEvent",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent("dragEvent",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(V,L){var a=this.dragCurrent;if(!a||a.isLocke!
 d()||a.dragOnly){return;}var N=YAHOO.util.Event.getPageX(V),M=YAHOO.util.Event.getPageY(V),P=new YAHOO.util.Point(N,M),K=a.getTargetCoord(P.x,P.y),F=a.getDragEl(),E=["out","over","drop","enter"],U=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},Q=[],c={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var S in this.dragOvers){var d=this.dragOvers[S];if(!this.isTypeOfDD(d)){continue;
 }if(!this.isOverTarget(P,d,this.mode,U)){c.outEvts.push(d);}I[S]=true;delete this.dragOvers[S];}for(var R in a.groups){if("string"!=typeof R){continue;}for(S in this.ids[R]){var G=this.ids[R][S];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=a){if(this.isOverTarget(P,G,this.mode,U)){D[R]=true;if(L){c.dropEvts.push(G);}else{if(!I[G.id]){c.enterEvts.push(G);}else{c.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:c.outEvts,enter:c.enterEvts,over:c.overEvts,drop:c.dropEvts,point:P,draggedRegion:U,sourceRegion:this.locationCache[a.id],validDrop:L};for(var C in D){Q.push(C);}if(L&&!c.dropEvts.length){this.interactionInfo.validDrop=false;if(a.events.invalidDrop){a.onInvalidDrop(V);a.fireEvent("invalidDropEvent",{e:V});}}for(S=0;S<E.length;S++){var Y=null;if(c[E[S]+"Evts"]){Y=c[E[S]+"Evts"];}if(Y&&Y.length){var H=E[S].charAt(0).toUpperCase()+E[S].substr(1),X="onDrag"+H,J="b4Drag"+H,O="drag"+H+"Event",W="drag"+H;if(this.mode){if(a.events[J!
 ]){a[J](V,Y,Q);a.fireEvent(J+"Event",{event:V,info:Y,group:Q});}if(a.events[W]){a[X](V,Y,Q);a.fireEvent(O,{event:V,info:Y,group:Q});}}else{for(var Z=0,T=Y.length;Z<T;++Z){if(a.events[J]){a[J](V,Y[Z].id,Q[0]);a.fireEvent(J+"Event",{event:V,info:Y[Z].id,group:Q[0]});}if(a.events[W]){a[X](V,Y[Z].id,Q[0]);a.fireEvent(O,{event:V,info:Y[Z].id,group:Q[0]});}}}}}},getBestMatch:function(E){var G=null;var D=E.length;if(D==1){G=E[0];}else{for(var F=0;F<D;++F){var C=E[F];if(this.mode==this.INTERSECT&&C.cursorIsOver){G=C;break;}else{if(!G||!G.overlap||(C.overlap&&G.overlap.getArea()<C.overlap.getArea())){G=C;}}}}return G;},refreshCache:function(D){var F=D||this.ids;for(var C in F){if("string"!=typeof C){continue;}for(var E in this.ids[C]){var G=this.ids[C][E];if(this.isTypeOfDD(G)){var H=this.getLocation(G);if(H){this.locationCache[G.id]=H;}else{delete this.locationCache[G.id];}}}}},verifyEl:function(D){try{if(D){var C=D.offsetParent;if(C){return true;}}}catch(E){}return false;},getLoca!
 tion:function(H){if(!this.isTypeOfDD(H)){return null;}var F=H.!
 getEl(),
K,E,D,M,L,N,C,J,G;try{K=YAHOO.util.Dom.getXY(F);}catch(I){}if(!K){return null;}E=K[0];D=E+F.offsetWidth;M=K[1];L=M+F.offsetHeight;N=M-H.padding[0];C=D+H.padding[1];J=L+H.padding[2];G=E-H.padding[3];return new YAHOO.util.Region(N,C,J,G);},isOverTarget:function(K,C,E,F){var G=this.locationCache[C.id];if(!G||!this.useCache){G=this.getLocation(C);this.locationCache[C.id]=G;}if(!G){return false;}C.cursorIsOver=G.contains(K);var J=this.dragCurrent;if(!J||(!E&&!J.constrainX&&!J.constrainY)){return C.cursorIsOver;}C.overlap=null;if(!F){var H=J.getTargetCoord(K.x,K.y);var D=J.getDragEl();F=new YAHOO.util.Region(H.y,H.x+D.offsetWidth,H.y+D.offsetHeight,H.x);}var I=F.intersect(G);if(I){C.overlap=I;return(E)?true:C.cursorIsOver;}else{return false;}},_onUnload:function(D,C){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(D){var C=this.elementCache[D];if(!C||!C!
 .el){C=this.elementCache[D]=new this.ElementWrapper(YAHOO.util.Dom.get(D));}return C;},getElement:function(C){return YAHOO.util.Dom.get(C);},getCss:function(D){var C=YAHOO.util.Dom.get(D);return(C)?C.style:null;},ElementWrapper:function(C){this.el=C||null;this.id=this.el&&C.id;this.css=this.el&&C.style;},getPosX:function(C){return YAHOO.util.Dom.getX(C);},getPosY:function(C){return YAHOO.util.Dom.getY(C);},swapNode:function(E,C){if(E.swapNode){E.swapNode(C);}else{var F=C.parentNode;var D=C.nextSibling;if(D==E){F.insertBefore(E,C);}else{if(C==E.nextSibling){F.insertBefore(C,E);}else{E.parentNode.replaceChild(C,E);F.insertBefore(E,D);}}}},getScroll:function(){var E,C,F=document.documentElement,D=document.body;if(F&&(F.scrollTop||F.scrollLeft)){E=F.scrollTop;C=F.scrollLeft;}else{if(D){E=D.scrollTop;C=D.scrollLeft;}else{}}return{top:E,left:C};},getStyle:function(D,C){return YAHOO.util.Dom.getStyle(D,C);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:functi!
 on(){return this.getScroll().left;},moveToEl:function(C,E){var!
  D=YAHOO
.util.Dom.getXY(E);YAHOO.util.Dom.setXY(C,D);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(D,C){return(D-C);},_timeoutCount:0,_addListeners:function(){var C=YAHOO.util.DDM;if(YAHOO.util.Event&&document){C._onLoad();}else{if(C._timeoutCount>2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes!
 :null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.ge!
 t(this.id);
-}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this!
 .config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return ;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];t!
 his.startPageY=C[1];},addToGroup:function(C){this.groups[C]=tr!
 ue;this.
DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return ;}if(this.isLocked()){return ;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||!
 (E===false)||(F===false)||(H===false)){return ;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvali!
 dHandleClass:function(C){this.invalidHandleClasses.push(C);},r!
 emoveInv
alidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTic!
 ks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
-}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setD!
 elta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScro!
 llLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(!
 B+D-J-th
is.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return ;}var G=this.getDragEl(),E=YAHOO.util.Dom;if(!G){G=document.createElemen!
 t("div");G.id=this.dragElId;var D=G.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");G.appendChild(C);if(YAHOO.env.ua.ie){var F=document.createElement("iframe");F.setAttribute("src","javascript: false;");F.setAttribute("scrolling","no");F.setAttribute("frameborder","0");G.insertBefore(F,G.firstChild);E.setStyle(F,"height","100%");E.setStyle(F,"width","100%");E.setStyle(F,"position","absolute");E.setStyle(F,"top","0");E.setStyle(F,"left","0");E.setStyle(F,"opacity","0");E.setStyle(F,"zIndex","-1");E.setStyle(F.nextSibling,"zIndex","2");}A.insertBefore(G,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==!
 false);this.centerFrame=(this.config.centerFrame);this.setDrag!
 ElId(thi
s.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A!
 ,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.6.0",build:"1321"});YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,validator:null,getValue:function(){return this.value;},setValue:fun!
 ction(F,B){var E;var A=this.owner;var C=this.name;var D={type:!
 C,prevVa
lue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.method){this.method.call(A,F);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};this._written=false;this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return undefined;}ret!
 urn B.value;},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var D=[];var B;for(var C in this._configs){B=this._configs[C];if(A.hasOwnProperty(this._configs,C)&&!A.isUndefined(B)){D[D.length]=C;}}return D;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnPrope!
 rty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B!
 ,C,D){th
is._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);}!
 )();(function(){var D=YAHOO.util.Dom,F=YAHOO.util.AttributeProvider;YAHOO.util.Element=function(G,H){if(arguments.length){this.init(G,H);}};YAHOO.util.Element.prototype={DOM_EVENTS:null,appendChild:function(G){G=G.get?G.get("element"):G;return this.get("element").appendChild(G);},getElementsByTagName:function(G){return this.get("element").getElementsByTagName(G);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(G,H){G=G.get?G.get("element"):G;H=(H&&H.get)?H.get("element"):H;return this.get("element").insertBefore(G,H);},removeChild:function(G){G=G.get?G.get("element"):G;return this.get("element").removeChild(G);},replaceChild:function(G,H){G=G.get?G.get("element"):G;H=H.get?H.get("element"):H;return this.get("element").replaceChild(G,H);},initAttributes:function(G){},addListener:function(K,J,L,I){var H=this.get("element")||this.get("id");I=I||this;var G=this;if(!this._events[K]){if(H&&this.DOM_EVENTS[K]){YAHOO.util.Event.addListen!
 er(H,K,function(M){if(M.srcElement&&!M.target){M.target=M.srcE!
 lement;}
G.fireEvent(K,M);},L,I);}this.createEvent(K,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(H,G){return this.unsubscribe.apply(this,arguments);},addClass:function(G){D.addClass(this.get("element"),G);},getElementsByClassName:function(H,G){return D.getElementsByClassName(H,G,this.get("element"));},hasClass:function(G){return D.hasClass(this.get("element"),G);},removeClass:function(G){return D.removeClass(this.get("element"),G);},replaceClass:function(H,G){return D.replaceClass(this.get("element"),H,G);},setStyle:function(I,H){var G=this.get("element");if(!G){return this._queue[this._queue.length]=["setStyle",arguments];}return D.setStyle(G,I,H);},getStyle:function(G){return D.getStyle(this.get("element"),G);},fireQueue:function(){var H=this._queue;for(var I=0,G=H.length;I<G;++I){this[H[I][!
 0]].apply(this,H[I][1]);}},appendTo:function(H,I){H=(H.get)?H.get("element"):D.get(H);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:H});I=(I&&I.get)?I.get("element"):D.get(I);var G=this.get("element");if(!G){return false;}if(!H){return false;}if(G.parent!=H){if(I){H.insertBefore(G,I);}else{H.appendChild(G);}}this.fireEvent("appendTo",{type:"appendTo",target:H});return G;},get:function(G){var I=this._configs||{};var H=I.element;if(H&&!I[G]&&!YAHOO.lang.isUndefined(H.value[G])){return H.value[G];}return F.prototype.get.call(this,G);},setAttributes:function(L,H){var K=this.get("element");
-for(var J in L){if(!this._configs[J]&&!YAHOO.lang.isUndefined(K[J])){this.setAttributeConfig(J);}}for(var I=0,G=this._configOrder.length;I<G;++I){if(L[this._configOrder[I]]!==undefined){this.set(this._configOrder[I],L[this._configOrder[I]],H);}}},set:function(H,J,G){var I=this.get("element");if(!I){this._queue[this._queue.length]=["set",arguments];if(this._configs[H]){this._configs[H].value=J;}return ;}if(!this._configs[H]&&!YAHOO.lang.isUndefined(I[H])){C.call(this,H);}return F.prototype.set.apply(this,arguments);},setAttributeConfig:function(G,I,J){var H=this.get("element");if(H&&!this._configs[G]&&!YAHOO.lang.isUndefined(H[G])){C.call(this,G,I);}else{F.prototype.setAttributeConfig.apply(this,arguments);}this._configOrder.push(G);},getAttributeKeys:function(){var H=this.get("element");var I=F.prototype.getAttributeKeys.call(this);for(var G in H){if(!this._configs[G]){I[G]=I[G]||H[G];}}return I;},createEvent:function(H,G){this._events[H]=true;F.prototype.createEvent.apply(!
 this,arguments);},init:function(H,G){A.apply(this,arguments);}};var A=function(H,G){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];G=G||{};G.element=G.element||H||null;this.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true};var I=false;if(typeof G.element==="string"){C.call(this,"id",{value:G.element});}if(D.get(G.element)){I=true;E.call(this,G);B.call(this,G);}YAHOO.util.Event.onAvailable(G.element,function(){if(!I){E.call(this,G);}this.fireEvent("available",{type:"available",target:D.get(G.element)});},this,true);YAHOO.util.Event.onContentReady(G.element,function(){if(!I){B.call(this,G);}this.fireEvent("contentReady",{type:"contentReady",target:D.get(G.element)});},this,true);};var E=function(G){this.setAttributeConfig("element",{value:D.get(G.element),rea!
 dOnly:true});};var B=function(G){this.initAttributes(G);this.s!
 etAttrib
utes(G,true);this.fireQueue();};var C=function(G,I){var H=this.get("element");I=I||{};I.name=G;I.method=I.method||function(J){if(H){H[G]=J;}};I.value=I.value||H[G];this._configs[G]=new YAHOO.util.Attribute(I,this);};YAHOO.augment(YAHOO.util.Element,F);})();YAHOO.register("element",YAHOO.util.Element,{version:"2.6.0",build:"1321"});YAHOO.register("utilities", YAHOO, {version: "2.6.0", build: "1321"});
+}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+"Event");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this!
 .config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display=="none")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];th!
 is.startPageY=C[1];},addToGroup:function(C){this.groups[C]=tru!
 e;this.D
DM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent("b4MouseDownEvent",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){H=this.fireEvent("mouseDownEvent",J);}if((C===false)||(E=!
 ==false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHan!
 dleClass:function(C){this.invalidHandleClasses.push(C);},remov!
 eInvalid
HandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[!
 ];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);
+}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setD!
 elta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScro!
 llLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(!
 B+D-J-th
is.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame();}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement!
 ("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resize!
 Frame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getD!
 ragEl();
var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YA!
 HOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.7.0",build:"1799"});YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,setter:null,getter:null,validator:null,getValue:function(){var A=this.value;if(this.getter){A=this.getter.call(this.owner,this.name);}return A;},setValue:function(F,B){var E,A=this.owner,C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.setter){F=this.setter.call(A,F,this.name);if(F===undefined)!
 {}}if(this.method){this.method.call(A,F,this.name);}this.value!
 =F;this.
_written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};if(C){this._written=false;}this._initialConfig=this._initialConfig||{};for(var A in B){if(B.hasOwnProperty(A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig,true);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B||!this._configs.hasOwnProperty(C)){return null;}return B.getValue();},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var C=[],B;for(B in this._configs){if(A.hasOwnProperty(this._configs,B)&&!A.!
 isUndefined(this._configs[B])){C[C.length]=B;}}return C;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs||{};var F=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(F.hasOwnProperty(E[D])){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig!
 (B,C,D);},resetAttributeConfig:function(B){this._configs=this.!
 _configs
||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var B=YAHOO.util.Dom,C=YAHOO.util.AttributeProvider;var A=function(D,E){this.init.apply(this,arguments);};A.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mo!
 useup":true,"focus":true,"blur":true,"submit":true,"change":true};A.prototype={DOM_EVENTS:null,DEFAULT_HTML_SETTER:function(F,D){var E=this.get("element");if(E){E[D]=F;}},DEFAULT_HTML_GETTER:function(D){var E=this.get("element"),F;if(E){F=E[D];}return F;},appendChild:function(D){D=D.get?D.get("element"):D;return this.get("element").appendChild(D);},getElementsByTagName:function(D){return this.get("element").getElementsByTagName(D);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(D,E){D=D.get?D.get("element"):D;E=(E&&E.get)?E.get("element"):E;return this.get("element").insertBefore(D,E);},removeChild:function(D){D=D.get?D.get("element"):D;return this.get("element").removeChild(D);},replaceChild:function(D,E){D=D.get?D.get("element"):D;E=E.get?E.get("element"):E;return this.get("element").replaceChild(D,E);},initAttributes:function(D){},addListener:function(H,G,I,F){var E=this.get("element")||this.get("id");F=F||this;var D=this;if(!
 !this._events[H]){if(E&&this.DOM_EVENTS[H]){YAHOO.util.Event.a!
 ddListen
er(E,H,function(J){if(J.srcElement&&!J.target){J.target=J.srcElement;}D.fireEvent(H,J);},I,F);}this.createEvent(H,this);}return YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){return this.addListener.apply(this,arguments);},subscribe:function(){return this.addListener.apply(this,arguments);},removeListener:function(E,D){return this.unsubscribe.apply(this,arguments);},addClass:function(D){B.addClass(this.get("element"),D);},getElementsByClassName:function(E,D){return B.getElementsByClassName(E,D,this.get("element"));},hasClass:function(D){return B.hasClass(this.get("element"),D);},removeClass:function(D){return B.removeClass(this.get("element"),D);},replaceClass:function(E,D){return B.replaceClass(this.get("element"),E,D);},setStyle:function(E,D){return B.setStyle(this.get("element"),E,D);},getStyle:function(D){return B.getStyle(this.get("element"),D);},fireQueue:function(){var E=this._queue;for(var F=0,D=E.length;F<D;++F){this[E[F][0]].appl!
 y(this,E[F][1]);}},appendTo:function(E,F){E=(E.get)?E.get("element"):B.get(E);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:E});
+F=(F&&F.get)?F.get("element"):B.get(F);var D=this.get("element");if(!D){return false;}if(!E){return false;}if(D.parent!=E){if(F){E.insertBefore(D,F);}else{E.appendChild(D);}}this.fireEvent("appendTo",{type:"appendTo",target:E});return D;},get:function(D){var F=this._configs||{},E=F.element;if(E&&!F[D]&&!YAHOO.lang.isUndefined(E.value[D])){this._setHTMLAttrConfig(D);}return C.prototype.get.call(this,D);},setAttributes:function(J,G){var E={},H=this._configOrder;for(var I=0,D=H.length;I<D;++I){if(J[H[I]]!==undefined){E[H[I]]=true;this.set(H[I],J[H[I]],G);}}for(var F in J){if(J.hasOwnProperty(F)&&!E[F]){this.set(F,J[F],G);}}},set:function(E,G,D){var F=this.get("element");if(!F){this._queue[this._queue.length]=["set",arguments];if(this._configs[E]){this._configs[E].value=G;}return;}if(!this._configs[E]&&!YAHOO.lang.isUndefined(F[E])){this._setHTMLAttrConfig(E);}return C.prototype.set.apply(this,arguments);},setAttributeConfig:function(D,E,F){this._configOrder.push(D);C.prototype!
 .setAttributeConfig.apply(this,arguments);},createEvent:function(E,D){this._events[E]=true;return C.prototype.createEvent.apply(this,arguments);},init:function(E,D){this._initElement(E,D);},destroy:function(){var D=this.get("element");YAHOO.util.Event.purgeElement(D,true);this.unsubscribeAll();if(D&&D.parentNode){D.parentNode.removeChild(D);}this._queue=[];this._events={};this._configs={};this._configOrder=[];},_initElement:function(F,E){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];E=E||{};E.element=E.element||F||null;var H=false;var D=A.DOM_EVENTS;this.DOM_EVENTS=this.DOM_EVENTS||{};for(var G in D){if(D.hasOwnProperty(G)){this.DOM_EVENTS[G]=D[G];}}if(typeof E.element==="string"){this._setHTMLAttrConfig("id",{value:E.element});}if(B.get(E.element)){H=true;this._initHTMLElement(E);this._initContent(E);}YAHOO.util.Event.onAvailable(E.element,function(){if(!H){this._initHTMLElement(E);}this.fireEvent("available"!
 ,{type:"available",target:B.get(E.element)});},this,true);YAHO!
 O.util.E
vent.onContentReady(E.element,function(){if(!H){this._initContent(E);}this.fireEvent("contentReady",{type:"contentReady",target:B.get(E.element)});},this,true);},_initHTMLElement:function(D){this.setAttributeConfig("element",{value:B.get(D.element),readOnly:true});},_initContent:function(D){this.initAttributes(D);this.setAttributes(D,true);this.fireQueue();},_setHTMLAttrConfig:function(D,F){var E=this.get("element");F=F||{};F.name=D;F.setter=F.setter||this.DEFAULT_HTML_SETTER;F.getter=F.getter||this.DEFAULT_HTML_GETTER;F.value=F.value||E[D];this._configs[D]=new YAHOO.util.Attribute(F,this);}};YAHOO.augment(A,C);YAHOO.util.Element=A;})();YAHOO.register("element",YAHOO.util.Element,{version:"2.7.0",build:"1799"});YAHOO.register("utilities", YAHOO, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/yahoo/README
===================================================================
--- trunk/root/static/yui/yahoo/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,106 +0,0 @@
-YAHOO Global - Release Notes
-
-2.6.0
-  * No change.
-
-2.5.2
-  * YAHOO.lang now overwrites existing methods when included a second time,
-    but preserves methods that are in the old version but not in the new.
-  * augmentObject overwrite flag works correctly with falsy values
-
-2.5.1
-  * Added Adobe AIR detection.
-
-2.5.0
-  * API doc updates
-
-2.4.0
-  * Added YAHOO.env.ua.mobile
-  * Removed the hasOwnProperty check in isArray to make it perform a bit better.
-  * YAHOO will be created/overwritten if YAHOO is undefined or the defined YAHOO is falsy
-  * YAHOO.lang is now preserved when YAHOO is included a second time.
-
-2.3.1
-  * YAHOO.lang.dump casts primitives to strings
-
-2.3.0
-  * Added YAHOO.env.ua - browser detection
-  * Added YAHOO.lang.merge - object merge
-  * Added YAHOO.lang.trim - whitespace removal
-  * Added YAHOO.lang.augmentObject - mixins.  Renamed augment to augmentProto and 
-    made augment an alias to augmentProto
-  * isObject/isArray return false rather than null when testing null
-
-2.2.2
-
-  * No change
-
-2.2.1
-
-  * YAHOO.lang.isObject returns false for null
-  * YAHOO.lang.isArray no longer generates an error when the argument is null/undefined
-  * Better error messages for YAHOO.lang.augment/extend failures that are usually due 
-    to missing dependencies.
-
-2.2.0a
-
-  * Fixed a typo that prevented the proper detection of multiple YAHOO_config listeners
-
-2.2.0
-
-  * Added configuration of the library via a YAHOO_config object defined
-    prior to the reference to the library.  Currently it supports a listener
-    parameter that will execute every time a new module YUI module is loaded.
-
-  * Added YAHOO.register & YAHOO.getVersion for version stamping modules.
-  
-  * Added YAHOO.env which is the home for the information about the loaded
-    YUI modules, and will host more info later.
-    
-  * YAHOO.util.Lang was relocated to this package and is now YAHOO.lang.
-    YAHOO.extend and YAHOO.augment have moved to env (the original
-    functions still work).
-
-0.12.2
-
-  * No change
-
-0.12.1
-
-  * No change
-
-0.12.0
-
-   * Added YAHOO.augment, which copies all or part of the prototype of one
-     object to another.  
-
-   * YAHOO.namespace now can create multiple namespaces.
-
-   * Added an optional third parameter to YAHOO.extend: overrides.  It takes
-     an object literal of properties/methods to apply to the subclass
-     prototype, overriding the superclass if present.
-
-0.11.4
-
-   * Changed window.YAHOO = window.YAHOO || {} to 
-     if (typeof YAHOO == "undefined") YAHOO = {} because the previous statement
-     contributed to a memory leak in IE6 when the library was hosted in an 
-     iframe.
-
-0.11.3
-
-   * Changed var YAHOO = window.YAHOO || {} to window.YAHOO = window.YAHOO || {}.
-     This fixes an issue in IE where YAHOO would get overwritten if previously
-     defined via array notation (window["YAHOO"]).
-
-0.11.0
-
-   * Added YAHOO.extend, which provides an easy way to assign the prototype,
-     constructor, and superclass properties inheritance properties.  It also
-     prevents the constructor of the superclass from being exectuted twice.
-
-0.10.0
-
-   * Added YAHOO.log that provides a safe way to plumb logging statements in
-     code that will work if the logging component isn't available.
-

Modified: trunk/root/static/yui/yahoo/yahoo-debug.js
===================================================================
--- trunk/root/static/yui/yahoo/yahoo-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo/yahoo-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The YAHOO object is the single global object used by YUI Library.  It
@@ -88,6 +88,10 @@
  * </pre>
  * This fails because "long" is a future reserved word in ECMAScript
  *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces created by the library.  defined by YUI -- create 
+ * your own (YAHOO.util, YAHOO.widget, YAHOO.lang, YAHOO.env)
+ *
  * @method namespace
  * @static
  * @param  {String*} arguments 1-n namespaces to create 
@@ -96,7 +100,7 @@
 YAHOO.namespace = function() {
     var a=arguments, o=null, i, j, d;
     for (i=0; i<a.length; i=i+1) {
-        d=a[i].split(".");
+        d=(""+a[i]).split(".");
         o=YAHOO;
 
         // YAHOO is implied, so it is ignored if it is included
@@ -146,19 +150,29 @@
  *                             and a "build" property at minimum.
  */
 YAHOO.register = function(name, mainClass, data) {
-    var mods = YAHOO.env.modules;
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
     if (!mods[name]) {
-        mods[name] = { versions:[], builds:[] };
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
     }
-    var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
     m.name = name;
     m.version = v;
     m.build = b;
     m.versions.push(v);
     m.builds.push(b);
     m.mainClass = mainClass;
+
     // fire the module load listeners
-    for (var i=0;i<ls.length;i=i+1) {
+    for (i=0;i<ls.length;i=i+1) {
         ls[i](m);
     }
     // label the main class
@@ -308,12 +322,21 @@
          * @property air
          * @type float
          */
-        air: 0
+        air: 0,
 
-    };
+        /**
+         * Google Caja version number or 0.
+         * @property caja
+         * @type float
+         */
+        caja: 0
 
-    var ua=navigator.userAgent, m;
+    },
 
+    ua = navigator.userAgent, 
+    
+    m;
+
     // Modern KHTML browsers should qualify as Safari X-Grade
     if ((/KHTML/).test(ua)) {
         o.webkit=1;
@@ -365,6 +388,11 @@
             }
         }
     }
+
+    m=ua.match(/Caja\/([^\s]*)/);
+    if (m&&m[1]) {
+        o.caja=parseFloat(m[1]);
+    }
     
     return o;
 }();
@@ -379,6 +407,7 @@
  */
 (function() {
     YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
     if ("undefined" !== typeof YAHOO_config) {
         var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
         if (l) {
@@ -405,29 +434,26 @@
 
 (function() {
 
+
 var L = YAHOO.lang,
 
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OP = Object.prototype,
+
     // ADD = ["toString", "valueOf", "hasOwnProperty"],
     ADD = ["toString", "valueOf"],
 
     OB = {
 
     /**
-     * Determines whether or not the provided object is an array.
-     * Testing typeof/instanceof/constructor of arrays across frame 
-     * boundaries isn't possible in Safari unless you have a reference
-     * to the other frame to test against its Array prototype.  To
-     * handle this case, we test well-known array properties instead.
-     * properties.
+     * Determines wheather or not the provided object is an array.
      * @method isArray
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isArray: function(o) { 
-        if (o) {
-           return L.isNumber(o.length) && L.isFunction(o.splice);
-        }
-        return false;
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
     },
 
     /**
@@ -441,13 +467,24 @@
     },
     
     /**
-     * Determines whether or not the provided object is a function
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
      * @method isFunction
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isFunction: function(o) {
-        return typeof o === 'function';
+        return OP.toString.apply(o) === FUNCTION_TOSTRING;
     },
         
     /**
@@ -513,9 +550,13 @@
      * @private
      */
     _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
-            for (var i=0;i<ADD.length;i=i+1) {
-                var fname=ADD[i],f=s[fname];
-                if (L.isFunction(f) && f!=Object.prototype[fname]) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
                     r[fname]=f;
                 }
             }
@@ -540,17 +581,17 @@
             throw new Error("extend failed, please check that " +
                             "all dependencies are included.");
         }
-        var F = function() {};
+        var F = function() {}, i;
         F.prototype=superc.prototype;
         subc.prototype=new F();
         subc.prototype.constructor=subc;
         subc.superclass=superc.prototype;
-        if (superc.prototype.constructor == Object.prototype.constructor) {
+        if (superc.prototype.constructor == OP.constructor) {
             superc.prototype.constructor=superc;
         }
     
         if (overrides) {
-            for (var i in overrides) {
+            for (i in overrides) {
                 if (L.hasOwnProperty(overrides, i)) {
                     subc.prototype[i]=overrides[i];
                 }
@@ -586,14 +627,14 @@
         if (!s||!r) {
             throw new Error("Absorb failed, verify dependencies.");
         }
-        var a=arguments, i, p, override=a[2];
-        if (override && override!==true) { // only absorb the specified properties
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
             for (i=2; i<a.length; i=i+1) {
                 r[a[i]] = s[a[i]];
             }
         } else { // take everything, overwriting only if the third parameter is true
             for (p in s) { 
-                if (override || !(p in r)) {
+                if (overrideList || !(p in r)) {
                     r[p] = s[p];
                 }
             }
@@ -621,8 +662,8 @@
             throw new Error("Augment failed, verify dependencies.");
         }
         //var a=[].concat(arguments);
-        var a=[r.prototype,s.prototype];
-        for (var i=2;i<arguments.length;i=i+1) {
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
             a.push(arguments[i]);
         }
         L.augmentObject.apply(this, a);
@@ -722,7 +763,8 @@
      */
     substitute: function (s, o, f) {
         var i, j, k, key, v, meta, saved=[], token, 
-            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}';
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump;
 
 
         for (;;) {
@@ -760,14 +802,14 @@
                     meta = meta || "";
 
                     // look for the keyword 'dump', if found force obj dump
-                    var dump = meta.indexOf(DUMP);
+                    dump = meta.indexOf(DUMP);
                     if (dump > -1) {
                         meta = meta.substring(4);
                     }
 
                     // use the toString if it is not the Object toString 
                     // and the 'dump' meta info was not found
-                    if (v.toString===Object.prototype.toString||dump>-1) {
+                    if (v.toString===OP.toString || dump>-1) {
                         v = L.dump(v, parseInt(meta, 10));
                     } else {
                         v = v.toString();
@@ -821,8 +863,8 @@
      * @return the new merged object
      */
     merge: function() {
-        var o={}, a=arguments;
-        for (var i=0, l=a.length; i<l; i=i+1) {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
             L.augmentObject(o, a[i], true);
         }
         return o;
@@ -921,7 +963,7 @@
  * @param prop {string} the name of the property to test
  * @return {boolean} the result
  */
-L.hasOwnProperty = (Object.prototype.hasOwnProperty) ?
+L.hasOwnProperty = (OP.hasOwnProperty) ?
     function(o, prop) {
         return o && o.hasOwnProperty(prop);
     } : function(o, prop) {
@@ -983,4 +1025,4 @@
 YAHOO.extend = L.extend;
 
 })();
-YAHOO.register("yahoo", YAHOO, {version: "2.6.0", build: "1321"});
+YAHOO.register("yahoo", YAHOO, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/yahoo/yahoo-min.js
===================================================================
--- trunk/root/static/yui/yahoo/yahoo-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo/yahoo-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/A!
 ppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeo!
 f D==="boolean";},isFunction:function(D){return typeof D==="fu!
 nction";
},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2]!
 ;if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:funct!
 ion(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";f!
 or(;;){I
=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E!
 ,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=!
 B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueO!
 f"],D={isArray:function(G){return A.toString.apply(G)===F;},is!
 Boolean:
function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error(!
 "Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.leng!
 th>1){N.pop();}N.push("}");}return N.join("");},substitute:fun!
 ction(V,
H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if!
 (!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/yahoo/yahoo.js
===================================================================
--- trunk/root/static/yui/yahoo/yahoo.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo/yahoo.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The YAHOO object is the single global object used by YUI Library.  It
@@ -88,6 +88,10 @@
  * </pre>
  * This fails because "long" is a future reserved word in ECMAScript
  *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces created by the library.  defined by YUI -- create 
+ * your own (YAHOO.util, YAHOO.widget, YAHOO.lang, YAHOO.env)
+ *
  * @method namespace
  * @static
  * @param  {String*} arguments 1-n namespaces to create 
@@ -96,7 +100,7 @@
 YAHOO.namespace = function() {
     var a=arguments, o=null, i, j, d;
     for (i=0; i<a.length; i=i+1) {
-        d=a[i].split(".");
+        d=(""+a[i]).split(".");
         o=YAHOO;
 
         // YAHOO is implied, so it is ignored if it is included
@@ -146,19 +150,29 @@
  *                             and a "build" property at minimum.
  */
 YAHOO.register = function(name, mainClass, data) {
-    var mods = YAHOO.env.modules;
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
     if (!mods[name]) {
-        mods[name] = { versions:[], builds:[] };
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
     }
-    var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
     m.name = name;
     m.version = v;
     m.build = b;
     m.versions.push(v);
     m.builds.push(b);
     m.mainClass = mainClass;
+
     // fire the module load listeners
-    for (var i=0;i<ls.length;i=i+1) {
+    for (i=0;i<ls.length;i=i+1) {
         ls[i](m);
     }
     // label the main class
@@ -308,12 +322,21 @@
          * @property air
          * @type float
          */
-        air: 0
+        air: 0,
 
-    };
+        /**
+         * Google Caja version number or 0.
+         * @property caja
+         * @type float
+         */
+        caja: 0
 
-    var ua=navigator.userAgent, m;
+    },
 
+    ua = navigator.userAgent, 
+    
+    m;
+
     // Modern KHTML browsers should qualify as Safari X-Grade
     if ((/KHTML/).test(ua)) {
         o.webkit=1;
@@ -365,6 +388,11 @@
             }
         }
     }
+
+    m=ua.match(/Caja\/([^\s]*)/);
+    if (m&&m[1]) {
+        o.caja=parseFloat(m[1]);
+    }
     
     return o;
 }();
@@ -379,6 +407,7 @@
  */
 (function() {
     YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
     if ("undefined" !== typeof YAHOO_config) {
         var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
         if (l) {
@@ -405,29 +434,26 @@
 
 (function() {
 
+
 var L = YAHOO.lang,
 
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OP = Object.prototype,
+
     // ADD = ["toString", "valueOf", "hasOwnProperty"],
     ADD = ["toString", "valueOf"],
 
     OB = {
 
     /**
-     * Determines whether or not the provided object is an array.
-     * Testing typeof/instanceof/constructor of arrays across frame 
-     * boundaries isn't possible in Safari unless you have a reference
-     * to the other frame to test against its Array prototype.  To
-     * handle this case, we test well-known array properties instead.
-     * properties.
+     * Determines wheather or not the provided object is an array.
      * @method isArray
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isArray: function(o) { 
-        if (o) {
-           return L.isNumber(o.length) && L.isFunction(o.splice);
-        }
-        return false;
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
     },
 
     /**
@@ -441,13 +467,24 @@
     },
     
     /**
-     * Determines whether or not the provided object is a function
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
      * @method isFunction
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isFunction: function(o) {
-        return typeof o === 'function';
+        return OP.toString.apply(o) === FUNCTION_TOSTRING;
     },
         
     /**
@@ -513,9 +550,13 @@
      * @private
      */
     _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
-            for (var i=0;i<ADD.length;i=i+1) {
-                var fname=ADD[i],f=s[fname];
-                if (L.isFunction(f) && f!=Object.prototype[fname]) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
                     r[fname]=f;
                 }
             }
@@ -540,17 +581,17 @@
             throw new Error("extend failed, please check that " +
                             "all dependencies are included.");
         }
-        var F = function() {};
+        var F = function() {}, i;
         F.prototype=superc.prototype;
         subc.prototype=new F();
         subc.prototype.constructor=subc;
         subc.superclass=superc.prototype;
-        if (superc.prototype.constructor == Object.prototype.constructor) {
+        if (superc.prototype.constructor == OP.constructor) {
             superc.prototype.constructor=superc;
         }
     
         if (overrides) {
-            for (var i in overrides) {
+            for (i in overrides) {
                 if (L.hasOwnProperty(overrides, i)) {
                     subc.prototype[i]=overrides[i];
                 }
@@ -586,14 +627,14 @@
         if (!s||!r) {
             throw new Error("Absorb failed, verify dependencies.");
         }
-        var a=arguments, i, p, override=a[2];
-        if (override && override!==true) { // only absorb the specified properties
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
             for (i=2; i<a.length; i=i+1) {
                 r[a[i]] = s[a[i]];
             }
         } else { // take everything, overwriting only if the third parameter is true
             for (p in s) { 
-                if (override || !(p in r)) {
+                if (overrideList || !(p in r)) {
                     r[p] = s[p];
                 }
             }
@@ -621,8 +662,8 @@
             throw new Error("Augment failed, verify dependencies.");
         }
         //var a=[].concat(arguments);
-        var a=[r.prototype,s.prototype];
-        for (var i=2;i<arguments.length;i=i+1) {
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
             a.push(arguments[i]);
         }
         L.augmentObject.apply(this, a);
@@ -722,7 +763,8 @@
      */
     substitute: function (s, o, f) {
         var i, j, k, key, v, meta, saved=[], token, 
-            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}';
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump;
 
 
         for (;;) {
@@ -760,14 +802,14 @@
                     meta = meta || "";
 
                     // look for the keyword 'dump', if found force obj dump
-                    var dump = meta.indexOf(DUMP);
+                    dump = meta.indexOf(DUMP);
                     if (dump > -1) {
                         meta = meta.substring(4);
                     }
 
                     // use the toString if it is not the Object toString 
                     // and the 'dump' meta info was not found
-                    if (v.toString===Object.prototype.toString||dump>-1) {
+                    if (v.toString===OP.toString || dump>-1) {
                         v = L.dump(v, parseInt(meta, 10));
                     } else {
                         v = v.toString();
@@ -821,8 +863,8 @@
      * @return the new merged object
      */
     merge: function() {
-        var o={}, a=arguments;
-        for (var i=0, l=a.length; i<l; i=i+1) {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
             L.augmentObject(o, a[i], true);
         }
         return o;
@@ -921,7 +963,7 @@
  * @param prop {string} the name of the property to test
  * @return {boolean} the result
  */
-L.hasOwnProperty = (Object.prototype.hasOwnProperty) ?
+L.hasOwnProperty = (OP.hasOwnProperty) ?
     function(o, prop) {
         return o && o.hasOwnProperty(prop);
     } : function(o, prop) {
@@ -983,4 +1025,4 @@
 YAHOO.extend = L.extend;
 
 })();
-YAHOO.register("yahoo", YAHOO, {version: "2.6.0", build: "1321"});
+YAHOO.register("yahoo", YAHOO, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/yahoo-dom-event/README
===================================================================
--- trunk/root/static/yui/yahoo-dom-event/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo-dom-event/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,35 +0,0 @@
-yahoo-event-dom.js Release Notes
-
-*** NOTE ***
-
-This document is not updated with each release.  Changes to
-the yahoo-dom-event.js source are noted in the README
-file for each component that comprises this aggregate:
-
-yahoo/README
-dom/README
-event/README
-
-************
-
-*** version 0.12.0 ***
-
-The yahoo-event-dom.js file rolls up the three most commonly-used YUI Utilities
-into a single file; it includes the following files:
-
-* Yahoo Global Object
-* Dom
-* Event
-
-These three files serve as a common foundation for most YUI components and
-third-party implementations.  On pages where you do not need additional YUI
-Utilities (Connection Manager, Animation Utility, Drag & Drop Utility), the
-yahoo-event-dom.js aggregate will often be an optimal choice.
-
-Note: If you do require additional utilities, the full utilities.js file is
-provided in this distribution; utilities.js includes all YUI Utilities in a
-single file.
-
-Please see the blog article on www.yuiblog.com titled "YUI: Weighing in on
-Pageweights" at http://yuiblog.com/blog/2006/10/16/pageweight-yui0114/ for more
-details.

Modified: trunk/root/static/yui/yahoo-dom-event/yahoo-dom-event.js
===================================================================
--- trunk/root/static/yui/yahoo-dom-event/yahoo-dom-event.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yahoo-dom-event/yahoo-dom-event.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,12 +1,13 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/A!
 ppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeo!
 f D==="boolean";},isFunction:function(D){return typeof D==="fu!
 nction";
},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2]!
 ;if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:funct!
 ion(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";f!
 or(;;){I
=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E!
 ,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.6.0",build:"1321"});(function(){var B=YAHOO.util,F=YAHOO.lang,L,J,K={},G={},N=window.document;YAHOO.env._id_counter=YAHOO.env._id_counter||0;var C=YAHOO.env.ua.opera,M=YAHOO.env.ua.webkit,A=YAHOO.env.ua.gecko,H=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var O=function(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return K[Q];}var R=Q;while(E.HYPHEN.ex!
 ec(R)){R=R.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase()!
 );}K[Q]=
R;return R;};var P=function(R){var Q=G[R];if(!Q){Q=new RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");G[R]=Q;}return Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=function(Q,T){var S=null;if(T=="float"){T="cssFloat";}var R=Q.ownerDocument.defaultView.getComputedStyle(Q,"");if(R){S=R[O(T)];}return Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&H){L=function(Q,S){switch(O(S)){case"opacity":var U=100;try{U=Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(T){try{U=Q.filters("alpha").opacity;}catch(T){}}return U/100;case"float":S="styleFloat";default:var R=Q.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{L=function(Q,R){return Q.style[R];};}}if(H){J=function(Q,R,S){switch(R){case"opacity":if(F.isString(Q.style.filter)){Q.style.filter="alpha(opacity="+S*100+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=1;}}break;case"float":R="styleFloat";default:Q.style[R]=S;}};}else{J=function(Q,R,S){if(R=="float"){R="cssFloat";}Q.style[!
 R]=S;};}var D=function(Q,R){return Q&&Q.nodeType==1&&(!R||R(Q));};YAHOO.util.Dom={get:function(S){if(S){if(S.nodeType||S.item){return S;}if(typeof S==="string"){return N.getElementById(S);}if("length" in S){var T=[];for(var R=0,Q=S.length;R<Q;++R){T[T.length]=B.Dom.get(S[R]);}return T;}return S;}return null;},getStyle:function(Q,S){S=O(S);var R=function(T){return L(T,S);};return B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=O(S);var R=function(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}return I(S);};return B.Dom.batch(Q,R,B.Dom,true);},getX:function(Q){var R=function(S){return B.Dom.getXY(S)[0];};return B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var R=function(S){return B.Dom.getXY(S)[1];};return B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var R=function(W){var V=this.getStyle(W,"position");if!
 (V=="static"){this.setStyle(W,"position","relative");V="relati!
 ve";}var
 Y=this.getXY(W);if(Y===false){return false;}var X=[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top"),10)];if(isNaN(X[0])){X[0]=(V=="relative")?0:W.offsetLeft;}if(isNaN(X[1])){X[1]=(V=="relative")?0:W.offsetTop;}if(T[0]!==null){W.style.left=T[0]-Y[0]+X[0]+"px";}if(T[1]!==null){W.style.top=T[1]-Y[1]+X[1]+"px";}if(!S){var U=this.getXY(W);if((T[0]!==null&&U[0]!=T[0])||(T[1]!==null&&U[1]!=T[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function(Q,R){B.Dom.setXY(Q,[null,R]);},getRegion:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}var T=B.Region.getRegion(S);return T;};return B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){U=F.trim(U);Y=Y||"*";V=(V)?!
 B.Dom.get(V):null||N;if(!V){return[];}var R=[],Q=V.getElementsByTagName(Y),X=P(U);for(var S=0,T=Q.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=Q[S];if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var Q=P(R);var T=function(U){return Q.test(U.className);};return B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var S=function(T){if(this.hasClass(T,Q)){return false;}T.className=F.trim([T.className,Q].join(" "));return true;};return B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=P(R);var T=function(W){var V=false,X=W.className;if(R&&X&&this.hasClass(W,R)){W.className=X.replace(Q," ");if(this.hasClass(W,R)){this.removeClass(W,R);}W.className=F.trim(W.className);if(W.className===""){var U=(W.hasAttribute)?"class":"className";W.removeAttribute(U);}V=true;}return V;};return B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R===Q){return false;}var S=P(R);var U=function(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return true!
 ;}V.className=V.className.replace(S," "+Q+" ");if(this.hasClas!
 s(V,R)){
this.removeClass(V,R);}V.className=F.trim(V.className);return true;};return B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=S||"yui-gen";var R=function(T){if(T&&T.id){return T.id;}var U=S+YAHOO.env._id_counter++;if(T){T.id=U;}return U;};return B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:function(R,S){R=B.Dom.get(R);S=B.Dom.get(S);var Q=false;if((R&&S)&&(R.nodeType&&S.nodeType)){if(R.contains&&R!==S){Q=R.contains(S);}else{if(R.compareDocumentPosition){Q=!!(R.compareDocumentPosition(S)&16);}}}else{}return Q;},inDocument:function(Q){return this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=R||"*";S=(S)?B.Dom.get(S):null||N;if(!S){return[];}var T=[],W=S.getElementsByTagName(R);for(var V=0,Q=W.length;V<Q;++V){if(X(W[V])){T[T.length]=W[V];if(U){U(W[V]);}}}return T;},batch:function(U,X,W,S){U=(U&&(U.tagName||U.item))?U:B.Dom.get(U);if(!U||!X){return false;}var T=(S)?W:window;if(U.tagName||U.length===undefined){return X.call(T,U,!
 W);}var V=[];for(var R=0,Q=U.length;R<Q;++R){V[V.length]=X.call(T,U[R],W);}return V;},getDocumentHeight:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollHeight:N.documentElement.scrollHeight;var Q=Math.max(R,B.Dom.getViewportHeight());return Q;},getDocumentWidth:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollWidth:N.documentElement.scrollWidth;var Q=Math.max(R,B.Dom.getViewportWidth());return Q;},getViewportHeight:function(){var Q=self.innerHeight;
-var R=N.compatMode;if((R||H)&&!C){Q=(R=="CSS1Compat")?N.documentElement.clientHeight:N.body.clientHeight;}return Q;},getViewportWidth:function(){var Q=self.innerWidth;var R=N.compatMode;if(R||H){Q=(R=="CSS1Compat")?N.documentElement.clientWidth:N.body.clientWidth;}return Q;},getAncestorBy:function(Q,R){while((Q=Q.parentNode)){if(D(Q,R)){return Q;}}return null;},getAncestorByClassName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return B.Dom.hasClass(T,Q);};return B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return T.tagName&&T.tagName.toUpperCase()==Q.toUpperCase();};return B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=Q.previousSibling;if(D(Q,R)){return Q;}}return null;},getPreviousSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=Q.nextSibling;if(D(Q,R)){return Q;}}retur!
 n null;},getNextSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var R=(D(Q.firstChild,S))?Q.firstChild:null;return R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return null;}var R=(D(Q.lastChild,S))?Q.lastChild:null;return R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=B.Dom.get(Q);return B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var S=B.Dom.getFirstChildBy(R,T);var Q=S?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length]=U;}return false;});return Q;},getChildren:function(Q){Q=B.Dom.get(Q);if(!Q){}return B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScrollTop:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollTop,Q.bo!
 dy.scrollTop);},insertBefore:function(R,Q){R=B.Dom.get(R);Q=B.!
 Dom.get(
Q);if(!R||!Q||!Q.parentNode){return null;}return Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}if(Q.nextSibling){return Q.parentNode.insertBefore(R,Q.nextSibling);}else{return Q.parentNode.appendChild(R);}},getClientRegion:function(){var S=B.Dom.getDocumentScrollTop(),R=B.Dom.getDocumentScrollLeft(),T=B.Dom.getViewportWidth()+R,Q=B.Dom.getViewportHeight()+S;return new B.Region(S,T,Q,R);}};var I=function(){if(N.documentElement.getBoundingClientRect){return function(S){var T=S.getBoundingClientRect(),R=Math.round;var Q=S.ownerDocument;return[R(T.left+B.Dom.getDocumentScrollLeft(Q)),R(T.top+B.Dom.getDocumentScrollTop(Q))];};}else{return function(S){var T=[S.offsetLeft,S.offsetTop];var R=S.offsetParent;var Q=(M&&B.Dom.getStyle(S,"position")=="absolute"&&S.offsetParent==S.ownerDocument.body);if(R!=S){while(R){T[0]+=R.offsetLeft;T[1]+=R.offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=="absolute"){Q=!
 true;}R=R.offsetParent;}}if(Q){T[0]-=S.ownerDocument.body.offsetLeft;T[1]-=S.ownerDocument.body.offsetTop;}R=S.parentNode;while(R.tagName&&!E.ROOT_TAG.test(R.tagName)){if(R.scrollTop||R.scrollLeft){T[0]-=R.scrollLeft;T[1]-=R.scrollTop;}R=R.parentNode;}return T;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.r!
 ight);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this!
 .left,E.
left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.6.0",build:"1321"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.!
 CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this!
 .type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(!
 false===
G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F!
 =[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(R,O,S,Q,P){var M=(YAHOO.lang.isString(R))?[R]:R;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:S,override:Q,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(O,M,P,N){this.onAvailable(O,M,P,N,true);},onDOMReady:function(M,O,N){if(this.DOMReady){setTimeout(function(){var P=window;if(N){if(N===true){P=O;}else{P=N;}}M.call(P,"DOMReady",[],O);},0!
 );}else{this.DOMReadyEvent.subscribe(M,O,N);}},_addListener:fu!
 nction(O
,M,X,S,N,a){if(!X||!X.call){return false;}if(this._isValidCollection(O)){var Y=true;for(var T=0,V=O.length;T<V;++T){Y=this._addListener(O[T],M,X,S,N,a)&&Y;}return Y;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event._addListener(O,M,X,S,N,a);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,X,S,N,a];return true;}var b=O;if(N){if(N===true){b=S;}else{b=N;}}var P=function(c){return X.call(b,YAHOO.util.Event.getEvent(c,O),S);};var Z=[O,M,X,P,b,S,N,a];var U=I.length;I[U]=Z;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(Z);}else{try{this._simpleAdd(O,M,P,a);}catch(W){this.lastError=W;this._removeListener(O,M,X,a);return false;}}return true;},addListener:function(O,Q,N,P,M){return this._addListener(O,Q,!
 N,P,M,false);},addFocusListener:function(O,N,P,M){return this._addListener(O,K,N,P,M,true);},removeFocusListener:function(N,M){return this._removeListener(N,K,M,true);},addBlurListener:function(O,N,P,M){return this._addListener(O,L,N,P,M,true);},removeBlurListener:function(N,M){return this._removeListener(N,L,M,true);},fireLegacyEvent:function(Q,O){var S=true,M,U,T,V,R;U=E[O].slice();for(var N=0,P=U.length;N<P;++N){T=U[N];if(T&&T[this.WFN]){V=T[this.ADJ_SCOPE];R=T[this.WFN].call(V,Q);S=(S&&R);}}M=G[O];if(M&&M[2]){M[2](Q);}return S;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},_removeListener:function(N,M,V,Y){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this._removeListener(N[Q],M,V,Y)&&W);}return W;}}if(!V||!V.call){return thi!
 s.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>!
 -1;Q--){
X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[4];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],Y);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
-I.splice(S,1);return true;},removeListener:function(N,O,M){return this._removeListener(N,O,M,false);},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stop!
 Propagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_!
 load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready!
 ();M._tr
yPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.override){if(W.override===true){U=W.obj;}else{U=W.override;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:fun!
 ction(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this._removeListener(O,N.type,N.fn,N.capture);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],capture:P[this.CAPTURE],index:S});}}}}return(R.length)?R:null;},_unload:function(S){var M=YAHOO.util.Event,P,O,N,R,Q,T=J.slice();for(P=0,R=J.length;P<R;++P){N=T[P];if(N){var U=window;if(N[M.ADJ_SCOPE]){if(N[M.ADJ_SCOPE]===true){U=N[M.UNLOAD_OBJ];}else{U=N[M.ADJ_SCOPE];}}N[M.FN].call(U,M.getEvent(S,N[M.EL]),N[M.UNL!
 OAD_OBJ]);T[P]=null;N=null;U=null;}}J=null;if(I){for(O=I.lengt!
 h-1;O>-1
;O--){N=I[O];if(N){M._removeListener(N[M.EL],N[M.TYPE],N[M.FN],N[M.CAPTURE],O);}}N=null;}G=null;M._simpleRemove(window,"unload",M._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=!
 EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=!
 B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueO!
 f"],D={isArray:function(G){return A.toString.apply(G)===F;},is!
 Boolean:
function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error(!
 "Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.leng!
 th>1){N.pop();}N.push("}");}return N.join("");},substitute:fun!
 ction(V,
H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if!
 (!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1799"});(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="!
 scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComp!
 utedStyl
e",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.length;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window!
 [w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.!
 Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(!
 G,"displ
ay")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}!
 z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:fun!
 ction(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.!
 setXY(G,
[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F!
 ,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
+},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}retur!
 n G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHei!
 ght;}return G;},getViewportWidth:function(){var G=self.innerWi!
 dth,Y=K[
t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))!
 ?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(!
 Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibl!
 ing){ret
urn G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(!
 H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
+}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomW!
 idth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=nul!
 l,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;re!
 turn a+I
;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy!
 :"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1799"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E!
 ="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.u!
 til.Cust
omEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.cal!
 l(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){!
 return"Subscriber { obj: "+this.obj+", overrideContext: "+(thi!
 s.overri
deContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:fu!
 nction(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{tr!
 y{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.rem!
 oveListe
ner(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-!
 1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
+I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefau!
 lt:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPre!
 loadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!!
 M.DOMRea
dy){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var!
  O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(!
 P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O!
 [N.TYPE]
,O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
 /* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
-if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};
-var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}retur!
 n I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D!
 .fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyC!
 ode,J);b
reak;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.6.0",build:"1321"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.6.0", build: "1321"});
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){t!
 his.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);i!
 f(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){!
 G.fire(L
,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1799"});YAHOO.register("yahoo-dom-event", YAHOO, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/yuiloader/README
===================================================================
--- trunk/root/static/yui/yuiloader/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,83 +0,0 @@
-yuiloader - Release Notes
-
-2.6.0
- * Autocomplete requires datasource.
- * Config always used if provided to insert().
- * Added timeout support, which is off by default.  Add a 'timeout'
-   config value greater than zero and an onTimeout handler to use it.
- * Added combo handler support, which is off by default.  Set
-   'combine' to true to use it.
- * Filters are applied to new modules that have a 'fullpath' attribute.
- * resize, editor, simpleeditor, layout, datasource, datatable,
-   cookie, profiler, yuiloader out of beta.
- * Added carousel, paginator
- * Added slider skin.
-
-2.5.2
-  * uploader requires element.
-  * editer supersedes simpleditor.
-  * Optional dependencies are sorted correctly when present even when
-    loadOptional is not specified.
-
-2.5.1
-   * Updated metadata for 2.5.1.
-   * Added the get utility's support for 'insertBefore'.
-   * Added the get utility's support for 'charset'.
-   * Fixed profilerviewer's dependency list.
-   * Increased rollup threshold for reset-fonts-grids so reset-fonts will be 
-     selected when appropriate.
-   * yuiloader supersedes yahoo and get.
-   * Modules now can have an 'after' property that can be used to specify
-     a list of modules that are not dependencies, but need to be included
-     above the module if they are present.
-   * base will always be included after reset, fonts, and grids. Skin css
-     will be included after all of the above.
-   * Added a new rollup: yuiloader-dom-event (yuiloader includes yahoo and get as well).
-   * utilities.js now includes yuiloader and get.
-   * loaded modules which supersede other modules but don't allow automatic 
-     rollup work correctly (the superseded modules won't load).
-   * Addessed a source order issue when logger is included after a component
-     which tries to instantiate it at load time.
-   * The filter property can be set on the instance.
-   * Custom css modules are always sorted below YUI css.
-   * The loader will not attempt to rollup the skin css for custom skinnable modules.
-
-2.5.0
-   * Updated metadata for 2.5.0
-   * (from the get utility) fixed autopurge.
-
-2.4.1
-   * Updated metadata for 2.4.1
-
-2.4.0
-   * NOTE: the API in this release has changed significantly.  Existing implementations
-     will need to be modified in order to use the new version.
-   * yuiloader now includes the yahoo and get components.  This removes the timing
-     problems in the previous versions that forced one to use YAHOO_config or include
-     yahoo.js on the page before yuiloader.
-   * No longer uses YAHOO_config for loading, you must use YAHOO.util.YUILoader
-   * Interacting with YAHOO.register or supplying a verifier function is no longer
-     required to load non-YUI resources.
-   * Supports script sandboxing.  Does not support x-domain sandboxing at this time
-   * removed verifier property, added varName property which is only needed when
-     using external scripts and the application needs to support Safari 2.x.
-   * YUI metadata updates:
-       * Added 'base', 'reset-fonts', 'get', 'json', 'simpleeditor', 'charts, and 'selector'
-       * button and history are no longer beta components.
-       * imageloader promoted from experimental to beta.
-
-2.3.1
-   * The "skin.overrides" property is now applied correctly.  Previously
-     it was looking for "skin.override".
-
-2.3.0
-   * Initial release.  YUILoader can dynamically load the optimized list of dependencies
-     for a given set of requirements.  It is designed to be the only YUI component you
-     need on your page in order to get the library running.  It includes the pieces of YUI
-     that it requires to work.  If you are using yuiloader.js, then you don't need the
-     following:
-
-     yahoo.js
-     get.js
-     
-

Modified: trunk/root/static/yui/yuiloader/yuiloader-debug.js
===================================================================
--- trunk/root/static/yui/yuiloader/yuiloader-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader/yuiloader-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The YAHOO object is the single global object used by YUI Library.  It
@@ -88,6 +88,10 @@
  * </pre>
  * This fails because "long" is a future reserved word in ECMAScript
  *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces created by the library.  defined by YUI -- create 
+ * your own (YAHOO.util, YAHOO.widget, YAHOO.lang, YAHOO.env)
+ *
  * @method namespace
  * @static
  * @param  {String*} arguments 1-n namespaces to create 
@@ -96,7 +100,7 @@
 YAHOO.namespace = function() {
     var a=arguments, o=null, i, j, d;
     for (i=0; i<a.length; i=i+1) {
-        d=a[i].split(".");
+        d=(""+a[i]).split(".");
         o=YAHOO;
 
         // YAHOO is implied, so it is ignored if it is included
@@ -146,19 +150,29 @@
  *                             and a "build" property at minimum.
  */
 YAHOO.register = function(name, mainClass, data) {
-    var mods = YAHOO.env.modules;
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
     if (!mods[name]) {
-        mods[name] = { versions:[], builds:[] };
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
     }
-    var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
     m.name = name;
     m.version = v;
     m.build = b;
     m.versions.push(v);
     m.builds.push(b);
     m.mainClass = mainClass;
+
     // fire the module load listeners
-    for (var i=0;i<ls.length;i=i+1) {
+    for (i=0;i<ls.length;i=i+1) {
         ls[i](m);
     }
     // label the main class
@@ -308,12 +322,21 @@
          * @property air
          * @type float
          */
-        air: 0
+        air: 0,
 
-    };
+        /**
+         * Google Caja version number or 0.
+         * @property caja
+         * @type float
+         */
+        caja: 0
 
-    var ua=navigator.userAgent, m;
+    },
 
+    ua = navigator.userAgent, 
+    
+    m;
+
     // Modern KHTML browsers should qualify as Safari X-Grade
     if ((/KHTML/).test(ua)) {
         o.webkit=1;
@@ -365,6 +388,11 @@
             }
         }
     }
+
+    m=ua.match(/Caja\/([^\s]*)/);
+    if (m&&m[1]) {
+        o.caja=parseFloat(m[1]);
+    }
     
     return o;
 }();
@@ -379,6 +407,7 @@
  */
 (function() {
     YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
     if ("undefined" !== typeof YAHOO_config) {
         var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
         if (l) {
@@ -405,29 +434,26 @@
 
 (function() {
 
+
 var L = YAHOO.lang,
 
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OP = Object.prototype,
+
     // ADD = ["toString", "valueOf", "hasOwnProperty"],
     ADD = ["toString", "valueOf"],
 
     OB = {
 
     /**
-     * Determines whether or not the provided object is an array.
-     * Testing typeof/instanceof/constructor of arrays across frame 
-     * boundaries isn't possible in Safari unless you have a reference
-     * to the other frame to test against its Array prototype.  To
-     * handle this case, we test well-known array properties instead.
-     * properties.
+     * Determines wheather or not the provided object is an array.
      * @method isArray
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isArray: function(o) { 
-        if (o) {
-           return L.isNumber(o.length) && L.isFunction(o.splice);
-        }
-        return false;
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
     },
 
     /**
@@ -441,13 +467,24 @@
     },
     
     /**
-     * Determines whether or not the provided object is a function
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
      * @method isFunction
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isFunction: function(o) {
-        return typeof o === 'function';
+        return OP.toString.apply(o) === FUNCTION_TOSTRING;
     },
         
     /**
@@ -513,9 +550,13 @@
      * @private
      */
     _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
-            for (var i=0;i<ADD.length;i=i+1) {
-                var fname=ADD[i],f=s[fname];
-                if (L.isFunction(f) && f!=Object.prototype[fname]) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
                     r[fname]=f;
                 }
             }
@@ -540,17 +581,17 @@
             throw new Error("extend failed, please check that " +
                             "all dependencies are included.");
         }
-        var F = function() {};
+        var F = function() {}, i;
         F.prototype=superc.prototype;
         subc.prototype=new F();
         subc.prototype.constructor=subc;
         subc.superclass=superc.prototype;
-        if (superc.prototype.constructor == Object.prototype.constructor) {
+        if (superc.prototype.constructor == OP.constructor) {
             superc.prototype.constructor=superc;
         }
     
         if (overrides) {
-            for (var i in overrides) {
+            for (i in overrides) {
                 if (L.hasOwnProperty(overrides, i)) {
                     subc.prototype[i]=overrides[i];
                 }
@@ -586,14 +627,14 @@
         if (!s||!r) {
             throw new Error("Absorb failed, verify dependencies.");
         }
-        var a=arguments, i, p, override=a[2];
-        if (override && override!==true) { // only absorb the specified properties
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
             for (i=2; i<a.length; i=i+1) {
                 r[a[i]] = s[a[i]];
             }
         } else { // take everything, overwriting only if the third parameter is true
             for (p in s) { 
-                if (override || !(p in r)) {
+                if (overrideList || !(p in r)) {
                     r[p] = s[p];
                 }
             }
@@ -621,8 +662,8 @@
             throw new Error("Augment failed, verify dependencies.");
         }
         //var a=[].concat(arguments);
-        var a=[r.prototype,s.prototype];
-        for (var i=2;i<arguments.length;i=i+1) {
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
             a.push(arguments[i]);
         }
         L.augmentObject.apply(this, a);
@@ -722,7 +763,8 @@
      */
     substitute: function (s, o, f) {
         var i, j, k, key, v, meta, saved=[], token, 
-            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}';
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump;
 
 
         for (;;) {
@@ -760,14 +802,14 @@
                     meta = meta || "";
 
                     // look for the keyword 'dump', if found force obj dump
-                    var dump = meta.indexOf(DUMP);
+                    dump = meta.indexOf(DUMP);
                     if (dump > -1) {
                         meta = meta.substring(4);
                     }
 
                     // use the toString if it is not the Object toString 
                     // and the 'dump' meta info was not found
-                    if (v.toString===Object.prototype.toString||dump>-1) {
+                    if (v.toString===OP.toString || dump>-1) {
                         v = L.dump(v, parseInt(meta, 10));
                     } else {
                         v = v.toString();
@@ -821,8 +863,8 @@
      * @return the new merged object
      */
     merge: function() {
-        var o={}, a=arguments;
-        for (var i=0, l=a.length; i<l; i=i+1) {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
             L.augmentObject(o, a[i], true);
         }
         return o;
@@ -921,7 +963,7 @@
  * @param prop {string} the name of the property to test
  * @return {boolean} the result
  */
-L.hasOwnProperty = (Object.prototype.hasOwnProperty) ?
+L.hasOwnProperty = (OP.hasOwnProperty) ?
     function(o, prop) {
         return o && o.hasOwnProperty(prop);
     } : function(o, prop) {
@@ -983,7 +1025,7 @@
 YAHOO.extend = L.extend;
 
 })();
-YAHOO.register("yahoo", YAHOO, {version: "2.6.0", build: "1321"});
+YAHOO.register("yahoo", YAHOO, {version: "2.7.0", build: "1799"});
 /**
  * Provides a mechanism to fetch remote resources and
  * insert them into a document
@@ -1173,7 +1215,7 @@
     var _timeout = function(id) {
         var q = queues[id];
         if (q.onTimeout) {
-            var sc=q.context || q;
+            var sc=q.scope || q;
             q.onTimeout.call(sc, _returnData(q));
         }
     };
@@ -1701,7 +1743,7 @@
     };
 }();
 
-YAHOO.register("get", YAHOO.util.Get, {version: "2.6.0", build: "1321"});
+YAHOO.register("get", YAHOO.util.Get, {version: "2.7.0", build: "1799"});
 /**
  * Provides dynamic loading for the YUI library.  It includes the dependency
  * info for the library, and will automatically pull in dependencies for
@@ -1741,8 +1783,8 @@
     // 'root': '2.5.2/build/',
     // 'base': 'http://yui.yahooapis.com/2.5.2/build/',
 
-    'root': '2.6.0/build/',
-    'base': 'http://yui.yahooapis.com/2.6.0/build/',
+    'root': '2.7.0/build/',
+    'base': 'http://yui.yahooapis.com/2.7.0/build/',
 
     'comboBase': 'http://yui.yahooapis.com/combo?',
 
@@ -1795,7 +1837,7 @@
 
         'carousel': {
             'type': 'js',
-            'path': 'carousel/carousel-beta-min.js',
+            'path': 'carousel/carousel-min.js',
             'requires': ['element'],
             'optional': ['animation'],
             'skinnable': true
@@ -1803,7 +1845,7 @@
 
         'charts': {
             'type': 'js',
-            'path': 'charts/charts-experimental-min.js',
+            'path': 'charts/charts-min.js',
             'requires': ['element', 'json', 'datasource']
         },
 
@@ -1884,7 +1926,7 @@
 
         'element': {
             'type': 'js',
-            'path': 'element/element-beta-min.js',
+            'path': 'element/element-min.js',
             'requires': ['dom', 'event']
         },
 
@@ -1920,7 +1962,7 @@
 
          'imagecropper': {
              'type': 'js',
-             'path': 'imagecropper/imagecropper-beta-min.js',
+             'path': 'imagecropper/imagecropper-min.js',
              'requires': ['dom', 'event', 'dragdrop', 'element', 'resize'],
              'skinnable': true
          },
@@ -1976,7 +2018,7 @@
 
         'profilerviewer': {
             'type': 'js',
-            'path': 'profilerviewer/profilerviewer-beta-min.js',
+            'path': 'profilerviewer/profilerviewer-min.js',
             'requires': ['profiler', 'yuiloader', 'element'],
             'skinnable': true
         },
@@ -2010,7 +2052,7 @@
 
         'selector': {
             'type': 'js',
-            'path': 'selector/selector-beta-min.js',
+            'path': 'selector/selector-min.js',
             'requires': ['yahoo', 'dom']
         },
 
@@ -2031,6 +2073,12 @@
             'skinnable': true
         },
 
+         'stylesheet': {
+            'type': 'js',
+            'path': 'stylesheet/stylesheet-min.js',
+            'requires': ['yahoo']
+         },
+
         'tabview': {
             'type': 'js',
             'path': 'tabview/tabview-min.js',
@@ -2043,12 +2091,13 @@
             'type': 'js',
             'path': 'treeview/treeview-min.js',
             'requires': ['event', 'dom'],
+            'optional': ['json'],
             'skinnable': true
         },
 
         'uploader': {
             'type': 'js',
-            'path': 'uploader/uploader-experimental.js',
+            'path': 'uploader/uploader.js',
             'requires': ['element']
         },
 
@@ -3655,7 +3704,7 @@
          */
         _filter: function(str) {
             var f = this.filter;
-            return (f) ?  str.replace(new RegExp(f.searchExp), f.replaceStr) : str;
+            return (f) ?  str.replace(new RegExp(f.searchExp, 'g'), f.replaceStr) : str;
         },
 
         /**
@@ -3666,12 +3715,10 @@
          * @private
          */
         _url: function(path) {
-            
-            var u = this.base || "", f=this.filter;
-            u = u + path;
-            return this._filter(u);
+            return this._filter((this.base || "") + path);
         }
 
     };
 
 })();
+YAHOO.register("yuiloader", YAHOO.util.YUILoader, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/yuiloader/yuiloader-min.js
===================================================================
--- trunk/root/static/yui/yuiloader/yuiloader-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader/yuiloader-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,10 +1,10 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/A!
 ppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeo!
 f D==="boolean";},isFunction:function(D){return typeof D==="fu!
 nction";
},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2]!
 ;if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:funct!
 ion(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";f!
 or(;;){I
=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E!
 ,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.6.0",build:"1321"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);
-};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return ;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.context||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return ;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varN!
 ame){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return ;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return ;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X!
 .insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1)!
 {W.remov
eChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,!
 h);}else{}return ;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.6.0",build:"1321"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.6.0/build/","base":"http://yui.yahooapis.com/2.6.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/a!
 nimation-min.js","requires":["dom","event"]},"autocomplete":{"!
 type":"j
s","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-beta-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-experimental-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","eve!
 nt"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-beta-min.js","requires":["dom","event"]},"event"!
 :{"type":"js","path":"event/event-min.js","requires":["yahoo"]!
 },"fonts
":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-beta-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"typ!
 e":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-beta-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-beta-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","anim!
 ation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{!
 "type":"
js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-experimental.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersede!
 s":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=!
 B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueO!
 f"],D={isArray:function(G){return A.toString.apply(G)===F;},is!
 Boolean:
function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error(!
 "Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.leng!
 th>1){N.pop();}N.push("}");}return N.join("");},substitute:fun!
 ction(V,
H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if!
 (!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1799"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"s!
 tylesheet","href":T},U);
+};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName)!
 {U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.inser!
 tBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.rem!
 oveChild
(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}el!
 se{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.7.0",build:"1799"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.7.0/build/","base":"http://yui.yahooapis.com/2.7.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animatio!
 n-min.js","requires":["dom","event"]},"autocomplete":{"type":"!
 js","pat
h":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdro!
 p","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/ev!
 ent-min.js","requires":["yahoo"]},"fonts":{"type":"css","path"!
 :"fonts/
fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator!
 -min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"ed!
 itor"},"slider":{"type":"js","path":"slider/slider-min.js","re!
 quires":
["dragdrop"],"optional":["animation"],"skinnable":true},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloa!
 der-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
 i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollu!
 ps=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?ar!
 guments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.r!
 equired,
a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:func!
 tion(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.Obj!
 ectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<t!
 his.forc
e.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseS!
 kin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});
-}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return ;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return ;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};!
 this.insert(null,"css");return ;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return ;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return ;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName|!
 |"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();!
 ";var re
f=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return ;}if(mname){if(mname!==this._loading){return ;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return ;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return ;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c!
 =function(o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return ;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp),f.replaceStr):str;},_url:function(path){var u=this.base||"",f=this.filter;u=u+path;return this._filter(u);}};})();
\ No newline at end of file
+}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};th!
 is.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAH!
 OO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var!
  ref=eva
l(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c=function!
 (o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.7.0",build:"1799"});

Modified: trunk/root/static/yui/yuiloader/yuiloader.js
===================================================================
--- trunk/root/static/yui/yuiloader/yuiloader.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader/yuiloader.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 /**
  * The YAHOO object is the single global object used by YUI Library.  It
@@ -88,6 +88,10 @@
  * </pre>
  * This fails because "long" is a future reserved word in ECMAScript
  *
+ * For implementation code that uses YUI, do not create your components
+ * in the namespaces created by the library.  defined by YUI -- create 
+ * your own (YAHOO.util, YAHOO.widget, YAHOO.lang, YAHOO.env)
+ *
  * @method namespace
  * @static
  * @param  {String*} arguments 1-n namespaces to create 
@@ -96,7 +100,7 @@
 YAHOO.namespace = function() {
     var a=arguments, o=null, i, j, d;
     for (i=0; i<a.length; i=i+1) {
-        d=a[i].split(".");
+        d=(""+a[i]).split(".");
         o=YAHOO;
 
         // YAHOO is implied, so it is ignored if it is included
@@ -146,19 +150,29 @@
  *                             and a "build" property at minimum.
  */
 YAHOO.register = function(name, mainClass, data) {
-    var mods = YAHOO.env.modules;
+    var mods = YAHOO.env.modules, m, v, b, ls, i;
+
     if (!mods[name]) {
-        mods[name] = { versions:[], builds:[] };
+        mods[name] = { 
+            versions:[], 
+            builds:[] 
+        };
     }
-    var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;
+
+    m  = mods[name];
+    v  = data.version;
+    b  = data.build;
+    ls = YAHOO.env.listeners;
+
     m.name = name;
     m.version = v;
     m.build = b;
     m.versions.push(v);
     m.builds.push(b);
     m.mainClass = mainClass;
+
     // fire the module load listeners
-    for (var i=0;i<ls.length;i=i+1) {
+    for (i=0;i<ls.length;i=i+1) {
         ls[i](m);
     }
     // label the main class
@@ -308,12 +322,21 @@
          * @property air
          * @type float
          */
-        air: 0
+        air: 0,
 
-    };
+        /**
+         * Google Caja version number or 0.
+         * @property caja
+         * @type float
+         */
+        caja: 0
 
-    var ua=navigator.userAgent, m;
+    },
 
+    ua = navigator.userAgent, 
+    
+    m;
+
     // Modern KHTML browsers should qualify as Safari X-Grade
     if ((/KHTML/).test(ua)) {
         o.webkit=1;
@@ -365,6 +388,11 @@
             }
         }
     }
+
+    m=ua.match(/Caja\/([^\s]*)/);
+    if (m&&m[1]) {
+        o.caja=parseFloat(m[1]);
+    }
     
     return o;
 }();
@@ -379,6 +407,7 @@
  */
 (function() {
     YAHOO.namespace("util", "widget", "example");
+    /*global YAHOO_config*/
     if ("undefined" !== typeof YAHOO_config) {
         var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;
         if (l) {
@@ -405,29 +434,26 @@
 
 (function() {
 
+
 var L = YAHOO.lang,
 
+    ARRAY_TOSTRING = '[object Array]',
+    FUNCTION_TOSTRING = '[object Function]',
+    OP = Object.prototype,
+
     // ADD = ["toString", "valueOf", "hasOwnProperty"],
     ADD = ["toString", "valueOf"],
 
     OB = {
 
     /**
-     * Determines whether or not the provided object is an array.
-     * Testing typeof/instanceof/constructor of arrays across frame 
-     * boundaries isn't possible in Safari unless you have a reference
-     * to the other frame to test against its Array prototype.  To
-     * handle this case, we test well-known array properties instead.
-     * properties.
+     * Determines wheather or not the provided object is an array.
      * @method isArray
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isArray: function(o) { 
-        if (o) {
-           return L.isNumber(o.length) && L.isFunction(o.splice);
-        }
-        return false;
+        return OP.toString.apply(o) === ARRAY_TOSTRING;
     },
 
     /**
@@ -441,13 +467,24 @@
     },
     
     /**
-     * Determines whether or not the provided object is a function
+     * Determines whether or not the provided object is a function.
+     * Note: Internet Explorer thinks certain functions are objects:
+     *
+     * var obj = document.createElement("object");
+     * YAHOO.lang.isFunction(obj.getAttribute) // reports false in IE
+     *
+     * var input = document.createElement("input"); // append to body
+     * YAHOO.lang.isFunction(input.focus) // reports false in IE
+     *
+     * You will have to implement additional tests if these functions
+     * matter to you.
+     *
      * @method isFunction
      * @param {any} o The object being testing
      * @return {boolean} the result
      */
     isFunction: function(o) {
-        return typeof o === 'function';
+        return OP.toString.apply(o) === FUNCTION_TOSTRING;
     },
         
     /**
@@ -513,9 +550,13 @@
      * @private
      */
     _IEEnumFix: (YAHOO.env.ua.ie) ? function(r, s) {
-            for (var i=0;i<ADD.length;i=i+1) {
-                var fname=ADD[i],f=s[fname];
-                if (L.isFunction(f) && f!=Object.prototype[fname]) {
+            var i, fname, f;
+            for (i=0;i<ADD.length;i=i+1) {
+
+                fname = ADD[i];
+                f = s[fname];
+
+                if (L.isFunction(f) && f!=OP[fname]) {
                     r[fname]=f;
                 }
             }
@@ -540,17 +581,17 @@
             throw new Error("extend failed, please check that " +
                             "all dependencies are included.");
         }
-        var F = function() {};
+        var F = function() {}, i;
         F.prototype=superc.prototype;
         subc.prototype=new F();
         subc.prototype.constructor=subc;
         subc.superclass=superc.prototype;
-        if (superc.prototype.constructor == Object.prototype.constructor) {
+        if (superc.prototype.constructor == OP.constructor) {
             superc.prototype.constructor=superc;
         }
     
         if (overrides) {
-            for (var i in overrides) {
+            for (i in overrides) {
                 if (L.hasOwnProperty(overrides, i)) {
                     subc.prototype[i]=overrides[i];
                 }
@@ -586,14 +627,14 @@
         if (!s||!r) {
             throw new Error("Absorb failed, verify dependencies.");
         }
-        var a=arguments, i, p, override=a[2];
-        if (override && override!==true) { // only absorb the specified properties
+        var a=arguments, i, p, overrideList=a[2];
+        if (overrideList && overrideList!==true) { // only absorb the specified properties
             for (i=2; i<a.length; i=i+1) {
                 r[a[i]] = s[a[i]];
             }
         } else { // take everything, overwriting only if the third parameter is true
             for (p in s) { 
-                if (override || !(p in r)) {
+                if (overrideList || !(p in r)) {
                     r[p] = s[p];
                 }
             }
@@ -621,8 +662,8 @@
             throw new Error("Augment failed, verify dependencies.");
         }
         //var a=[].concat(arguments);
-        var a=[r.prototype,s.prototype];
-        for (var i=2;i<arguments.length;i=i+1) {
+        var a=[r.prototype,s.prototype], i;
+        for (i=2;i<arguments.length;i=i+1) {
             a.push(arguments[i]);
         }
         L.augmentObject.apply(this, a);
@@ -722,7 +763,8 @@
      */
     substitute: function (s, o, f) {
         var i, j, k, key, v, meta, saved=[], token, 
-            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}';
+            DUMP='dump', SPACE=' ', LBRACE='{', RBRACE='}',
+            dump;
 
 
         for (;;) {
@@ -760,14 +802,14 @@
                     meta = meta || "";
 
                     // look for the keyword 'dump', if found force obj dump
-                    var dump = meta.indexOf(DUMP);
+                    dump = meta.indexOf(DUMP);
                     if (dump > -1) {
                         meta = meta.substring(4);
                     }
 
                     // use the toString if it is not the Object toString 
                     // and the 'dump' meta info was not found
-                    if (v.toString===Object.prototype.toString||dump>-1) {
+                    if (v.toString===OP.toString || dump>-1) {
                         v = L.dump(v, parseInt(meta, 10));
                     } else {
                         v = v.toString();
@@ -821,8 +863,8 @@
      * @return the new merged object
      */
     merge: function() {
-        var o={}, a=arguments;
-        for (var i=0, l=a.length; i<l; i=i+1) {
+        var o={}, a=arguments, l=a.length, i;
+        for (i=0; i<l; i=i+1) {
             L.augmentObject(o, a[i], true);
         }
         return o;
@@ -921,7 +963,7 @@
  * @param prop {string} the name of the property to test
  * @return {boolean} the result
  */
-L.hasOwnProperty = (Object.prototype.hasOwnProperty) ?
+L.hasOwnProperty = (OP.hasOwnProperty) ?
     function(o, prop) {
         return o && o.hasOwnProperty(prop);
     } : function(o, prop) {
@@ -983,7 +1025,7 @@
 YAHOO.extend = L.extend;
 
 })();
-YAHOO.register("yahoo", YAHOO, {version: "2.6.0", build: "1321"});
+YAHOO.register("yahoo", YAHOO, {version: "2.7.0", build: "1799"});
 /**
  * Provides a mechanism to fetch remote resources and
  * insert them into a document
@@ -1173,7 +1215,7 @@
     var _timeout = function(id) {
         var q = queues[id];
         if (q.onTimeout) {
-            var sc=q.context || q;
+            var sc=q.scope || q;
             q.onTimeout.call(sc, _returnData(q));
         }
     };
@@ -1701,7 +1743,7 @@
     };
 }();
 
-YAHOO.register("get", YAHOO.util.Get, {version: "2.6.0", build: "1321"});
+YAHOO.register("get", YAHOO.util.Get, {version: "2.7.0", build: "1799"});
 /**
  * Provides dynamic loading for the YUI library.  It includes the dependency
  * info for the library, and will automatically pull in dependencies for
@@ -1741,8 +1783,8 @@
     // 'root': '2.5.2/build/',
     // 'base': 'http://yui.yahooapis.com/2.5.2/build/',
 
-    'root': '2.6.0/build/',
-    'base': 'http://yui.yahooapis.com/2.6.0/build/',
+    'root': '2.7.0/build/',
+    'base': 'http://yui.yahooapis.com/2.7.0/build/',
 
     'comboBase': 'http://yui.yahooapis.com/combo?',
 
@@ -1795,7 +1837,7 @@
 
         'carousel': {
             'type': 'js',
-            'path': 'carousel/carousel-beta-min.js',
+            'path': 'carousel/carousel-min.js',
             'requires': ['element'],
             'optional': ['animation'],
             'skinnable': true
@@ -1803,7 +1845,7 @@
 
         'charts': {
             'type': 'js',
-            'path': 'charts/charts-experimental-min.js',
+            'path': 'charts/charts-min.js',
             'requires': ['element', 'json', 'datasource']
         },
 
@@ -1884,7 +1926,7 @@
 
         'element': {
             'type': 'js',
-            'path': 'element/element-beta-min.js',
+            'path': 'element/element-min.js',
             'requires': ['dom', 'event']
         },
 
@@ -1920,7 +1962,7 @@
 
          'imagecropper': {
              'type': 'js',
-             'path': 'imagecropper/imagecropper-beta-min.js',
+             'path': 'imagecropper/imagecropper-min.js',
              'requires': ['dom', 'event', 'dragdrop', 'element', 'resize'],
              'skinnable': true
          },
@@ -1976,7 +2018,7 @@
 
         'profilerviewer': {
             'type': 'js',
-            'path': 'profilerviewer/profilerviewer-beta-min.js',
+            'path': 'profilerviewer/profilerviewer-min.js',
             'requires': ['profiler', 'yuiloader', 'element'],
             'skinnable': true
         },
@@ -2010,7 +2052,7 @@
 
         'selector': {
             'type': 'js',
-            'path': 'selector/selector-beta-min.js',
+            'path': 'selector/selector-min.js',
             'requires': ['yahoo', 'dom']
         },
 
@@ -2031,6 +2073,12 @@
             'skinnable': true
         },
 
+         'stylesheet': {
+            'type': 'js',
+            'path': 'stylesheet/stylesheet-min.js',
+            'requires': ['yahoo']
+         },
+
         'tabview': {
             'type': 'js',
             'path': 'tabview/tabview-min.js',
@@ -2043,12 +2091,13 @@
             'type': 'js',
             'path': 'treeview/treeview-min.js',
             'requires': ['event', 'dom'],
+            'optional': ['json'],
             'skinnable': true
         },
 
         'uploader': {
             'type': 'js',
-            'path': 'uploader/uploader-experimental.js',
+            'path': 'uploader/uploader.js',
             'requires': ['element']
         },
 
@@ -3655,7 +3704,7 @@
          */
         _filter: function(str) {
             var f = this.filter;
-            return (f) ?  str.replace(new RegExp(f.searchExp), f.replaceStr) : str;
+            return (f) ?  str.replace(new RegExp(f.searchExp, 'g'), f.replaceStr) : str;
         },
 
         /**
@@ -3666,12 +3715,10 @@
          * @private
          */
         _url: function(path) {
-            
-            var u = this.base || "", f=this.filter;
-            u = u + path;
-            return this._filter(u);
+            return this._filter((this.base || "") + path);
         }
 
     };
 
 })();
+YAHOO.register("yuiloader", YAHOO.util.YUILoader, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/yuiloader-dom-event/README
===================================================================
--- trunk/root/static/yui/yuiloader-dom-event/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader-dom-event/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,13 +0,0 @@
-yuiloader-event-dom.js Release Notes
-
-*** NOTE ***
-
-This document is not updated with each release.  Changes to
-the yuiloader-dom-event.js source are noted in the README
-file for each component that comprises this aggregate:
-
-yahoo/README
-dom/README
-event/README
-get/README
-yuiloader/README

Modified: trunk/root/static/yui/yuiloader-dom-event/yuiloader-dom-event.js
===================================================================
--- trunk/root/static/yui/yuiloader-dom-event/yuiloader-dom-event.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuiloader-dom-event/yuiloader-dom-event.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,15 +1,17 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/A!
 ppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var A=YAHOO.lang,C=["toString","valueOf"],B={isArray:function(D){if(D){return A.isNumber(D.length)&&A.isFunction(D.splice);}return false;},isBoolean:function(D){return typeo!
 f D==="boolean";},isFunction:function(D){return typeof D==="fu!
 nction";
},isNull:function(D){return D===null;},isNumber:function(D){return typeof D==="number"&&isFinite(D);},isObject:function(D){return(D&&(typeof D==="object"||A.isFunction(D)))||false;},isString:function(D){return typeof D==="string";},isUndefined:function(D){return typeof D==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(F,E){for(var D=0;D<C.length;D=D+1){var H=C[D],G=E[H];if(A.isFunction(G)&&G!=Object.prototype[H]){F[H]=G;}}}:function(){},extend:function(H,I,G){if(!I||!H){throw new Error("extend failed, please check that "+"all dependencies are included.");}var E=function(){};E.prototype=I.prototype;H.prototype=new E();H.prototype.constructor=H;H.superclass=I.prototype;if(I.prototype.constructor==Object.prototype.constructor){I.prototype.constructor=I;}if(G){for(var D in G){if(A.hasOwnProperty(G,D)){H.prototype[D]=G[D];}}A._IEEnumFix(H.prototype,G);}},augmentObject:function(H,G){if(!G||!H){throw new Error("Absorb failed, verify dependencies.");}var D=arguments,F,I,E=D[2]!
 ;if(E&&E!==true){for(F=2;F<D.length;F=F+1){H[D[F]]=G[D[F]];}}else{for(I in G){if(E||!(I in H)){H[I]=G[I];}}A._IEEnumFix(H,G);}},augmentProto:function(G,F){if(!F||!G){throw new Error("Augment failed, verify dependencies.");}var D=[G.prototype,F.prototype];for(var E=2;E<arguments.length;E=E+1){D.push(arguments[E]);}A.augmentObject.apply(this,D);},dump:function(D,I){var F,H,K=[],L="{...}",E="f(){...}",J=", ",G=" => ";if(!A.isObject(D)){return D+"";}else{if(D instanceof Date||("nodeType" in D&&"tagName" in D)){return D;}else{if(A.isFunction(D)){return E;}}}I=(A.isNumber(I))?I:3;if(A.isArray(D)){K.push("[");for(F=0,H=D.length;F<H;F=F+1){if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}if(K.length>1){K.pop();}K.push("]");}else{K.push("{");for(F in D){if(A.hasOwnProperty(D,F)){K.push(F+G);if(A.isObject(D[F])){K.push((I>0)?A.dump(D[F],I-1):L);}else{K.push(D[F]);}K.push(J);}}if(K.length>1){K.pop();}K.push("}");}return K.join("");},substitute:funct!
 ion(S,E,L){var I,H,G,O,P,R,N=[],F,J="dump",M=" ",D="{",Q="}";f!
 or(;;){I
=S.lastIndexOf(D);if(I<0){break;}H=S.indexOf(Q,I);if(I+1>=H){break;}F=S.substring(I+1,H);O=F;R=null;G=O.indexOf(M);if(G>-1){R=O.substring(G+1);O=O.substring(0,G);}P=E[O];if(L){P=L(O,P,R);}if(A.isObject(P)){if(A.isArray(P)){P=A.dump(P,parseInt(R,10));}else{R=R||"";var K=R.indexOf(J);if(K>-1){R=R.substring(4);}if(P.toString===Object.prototype.toString||K>-1){P=A.dump(P,parseInt(R,10));}else{P=P.toString();}}}else{if(!A.isString(P)&&!A.isNumber(P)){P="~-"+N.length+"-~";N[N.length]=F;}}S=S.substring(0,I)+P+S.substring(H+1);}for(I=N.length-1;I>=0;I=I-1){S=S.replace(new RegExp("~-"+I+"-~"),"{"+N[I]+"}","g");}return S;},trim:function(D){try{return D.replace(/^\s+|\s+$/g,"");}catch(E){return D;}},merge:function(){var G={},E=arguments;for(var F=0,D=E.length;F<D;F=F+1){A.augmentObject(G,E[F],true);}return G;},later:function(K,E,L,G,H){K=K||0;E=E||{};var F=L,J=G,I,D;if(A.isString(L)){F=E[L];}if(!F){throw new TypeError("method undefined");}if(!A.isArray(J)){J=[G];}I=function(){F.apply(E!
 ,J);};D=(H)?setInterval(I,K):setTimeout(I,K);return{interval:H,cancel:function(){if(this.interval){clearInterval(D);}else{clearTimeout(D);}}};},isValue:function(D){return(A.isObject(D)||A.isString(D)||A.isNumber(D)||A.isBoolean(D));}};A.hasOwnProperty=(Object.prototype.hasOwnProperty)?function(D,E){return D&&D.hasOwnProperty(E);}:function(D,E){return !A.isUndefined(D[E])&&D.constructor.prototype[E]!==D[E];};B.augmentObject(A,B,true);YAHOO.util.Lang=A;A.augment=A.augmentProto;YAHOO.augment=A.augmentProto;YAHOO.extend=A.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.6.0",build:"1321"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"stylesheet","href":T},U);
-};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return ;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.context||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return ;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varN!
 ame){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return ;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return ;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X!
 .insertBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1)!
 {W.remov
eChild(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,!
 h);}else{}return ;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.6.0",build:"1321"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.6.0/build/","base":"http://yui.yahooapis.com/2.6.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/a!
 nimation-min.js","requires":["dom","event"]},"autocomplete":{"!
 type":"j
s","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-beta-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-experimental-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","eve!
 nt"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-beta-min.js","requires":["dom","event"]},"event"!
 :{"type":"js","path":"event/event-min.js","requires":["yahoo"]!
 },"fonts
":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-beta-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"typ!
 e":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-beta-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-beta-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","anim!
 ation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{!
 "type":"
js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-experimental.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersede!
 s":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
+if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:0},B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=!
 B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){C.air=A[0];}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}A=B.match(/Caja\/([^\s]*)/);if(A&&A[1]){C.caja=parseFloat(A[1]);}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,F="[object Array]",C="[object Function]",A=Object.prototype,E=["toString","valueO!
 f"],D={isArray:function(G){return A.toString.apply(G)===F;},is!
 Boolean:
function(G){return typeof G==="boolean";},isFunction:function(G){return A.toString.apply(G)===C;},isNull:function(G){return G===null;},isNumber:function(G){return typeof G==="number"&&isFinite(G);},isObject:function(G){return(G&&(typeof G==="object"||B.isFunction(G)))||false;},isString:function(G){return typeof G==="string";},isUndefined:function(G){return typeof G==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(I,H){var G,K,J;for(G=0;G<E.length;G=G+1){K=E[G];J=H[K];if(B.isFunction(J)&&J!=A[K]){I[K]=J;}}}:function(){},extend:function(J,K,I){if(!K||!J){throw new Error("extend failed, please check that "+"all dependencies are included.");}var H=function(){},G;H.prototype=K.prototype;J.prototype=new H();J.prototype.constructor=J;J.superclass=K.prototype;if(K.prototype.constructor==A.constructor){K.prototype.constructor=K;}if(I){for(G in I){if(B.hasOwnProperty(I,G)){J.prototype[G]=I[G];}}B._IEEnumFix(J.prototype,I);}},augmentObject:function(K,J){if(!J||!K){throw new Error(!
 "Absorb failed, verify dependencies.");}var G=arguments,I,L,H=G[2];if(H&&H!==true){for(I=2;I<G.length;I=I+1){K[G[I]]=J[G[I]];}}else{for(L in J){if(H||!(L in K)){K[L]=J[L];}}B._IEEnumFix(K,J);}},augmentProto:function(J,I){if(!I||!J){throw new Error("Augment failed, verify dependencies.");}var G=[J.prototype,I.prototype],H;for(H=2;H<arguments.length;H=H+1){G.push(arguments[H]);}B.augmentObject.apply(this,G);},dump:function(G,L){var I,K,N=[],O="{...}",H="f(){...}",M=", ",J=" => ";if(!B.isObject(G)){return G+"";}else{if(G instanceof Date||("nodeType" in G&&"tagName" in G)){return G;}else{if(B.isFunction(G)){return H;}}}L=(B.isNumber(L))?L:3;if(B.isArray(G)){N.push("[");for(I=0,K=G.length;I<K;I=I+1){if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}if(N.length>1){N.pop();}N.push("]");}else{N.push("{");for(I in G){if(B.hasOwnProperty(G,I)){N.push(I+J);if(B.isObject(G[I])){N.push((L>0)?B.dump(G[I],L-1):O);}else{N.push(G[I]);}N.push(M);}}if(N.leng!
 th>1){N.pop();}N.push("}");}return N.join("");},substitute:fun!
 ction(V,
H,O){var L,K,J,R,S,U,Q=[],I,M="dump",P=" ",G="{",T="}",N;for(;;){L=V.lastIndexOf(G);if(L<0){break;}K=V.indexOf(T,L);if(L+1>=K){break;}I=V.substring(L+1,K);R=I;U=null;J=R.indexOf(P);if(J>-1){U=R.substring(J+1);R=R.substring(0,J);}S=H[R];if(O){S=O(R,S,U);}if(B.isObject(S)){if(B.isArray(S)){S=B.dump(S,parseInt(U,10));}else{U=U||"";N=U.indexOf(M);if(N>-1){U=U.substring(4);}if(S.toString===A.toString||N>-1){S=B.dump(S,parseInt(U,10));}else{S=S.toString();}}}else{if(!B.isString(S)&&!B.isNumber(S)){S="~-"+Q.length+"-~";Q[Q.length]=I;}}V=V.substring(0,L)+S+V.substring(K+1);}for(L=Q.length-1;L>=0;L=L-1){V=V.replace(new RegExp("~-"+L+"-~"),"{"+Q[L]+"}","g");}return V;},trim:function(G){try{return G.replace(/^\s+|\s+$/g,"");}catch(H){return G;}},merge:function(){var J={},H=arguments,G=H.length,I;for(I=0;I<G;I=I+1){B.augmentObject(J,H[I],true);}return J;},later:function(N,H,O,J,K){N=N||0;H=H||{};var I=O,M=J,L,G;if(B.isString(O)){I=H[O];}if(!I){throw new TypeError("method undefined");}if!
 (!B.isArray(M)){M=[J];}L=function(){I.apply(H,M);};G=(K)?setInterval(L,N):setTimeout(L,N);return{interval:K,cancel:function(){if(this.interval){clearInterval(G);}else{clearTimeout(G);}}};},isValue:function(G){return(B.isObject(G)||B.isString(G)||B.isNumber(G)||B.isBoolean(G));}};B.hasOwnProperty=(A.hasOwnProperty)?function(G,H){return G&&G.hasOwnProperty(H);}:function(G,H){return !B.isUndefined(G[H])&&G.constructor.prototype[H]!==G[H];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.7.0",build:"1799"});YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(T,U,W){var V=W||"utf-8";return J("link",{"id":"yui__dyn_"+(R++),"type":"text/css","charset":V,"rel":"s!
 tylesheet","href":T},U);
+};var P=function(T,U,W){var V=W||"utf-8";return J("script",{"id":"yui__dyn_"+(R++),"type":"text/javascript","charset":V,"src":T},U);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName)!
 {U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.charset);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.charset);}else{W=I(T,c,U.charset);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(a){var X=M[a];if(X){var Z=X.nodes,T=Z.length,Y=X.win.document,W=Y.getElementsByTagName("head")[0];if(X.insertBefore){var V=B(X.inser!
 tBefore,a);if(V){W=V.parentNode;}}for(var U=0;U<T;U=U+1){W.rem!
 oveChild
(Z[U]);}X.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge" in W)?W.autopurge:(U==="script")?true:false;S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}el!
 se{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.7.0",build:"1799"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.7.0/build/","base":"http://yui.yahooapis.com/2.7.0/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animatio!
 n-min.js","requires":["dom","event"]},"autocomplete":{"type":"!
 js","pat
h":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"]},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdro!
 p","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"]},"event":{"type":"js","path":"event/ev!
 ent-min.js","requires":["yahoo"]},"fonts":{"type":"css","path"!
 :"fonts/
fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dom","event","dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["dom","event","element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator!
 -min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dom","event","dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"ed!
 itor"},"slider":{"type":"js","path":"slider/slider-min.js","re!
 quires":
["dragdrop"],"optional":["animation"],"skinnable":true},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloa!
 der-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
 i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return -1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollu!
 ps=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext" in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?ar!
 guments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.r!
 equired,
a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:func!
 tion(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.Obj!
 ectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<t!
 his.forc
e.length;i=i+1){if(this.force[i] in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseS!
 kin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j] in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});
-}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return ;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return ;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};!
 this.insert(null,"css");return ;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return ;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return ;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName|!
 |"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();!
 ";var re
f=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return ;}if(mname){if(mname!==this._loading){return ;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return ;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return ;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c!
 =function(o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return ;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp),f.replaceStr):str;},_url:function(path){var u=this.base||"",f=this.filter;u=u+path;return this._filter(u);}};})();(function(){var B=YAHOO.util,F=YAHOO.lang,L,J,K={},G={},N=window.document;YAHOO.env._id_counter=YAHOO.en!
 v._id_counter||0;var C=YAHOO.env.ua.opera,M=YAHOO.env.ua.webki!
 t,A=YAHO
O.env.ua.gecko,H=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i};var O=function(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return K[Q];}var R=Q;while(E.HYPHEN.exec(R)){R=R.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}K[Q]=R;return R;};var P=function(R){var Q=G[R];if(!Q){Q=new RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");G[R]=Q;}return Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=function(Q,T){var S=null;if(T=="float"){T="cssFloat";}var R=Q.ownerDocument.defaultView.getComputedStyle(Q,"");if(R){S=R[O(T)];}return Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&H){L=function(Q,S){switch(O(S)){case"opacity":var U=100;try{U=Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(T){try{U=Q.filters("alpha").opacity;}catch(T){}}return U/100;case"float":S="styleFloat";default:var R=Q.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{L=function(Q,R){return Q.style[R];};}}if(H){J=function!
 (Q,R,S){switch(R){case"opacity":if(F.isString(Q.style.filter)){Q.style.filter="alpha(opacity="+S*100+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=1;}}break;case"float":R="styleFloat";default:Q.style[R]=S;}};}else{J=function(Q,R,S){if(R=="float"){R="cssFloat";}Q.style[R]=S;};}var D=function(Q,R){return Q&&Q.nodeType==1&&(!R||R(Q));};YAHOO.util.Dom={get:function(S){if(S){if(S.nodeType||S.item){return S;}if(typeof S==="string"){return N.getElementById(S);}if("length" in S){var T=[];for(var R=0,Q=S.length;R<Q;++R){T[T.length]=B.Dom.get(S[R]);}return T;}return S;}return null;},getStyle:function(Q,S){S=O(S);var R=function(T){return L(T,S);};return B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=O(S);var R=function(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}return I(S);};return B.Dom.batch(Q,R,B!
 .Dom,true);},getX:function(Q){var R=function(S){return B.Dom.g!
 etXY(S)[
0];};return B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var R=function(S){return B.Dom.getXY(S)[1];};return B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var R=function(W){var V=this.getStyle(W,"position");if(V=="static"){this.setStyle(W,"position","relative");V="relative";}var Y=this.getXY(W);if(Y===false){return false;}var X=[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top"),10)];if(isNaN(X[0])){X[0]=(V=="relative")?0:W.offsetLeft;}if(isNaN(X[1])){X[1]=(V=="relative")?0:W.offsetTop;}if(T[0]!==null){W.style.left=T[0]-Y[0]+X[0]+"px";}if(T[1]!==null){W.style.top=T[1]-Y[1]+X[1]+"px";}if(!S){var U=this.getXY(W);if((T[0]!==null&&U[0]!=T[0])||(T[1]!==null&&U[1]!=T[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function(Q,R){B.Dom.setXY(Q,[null,R]);},getRegion:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument!
 .body){return false;}var T=B.Region.getRegion(S);return T;};return B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){U=F.trim(U);Y=Y||"*";V=(V)?B.Dom.get(V):null||N;if(!V){return[];}var R=[],Q=V.getElementsByTagName(Y),X=P(U);for(var S=0,T=Q.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=Q[S];if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var Q=P(R);var T=function(U){return Q.test(U.className);};return B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var S=function(T){if(this.hasClass(T,Q)){return false;}T.className=F.trim([T.className,Q].join(" "));return true;};return B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=P(R);var T=function(W){var V=false,X=W.className;if(R&&X&&this.hasClass(W,R)){W.className=X.replace(Q," ");if(this.hasClass(W,R)){this.removeClass(W,R);}W.className=F.trim(W.classN!
 ame);if(W.className===""){var U=(W.hasAttribute)?"class":"clas!
 sName";W
.removeAttribute(U);}V=true;}return V;};return B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R===Q){return false;}var S=P(R);var U=function(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return true;}V.className=V.className.replace(S," "+Q+" ");if(this.hasClass(V,R)){this.removeClass(V,R);}V.className=F.trim(V.className);return true;};return B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=S||"yui-gen";var R=function(T){if(T&&T.id){return T.id;}var U=S+YAHOO.env._id_counter++;if(T){T.id=U;}return U;};return B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:function(R,S){R=B.Dom.get(R);S=B.Dom.get(S);var Q=false;if((R&&S)&&(R.nodeType&&S.nodeType)){if(R.contains&&R!==S){Q=R.contains(S);}else{if(R.compareDocumentPosition){Q=!!(R.compareDocumentPosition(S)&16);}}}else{}return Q;},inDocument:function(Q){return this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=R||"*";S=(S)?B.Dom.get(S):null||N;if(!S){return[];}var!
  T=[],W=S.getElementsByTagName(R);for(var V=0,Q=W.length;V<Q;++V){if(X(W[V])){T[T.length]=W[V];if(U){U(W[V]);}}}return T;},batch:function(U,X,W,S){U=(U&&(U.tagName||U.item))?U:B.Dom.get(U);if(!U||!X){return false;}var T=(S)?W:window;if(U.tagName||U.length===undefined){return X.call(T,U,W);}var V=[];for(var R=0,Q=U.length;R<Q;++R){V[V.length]=X.call(T,U[R],W);}return V;},getDocumentHeight:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollHeight:N.documentElement.scrollHeight;var Q=Math.max(R,B.Dom.getViewportHeight());return Q;},getDocumentWidth:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollWidth:N.documentElement.scrollWidth;var Q=Math.max(R,B.Dom.getViewportWidth());return Q;},getViewportHeight:function(){var Q=self.innerHeight;
-var R=N.compatMode;if((R||H)&&!C){Q=(R=="CSS1Compat")?N.documentElement.clientHeight:N.body.clientHeight;}return Q;},getViewportWidth:function(){var Q=self.innerWidth;var R=N.compatMode;if(R||H){Q=(R=="CSS1Compat")?N.documentElement.clientWidth:N.body.clientWidth;}return Q;},getAncestorBy:function(Q,R){while((Q=Q.parentNode)){if(D(Q,R)){return Q;}}return null;},getAncestorByClassName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return B.Dom.hasClass(T,Q);};return B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return T.tagName&&T.tagName.toUpperCase()==Q.toUpperCase();};return B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=Q.previousSibling;if(D(Q,R)){return Q;}}return null;},getPreviousSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=Q.nextSibling;if(D(Q,R)){return Q;}}retur!
 n null;},getNextSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var R=(D(Q.firstChild,S))?Q.firstChild:null;return R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return null;}var R=(D(Q.lastChild,S))?Q.lastChild:null;return R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=B.Dom.get(Q);return B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var S=B.Dom.getFirstChildBy(R,T);var Q=S?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length]=U;}return false;});return Q;},getChildren:function(Q){Q=B.Dom.get(Q);if(!Q){}return B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScrollTop:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollTop,Q.bo!
 dy.scrollTop);},insertBefore:function(R,Q){R=B.Dom.get(R);Q=B.!
 Dom.get(
Q);if(!R||!Q||!Q.parentNode){return null;}return Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}if(Q.nextSibling){return Q.parentNode.insertBefore(R,Q.nextSibling);}else{return Q.parentNode.appendChild(R);}},getClientRegion:function(){var S=B.Dom.getDocumentScrollTop(),R=B.Dom.getDocumentScrollLeft(),T=B.Dom.getViewportWidth()+R,Q=B.Dom.getViewportHeight()+S;return new B.Region(S,T,Q,R);}};var I=function(){if(N.documentElement.getBoundingClientRect){return function(S){var T=S.getBoundingClientRect(),R=Math.round;var Q=S.ownerDocument;return[R(T.left+B.Dom.getDocumentScrollLeft(Q)),R(T.top+B.Dom.getDocumentScrollTop(Q))];};}else{return function(S){var T=[S.offsetLeft,S.offsetTop];var R=S.offsetParent;var Q=(M&&B.Dom.getStyle(S,"position")=="absolute"&&S.offsetParent==S.ownerDocument.body);if(R!=S){while(R){T[0]+=R.offsetLeft;T[1]+=R.offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=="absolute"){Q=!
 true;}R=R.offsetParent;}}if(Q){T[0]-=S.ownerDocument.body.offsetLeft;T[1]-=S.ownerDocument.body.offsetTop;}R=S.parentNode;while(R.tagName&&!E.ROOT_TAG.test(R.tagName)){if(R.scrollTop||R.scrollLeft){T[0]-=R.scrollLeft;T[1]-=R.scrollTop;}R=R.parentNode;}return T;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.r!
 ight);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this!
 .left,E.
left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.6.0",build:"1321"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.!
 CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.call(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this!
 .type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(!
 false===
G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){for(var A=this.subscribers.length-1;A>-1;A--){this._delete(A);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F!
 =[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(R,O,S,Q,P){var M=(YAHOO.lang.isString(R))?[R]:R;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:S,override:Q,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(O,M,P,N){this.onAvailable(O,M,P,N,true);},onDOMReady:function(M,O,N){if(this.DOMReady){setTimeout(function(){var P=window;if(N){if(N===true){P=O;}else{P=N;}}M.call(P,"DOMReady",[],O);},0!
 );}else{this.DOMReadyEvent.subscribe(M,O,N);}},_addListener:fu!
 nction(O
,M,X,S,N,a){if(!X||!X.call){return false;}if(this._isValidCollection(O)){var Y=true;for(var T=0,V=O.length;T<V;++T){Y=this._addListener(O[T],M,X,S,N,a)&&Y;}return Y;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event._addListener(O,M,X,S,N,a);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,X,S,N,a];return true;}var b=O;if(N){if(N===true){b=S;}else{b=N;}}var P=function(c){return X.call(b,YAHOO.util.Event.getEvent(c,O),S);};var Z=[O,M,X,P,b,S,N,a];var U=I.length;I[U]=Z;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(Z);}else{try{this._simpleAdd(O,M,P,a);}catch(W){this.lastError=W;this._removeListener(O,M,X,a);return false;}}return true;},addListener:function(O,Q,N,P,M){return this._addListener(O,Q,!
 N,P,M,false);},addFocusListener:function(O,N,P,M){return this._addListener(O,K,N,P,M,true);},removeFocusListener:function(N,M){return this._removeListener(N,K,M,true);},addBlurListener:function(O,N,P,M){return this._addListener(O,L,N,P,M,true);},removeBlurListener:function(N,M){return this._removeListener(N,L,M,true);},fireLegacyEvent:function(Q,O){var S=true,M,U,T,V,R;U=E[O].slice();for(var N=0,P=U.length;N<P;++N){T=U[N];if(T&&T[this.WFN]){V=T[this.ADJ_SCOPE];R=T[this.WFN].call(V,Q);S=(S&&R);}}M=G[O];if(M&&M[2]){M[2](Q);}return S;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},_removeListener:function(N,M,V,Y){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-1;Q--){W=(this._removeListener(N[Q],M,V,Y)&&W);}return W;}}if(!V||!V.call){return thi!
 s.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>!
 -1;Q--){
X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[4];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],Y);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
-I.splice(S,1);return true;},removeListener:function(N,O,M){return this._removeListener(N,O,M,false);},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stop!
 Propagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefault:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_!
 load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready!
 ();M._tr
yPreloadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!M.DOMReady){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;clearInterval(this._interval);this._interval=null;return ;}if(this.locked){return ;}if(this.isIE){if(!this.DOMReady){this.startInterval();return ;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.override){if(W.override===true){U=W.obj;}else{U=W.override;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;},purgeElement:fun!
 ction(Q,R,T){var O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this._removeListener(O,N.type,N.fn,N.capture);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],capture:P[this.CAPTURE],index:S});}}}}return(R.length)?R:null;},_unload:function(S){var M=YAHOO.util.Event,P,O,N,R,Q,T=J.slice();for(P=0,R=J.length;P<R;++P){N=T[P];if(N){var U=window;if(N[M.ADJ_SCOPE]){if(N[M.ADJ_SCOPE]===true){U=N[M.UNLOAD_OBJ];}else{U=N[M.ADJ_SCOPE];}}N[M.FN].call(U,M.getEvent(S,N[M.EL]),N[M.UNL!
 OAD_OBJ]);T[P]=null;N=null;U=null;}}J=null;if(I){for(O=I.lengt!
 h-1;O>-1
;O--){N=I[O];if(N){M._removeListener(N[M.EL],N[M.TYPE],N[M.FN],N[M.CAPTURE],O);}}N=null;}G=null;M._simpleRemove(window,"unload",M._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=!
 EU.addFocusListener;EU.onBlur=EU.addBlurListener;
+}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if!
 (requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._!
 filter(js),{data:self._loading,onSuccess:callback,onFailure:se!
 lf._onFa
ilure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};th!
 is.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAH!
 OO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var!
  ref=eva
l(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i] in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c=function!
 (o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.7.0",build:"1799"});
+(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},get:function(y){var AA,Y,z,x,G;if(y){if(y[l]||y.item){return y;}if(typeof y==="string"){AA=y;y=K.getElementById(y);if(y&&y.id===AA){return y;}else{if(y&&K.all){y=null;Y=K.all[AA];for(x=0,G=Y.lengt!
 h;x<G;++x){if(Y[x].id===AA){return Y[x];}}}}return y;}if(y.DOM_EVENTS){y=y.get("element");}if("length" in y){z=[];for(x=0,G=y.length;x<G;++x){z[z.length]=E.Dom.get(y[x]);}return z;}return y;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){retu!
 rn function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){sw!
 itch(x){
case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];G=S(AF[v],q);x=S(AF[v],R);if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC==c)){if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return functio!
 n(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.!
 Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,!
 p,AA);}A
C=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AB=L.trim(AB);AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(!
 Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom.getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom.getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom.getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom.getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});
+},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom.getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}retur!
 n G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHei!
 ght;}return G;},getViewportWidth:function(){var G=self.innerWi!
 dth,Y=K[
t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))!
 ?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(!
 Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibl!
 ing){ret
urn G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;Y.setAttribute(G,x);},getAttribute:function(Y,G){G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;return Y.getAttribute(G);},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(!
 H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);
+}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomW!
 idth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=nul!
 l,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;re!
 turn a+I
;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy!
 :"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.7.0",build:"1799"});YAHOO.util.CustomEvent=function(D,C,B,A){this.type=D;this.scope=C||window;this.silent=B;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E!
 ="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.u!
 til.Cust
omEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(A,B,C){if(!A){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(A,B,C);}this.subscribers.push(new YAHOO.util.Subscriber(A,B,C));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var K=[],E=this.subscribers.length;if(!E&&this.silent){return true;}var I=[].slice.call(arguments,0),G=true,D,J=false;if(!this.silent){}var C=this.subscribers.slice(),A=YAHOO.util.Event.throwErrors;for(D=0;D<E;++D){var M=C[D];if(!M){J=true;}else{if(!this.silent){}var L=M.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var B=null;if(I.length>0){B=I[0];}try{G=M.fn.cal!
 l(L,B,M.obj);}catch(F){this.lastError=F;if(A){throw F;}}}else{try{G=M.fn.call(L,this.type,I,M.obj);}catch(H){this.lastError=H;if(A){throw H;}}}if(false===G){if(!this.silent){}break;}}}return(G!==false);},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){!
 return"Subscriber { obj: "+this.obj+", overrideContext: "+(thi!
 s.overri
deContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};var K=YAHOO.env.ua.ie?"focusin":"focus";var L=YAHOO.env.ua.ie?"focusout":"blur";return{POLL_RETRYS:2000,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){var M=this;var N=function(){M._tryPreloadAttach();};this._interval=setInterval(N,this.POLL_INTERVAL);}},onAvailable:function(S,O,Q,R,P){var M=(YAHOO.lang.isString(S))?[S]:S;for(var N=0;N<M.length;N=N+1){F.push({id:M[N],fn:O,obj:Q,overrideContext:R,checkReady:P});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(P,M,N,O){this.onAvailable(P,M,N,O,true);},onDOMReady:fu!
 nction(M,N,O){if(this.DOMReady){setTimeout(function(){var P=window;if(O){if(O===true){P=N;}else{P=O;}}M.call(P,"DOMReady",[],N);},0);}else{this.DOMReadyEvent.subscribe(M,N,O);}},_addListener:function(O,M,Y,S,W,b){if(!Y||!Y.call){return false;}if(this._isValidCollection(O)){var Z=true;for(var T=0,V=O.length;T<V;++T){Z=this.on(O[T],M,Y,S,W)&&Z;}return Z;}else{if(YAHOO.lang.isString(O)){var R=this.getEl(O);if(R){O=R;}else{this.onAvailable(O,function(){YAHOO.util.Event.on(O,M,Y,S,W);});return true;}}}if(!O){return false;}if("unload"==M&&S!==this){J[J.length]=[O,M,Y,S,W];return true;}var N=O;if(W){if(W===true){N=S;}else{N=W;}}var P=function(c){return Y.call(N,YAHOO.util.Event.getEvent(c,O),S);};var a=[O,M,Y,P,N,S,W];var U=I.length;I[U]=a;if(this.useLegacyEvent(O,M)){var Q=this.getLegacyIndex(O,M);if(Q==-1||O!=G[Q][0]){Q=G.length;B[O.id+M]=Q;G[Q]=[O,M,O["on"+M]];E[Q]=[];O["on"+M]=function(c){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(c),Q);};}E[Q].push(a);}else{tr!
 y{this._simpleAdd(O,M,P,b);}catch(X){this.lastError=X;this.rem!
 oveListe
ner(O,M,Y);return false;}}return true;},addListener:function(N,Q,M,O,P){return this._addListener(N,Q,M,O,P,false);},addFocusListener:function(N,M,O,P){return this._addListener(N,K,M,O,P,true);},removeFocusListener:function(N,M){return this.removeListener(N,K,M);},addBlurListener:function(N,M,O,P){return this._addListener(N,L,M,O,P,true);},removeBlurListener:function(N,M){return this.removeListener(N,L,M);},fireLegacyEvent:function(R,P){var T=true,M,V,U,N,S;V=E[P].slice();for(var O=0,Q=V.length;O<Q;++O){U=V[O];if(U&&U[this.WFN]){N=U[this.ADJ_SCOPE];S=U[this.WFN].call(N,R);T=(T&&S);}}M=G[P];if(M&&M[2]){M[2](R);}return T;},getLegacyIndex:function(N,O){var M=this.generateId(N)+O;if(typeof B[M]=="undefined"){return -1;}else{return B[M];}},useLegacyEvent:function(M,N){return(this.webkit&&this.webkit<419&&("click"==N||"dblclick"==N));},removeListener:function(N,M,V){var Q,T,X;if(typeof N=="string"){N=this.getEl(N);}else{if(this._isValidCollection(N)){var W=true;for(Q=N.length-1;Q>-!
 1;Q--){W=(this.removeListener(N[Q],M,V)&&W);}return W;}}if(!V||!V.call){return this.purgeElement(N,false,M);}if("unload"==M){for(Q=J.length-1;Q>-1;Q--){X=J[Q];if(X&&X[0]==N&&X[1]==M&&X[2]==V){J.splice(Q,1);return true;}}return false;}var R=null;var S=arguments[3];if("undefined"===typeof S){S=this._getCacheIndex(N,M,V);}if(S>=0){R=I[S];}if(!N||!R){return false;}if(this.useLegacyEvent(N,M)){var P=this.getLegacyIndex(N,M);var O=E[P];if(O){for(Q=0,T=O.length;Q<T;++Q){X=O[Q];if(X&&X[this.EL]==N&&X[this.TYPE]==M&&X[this.FN]==V){O.splice(Q,1);break;}}}}else{try{this._simpleRemove(N,M,R[this.WFN],false);}catch(U){this.lastError=U;return false;}}delete I[S][this.WFN];delete I[S][this.FN];
+I.splice(S,1);return true;},getTarget:function(O,N){var M=O.target||O.srcElement;return this.resolveTextNode(M);},resolveTextNode:function(N){try{if(N&&3==N.nodeType){return N.parentNode;}}catch(M){}return N;},getPageX:function(N){var M=N.pageX;if(!M&&0!==M){M=N.clientX||0;if(this.isIE){M+=this._getScrollLeft();}}return M;},getPageY:function(M){var N=M.pageY;if(!N&&0!==N){N=M.clientY||0;if(this.isIE){N+=this._getScrollTop();}}return N;},getXY:function(M){return[this.getPageX(M),this.getPageY(M)];},getRelatedTarget:function(N){var M=N.relatedTarget;if(!M){if(N.type=="mouseout"){M=N.toElement;}else{if(N.type=="mouseover"){M=N.fromElement;}}}return this.resolveTextNode(M);},getTime:function(O){if(!O.time){var N=new Date().getTime();try{O.time=N;}catch(M){this.lastError=M;return N;}}return O.time;},stopEvent:function(M){this.stopPropagation(M);this.preventDefault(M);},stopPropagation:function(M){if(M.stopPropagation){M.stopPropagation();}else{M.cancelBubble=true;}},preventDefau!
 lt:function(M){if(M.preventDefault){M.preventDefault();}else{M.returnValue=false;}},getEvent:function(O,M){var N=O||window.event;if(!N){var P=this.getEvent.caller;while(P){N=P.arguments[0];if(N&&Event==N.constructor){break;}P=P.caller;}}return N;},getCharCode:function(N){var M=N.keyCode||N.charCode||0;if(YAHOO.env.ua.webkit&&(M in D)){M=D[M];}return M;},_getCacheIndex:function(Q,R,P){for(var O=0,N=I.length;O<N;O=O+1){var M=I[O];if(M&&M[this.FN]==P&&M[this.EL]==Q&&M[this.TYPE]==R){return O;}}return -1;},generateId:function(M){var N=M.id;if(!N){N="yuievtautoid-"+A;++A;M.id=N;}return N;},_isValidCollection:function(N){try{return(N&&typeof N!=="string"&&N.length&&!N.tagName&&!N.alert&&typeof N[0]!=="undefined");}catch(M){return false;}},elCache:{},getEl:function(M){return(typeof M==="string")?document.getElementById(M):M;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(N){if(!H){H=true;var M=YAHOO.util.Event;M._ready();M._tryPre!
 loadAttach();}},_ready:function(N){var M=YAHOO.util.Event;if(!!
 M.DOMRea
dy){M.DOMReady=true;M.DOMReadyEvent.fire();M._simpleRemove(document,"DOMContentLoaded",M._ready);}},_tryPreloadAttach:function(){if(F.length===0){C=0;if(this._interval){clearInterval(this._interval);this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var S=!H;if(!S){S=(C>0&&F.length>0);}var R=[];var T=function(V,W){var U=V;if(W.overrideContext){if(W.overrideContext===true){U=W.obj;}else{U=W.overrideContext;}}W.fn.call(U,W.obj);};var N,M,Q,P,O=[];for(N=0,M=F.length;N<M;N=N+1){Q=F[N];if(Q){P=this.getEl(Q.id);if(P){if(Q.checkReady){if(H||P.nextSibling||!S){O.push(Q);F[N]=null;}}else{T(P,Q);F[N]=null;}}else{R.push(Q);}}}for(N=0,M=O.length;N<M;N=N+1){Q=O[N];T(this.getEl(Q.id),Q);}C--;if(S){for(N=F.length-1;N>-1;N--){Q=F[N];if(!Q||!Q.id){F.splice(N,1);}}this.startInterval();}else{if(this._interval){clearInterval(this._interval);this._interval=null;}}this.locked=false;},purgeElement:function(Q,R,T){var!
  O=(YAHOO.lang.isString(Q))?this.getEl(Q):Q;var S=this.getListeners(O,T),P,M;if(S){for(P=S.length-1;P>-1;P--){var N=S[P];this.removeListener(O,N.type,N.fn);}}if(R&&O&&O.childNodes){for(P=0,M=O.childNodes.length;P<M;++P){this.purgeElement(O.childNodes[P],R,T);}}},getListeners:function(O,M){var R=[],N;if(!M){N=[I,J];}else{if(M==="unload"){N=[J];}else{N=[I];}}var T=(YAHOO.lang.isString(O))?this.getEl(O):O;for(var Q=0;Q<N.length;Q=Q+1){var V=N[Q];if(V){for(var S=0,U=V.length;S<U;++S){var P=V[S];if(P&&P[this.EL]===T&&(!M||M===P[this.TYPE])){R.push({type:P[this.TYPE],fn:P[this.FN],obj:P[this.OBJ],adjust:P[this.OVERRIDE],scope:P[this.ADJ_SCOPE],index:S});}}}}return(R.length)?R:null;},_unload:function(T){var N=YAHOO.util.Event,Q,P,O,S,R,U=J.slice(),M;for(Q=0,S=J.length;Q<S;++Q){O=U[Q];if(O){M=window;if(O[N.ADJ_SCOPE]){if(O[N.ADJ_SCOPE]===true){M=O[N.UNLOAD_OBJ];}else{M=O[N.ADJ_SCOPE];}}O[N.FN].call(M,N.getEvent(T,O[N.EL]),O[N.UNLOAD_OBJ]);U[Q]=null;}}O=null;M=null;J=null;if(I){for(!
 P=I.length-1;P>-1;P--){O=I[P];if(O){N.removeListener(O[N.EL],O!
 [N.TYPE]
,O[N.FN],P);}}O=null;}G=null;N._simpleRemove(window,"unload",N._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var M=document.documentElement,N=document.body;if(M&&(M.scrollTop||M.scrollLeft)){return[M.scrollTop,M.scrollLeft];}else{if(N){return[N.scrollTop,N.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(O,P,N,M){O.addEventListener(P,N,(M));};}else{if(window.attachEvent){return function(O,P,N,M){O.attachEvent("on"+P,N);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(O,P,N,M){O.removeEventListener(P,N,(M));};}else{if(window.detachEvent){return function(N,O,M){N.detachEvent("on"+O,M);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
 /* DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller */
-if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};
-var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}retur!
 n I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D!
 .fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyC!
 ode,J);b
reak;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.6.0",build:"1321"});YAHOO.register("yuiloader-dom-event", YAHOO, {version: "2.6.0", build: "1321"});
+if(EU.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);
+}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].overrideContext);}}}return I[G];},fireEvent:function(E,D,A,C){t!
 his.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);i!
 f(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){!
 G.fire(L
,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.7.0",build:"1799"});YAHOO.register("yuiloader-dom-event", YAHOO, {version: "2.7.0", build: "1799"});

Deleted: trunk/root/static/yui/yuitest/README
===================================================================
--- trunk/root/static/yui/yuitest/README	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/README	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,34 +0,0 @@
-YUI Library - YUITest - Release Notes
-
-2.3.0
-
-  * Beta release
-
-2.3.1
-
-  * No changes
-
-2.4.0
-
-  * Changed test running from synchronous to asynchronous.
-  * Added wait() and resume() methods to TestRunner to allow testing of asynchronous features.
-  
-2.5.0
- 
-  * Updated test results format to include ignored tests, result types, and names.
-  * Introduced test result formats in JSON and XML.
-  * Introduced TestReporter object.
-  * Removed beta tag.
-  
-2.5.1
-
-  * Fixed ObjectAssert.hasProperty() so that is correctly identifies declared properties with a value of undefined.
-  * Fixed DateAssert documentation errors.
-  * Added ability to include framework assertion message in addition to custom assertion message.
-  * Fixed Assert.isUndefined() documentation error.
-  
-2.6.0
-
-  * Added failsafe mechanism for wait() - will automatically fail a test after 10 seconds if resume() isn't called.
-  * Augmented wait() to allow a single argument, a timeout after which point the test should fail.
-  * Fixed small bug in TestManager.
\ No newline at end of file

Modified: trunk/root/static/yui/yuitest/assets/skins/sam/yuitest-skin.css
===================================================================
--- trunk/root/static/yui/yuitest/assets/skins/sam/yuitest-skin.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/assets/skins/sam/yuitest-skin.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 

Modified: trunk/root/static/yui/yuitest/assets/skins/sam/yuitest.css
===================================================================
--- trunk/root/static/yui/yuitest/assets/skins/sam/yuitest.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/assets/skins/sam/yuitest.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 

Modified: trunk/root/static/yui/yuitest/assets/testlogger.css
===================================================================
--- trunk/root/static/yui/yuitest/assets/testlogger.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/assets/testlogger.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,33 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-.yui-log {padding-top:3em;}
-/*
-.yui-log-container {position:relative;width:60em}
-.yui-log .yui-log-bd {height:auto; overflow:visible;}
-*/
-.yui-log-container {width:40em}
-.yui-log .yui-log-bd {height:60em}
-.yui-log .yui-log-btns {display:none;}
-.yui-log .yui-log-ft .yui-log-sourcefilters {visibility:hidden;}
-.yui-log .yui-log-hd {display:none;}
-.yui-log .yui-log-ft {position:absolute;top:0em;}
-
-.pass {
-    background-color: green;
-    font-weight: bold;
-    color: white;
-}
-.fail {
-    background-color: red;
-    font-weight: bold;
-    color: white;
-}
-.ignore {
-    background-color: #666;
-    font-weight: bold;
-    color: white;
-}
+.yui-log{padding-top:3em;}.yui-log-container{width:40em;}.yui-log .yui-log-bd{height:60em;}.yui-log .yui-log-btns{display:none;}.yui-log .yui-log-ft .yui-log-sourcefilters{visibility:hidden;}.yui-log .yui-log-hd{display:none;}.yui-log .yui-log-ft{position:absolute;top:0;}.pass{background-color:green;font-weight:bold;color:white;}.fail{background-color:red;font-weight:bold;color:white;}.ignore{background-color:#666;font-weight:bold;color:white;}
\ No newline at end of file

Modified: trunk/root/static/yui/yuitest/assets/yuitest-core.css
===================================================================
--- trunk/root/static/yui/yuitest/assets/yuitest-core.css	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/assets/yuitest-core.css	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,7 +1,7 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 

Modified: trunk/root/static/yui/yuitest/yuitest-debug.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -3367,4 +3367,4 @@
 
 };
 
-YAHOO.register("yuitest", YAHOO.tool.TestRunner, {version: "2.6.0", build: "1321"});
+YAHOO.register("yuitest", YAHOO.tool.TestRunner, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/yuitest/yuitest-min.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,11 +1,11 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null!
 ,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST!
 _CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUI!
 TE_COMPL
ETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new !
 B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.f!
 irstChild){this._cur=this._cur.firstChild;}else{if(this._cur.n!
 ext){thi
s._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur.results.duration;this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){va!
 r C=this._cur;var H=C.testObject;var E=C.parent.testObject;if(E.__yui_wait){clearTimeout(E.__yui_wait);delete E.__yui_wait;}var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){E.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return ;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);
-F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.T!
 estRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root.results.duration=(new Date()).valueOf();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values!
  should not be equal."),A);}},areNotSame:function(A,C,B){if(A=!
 ==C){thr
ow new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.Unexpe!
 ctedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B!
 ,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){thro!
 w new YA
HOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expe!
 cted=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");
-this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContai!
 n:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return ;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._fo!
 rmatMessage(C,"Values in position "+B+" are not equal."));}},i!
 temsAreE
quivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));r!
 eturn ;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of m!
 onth should be equal."));}else{throw new TypeError("DateAssert!
 .datesAr
eEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("util");YAHOO.util.UserAction={simulateKeyEvent:function(F,J,E,C,L,B,A,K,H,N,M){F=YAHOO.util.Dom.get(F);if(!F){throw new Error("simulateKeyEvent(): Invalid target.");}if(YAHOO.lang.isString(J)){J=J.toLowerCase();switch(J){case"keyup":case"keydown":case"keypress":break;case"textevent":J="keypress";break;default:throw new Error("simulateKeyEvent(): Event type '"+J+"' not supported.");}}else{throw new Error("simulateKeyEvent(): Event type mus!
 t be a string.");}if(!YAHOO.lang.isBoolean(E)){E=true;}if(!YAHOO.lang.isBoolean(C)){C=true;}if(!YAHOO.lang.isObject(L)){L=window;}if(!YAHOO.lang.isBoolean(B)){B=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(K)){K=false;}if(!YAHOO.lang.isBoolean(H)){H=false;}if(!YAHOO.lang.isNumber(N)){N=0;}if(!YAHOO.lang.isNumber(M)){M=0;}var I=null;if(YAHOO.lang.isFunction(document.createEvent)){try{I=document.createEvent("KeyEvents");I.initKeyEvent(J,E,C,L,B,A,K,H,N,M);}catch(G){try{I=document.createEvent("Events");}catch(D){I=document.createEvent("UIEvents");}finally{I.initEvent(J,E,C);I.view=L;I.altKey=A;I.ctrlKey=B;I.shiftKey=K;I.metaKey=H;I.keyCode=N;I.charCode=M;}}F.dispatchEvent(I);}else{if(YAHOO.lang.isObject(document.createEventObject)){I=document.createEventObject();I.bubbles=E;I.cancelable=C;I.view=L;I.ctrlKey=B;I.altKey=A;I.shiftKey=K;I.metaKey=H;I.keyCode=(M>0)?M:N;F.fireEvent("on"+J,I);
-}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}}},simulateMouseEvent:function(K,P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L){K=YAHOO.util.Dom.get(K);if(!K){throw new Error("simulateMouseEvent(): Invalid target.");}if(YAHOO.lang.isString(P)){P=P.toLowerCase();switch(P){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+P+"' not supported.");}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(H)){H=true;}if(!YAHOO.lang.isBoolean(E)){E=(P!="mousemove");}if(!YAHOO.lang.isObject(Q)){Q=window;}if(!YAHOO.lang.isNumber(J)){J=1;}if(!YAHOO.lang.isNumber(G)){G=0;}if(!YAHOO.lang.isNumber(F)){F=0;}if(!YAHOO.lang.isNumber(D)){D=0;}if(!YAHOO.lang.isNumber(B)){B=0;}if(!YAHOO.lang.isBoolean(C)){C=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(O)){O=false;}if(!YAHOO.lang.isBool!
 ean(M)){M=false;}if(!YAHOO.lang.isNumber(I)){I=0;}var N=null;if(YAHOO.lang.isFunction(document.createEvent)){N=document.createEvent("MouseEvents");if(N.initMouseEvent){N.initMouseEvent(P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L);}else{N=document.createEvent("UIEvents");N.initEvent(P,H,E);N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;N.button=I;N.relatedTarget=L;}if(L&&!N.relatedTarget){if(P=="mouseout"){N.toElement=L;}else{if(P=="mouseover"){N.fromElement=L;}}}K.dispatchEvent(N);}else{if(YAHOO.lang.isObject(document.createEventObject)){N=document.createEventObject();N.bubbles=H;N.cancelable=E;N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;switch(I){case 0:N.button=1;break;case 1:N.button=4;break;case 2:break;default:N.button=0;}N.relatedTarget=L;K.fireEvent("on"+P,N);}else{throw new Error("simulateMouseEvent(): No event simulation framework present."!
 );}}},fireMouseEvent:function(C,B,A){A=A||{};this.simulateMous!
 eEvent(C
,B,A.bubbles,A.cancelable,A.view,A.detail,A.screenX,A.screenY,A.clientX,A.clientY,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.button,A.relatedTarget);},click:function(B,A){this.fireMouseEvent(B,"click",A);},dblclick:function(B,A){this.fireMouseEvent(B,"dblclick",A);},mousedown:function(B,A){this.fireMouseEvent(B,"mousedown",A);},mousemove:function(B,A){this.fireMouseEvent(B,"mousemove",A);},mouseout:function(B,A){this.fireMouseEvent(B,"mouseout",A);},mouseover:function(B,A){this.fireMouseEvent(B,"mouseover",A);},mouseup:function(B,A){this.fireMouseEvent(B,"mouseup",A);},fireKeyEvent:function(B,C,A){A=A||{};this.simulateKeyEvent(C,B,A.bubbles,A.cancelable,A.view,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.keyCode,A.charCode);},keydown:function(B,A){this.fireKeyEvent("keydown",B,A);},keypress:function(B,A){this.fireKeyEvent("keypress",B,A);},keyup:function(B,A){this.fireKeyEvent("keyup",B,A);}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",T!
 EST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;B.duration+=A.duration;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:f!
 unction(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHO!
 O.tool.T
estManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.parentWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",duration:0,failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId)!
 ;}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return"<pre><p><span class=\""+A+"\">"+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);
-A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMe!
 ssage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C="Test suite \""+D.testSuite.name+"\" started.";B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C="Test suite \""+D.testSuite.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C="Test case \""+D.testCase.name+"\" started.";B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C="Test case \""+D.testCase.name+"\" completed.\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");YAHOO.tool.TestFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.TestFormat.XML=function(C){var A=YAHOO.lang;var B="<"+C.type+" name=\""+C.name.replace(/"/g,!
 """).replace(/'/g,"'")+"\"";if(A.isNumber(C.duration!
 )){B+=" 
duration=\""+C.duration+"\"";}if(C.type=="test"){B+=" result=\""+C.result+"\" message=\""+C.message+"\">";}else{B+=" passed=\""+C.passed+"\" failed=\""+C.failed+"\" ignored=\""+C.ignored+"\" total=\""+C.total+"\">";for(var D in C){if(A.hasOwnProperty(C,D)&&A.isObject(C[D])&&!A.isArray(C[D])){B+=arguments.callee(C[D]);}}}B+="</"+C.type+">";return B;};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,_convertToISOString:function(A){function B(C){return C<10?"0"+C:C;}return A.getUTCFullYear()+"-"+B(A.getUTCMonth()+1)+"-"+B(A.getUTCDate())+"T"+B(A.getUTCHours())+":"+B(A.getUTCMinutes())+":"+B(A.getUTCSeconds())+"Z";},addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._for!
 m);this._form=null;}if(this._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement("<iframe name=\"yuiTestTarget\" />");}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=this._convertToISOStri!
 ng(new Date());for(var B in this._fields){if(YAHOO.lang.hasOwn!
 Property
(this._fields,B)&&typeof this._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement("<input name=\""+B+"\" >");}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null!
 ,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST!
 _CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUI!
 TE_COMPL
ETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new !
 B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.f!
 irstChild){this._cur=this._cur.firstChild;}else{if(this._cur.n!
 ext){thi
s._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur.results.duration;this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){va!
 r C=this._cur;var H=C.testObject;var E=C.parent.testObject;if(E.__yui_wait){clearTimeout(E.__yui_wait);delete E.__yui_wait;}var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){E.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);
+F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.T!
 estRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root.results.duration=(new Date()).valueOf();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values!
  should not be equal."),A);}},areNotSame:function(A,C,B){if(A=!
 ==C){thr
ow new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.Unexpe!
 ctedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B!
 ,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){thro!
 w new YA
HOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expe!
 cted=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");
+this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContai!
 n:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._for!
 matMessage(C,"Values in position "+B+" are not equal."));}},it!
 emsAreEq
uivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));re!
 turn;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of mon!
 th should be equal."));}else{throw new TypeError("DateAssert.d!
 atesAreE
qual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.namespace("util");YAHOO.util.UserAction={simulateKeyEvent:function(F,J,E,C,L,B,A,K,H,N,M){F=YAHOO.util.Dom.get(F);if(!F){throw new Error("simulateKeyEvent(): Invalid target.");}if(YAHOO.lang.isString(J)){J=J.toLowerCase();switch(J){case"keyup":case"keydown":case"keypress":break;case"textevent":J="keypress";break;default:throw new Error("simulateKeyEvent(): Event type '"+J+"' not supported.");}}else{throw new Error("simulateKeyEvent(): Event type must !
 be a string.");}if(!YAHOO.lang.isBoolean(E)){E=true;}if(!YAHOO.lang.isBoolean(C)){C=true;}if(!YAHOO.lang.isObject(L)){L=window;}if(!YAHOO.lang.isBoolean(B)){B=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(K)){K=false;}if(!YAHOO.lang.isBoolean(H)){H=false;}if(!YAHOO.lang.isNumber(N)){N=0;}if(!YAHOO.lang.isNumber(M)){M=0;}var I=null;if(YAHOO.lang.isFunction(document.createEvent)){try{I=document.createEvent("KeyEvents");I.initKeyEvent(J,E,C,L,B,A,K,H,N,M);}catch(G){try{I=document.createEvent("Events");}catch(D){I=document.createEvent("UIEvents");}finally{I.initEvent(J,E,C);I.view=L;I.altKey=A;I.ctrlKey=B;I.shiftKey=K;I.metaKey=H;I.keyCode=N;I.charCode=M;}}F.dispatchEvent(I);}else{if(YAHOO.lang.isObject(document.createEventObject)){I=document.createEventObject();I.bubbles=E;I.cancelable=C;I.view=L;I.ctrlKey=B;I.altKey=A;I.shiftKey=K;I.metaKey=H;I.keyCode=(M>0)?M:N;F.fireEvent("on"+J,I);
+}else{throw new Error("simulateKeyEvent(): No event simulation framework present.");}}},simulateMouseEvent:function(K,P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L){K=YAHOO.util.Dom.get(K);if(!K){throw new Error("simulateMouseEvent(): Invalid target.");}if(YAHOO.lang.isString(P)){P=P.toLowerCase();switch(P){case"mouseover":case"mouseout":case"mousedown":case"mouseup":case"click":case"dblclick":case"mousemove":break;default:throw new Error("simulateMouseEvent(): Event type '"+P+"' not supported.");}}else{throw new Error("simulateMouseEvent(): Event type must be a string.");}if(!YAHOO.lang.isBoolean(H)){H=true;}if(!YAHOO.lang.isBoolean(E)){E=(P!="mousemove");}if(!YAHOO.lang.isObject(Q)){Q=window;}if(!YAHOO.lang.isNumber(J)){J=1;}if(!YAHOO.lang.isNumber(G)){G=0;}if(!YAHOO.lang.isNumber(F)){F=0;}if(!YAHOO.lang.isNumber(D)){D=0;}if(!YAHOO.lang.isNumber(B)){B=0;}if(!YAHOO.lang.isBoolean(C)){C=false;}if(!YAHOO.lang.isBoolean(A)){A=false;}if(!YAHOO.lang.isBoolean(O)){O=false;}if(!YAHOO.lang.isBool!
 ean(M)){M=false;}if(!YAHOO.lang.isNumber(I)){I=0;}var N=null;if(YAHOO.lang.isFunction(document.createEvent)){N=document.createEvent("MouseEvents");if(N.initMouseEvent){N.initMouseEvent(P,H,E,Q,J,G,F,D,B,C,A,O,M,I,L);}else{N=document.createEvent("UIEvents");N.initEvent(P,H,E);N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;N.button=I;N.relatedTarget=L;}if(L&&!N.relatedTarget){if(P=="mouseout"){N.toElement=L;}else{if(P=="mouseover"){N.fromElement=L;}}}K.dispatchEvent(N);}else{if(YAHOO.lang.isObject(document.createEventObject)){N=document.createEventObject();N.bubbles=H;N.cancelable=E;N.view=Q;N.detail=J;N.screenX=G;N.screenY=F;N.clientX=D;N.clientY=B;N.ctrlKey=C;N.altKey=A;N.metaKey=M;N.shiftKey=O;switch(I){case 0:N.button=1;break;case 1:N.button=4;break;case 2:break;default:N.button=0;}N.relatedTarget=L;K.fireEvent("on"+P,N);}else{throw new Error("simulateMouseEvent(): No event simulation framework present."!
 );}}},fireMouseEvent:function(C,B,A){A=A||{};this.simulateMous!
 eEvent(C
,B,A.bubbles,A.cancelable,A.view,A.detail,A.screenX,A.screenY,A.clientX,A.clientY,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.button,A.relatedTarget);},click:function(B,A){this.fireMouseEvent(B,"click",A);},dblclick:function(B,A){this.fireMouseEvent(B,"dblclick",A);},mousedown:function(B,A){this.fireMouseEvent(B,"mousedown",A);},mousemove:function(B,A){this.fireMouseEvent(B,"mousemove",A);},mouseout:function(B,A){this.fireMouseEvent(B,"mouseout",A);},mouseover:function(B,A){this.fireMouseEvent(B,"mouseover",A);},mouseup:function(B,A){this.fireMouseEvent(B,"mouseup",A);},fireKeyEvent:function(B,C,A){A=A||{};this.simulateKeyEvent(C,B,A.bubbles,A.cancelable,A.view,A.ctrlKey,A.altKey,A.shiftKey,A.metaKey,A.keyCode,A.charCode);},keydown:function(B,A){this.fireKeyEvent("keydown",B,A);},keypress:function(B,A){this.fireKeyEvent("keypress",B,A);},keyup:function(B,A){this.fireKeyEvent("keyup",B,A);}};YAHOO.namespace("tool");YAHOO.tool.TestManager={TEST_PAGE_BEGIN_EVENT:"testpagebegin",T!
 EST_PAGE_COMPLETE_EVENT:"testpagecomplete",TEST_MANAGER_BEGIN_EVENT:"testmanagerbegin",TEST_MANAGER_COMPLETE_EVENT:"testmanagercomplete",_curPage:null,_frame:null,_logger:null,_timeoutId:0,_pages:[],_results:null,_handleTestRunnerComplete:function(A){this.fireEvent(this.TEST_PAGE_COMPLETE_EVENT,{page:this._curPage,results:A.results});this._processResults(this._curPage,A.results);this._logger.clearTestRunner();if(this._pages.length){this._timeoutId=setTimeout(function(){YAHOO.tool.TestManager._run();},1000);}else{this.fireEvent(this.TEST_MANAGER_COMPLETE_EVENT,this._results);}},_processResults:function(C,A){var B=this._results;B.passed+=A.passed;B.failed+=A.failed;B.ignored+=A.ignored;B.total+=A.total;B.duration+=A.duration;if(A.failed){B.failedPages.push(C);}else{B.passedPages.push(C);}A.name=C;A.type="page";B[C]=A;},_run:function(){this._curPage=this._pages.shift();this.fireEvent(this.TEST_PAGE_BEGIN_EVENT,this._curPage);this._frame.location.replace(this._curPage);},load:f!
 unction(){if(parent.YAHOO.tool.TestManager!==this){parent.YAHO!
 O.tool.T
estManager.load();}else{if(this._frame){var A=this._frame.YAHOO.tool.TestRunner;this._logger.setTestRunner(A);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerComplete,this,true);A.run();}}},setPages:function(A){this._pages=A;},start:function(){if(!this._initialized){this.createEvent(this.TEST_PAGE_BEGIN_EVENT);this.createEvent(this.TEST_PAGE_COMPLETE_EVENT);this.createEvent(this.TEST_MANAGER_BEGIN_EVENT);this.createEvent(this.TEST_MANAGER_COMPLETE_EVENT);if(!this._frame){var A=document.createElement("iframe");A.style.visibility="hidden";A.style.position="absolute";document.body.appendChild(A);this._frame=A.contentWindow||A.contentDocument.parentWindow;}if(!this._logger){this._logger=new YAHOO.tool.TestLogger();}this._initialized=true;}this._results={passed:0,failed:0,ignored:0,total:0,type:"report",name:"YUI Test Results",duration:0,failedPages:[],passedPages:[]};this.fireEvent(this.TEST_MANAGER_BEGIN_EVENT,null);this._run();},stop:function(){clearTimeout(this._timeoutId)!
 ;}};YAHOO.lang.augmentObject(YAHOO.tool.TestManager,YAHOO.util.EventProvider.prototype);YAHOO.namespace("tool");YAHOO.tool.TestLogger=function(B,A){YAHOO.tool.TestLogger.superclass.constructor.call(this,B,A);this.init();};YAHOO.lang.extend(YAHOO.tool.TestLogger,YAHOO.widget.LogReader,{footerEnabled:true,newestOnTop:false,formatMsg:function(B){var A=B.category;var C=this.html2Text(B.msg);return'<pre><p><span class="'+A+'">'+A.toUpperCase()+"</span> "+C+"</p></pre>";},init:function(){if(YAHOO.tool.TestRunner){this.setTestRunner(YAHOO.tool.TestRunner);}this.hideSource("global");this.hideSource("LogReader");this.hideCategory("warn");this.hideCategory("window");this.hideCategory("time");this.clearConsole();},clearTestRunner:function(){if(this._runner){this._runner.unsubscribeAll();this._runner=null;}},setTestRunner:function(A){if(this._runner){this.clearTestRunner();}this._runner=A;A.subscribe(A.TEST_PASS_EVENT,this._handleTestRunnerEvent,this,true);
+A.subscribe(A.TEST_FAIL_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_IGNORE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_SUITE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_BEGIN_EVENT,this._handleTestRunnerEvent,this,true);A.subscribe(A.TEST_CASE_COMPLETE_EVENT,this._handleTestRunnerEvent,this,true);},_handleTestRunnerEvent:function(D){var A=YAHOO.tool.TestRunner;var C="";var B="";switch(D.type){case A.BEGIN_EVENT:C="Testing began at "+(new Date()).toString()+".";B="info";break;case A.COMPLETE_EVENT:C="Testing completed at "+(new Date()).toString()+".\nPassed:"+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_FAIL_EVENT:C=D.testName+": "+D.error.getMe!
 ssage();B="fail";break;case A.TEST_IGNORE_EVENT:C=D.testName+": ignored.";B="ignore";break;case A.TEST_PASS_EVENT:C=D.testName+": passed.";B="pass";break;case A.TEST_SUITE_BEGIN_EVENT:C='Test suite "'+D.testSuite.name+'" started.';B="info";break;case A.TEST_SUITE_COMPLETE_EVENT:C='Test suite "'+D.testSuite.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;case A.TEST_CASE_BEGIN_EVENT:C='Test case "'+D.testCase.name+'" started.';B="info";break;case A.TEST_CASE_COMPLETE_EVENT:C='Test case "'+D.testCase.name+'" completed.\nPassed:'+D.results.passed+" Failed:"+D.results.failed+" Total:"+D.results.total;B="info";break;default:C="Unexpected event "+D.type;C="info";}YAHOO.log(C,B,"TestRunner");}});YAHOO.namespace("tool.TestFormat");YAHOO.tool.TestFormat.JSON=function(A){return YAHOO.lang.JSON.stringify(A);};YAHOO.tool.TestFormat.XML=function(C){var A=YAHOO.lang;var B="<"+C.type+' name="'+C.name.replace(/"/g,""")!
 .replace(/'/g,"'")+'"';if(A.isNumber(C.duration)){B+=' du!
 ration="
'+C.duration+'"';}if(C.type=="test"){B+=' result="'+C.result+'" message="'+C.message+'">';}else{B+=' passed="'+C.passed+'" failed="'+C.failed+'" ignored="'+C.ignored+'" total="'+C.total+'">';for(var D in C){if(A.hasOwnProperty(C,D)&&A.isObject(C[D])&&!A.isArray(C[D])){B+=arguments.callee(C[D]);}}}B+="</"+C.type+">";return B;};YAHOO.namespace("tool");YAHOO.tool.TestReporter=function(A,B){this.url=A;this.format=B||YAHOO.tool.TestFormat.XML;this._fields=new Object();this._form=null;this._iframe=null;};YAHOO.tool.TestReporter.prototype={constructor:YAHOO.tool.TestReporter,_convertToISOString:function(A){function B(C){return C<10?"0"+C:C;}return A.getUTCFullYear()+"-"+B(A.getUTCMonth()+1)+"-"+B(A.getUTCDate())+"T"+B(A.getUTCHours())+":"+B(A.getUTCMinutes())+":"+B(A.getUTCSeconds())+"Z";},addField:function(A,B){this._fields[A]=B;},clearFields:function(){this._fields=new Object();},destroy:function(){if(this._form){this._form.parentNode.removeChild(this._form);this._form=null;}if(t!
 his._iframe){this._iframe.parentNode.removeChild(this._iframe);this._iframe=null;}this._fields=null;},report:function(A){if(!this._form){this._form=document.createElement("form");this._form.method="post";this._form.style.visibility="hidden";this._form.style.position="absolute";this._form.style.top=0;document.body.appendChild(this._form);if(YAHOO.env.ua.ie){this._iframe=document.createElement('<iframe name="yuiTestTarget" />');}else{this._iframe=document.createElement("iframe");this._iframe.name="yuiTestTarget";}this._iframe.src="javascript:false";this._iframe.style.visibility="hidden";this._iframe.style.position="absolute";this._iframe.style.top=0;document.body.appendChild(this._iframe);this._form.target="yuiTestTarget";}this._form.action=this.url;while(this._form.hasChildNodes()){this._form.removeChild(this._form.lastChild);}this._fields.results=this.format(A);this._fields.useragent=navigator.userAgent;this._fields.timestamp=this._convertToISOString(new Date());for(var B i!
 n this._fields){if(YAHOO.lang.hasOwnProperty(this._fields,B)&&!
 typeof t
his._fields[B]!="function"){if(YAHOO.env.ua.ie){input=document.createElement('<input name="'+B+'" >');}else{input=document.createElement("input");input.name=B;}input.type="hidden";input.value=this._fields[B];this._form.appendChild(input);}}delete this._fields.results;delete this._fields.useragent;delete this._fields.timestamp;if(arguments[1]!==false){this._form.submit();}}};YAHOO.register("yuitest",YAHOO.tool.TestRunner,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/yuitest/yuitest.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -3367,4 +3367,4 @@
 
 };
 
-YAHOO.register("yuitest", YAHOO.tool.TestRunner, {version: "2.6.0", build: "1321"});
+YAHOO.register("yuitest", YAHOO.tool.TestRunner, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/yuitest/yuitest_core-debug.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest_core-debug.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest_core-debug.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -1988,4 +1988,4 @@
     
 };
 
-YAHOO.register("yuitest_core", YAHOO.tool.TestRunner, {version: "2.6.0", build: "1321"});
+YAHOO.register("yuitest_core", YAHOO.tool.TestRunner, {version: "2.7.0", build: "1799"});

Modified: trunk/root/static/yui/yuitest/yuitest_core-min.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest_core-min.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest_core-min.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,9 +1,9 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
-YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null!
 ,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST!
 _CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUI!
 TE_COMPL
ETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new !
 B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.f!
 irstChild){this._cur=this._cur.firstChild;}else{if(this._cur.n!
 ext){thi
s._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur.results.duration;this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){va!
 r C=this._cur;var H=C.testObject;var E=C.parent.testObject;if(E.__yui_wait){clearTimeout(E.__yui_wait);delete E.__yui_wait;}var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){E.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return ;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);
-F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.T!
 estRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root.results.duration=(new Date()).valueOf();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values!
  should not be equal."),A);}},areNotSame:function(A,C,B){if(A=!
 ==C){thr
ow new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.Unexpe!
 ctedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B!
 ,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){thro!
 w new YA
HOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expe!
 cted=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");
-this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContai!
 n:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return ;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._fo!
 rmatMessage(C,"Values in position "+B+" are not equal."));}},i!
 temsAreE
quivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));r!
 eturn ;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of m!
 onth should be equal."));}else{throw new TypeError("DateAssert!
 .datesAr
eEqual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.register("yuitest_core",YAHOO.tool.TestRunner,{version:"2.6.0",build:"1321"});
\ No newline at end of file
+YAHOO.namespace("tool");(function(){var A=0;YAHOO.tool.TestCase=function(B){this._should={};for(var C in B){this[C]=B[C];}if(!YAHOO.lang.isString(this.name)){this.name="testCase"+(A++);}};YAHOO.tool.TestCase.prototype={resume:function(B){YAHOO.tool.TestRunner.resume(B);},wait:function(D,C){var B=arguments;if(YAHOO.lang.isFunction(B[0])){throw new YAHOO.tool.TestCase.Wait(B[0],B[1]);}else{throw new YAHOO.tool.TestCase.Wait(function(){YAHOO.util.Assert.fail("Timeout: wait() called but resume() never called.");},(YAHOO.lang.isNumber(B[0])?B[0]:10000));}},setUp:function(){},tearDown:function(){}};YAHOO.tool.TestCase.Wait=function(C,B){this.segment=(YAHOO.lang.isFunction(C)?C:null);this.delay=(YAHOO.lang.isNumber(B)?B:0);};})();YAHOO.namespace("tool");YAHOO.tool.TestSuite=function(A){this.name="";this.items=[];if(YAHOO.lang.isString(A)){this.name=A;}else{if(YAHOO.lang.isObject(A)){YAHOO.lang.augmentObject(this,A,true);}}if(this.name===""){this.name=YAHOO.util.Dom.generateId(null!
 ,"testSuite");}};YAHOO.tool.TestSuite.prototype={add:function(A){if(A instanceof YAHOO.tool.TestSuite||A instanceof YAHOO.tool.TestCase){this.items.push(A);}},setUp:function(){},tearDown:function(){}};YAHOO.namespace("tool");YAHOO.tool.TestRunner=(function(){function B(C){this.testObject=C;this.firstChild=null;this.lastChild=null;this.parent=null;this.next=null;this.results={passed:0,failed:0,total:0,ignored:0};if(C instanceof YAHOO.tool.TestSuite){this.results.type="testsuite";this.results.name=C.name;}else{if(C instanceof YAHOO.tool.TestCase){this.results.type="testcase";this.results.name=C.name;}}}B.prototype={appendChild:function(C){var D=new B(C);if(this.firstChild===null){this.firstChild=this.lastChild=D;}else{this.lastChild.next=D;this.lastChild=D;}D.parent=this;return D;}};function A(){A.superclass.constructor.apply(this,arguments);this.masterSuite=new YAHOO.tool.TestSuite("YUI Test Results");this._cur=null;this._root=null;var D=[this.TEST_CASE_BEGIN_EVENT,this.TEST!
 _CASE_COMPLETE_EVENT,this.TEST_SUITE_BEGIN_EVENT,this.TEST_SUI!
 TE_COMPL
ETE_EVENT,this.TEST_PASS_EVENT,this.TEST_FAIL_EVENT,this.TEST_IGNORE_EVENT,this.COMPLETE_EVENT,this.BEGIN_EVENT];for(var C=0;C<D.length;C++){this.createEvent(D[C],{scope:this});}}YAHOO.lang.extend(A,YAHOO.util.EventProvider,{TEST_CASE_BEGIN_EVENT:"testcasebegin",TEST_CASE_COMPLETE_EVENT:"testcasecomplete",TEST_SUITE_BEGIN_EVENT:"testsuitebegin",TEST_SUITE_COMPLETE_EVENT:"testsuitecomplete",TEST_PASS_EVENT:"pass",TEST_FAIL_EVENT:"fail",TEST_IGNORE_EVENT:"ignore",COMPLETE_EVENT:"complete",BEGIN_EVENT:"begin",_addTestCaseToTestTree:function(C,D){var E=C.appendChild(D);for(var F in D){if(F.indexOf("test")===0&&YAHOO.lang.isFunction(D[F])){E.appendChild(F);}}},_addTestSuiteToTestTree:function(C,F){var E=C.appendChild(F);for(var D=0;D<F.items.length;D++){if(F.items[D] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(E,F.items[D]);}else{if(F.items[D] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(E,F.items[D]);}}}},_buildTestTree:function(){this._root=new !
 B(this.masterSuite);this._cur=this._root;for(var C=0;C<this.masterSuite.items.length;C++){if(this.masterSuite.items[C] instanceof YAHOO.tool.TestSuite){this._addTestSuiteToTestTree(this._root,this.masterSuite.items[C]);}else{if(this.masterSuite.items[C] instanceof YAHOO.tool.TestCase){this._addTestCaseToTestTree(this._root,this.masterSuite.items[C]);}}}},_handleTestObjectComplete:function(C){if(YAHOO.lang.isObject(C.testObject)){C.parent.results.passed+=C.results.passed;C.parent.results.failed+=C.results.failed;C.parent.results.total+=C.results.total;C.parent.results.ignored+=C.results.ignored;C.parent.results[C.testObject.name]=C.results;if(C.testObject instanceof YAHOO.tool.TestSuite){C.testObject.tearDown();this.fireEvent(this.TEST_SUITE_COMPLETE_EVENT,{testSuite:C.testObject,results:C.results});}else{if(C.testObject instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_COMPLETE_EVENT,{testCase:C.testObject,results:C.results});}}}},_next:function(){if(this._cur.f!
 irstChild){this._cur=this._cur.firstChild;}else{if(this._cur.n!
 ext){thi
s._cur=this._cur.next;}else{while(this._cur&&!this._cur.next&&this._cur!==this._root){this._handleTestObjectComplete(this._cur);this._cur=this._cur.parent;}if(this._cur==this._root){this._cur.results.type="report";this._cur.results.timestamp=(new Date()).toLocaleString();this._cur.results.duration=(new Date())-this._cur.results.duration;this.fireEvent(this.COMPLETE_EVENT,{results:this._cur.results});this._cur=null;}else{this._handleTestObjectComplete(this._cur);this._cur=this._cur.next;}}}return this._cur;},_run:function(){var E=false;var D=this._next();if(D!==null){var C=D.testObject;if(YAHOO.lang.isObject(C)){if(C instanceof YAHOO.tool.TestSuite){this.fireEvent(this.TEST_SUITE_BEGIN_EVENT,{testSuite:C});C.setUp();}else{if(C instanceof YAHOO.tool.TestCase){this.fireEvent(this.TEST_CASE_BEGIN_EVENT,{testCase:C});}}if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}}else{this._runTest(D);}}},_resumeTest:function(G){va!
 r C=this._cur;var H=C.testObject;var E=C.parent.testObject;if(E.__yui_wait){clearTimeout(E.__yui_wait);delete E.__yui_wait;}var K=(E._should.fail||{})[H];var D=(E._should.error||{})[H];var F=false;var I=null;try{G.apply(E);if(K){I=new YAHOO.util.ShouldFail();F=true;}else{if(D){I=new YAHOO.util.ShouldError();F=true;}}}catch(J){if(J instanceof YAHOO.util.AssertionError){if(!K){I=J;F=true;}}else{if(J instanceof YAHOO.tool.TestCase.Wait){if(YAHOO.lang.isFunction(J.segment)){if(YAHOO.lang.isNumber(J.delay)){if(typeof setTimeout!="undefined"){E.__yui_wait=setTimeout(function(){YAHOO.tool.TestRunner._resumeTest(J.segment);},J.delay);}else{throw new Error("Asynchronous tests not supported in this environment.");}}}return;}else{if(!D){I=new YAHOO.util.UnexpectedError(J);F=true;}else{if(YAHOO.lang.isString(D)){if(J.message!=D){I=new YAHOO.util.UnexpectedError(J);F=true;}}else{if(YAHOO.lang.isFunction(D)){if(!(J instanceof D)){I=new YAHOO.util.UnexpectedError(J);
+F=true;}}else{if(YAHOO.lang.isObject(D)){if(!(J instanceof D.constructor)||J.message!=D.message){I=new YAHOO.util.UnexpectedError(J);F=true;}}}}}}}}if(F){this.fireEvent(this.TEST_FAIL_EVENT,{testCase:E,testName:H,error:I});}else{this.fireEvent(this.TEST_PASS_EVENT,{testCase:E,testName:H});}E.tearDown();C.parent.results[H]={result:F?"fail":"pass",message:I?I.getMessage():"Test passed",type:"test",name:H};if(F){C.parent.results.failed++;}else{C.parent.results.passed++;}C.parent.results.total++;if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.TestRunner._run();},0);}else{this._run();}},_runTest:function(F){var C=F.testObject;var D=F.parent.testObject;var G=D[C];var E=(D._should.ignore||{})[C];if(E){F.parent.results[C]={result:"ignore",message:"Test ignored",type:"test",name:C};F.parent.results.ignored++;F.parent.results.total++;this.fireEvent(this.TEST_IGNORE_EVENT,{testCase:D,testName:C});if(typeof setTimeout!="undefined"){setTimeout(function(){YAHOO.tool.T!
 estRunner._run();},0);}else{this._run();}}else{D.setUp();this._resumeTest(G);}},fireEvent:function(C,D){D=D||{};D.type=C;A.superclass.fireEvent.call(this,C,D);},add:function(C){this.masterSuite.add(C);},clear:function(){this.masterSuite.items=[];},resume:function(C){this._resumeTest(C||function(){});},run:function(C){var D=YAHOO.tool.TestRunner;D._buildTestTree();D._root.results.duration=(new Date()).valueOf();D.fireEvent(D.BEGIN_EVENT);D._run();}});return new A();})();YAHOO.namespace("util");YAHOO.util.Assert={_formatMessage:function(B,A){var C=B;if(YAHOO.lang.isString(B)&&B.length>0){return YAHOO.lang.substitute(B,{message:A});}else{return A;}},fail:function(A){throw new YAHOO.util.AssertionError(this._formatMessage(A,"Test force-failed."));},areEqual:function(B,C,A){if(B!=C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be equal."),B,C);}},areNotEqual:function(A,C,B){if(A==C){throw new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values!
  should not be equal."),A);}},areNotSame:function(A,C,B){if(A=!
 ==C){thr
ow new YAHOO.util.UnexpectedValue(this._formatMessage(B,"Values should not be the same."),A);}},areSame:function(B,C,A){if(B!==C){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Values should be the same."),B,C);}},isFalse:function(B,A){if(false!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be false."),false,B);}},isTrue:function(B,A){if(true!==B){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be true."),true,B);}},isNaN:function(B,A){if(!isNaN(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be NaN."),NaN,B);}},isNotNaN:function(B,A){if(isNaN(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be NaN."),NaN);}},isNotNull:function(B,A){if(YAHOO.lang.isNull(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Values should not be null."),null);}},isNotUndefined:function(B,A){if(YAHOO.lang.isUndefined(B)){throw new YAHOO.util.Unexpe!
 ctedValue(this._formatMessage(A,"Value should not be undefined."),undefined);}},isNull:function(B,A){if(!YAHOO.lang.isNull(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be null."),null,B);}},isUndefined:function(B,A){if(!YAHOO.lang.isUndefined(B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value should be undefined."),undefined,B);}},isArray:function(B,A){if(!YAHOO.lang.isArray(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an array."),B);}},isBoolean:function(B,A){if(!YAHOO.lang.isBoolean(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a Boolean."),B);}},isFunction:function(B,A){if(!YAHOO.lang.isFunction(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a function."),B);}},isInstanceOf:function(B,C,A){if(!(C instanceof B)){throw new YAHOO.util.ComparisonFailure(this._formatMessage(A,"Value isn't an instance of expected type."),B!
 ,C);}},isNumber:function(B,A){if(!YAHOO.lang.isNumber(B)){thro!
 w new YA
HOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a number."),B);}},isObject:function(B,A){if(!YAHOO.lang.isObject(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be an object."),B);}},isString:function(B,A){if(!YAHOO.lang.isString(B)){throw new YAHOO.util.UnexpectedValue(this._formatMessage(A,"Value should be a string."),B);}},isTypeOf:function(A,C,B){if(typeof C!=A){throw new YAHOO.util.ComparisonFailure(this._formatMessage(B,"Value should be of type "+expected+"."),expected,typeof actual);}}};YAHOO.util.AssertionError=function(A){arguments.callee.superclass.constructor.call(this,A);this.message=A;this.name="AssertionError";};YAHOO.lang.extend(YAHOO.util.AssertionError,Error,{getMessage:function(){return this.message;},toString:function(){return this.name+": "+this.getMessage();},valueOf:function(){return this.toString();}});YAHOO.util.ComparisonFailure=function(B,A,C){arguments.callee.superclass.constructor.call(this,B);this.expe!
 cted=A;this.actual=C;this.name="ComparisonFailure";};YAHOO.lang.extend(YAHOO.util.ComparisonFailure,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nExpected: "+this.expected+" ("+(typeof this.expected)+")"+"\nActual:"+this.actual+" ("+(typeof this.actual)+")";}});YAHOO.util.UnexpectedValue=function(B,A){arguments.callee.superclass.constructor.call(this,B);this.unexpected=A;this.name="UnexpectedValue";};YAHOO.lang.extend(YAHOO.util.UnexpectedValue,YAHOO.util.AssertionError,{getMessage:function(){return this.message+"\nUnexpected: "+this.unexpected+" ("+(typeof this.unexpected)+") ";}});YAHOO.util.ShouldFail=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should fail but didn't.");this.name="ShouldFail";};YAHOO.lang.extend(YAHOO.util.ShouldFail,YAHOO.util.AssertionError);YAHOO.util.ShouldError=function(A){arguments.callee.superclass.constructor.call(this,A||"This test should have thrown an error but didn't.");
+this.name="ShouldError";};YAHOO.lang.extend(YAHOO.util.ShouldError,YAHOO.util.AssertionError);YAHOO.util.UnexpectedError=function(A){arguments.callee.superclass.constructor.call(this,"Unexpected error: "+A.message);this.cause=A;this.name="UnexpectedError";this.stack=A.stack;};YAHOO.lang.extend(YAHOO.util.UnexpectedError,YAHOO.util.AssertionError);YAHOO.util.ArrayAssert={contains:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(!C){F.fail(F._formatMessage(B,"Value "+E+" ("+(typeof E)+") not found in array ["+D+"]."));}},containsItems:function(C,D,B){for(var A=0;A<C.length;A++){this.contains(C[A],D,B);}},containsMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.containsMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(!C){F.fail(F._formatMessage(B,"No match found in array ["+D+"]."));}},doesNotContai!
 n:function(E,D,B){var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(D[A]===E){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},doesNotContainItems:function(C,D,B){for(var A=0;A<C.length;A++){this.doesNotContain(C[A],D,B);}},doesNotContainMatch:function(E,D,B){if(typeof E!="function"){throw new TypeError("ArrayAssert.doesNotContainMatch(): First argument must be a function.");}var C=false;var F=YAHOO.util.Assert;for(var A=0;A<D.length&&!C;A++){if(E(D[A])){C=true;}}if(C){F.fail(F._formatMessage(B,"Value found in array ["+D+"]."));}},indexOf:function(E,D,A,C){for(var B=0;B<D.length;B++){if(D[B]===E){YAHOO.util.Assert.areEqual(A,B,C||"Value exists at index "+B+" but should be at index "+A+".");return;}}var F=YAHOO.util.Assert;F.fail(F._formatMessage(C,"Value doesn't exist in array ["+D+"]."));},itemsAreEqual:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areEqual(D[B],F[B],E._for!
 matMessage(C,"Values in position "+B+" are not equal."));}},it!
 emsAreEq
uivalent:function(E,F,B,D){if(typeof B!="function"){throw new TypeError("ArrayAssert.itemsAreEquivalent(): Third argument must be a function.");}var A=Math.max(E.length,F.length);for(var C=0;C<A;C++){if(!B(E[C],F[C])){throw new YAHOO.util.ComparisonFailure(YAHOO.util.Assert._formatMessage(D,"Values in position "+C+" are not equivalent."),E[C],F[C]);}}},isEmpty:function(C,A){if(C.length>0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should be empty."));}},isNotEmpty:function(C,A){if(C.length===0){var B=YAHOO.util.Assert;B.fail(B._formatMessage(A,"Array should not be empty."));}},itemsAreSame:function(D,F,C){var A=Math.max(D.length,F.length);var E=YAHOO.util.Assert;for(var B=0;B<A;B++){E.areSame(D[B],F[B],E._formatMessage(C,"Values in position "+B+" are not the same."));}},lastIndexOf:function(E,D,A,C){var F=YAHOO.util.Assert;for(var B=D.length;B>=0;B--){if(D[B]===E){F.areEqual(A,B,F._formatMessage(C,"Value exists at index "+B+" but should be at index "+A+"."));re!
 turn;}}F.fail(F._formatMessage(C,"Value doesn't exist in array."));}};YAHOO.namespace("util");YAHOO.util.ObjectAssert={propertiesAreEqual:function(D,G,C){var F=YAHOO.util.Assert;var B=[];for(var E in D){B.push(E);}for(var A=0;A<B.length;A++){F.isNotUndefined(G[B[A]],F._formatMessage(C,"Property '"+B[A]+"' expected."));}},hasProperty:function(A,B,C){if(!(A in B)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object."));}},hasOwnProperty:function(A,B,C){if(!YAHOO.lang.hasOwnProperty(B,A)){var D=YAHOO.util.Assert;D.fail(D._formatMessage(C,"Property '"+A+"' not found on object instance."));}}};YAHOO.util.DateAssert={datesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getFullYear(),D.getFullYear(),C._formatMessage(A,"Years should be equal."));C.areEqual(B.getMonth(),D.getMonth(),C._formatMessage(A,"Months should be equal."));C.areEqual(B.getDate(),D.getDate(),C._formatMessage(A,"Day of mon!
 th should be equal."));}else{throw new TypeError("DateAssert.d!
 atesAreE
qual(): Expected and actual values must be Date objects.");}},timesAreEqual:function(B,D,A){if(B instanceof Date&&D instanceof Date){var C=YAHOO.util.Assert;C.areEqual(B.getHours(),D.getHours(),C._formatMessage(A,"Hours should be equal."));C.areEqual(B.getMinutes(),D.getMinutes(),C._formatMessage(A,"Minutes should be equal."));C.areEqual(B.getSeconds(),D.getSeconds(),C._formatMessage(A,"Seconds should be equal."));}else{throw new TypeError("DateAssert.timesAreEqual(): Expected and actual values must be Date objects.");}}};YAHOO.register("yuitest_core",YAHOO.tool.TestRunner,{version:"2.7.0",build:"1799"});
\ No newline at end of file

Modified: trunk/root/static/yui/yuitest/yuitest_core.js
===================================================================
--- trunk/root/static/yui/yuitest/yuitest_core.js	2009-04-26 14:59:26 UTC (rev 1075)
+++ trunk/root/static/yui/yuitest/yuitest_core.js	2009-04-26 15:11:36 UTC (rev 1076)
@@ -1,8 +1,8 @@
 /*
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
+Copyright (c) 2009, Yahoo! Inc. All rights reserved.
 Code licensed under the BSD License:
 http://developer.yahoo.net/yui/license.txt
-version: 2.6.0
+version: 2.7.0
 */
 YAHOO.namespace("tool");
 
@@ -1988,4 +1988,4 @@
     
 };
 
-YAHOO.register("yuitest_core", YAHOO.tool.TestRunner, {version: "2.6.0", build: "1321"});
+YAHOO.register("yuitest_core", YAHOO.tool.TestRunner, {version: "2.7.0", build: "1799"});




More information about the Parley-svn mailing list